Didier Windey
Published © CC BY-NC

Zigbee floating hydrometer for beer brewing

A hydrometer and thermometer in a jar. With off the shelf Xiaomi Zigbee sensors. Could be build for under 50 euro's. Inspired on iSpindel

AdvancedFull instructions provided8 hours750
Zigbee floating hydrometer for beer brewing

Things used in this project

Hardware components

xiaomi vibration sensor
×1
xiaomi temperature and humidity sensor
×1
long glas jar with watertight lid
×1
3D printed holder (optional)
×1
double sided strong sticky tape
×1
Nuts, bolts, washers
×1

Software apps and online services

Node-RED
Node-RED
Node-RED or Home Assistant
Home Assistant
Home Assistant
Node-RED or Home Assistant

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

Gravity float sensor case (fusion 360 file)

Schematics

Node Red flow

Code

Node-RED flow GravityFloat

JSON
The Node-RED flow in JSON. Adjust your creditentials, MQTT topics, SQL statements and callibration values. Some parts (like MySQL, deadmanswitch, Brewfather, ...) may not be applicable for you, and may be deleted.
[
    {
        "id": "9dcfd0c84d34ef1a",
        "type": "tab",
        "label": "gravityfloat",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "02eda3f182f29c8c",
        "type": "group",
        "z": "9dcfd0c84d34ef1a",
        "name": "GravityFloat",
        "style": {
            "stroke": "#0070c0",
            "label": true
        },
        "nodes": [
            "bdf51ee838aa184b",
            "67ed3fa195085fee",
            "8b628fc7db1b0f74",
            "d55656aa293371d4",
            "9695be6c277f9740",
            "d6a1847963aa3978",
            "0d46b501310b408a",
            "0e94bb79e7bce170",
            "428cf83f5bdedd7a",
            "57ec3b8c7e4b2d3b",
            "738ddbfb320af950",
            "98007eabb81ff829",
            "d407818341829fed",
            "ddc6a548b861b513",
            "fb3bb679d13f80d0",
            "cd2e539d405ac3a8",
            "f446b8fbca36c7d7",
            "3a8d6d47405ac2fb",
            "f2e275fc17804d9f",
            "a0b3952b1a7be0fd",
            "673579455856a4cb",
            "05b3845760bfe56d",
            "44886ecda6b36c27",
            "2bd7bc925460834a",
            "81b31346dea6e90c",
            "77b2695b37c1ccdd",
            "c1aa835ac8964e34",
            "7488122f10a611b9",
            "5084f6c23cecfdb9",
            "3fa682f6a3c94997",
            "227be012e22ca2b0",
            "8fcaddc93c7c811b",
            "8975e7f42a9a77e5",
            "c06fac0ac09667fb",
            "f6c1325ccde88d44",
            "88276ca87ed1d58e",
            "06958bd26dd7aae6",
            "0a754971ec884b5b",
            "5f6f3a95663c5fa6",
            "1d49d5862b25bab3"
        ],
        "x": 54,
        "y": 19,
        "w": 1112,
        "h": 702
    },
    {
        "id": "8975e7f42a9a77e5",
        "type": "junction",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "x": 740,
        "y": 500,
        "wires": [
            [
                "2bd7bc925460834a",
                "d6a1847963aa3978"
            ]
        ]
    },
    {
        "id": "c06fac0ac09667fb",
        "type": "junction",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "x": 740,
        "y": 600,
        "wires": [
            [
                "81b31346dea6e90c",
                "57ec3b8c7e4b2d3b"
            ]
        ]
    },
    {
        "id": "f6c1325ccde88d44",
        "type": "junction",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "x": 740,
        "y": 300,
        "wires": [
            [
                "0e94bb79e7bce170",
                "77b2695b37c1ccdd"
            ]
        ]
    },
    {
        "id": "7488122f10a611b9",
        "type": "junction",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "x": 320,
        "y": 380,
        "wires": [
            [
                "a0b3952b1a7be0fd"
            ]
        ]
    },
    {
        "id": "88276ca87ed1d58e",
        "type": "junction",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "x": 280,
        "y": 380,
        "wires": [
            [
                "7488122f10a611b9"
            ]
        ]
    },
    {
        "id": "bdf51ee838aa184b",
        "type": "mqtt out",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "tilt sensor",
        "topic": "zigbee2mqtt/xiaomi_acc_2/set",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a476b97.9de4d48",
        "x": 400,
        "y": 60,
        "wires": []
    },
    {
        "id": "67ed3fa195085fee",
        "type": "inject",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "set sensitivity",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "{\"sensitivity\": \"high\"}",
        "payloadType": "json",
        "x": 170,
        "y": 60,
        "wires": [
            [
                "bdf51ee838aa184b"
            ]
        ]
    },
    {
        "id": "8b628fc7db1b0f74",
        "type": "mqtt in",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "temperature sensor",
        "topic": "zigbee2mqtt/xiaomi_htp_2",
        "qos": "2",
        "datatype": "json",
        "broker": "a476b97.9de4d48",
        "nl": false,
        "rap": false,
        "inputs": 0,
        "x": 170,
        "y": 300,
        "wires": [
            [
                "0d46b501310b408a",
                "7488122f10a611b9",
                "06958bd26dd7aae6"
            ]
        ]
    },
    {
        "id": "d55656aa293371d4",
        "type": "mqtt in",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "tilt sensor",
        "topic": "zigbee2mqtt/xiaomi_acc_2",
        "qos": "2",
        "datatype": "json",
        "broker": "a476b97.9de4d48",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 140,
        "y": 500,
        "wires": [
            [
                "9695be6c277f9740",
                "428cf83f5bdedd7a",
                "d407818341829fed",
                "88276ca87ed1d58e"
            ]
        ]
    },
    {
        "id": "9695be6c277f9740",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "get tilt + compensate",
        "func": "/*\nthe tilt sensor on the z axis has a deviation\nespecially more to zero\nthis function compensates this deviation\nonly on positive angeles\n*/\n\nvar z = msg.payload.angle_z;\nvar a;\n\nif (z > 0){\n    a = Math.round((z - 90) * 0.2 + z)+1;\n    msg.payload = a;\n    return msg;\n}\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 500,
        "wires": [
            [
                "8975e7f42a9a77e5"
            ]
        ]
    },
    {
        "id": "d6a1847963aa3978",
        "type": "ui_chart",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "gravity float I tilt°",
        "group": "abb3554aed5ef7d6",
        "order": 1,
        "width": 0,
        "height": 0,
        "label": "GravityFloat II tilt°",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": "7",
        "removeOlderPoints": "",
        "removeOlderUnit": "86400",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "x": 1020,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "0d46b501310b408a",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "get temperature",
        "func": "var t = msg.payload.temperature;\nmsg.payload = t;\nglobal.set(\"gravityfloat1_temp\", t);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 300,
        "wires": [
            [
                "f6c1325ccde88d44"
            ]
        ]
    },
    {
        "id": "0e94bb79e7bce170",
        "type": "ui_chart",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "gravity float I t°",
        "group": "abb3554aed5ef7d6",
        "order": 2,
        "width": 0,
        "height": 0,
        "label": "GravityFloat I °C",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": "7",
        "removeOlderPoints": "",
        "removeOlderUnit": "86400",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "x": 1020,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "428cf83f5bdedd7a",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "tilt to SG",
        "func": "/*\nevery inidvidual GravityFloat needs to be calibrated\ndo this by having letting in float in different sollutions of sugar in water\nmeasure the tilt angle for at least 5 sollutions of sugar, and measure the gravity with a manuel gravity meter\nto calculate the formula go to : https://ispindel.nl/index.php/kalibreren/\nand follow the instructions\nuse the produced formula below (variable g)\nnote : variable a is a function to compensate for diviation in the tilt angle from the sensor\n*/\n\n\nvar z = msg.payload.angle_z;\nvar a;\nvar g;\n\nif (z > 0){\n    a = Math.round((z - 90) * 0.2 + z)+1;\n    g = Math.round((-0.000108149 * a * a + 0.007386278 * a + 0.951527633) * 1000)/1000;\n\n    msg.payload = g;\n    global.set(\"gravityfloat1_sg\", g);\n    return msg;\n}\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 600,
        "wires": [
            [
                "c06fac0ac09667fb"
            ]
        ]
    },
    {
        "id": "57ec3b8c7e4b2d3b",
        "type": "ui_chart",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "gravity float I SG",
        "group": "abb3554aed5ef7d6",
        "order": 3,
        "width": 0,
        "height": 0,
        "label": "GravityFloat I SG",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "",
        "ymax": "",
        "removeOlder": "7",
        "removeOlderPoints": "",
        "removeOlderUnit": "86400",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "x": 1020,
        "y": 640,
        "wires": [
            []
        ]
    },
    {
        "id": "738ddbfb320af950",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "reset graph",
        "func": "msg.payload = [];\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 410,
        "y": 160,
        "wires": [
            [
                "8fcaddc93c7c811b"
            ]
        ]
    },
    {
        "id": "98007eabb81ff829",
        "type": "inject",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "reset graph",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 170,
        "y": 160,
        "wires": [
            [
                "738ddbfb320af950"
            ]
        ]
    },
    {
        "id": "d407818341829fed",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "get tilt battery ",
        "func": "msg.payload =  msg.payload.battery;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 680,
        "wires": [
            [
                "ddc6a548b861b513"
            ]
        ]
    },
    {
        "id": "ddc6a548b861b513",
        "type": "ui_text",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "group": "abb3554aed5ef7d6",
        "order": 4,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "gravity float I battery",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1040,
        "y": 680,
        "wires": []
    },
    {
        "id": "fb3bb679d13f80d0",
        "type": "ui_button",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "group": "b63025f042b8c44e",
        "order": 5,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "nieuwe badge",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "",
        "payloadType": "date",
        "topic": "topic",
        "topicType": "msg",
        "x": 160,
        "y": 100,
        "wires": [
            [
                "cd2e539d405ac3a8"
            ]
        ]
    },
    {
        "id": "cd2e539d405ac3a8",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "start date new badge",
        "func": "var d = new Date(msg.payload);\nvar datum = d.getDate()+\"/\"+(d.getMonth()+1)+\"/\"+d.getFullYear();\nmsg.payload = datum;\n\nvar jaar = d.getFullYear();\nvar maand = d.getMonth() + 1;\nif (maand < 10){\n    maand = \"0\"+maand;\n}\nvar dag = d.getDate();\nif (dag < 10){\n    dag = \"0\" + dag;\n}\n\nvar datumsql = jaar +\"-\"+maand+\"-\"+dag;\n\nglobal.set(\"gravityfloat1_brouwdatum\", datumsql);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 100,
        "wires": [
            [
                "f446b8fbca36c7d7"
            ]
        ]
    },
    {
        "id": "f446b8fbca36c7d7",
        "type": "ui_text",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "group": "b63025f042b8c44e",
        "order": 4,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "badge datum",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 670,
        "y": 100,
        "wires": []
    },
    {
        "id": "3a8d6d47405ac2fb",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "to Brewfather",
        "func": "var temp = global.get(\"gravityfloat1_temp\");\nvar x = global.get(\"gravityfloat1_sg\");\n\n\nmsg.payload = '{ \"name\": \"GravityFloat1\",  \"temp\": ' + temp + ' , \"temp_unit\": \"C\",  \"gravity\": '+ x +',  \"gravity_unit\": \"G\"}';\nreturn msg;\n\n/*\n{\n  \"name\": \"YourDeviceName\", // Required field, this will be the ID in Brewfather\n  \"temp\": 20.32,\n  \"aux_temp\": 15.61, // Fridge Temp\n  \"ext_temp\": 6.51, // Room Temp\n  \"temp_unit\": \"C\", // C, F, K\n  \"gravity\": 1.042,\n  \"gravity_unit\": \"G\", // G, P\n  \"pressure\": 10,\n  \"pressure_unit\": \"PSI\", // PSI, BAR, KPA\n  \"ph\": 4.12,\n  \"bpm\": 123, // Bubbles Per Minute\n  \"comment\": \"Hello World\",\n  \"beer\": \"Pale Ale\",\n  \"battery\": 4.98\n}\n*/",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 830,
        "y": 420,
        "wires": [
            [
                "f2e275fc17804d9f"
            ]
        ]
    },
    {
        "id": "f2e275fc17804d9f",
        "type": "http request",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "Brewfather",
        "method": "POST",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "http://log.brewfather.net/stream?id=yourbrewfatherlogincode",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [
            {
                "keyType": "Content-Type",
                "keyValue": "",
                "valueType": "other",
                "valueValue": "application/json"
            },
            {
                "keyType": "other",
                "keyValue": "",
                "valueType": "other",
                "valueValue": ""
            }
        ],
        "x": 1010,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "a0b3952b1a7be0fd",
        "type": "delay",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 400,
        "y": 380,
        "wires": [
            [
                "44886ecda6b36c27",
                "c1aa835ac8964e34"
            ]
        ]
    },
    {
        "id": "673579455856a4cb",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "prepare SQL",
        "func": "var temp = global.get(\"gravityfloat1_temp\");\nvar x = global.get(\"gravityfloat1_sg\");\nvar datum = global.get(\"gravityfloat1_brouwdatum\");\n\nmsg.topic = \"INSERT INTO gravityfloat ( SG, temp, brouwdatum) VALUES(\" + x + \", \" + temp + \", '\" + datum + \"')\";\n\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 830,
        "y": 380,
        "wires": [
            [
                "05b3845760bfe56d"
            ]
        ]
    },
    {
        "id": "05b3845760bfe56d",
        "type": "mysql",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "mydb": "cb7380f5.93081",
        "name": "",
        "x": 1010,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "44886ecda6b36c27",
        "type": "delay",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "hour",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "allowrate": false,
        "outputs": 1,
        "x": 610,
        "y": 420,
        "wires": [
            [
                "3a8d6d47405ac2fb"
            ]
        ]
    },
    {
        "id": "2bd7bc925460834a",
        "type": "ui_text",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "group": "b63025f042b8c44e",
        "order": 2,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "tilt",
        "format": "{{msg.payload}} °",
        "layout": "row-spread",
        "x": 990,
        "y": 500,
        "wires": []
    },
    {
        "id": "81b31346dea6e90c",
        "type": "ui_text",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "group": "b63025f042b8c44e",
        "order": 1,
        "width": 0,
        "height": 0,
        "name": "SG",
        "label": "suiker",
        "format": "{{msg.payload}} SG",
        "layout": "row-spread",
        "x": 990,
        "y": 600,
        "wires": []
    },
    {
        "id": "77b2695b37c1ccdd",
        "type": "ui_text",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "group": "b63025f042b8c44e",
        "order": 3,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "temperatuur vat",
        "format": "{{msg.payload}}°C",
        "layout": "row-spread",
        "x": 1020,
        "y": 300,
        "wires": []
    },
    {
        "id": "c1aa835ac8964e34",
        "type": "delay",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "15",
        "rateUnits": "minute",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "allowrate": false,
        "outputs": 1,
        "x": 620,
        "y": 380,
        "wires": [
            [
                "673579455856a4cb"
            ]
        ]
    },
    {
        "id": "8fcaddc93c7c811b",
        "type": "link out",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "link out 2",
        "mode": "link",
        "links": [
            "5084f6c23cecfdb9",
            "3fa682f6a3c94997",
            "227be012e22ca2b0"
        ],
        "x": 755,
        "y": 160,
        "wires": []
    },
    {
        "id": "5084f6c23cecfdb9",
        "type": "link in",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "link in 8",
        "links": [
            "8fcaddc93c7c811b"
        ],
        "x": 755,
        "y": 340,
        "wires": [
            [
                "0e94bb79e7bce170"
            ]
        ]
    },
    {
        "id": "3fa682f6a3c94997",
        "type": "link in",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "link in 9",
        "links": [
            "d9284b5af2e2e9e7",
            "8fcaddc93c7c811b"
        ],
        "x": 755,
        "y": 540,
        "wires": [
            [
                "d6a1847963aa3978"
            ]
        ]
    },
    {
        "id": "227be012e22ca2b0",
        "type": "link in",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "link in 10",
        "links": [
            "f7011ae5d0a0e2f5",
            "8fcaddc93c7c811b"
        ],
        "x": 755,
        "y": 640,
        "wires": [
            [
                "57ec3b8c7e4b2d3b"
            ]
        ]
    },
    {
        "id": "06958bd26dd7aae6",
        "type": "dead-man-switch",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "delay": "1",
        "delayUnit": "hours",
        "x": 430,
        "y": 260,
        "wires": [
            [
                "5f6f3a95663c5fa6"
            ]
        ]
    },
    {
        "id": "0a754971ec884b5b",
        "type": "e-mail",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "server": "smtp.gmail.com",
        "port": "465",
        "secure": true,
        "tls": true,
        "name": "you@mail.com",
        "dname": "GravityFloat",
        "x": 870,
        "y": 260,
        "wires": []
    },
    {
        "id": "5f6f3a95663c5fa6",
        "type": "function",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "function 113",
        "func": "msg.topic = \"gravityfloat thermometer is offline\";\nmsg.payload = \"gravityfloat thermometer is offline\";\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 650,
        "y": 260,
        "wires": [
            [
                "0a754971ec884b5b"
            ]
        ]
    },
    {
        "id": "1d49d5862b25bab3",
        "type": "inject",
        "z": "9dcfd0c84d34ef1a",
        "g": "02eda3f182f29c8c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 380,
        "y": 200,
        "wires": [
            [
                "5f6f3a95663c5fa6"
            ]
        ]
    },
    {
        "id": "a476b97.9de4d48",
        "type": "mqtt-broker",
        "name": "",
        "broker": "your broker IP",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "abb3554aed5ef7d6",
        "type": "ui_group",
        "name": "GravityFloat I historiek",
        "tab": "761c6ea5d52c5338",
        "order": 3,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "b63025f042b8c44e",
        "type": "ui_group",
        "name": "GravityFloat I",
        "tab": "761c6ea5d52c5338",
        "order": 1,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "cb7380f5.93081",
        "type": "MySQLdatabase",
        "name": "",
        "host": "127.0.0.1",
        "port": "3306",
        "db": "SensiHome",
        "tz": "",
        "charset": ""
    },
    {
        "id": "761c6ea5d52c5338",
        "type": "ui_tab",
        "name": "SensiBrew",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Credits

Didier Windey
2 projects • 1 follower
Passionate problem solver, embracing complexity and continuous learning. Thinkerer by hobby and profession, seeking solutions with joy.
Contact

Comments

Please log in or sign up to comment.