A while back I mentioned to Maya it’d be really cool if there was a way she could remotely shock me over the internet. I mean, come on, what Mistress wouldn’t enjoy having that power? After much research I couldn’t find a commercially available product that does this. I found a couple cases where someone did a home brew build, but none of them really released any plans or anything. I found another case where a university created one for a psychology study, and they at least provided some source code. Then I came across the Pavlock, a remote controlled shocking wrist band that another person can control over the internet.

The Pavlock sounded almost perfect for this, so I ordered one right away.

The Pavlock looks like a FitBit, except it has a button on it. Pushing the button delivers shocks. It pairs to your phone so you can use it to help break bad behaviors. It’s also got a feature that allows friends or family to remotely monitor your progress on breaking a behavior as well as deliver shocks, vibrations, or beeps. The first part of the functionality works like it’s supposed to, although the device was difficult to pair prior to installing a firmware update. The internet connectivity features don’t work well and aren’t reliable.

Weak Bluetooth == Unreliable operation

The Pavlock seems to have a very weak bluetooth radio, making it unreliable. Of course we tried putting it around my balls. That works fine as long as my pants are off and my phone is within arms reach. Even putting on sweat pants causes the Pavlock to come unpaired. Granted, I’m about 100% certain the designers didn’t intend for this kind of usage, so I’m not saying it’s a bad product because of this.

After some tinkering I found a way to make this work, but it involved attaching leads so the Pavlock could be physically outside of my pants. This wasn’t very practical, so I scrapped the project.

The next thing we tried was having me wear it on my wrists and setting up the ITFT integration to shock me each time Maya emails me. We thought it’d be a fun way to get my attention during the day. This worked somewhat better and is fairly reliable when my phone is on a good connection and isn’t in my pocket. However, if I put my phone in my pocket or leave the room the Pavlock tends to unpair and repairing it isn’t straightforward. It also seems to queue up any shocks or other actions just like a Lovense Lush or other similar toys. The result is sometimes I’d receive 3-4 rapid shocks out of nowhere when it repaired to my phone.

Due to these problems we’ve determined the Pavlock doesn’t work as an internet controlled shock collar, at least not for our use case. So the search goes on in that department.

Bad Control Website

The website for manually delivering shocks or other stimulation is not that great. It’s especially bad on a phone. What we’d wanted was a website with a very simple shock button and like a strength setting. The Pavlock website for this is anything but. It takes probably a good 45 seconds to queue up a shock because of the bad layout. This drove me to work on a better way to remotely control it, which resulted in experimenting with their JSON API.

Below is a sample node.js script using the Pavlock api which can be found here. This little script should serve as an example for anybody who wants to try tinkering with the Pavlock. The script below basically delivers either a shock or a vibration every 2 seconds, at random. It works fine as an interesting addition to watching porn so long as the Pavlock stays paired.


var pavlok = require('pavlok-beta-api-login');

// login id for API goes here
var cid = '';

// secret key goes here
var secret = '';
result = pavlok.init(cid, secret);

var connected = false;

pavlok.login(function (result, code) {
 if (result == true) {
 connected = true;

var duration = 5;

var sent = false;
var last_sent = 0;
var toSend = 5;
var cycleSize = 1; // in seconds

var opts = {
 callback: function(success, message) {
 sent = true;

 intensity: 1,
setInterval( function () {
 if (sent) {
 var choice = Math.floor((Math.random() * 10) + 1);

if (choice > 3) {
 } else {
 sent = false; 


Leave a Reply