iSpindle: Track your homebrews with an opensource MQTT hydrometer temperature sensor

If your into brewing beer, wine, cider or maybe even meads, then this opensource project is worth checking out. It is very easy to get going in openHAB, because it can be setup with MQTT without any clouds and be auto detected and added via openHAB’s home assistant support. Just tick the box in the ispindle control panel to enable the home assistant support which sends extra MQTT topics that openHAB can use to detect and add a thing with channels ready for you to use.

I did a search on this forum for all the major hydrometer brands and found no one had posted they were using one. For around $15 to build your own based on a esp8266, it is well worth the time. I can now enter in the starting gravity and a rule will calculate how much alcohol is in the brew and an alert can be sent when I reach a target gravity or ABV%

If you don’t want to use breadboard and no 3d printer, there are PCB’s for sale on ebay and even people selling ready made models fully calibrated on etsy.
Mine is made from the PCB here so you can order a number of boards and make a batch to share with people in your area:

First brew of a cider worked well.

Ability to enter in your starting gravity and then in realtime it updates your ABV% and can also send a warning when getting close to your 1/3 sugar break if you do nutrient TOSNA additions.

Project is found here:


It’s getting close to my next brew day. Very timely posting. :smiley: :beers:

I tend to be lazy and not want to sanitize mid-fermentation so I just wing it and hope for the best. This could be a game changer for me.

Some breweries will ‘open ferment’ and allow wild yeast to fall into the wort that are in the air. When there is an active yeast the risk is ‘probably’ low, so long as what you put in is clean. Having an internal temperature reading means you can automate heating to closer regulate the brews temperature or even cooling if you have an old fridge.

Definitely give it a go as they are very convenient to check the readings whenever you want to. Also the PET bottle blanks that they are made from are seriously strong, you will never break one of these and the battery will last 6 months at a 1 minute upload rate.

Yep, but those aren’t my favorites. I’m a boring beer drinker: wits, dunkels, hefeweizens and the like. Though I do like a nice triple every now and then. I don’t care for sours nor for trying to jam as many hops into the process as possible.

Unfortunately I’ve managed to infect far too many attempts so I’m a little gun shy about taking risks after it’s in the carboy. I should loosen up, but building one of these would give me the best of both worlds. I can be lazy and still be certain when the yeast is done.

It would definitely help out more with my mead experiments. My last batch came out pretty decent but I was just guessing at that point because I broke my hygrometer when it came time to bottle. And this spring I want to try my hand at another batch of rhubarb melomel. It was ok to start but after a year in the bottle my first batch became quite nice.

Yep, I could. But despite all the work I put into home automation, I tend to treat my other hobbies in a lazy way. I didn’t even weed my garden this year, which is all OK since the deer got most everything but the zucchini and bush beans.

I don’t have a way to control the temp nor a good place to put an old fridge. I currently put the carboy in a dark room in the basement and cross my fingers. Luckily yeast can be somewhat forgiving and I’m not looking to sell this stuff so if it takes a little longer or doesn’t come out just right it’s OK.

To share the DSL rule that I use to calculate the CurrentAlcohol ABV % and will be doing a similar thing to send me an alert when the 1/3 sugar break is getting close.


var ABV =((StartingGravity.state as Number - iSpindle1_Gravity.state as Number)* 131.25) as Number
postUpdate(CurrentAlcohol, ABV)

StartingGravity is a Number item but you need to add the following metadata:
Default list item widget > oh-input-item
State Description > pattern is %.3f and the step needs to be 0.001

CurrentAlcohol is a Number item with the following metadata:
State Description > pattern is %.1f %%

The JSON for the rule is:

configuration: {}
  - id: "1"
      itemName: iSpindle1_Gravity
    type: core.ItemStateChangeTrigger
conditions: []
  - inputs: {}
    id: "2"
      type: application/vnd.openhab.dsl.rule
      script: >-
        var ABV =((StartingGravity.state as Number - iSpindle1_Gravity.state as
        Number)* 131.25) as Number

        postUpdate(CurrentAlcohol, ABV)
    type: script.ScriptAction

This could be implemented as a script transformation profile.

Assuming an all UI config:

  1. Settings → Transformations → + → DSL (or JS if that’s your preferred language)
  2. Fill out UID and label and enter the following code:
(StartingGravity.state as Number - Float.parse(input)) * 131.25
  1. Link the same Channel linked to iSpindle1_Gravity to CurrentAlcohol.
  2. On the Link under “Profile” choose “SCRIPT Rule DSL (v1)”
  3. Enter config:dsl:<whatever id you chose on step 2> (e.g. config:dsl:curAlc)

The JS version would look like this:

(function(input) {
  const currGravity = parseFloat(input);
  return (items.StartingGravity.numericState - currGravity) * 131.25;

There really is no advantage from a performance perspective or anything like that to using a transform over a rule for this. But some prefer to avoid a rule where avoiding is possible.

Well this is just sad for me. I’ve spent a bit this morning pricing out the parts and I can’t get the price down to be even close to the current price of the Tilt Wireless Hydrometer and Thermometer which looks to be the same overall approach but comes in a commercial and completed package (currently on Amazon for $135, where as the parts to build 5ish iSpindles is looking to be > $200, but I can’t by less and only need one). It’s really the shipping that is the killer.

I might give the Tilt a try. They have an image and app on GitHub so I can get that integrated with OH either through the HTTP binding, a BT bridge, or I could modify their app to speak MQTT.

I was kind of looking forward to the DIY project though. :frowning: Oh well, more time to brew I guess. :beers:

Also take a look at the Kegland RAPT pill as it can integrate directly with their heater and other products for a stand alone setup. Most of them may upload to the brewfather cloud or other cloud services some free or paid. I may have gotten lucky as someone in my area purchased in bulk and shared the savings around to multiple people. Look for a forum or discord channel you can ask if someone is making any near you.

1 Like