Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Controllers
  3. Domoticz
  4. Are folks here happy with Domoticz?

Are folks here happy with Domoticz?

Scheduled Pinned Locked Moved Domoticz
63 Posts 28 Posters 46.7k Views 24 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AnticimexA Anticimex

    @tbowmo @gohan I made some experiments using ethernet gw (not MQTT) but gave it up because I could not get node-red to communicate with the GW on the same port for rx/tx.
    I switched to a serial gw and that works just fine.

    gohanG Offline
    gohanG Offline
    gohan
    Mod
    wrote on last edited by
    #51

    @Anticimex don't you think MQTT is better suited for this task? I am still quite new to node-red and haven't tikered with it much as learning javascript is low on the priority list :D

    AnticimexA 1 Reply Last reply
    0
    • tbowmoT tbowmo

      @wergeld

      the module is available through NPM as well.. So npm install node-red-contrib-mysensors :)

      The basic node-red mysensors is pasted below, my setup is starting to be quite extensive, with reporting to slack channels, creating a websocket for my custom dashboard etc. But isn't necessary for the basic domoticz/nodered

      For connecting node-red/domoticz together I use socat to create a virtual serial port:

      socat PTY,link=/dev/ttyS81,mode=666,group=dialout,raw PTY,link=/dev/ttyUSB21,mode=666,group=dialout,raw &
      

      node-red:

      [
          {
              "id": "9b272654.9ad688",
              "type": "subflow",
              "name": "Influx processing",
              "info": "",
              "in": [
                  {
                      "x": 220,
                      "y": 280,
                      "wires": [
                          {
                              "id": "5cfd0e8.fa302f"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 960,
                      "y": 240,
                      "wires": [
                          {
                              "id": "55204322.aadfbc",
                              "port": 0
                          }
                      ]
                  },
                  {
                      "x": 960,
                      "y": 380,
                      "wires": [
                          {
                              "id": "d6b8cf3e.6954c",
                              "port": 0
                          }
                      ]
                  }
              ]
          },
          {
              "id": "55204322.aadfbc",
              "type": "function",
              "z": "9b272654.9ad688",
              "name": "Influx conditioner",
              "func": "msg_env = null;\nmsg_utility = null;\nmsg_debug = null;\nst = msg.subType;\nif (msg.messageType == 1 && (st === 0 || st == 1 || st == 4 || st == 17)) {\n    var tags = {};var data = {}\n    tags.node = msg.nodeId.toString();\n    tags.sensor = msg.childSensorId.toString();\n    data.value=parseFloat(msg.payload);\n    switch (st) {\n        case 0 : type = \"temperature\";break;\n        case 1 : type = \"humidity\"; break;\n        case 4 : type = \"barometer\"; break;\n        case 17: type = \"electricity\"; break;\n    }\n    msg.payload = [data, tags];\n    msg.measurement = type;\n    msg_debug = msg;\n    if (msg.subType==17) \n        msg_utility = msg;\n    else \n        msg_env = msg;\n} \nelse \n    msg = null;\nreturn [msg_debug, msg_env, msg_utility];",
              "outputs": "3",
              "noerr": 0,
              "x": 790,
              "y": 280,
              "wires": [
                  [],
                  [
                      "c042117a.3fbdf"
                  ],
                  [
                      "f6bdc7dc.77c758"
                  ]
              ]
          },
          {
              "id": "5cfd0e8.fa302f",
              "type": "mysdecenc",
              "z": "9b272654.9ad688",
              "name": "",
              "x": 350,
              "y": 280,
              "wires": [
                  [
                      "55204322.aadfbc",
                      "d6b8cf3e.6954c"
                  ]
              ]
          },
          {
              "id": "c042117a.3fbdf",
              "type": "influxdb out",
              "z": "9b272654.9ad688",
              "influxdb": "9dbdc7c7.624238",
              "name": "",
              "measurement": "",
              "x": 1020,
              "y": 280,
              "wires": []
          },
          {
              "id": "f6bdc7dc.77c758",
              "type": "influxdb out",
              "z": "9b272654.9ad688",
              "influxdb": "9de2e4ed.fdcfc8",
              "name": "Utility",
              "measurement": "",
              "x": 990,
              "y": 320,
              "wires": []
          },
          {
              "id": "d6b8cf3e.6954c",
              "type": "function",
              "z": "9b272654.9ad688",
              "name": "Watt/Hour calculator",
              "func": "/* Takes input on subType 24, calculates difference\n   from last time, if around 60 seconds have passed\n   since last report.\n   It passes the value on as subType 17, and\n   childSensorId 2 */\n\nif ((msg.subType===24) && (msg.nodeId===99)) {\n    var uTime = Math.floor(Date.now()/60000);\n    var lastTime = context.get('lastTime')||0;\n    if (lastTime === 0) {\n        context.set('lastTime', uTime);\n        context.set('lastCount', msg.payload);\n    } else {\n        if (uTime != lastTime) {\n            lastCount = context.get('lastCount');\n            currentCount = msg.payload;\n            context.set('lastTime', uTime);\n            context.set('lastCount', currentCount)\n            msg.subType = 17;\n            msg.childSensorId = \"2\";\n            msg.payload = currentCount - lastCount;\n            return msg;\n        }\n    }\n}",
              "outputs": 1,
              "noerr": 0,
              "x": 560,
              "y": 340,
              "wires": [
                  [
                      "55204322.aadfbc"
                  ]
              ]
          },
          {
              "id": "9dbdc7c7.624238",
              "type": "influxdb",
              "z": "67deb464.98214c",
              "hostname": "127.0.0.1",
              "port": "8086",
              "database": "environment",
              "name": "Environment DB"
          },
          {
              "id": "9de2e4ed.fdcfc8",
              "type": "influxdb",
              "z": "67deb464.98214c",
              "hostname": "127.0.0.1",
              "port": "8086",
              "database": "utility",
              "name": "Utility DB"
          },
          {
              "id": "4c13992e.b3ec68",
              "type": "subflow",
              "name": "Logging filter",
              "in": [
                  {
                      "x": 105.5,
                      "y": 240,
                      "wires": [
                          {
                              "id": "c2063804.3df9c8"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 600,
                      "y": 260,
                      "wires": [
                          {
                              "id": "b57b1f3.f4a84e",
                              "port": 1
                          }
                      ]
                  }
              ]
          },
          {
              "id": "c2063804.3df9c8",
              "type": "mysdecenc",
              "z": "4c13992e.b3ec68",
              "name": "",
              "x": 230,
              "y": 240,
              "wires": [
                  [
                      "b57b1f3.f4a84e"
                  ]
              ]
          },
          {
              "id": "b57b1f3.f4a84e",
              "type": "function",
              "z": "4c13992e.b3ec68",
              "name": "Filter battery msg",
              "func": "var battMsg = null;\nvar debugMsg = null;\nvar sketchMsg = null;\nif (msg.messageType==3) {\n    if (msg.subType===0)\n        battMsg = msg;\n    if (msg.subType==9)\n        debugMsg = msg;\n    if (msg.subType==11 || msg.subType==12)\n        sketchMsg = msg;\n}\n\nreturn [battMsg, debugMsg, sketchMsg];",
              "outputs": "3",
              "noerr": 0,
              "x": 430,
              "y": 240,
              "wires": [
                  [
                      "dec3cc44.213c3",
                      "d8b91167.2746f"
                  ],
                  [],
                  [
                      "b521bd95.4ade4"
                  ]
              ]
          },
          {
              "id": "dec3cc44.213c3",
              "type": "mysdecenc",
              "z": "4c13992e.b3ec68",
              "name": "",
              "x": 650,
              "y": 180,
              "wires": [
                  [
                      "1b4decbb.e4b213"
                  ]
              ]
          },
          {
              "id": "38f9ab87.c70654",
              "type": "file",
              "z": "4c13992e.b3ec68",
              "name": "Battery log",
              "filename": "/var/tmp/battlog.txt",
              "appendNewline": false,
              "createDir": false,
              "overwriteFile": "false",
              "x": 1050,
              "y": 180,
              "wires": []
          },
          {
              "id": "1b4decbb.e4b213",
              "type": "function",
              "z": "4c13992e.b3ec68",
              "name": "inject date",
              "func": "var date = new Date();\nvar str = date.getFullYear() + \"-\" + (date.getMonth() + 1) + \"-\" + date.getDate() + \" \" +  date.getHours() + \":\" + date.getMinutes() + \":\" + date.getSeconds();\nmsg.payload = str + \" - \" + msg.payload;\nreturn msg;",
              "outputs": 1,
              "noerr": 0,
              "x": 830,
              "y": 180,
              "wires": [
                  [
                      "38f9ab87.c70654"
                  ]
              ]
          },
          {
              "id": "d8b91167.2746f",
              "type": "function",
              "z": "4c13992e.b3ec68",
              "name": "Check batt level",
              "func": "var date = new Date();\nvar str = date.getFullYear() + \"-\" + (date.getMonth() + 1) + \"-\" + date.getDate() + \" \" +  date.getHours() + \":\" + date.getMinutes() + \":\" + date.getSeconds();\nmsg.date = str;\nif (parseInt(msg.payload)<5)\nreturn msg;",
              "outputs": 1,
              "noerr": 0,
              "x": 660,
              "y": 220,
              "wires": [
                  [
                      "c44e1c28.3bb1e"
                  ]
              ]
          },
          {
              "id": "c44e1c28.3bb1e",
              "type": "template",
              "z": "4c13992e.b3ec68",
              "name": "BatLow message",
              "field": "payload",
              "fieldType": "msg",
              "format": "handlebars",
              "syntax": "mustache",
              "template": "{{date}} - Battery level is low on node {{nodeId}} : {{payload}} !",
              "x": 850,
              "y": 220,
              "wires": [
                  [
                      "e9231639.16dce8"
                  ]
              ]
          },
          {
              "id": "e9231639.16dce8",
              "type": "twitter out",
              "z": "4c13992e.b3ec68",
              "twitter": "",
              "name": "Tweet",
              "x": 1030,
              "y": 220,
              "wires": []
          },
          {
              "id": "b478903e.4b877",
              "type": "file",
              "z": "4c13992e.b3ec68",
              "name": "Presentation log",
              "filename": "/var/tmp/presentation.txt",
              "appendNewline": true,
              "createDir": false,
              "overwriteFile": "false",
              "x": 840,
              "y": 300,
              "wires": []
          },
          {
              "id": "b521bd95.4ade4",
              "type": "mysdecenc",
              "z": "4c13992e.b3ec68",
              "name": "",
              "x": 650,
              "y": 300,
              "wires": [
                  [
                      "b478903e.4b877"
                  ]
              ]
          },
          {
              "id": "bed2e35d.412d2",
              "type": "subflow",
              "name": "Domoticz conditioner",
              "info": "Inverts lockstate for domoticz, as domoticz has inverted the logic in their code, compared to mysensors",
              "in": [
                  {
                      "x": 280,
                      "y": 220,
                      "wires": [
                          {
                              "id": "8afd136d.7502f"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 1000,
                      "y": 220,
                      "wires": [
                          {
                              "id": "91eb6b4c.6e1498",
                              "port": 0
                          }
                      ]
                  }
              ]
          },
          {
              "id": "8afd136d.7502f",
              "type": "mysdecenc",
              "z": "bed2e35d.412d2",
              "name": "",
              "x": 410,
              "y": 220,
              "wires": [
                  [
                      "126152bf.ed9ead"
                  ]
              ]
          },
          {
              "id": "126152bf.ed9ead",
              "type": "function",
              "z": "bed2e35d.412d2",
              "name": "Invert lockstate for domoticz",
              "func": "if (msg.subType == 36) {\n    if (msg.payload== \"1\") msg.payload=\"0\";\n    else msg.payload=\"1\";\n}\nreturn msg;",
              "outputs": 1,
              "noerr": 0,
              "x": 640,
              "y": 220,
              "wires": [
                  [
                      "91eb6b4c.6e1498"
                  ]
              ]
          },
          {
              "id": "91eb6b4c.6e1498",
              "type": "mysdecenc",
              "z": "bed2e35d.412d2",
              "name": "",
              "x": 870,
              "y": 220,
              "wires": [
                  []
              ]
          },
          {
              "id": "2257718.fdda88e",
              "type": "subflow",
              "name": "Energy meter",
              "info": "Converts input from arduino sketch, to a \nMysensors compatible protocol format, usable\nfor injecting into the message stream from\nnormal Mysensors nodes\n\nOutputs data as nodeId 99.",
              "in": [],
              "out": [
                  {
                      "x": 1020,
                      "y": 200,
                      "wires": [
                          {
                              "id": "9d92273c.626dd8",
                              "port": 0
                          }
                      ]
                  }
              ]
          },
          {
              "id": "12db17ce.ed24e8",
              "type": "serial in",
              "z": "2257718.fdda88e",
              "name": "Meter input",
              "serial": "acfe3226.5301d",
              "x": 240,
              "y": 200,
              "wires": [
                  [
                      "e56f30b7.1a90d"
                  ]
              ]
          },
          {
              "id": "1dcfb48.fe2304c",
              "type": "mysencap",
              "z": "2257718.fdda88e",
              "name": "V_WATT node 99",
              "nodeid": "99",
              "childid": "1",
              "subtype": "17",
              "internal": "0",
              "ack": false,
              "msgtype": "1",
              "presentation": false,
              "presentationtype": "13",
              "presentationtext": "Watt",
              "fullpresentation": false,
              "firmwarename": "",
              "firmwareversion": "",
              "x": 650,
              "y": 160,
              "wires": [
                  [
                      "9d92273c.626dd8"
                  ]
              ]
          },
          {
              "id": "f9b89df5.06476",
              "type": "mysencap",
              "z": "2257718.fdda88e",
              "name": "V_KWH node 99",
              "nodeid": "99",
              "childid": "1",
              "subtype": "18",
              "internal": "0",
              "ack": false,
              "msgtype": "1",
              "presentation": true,
              "presentationtype": "13",
              "presentationtext": "Kwh",
              "fullpresentation": true,
              "firmwarename": "MeterNode",
              "firmwareversion": "0.1",
              "x": 650,
              "y": 200,
              "wires": [
                  [
                      "9d92273c.626dd8"
                  ]
              ]
          },
          {
              "id": "9d92273c.626dd8",
              "type": "mysdecenc",
              "z": "2257718.fdda88e",
              "name": "",
              "x": 890,
              "y": 200,
              "wires": [
                  []
              ]
          },
          {
              "id": "e56f30b7.1a90d",
              "type": "function",
              "z": "2257718.fdda88e",
              "name": "Split meter data",
              "func": "var m=msg.payload.split(';');\nvar msg1 = {payload:m[0]};\nvar msg2 = {payload:m[1]/1000};\nvar msg3 = {payload:m[1]};\nreturn [msg1, msg2, msg3];",
              "outputs": "3",
              "noerr": 0,
              "x": 420,
              "y": 200,
              "wires": [
                  [
                      "1dcfb48.fe2304c"
                  ],
                  [
                      "f9b89df5.06476"
                  ],
                  [
                      "dfd92894.2026d8",
                      "11f1e54.721221b"
                  ]
              ]
          },
          {
              "id": "dfd92894.2026d8",
              "type": "file",
              "z": "2257718.fdda88e",
              "name": "meter counter output to file",
              "filename": "/var/tmp/meascache.txt",
              "appendNewline": true,
              "createDir": false,
              "overwriteFile": "true",
              "x": 680,
              "y": 280,
              "wires": []
          },
          {
              "id": "11f1e54.721221b",
              "type": "mysencap",
              "z": "2257718.fdda88e",
              "name": "V_VAR1 (Wh node 99)",
              "nodeid": "99",
              "childid": "10",
              "subtype": "24",
              "internal": 0,
              "ack": false,
              "msgtype": "1",
              "presentation": false,
              "presentationtype": 0,
              "presentationtext": "",
              "fullpresentation": false,
              "firmwarename": "",
              "firmwareversion": "",
              "x": 660,
              "y": 240,
              "wires": [
                  [
                      "9d92273c.626dd8"
                  ]
              ]
          },
          {
              "id": "acfe3226.5301d",
              "type": "serial-port",
              "z": "",
              "serialport": "/dev/ttyUTILITY",
              "serialbaud": "115200",
              "databits": "8",
              "parity": "none",
              "stopbits": "1",
              "newline": "\\n",
              "bin": "false",
              "out": "char",
              "addchar": true
          },
          {
              "id": "67deb464.98214c",
              "type": "tab",
              "label": "Mysensors"
          },
          {
              "id": "5b8bba4c.a47444",
              "type": "serial in",
              "z": "67deb464.98214c",
              "name": "Mysensors NRF",
              "serial": "821a7286.7de59",
              "x": 200,
              "y": 460,
              "wires": [
                  [
                      "a056d087.fb87f",
                      "8cb827f.b90b8d8"
                  ]
              ]
          },
          {
              "id": "47b5936e.b84a6c",
              "type": "serial out",
              "z": "67deb464.98214c",
              "name": "Mysensors NRF",
              "serial": "821a7286.7de59",
              "x": 1340,
              "y": 180,
              "wires": []
          },
          {
              "id": "4755dfb8.b8aa2",
              "type": "serial out",
              "z": "67deb464.98214c",
              "name": "Domoticz",
              "serial": "b5105521.4aefa8",
              "x": 1320,
              "y": 420,
              "wires": []
          },
          {
              "id": "8b4a855.f74b578",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "Mysensors in",
              "active": false,
              "console": "false",
              "complete": "true",
              "x": 1110,
              "y": 340,
              "wires": []
          },
          {
              "id": "8caee560.735118",
              "type": "subflow:2257718.fdda88e",
              "z": "67deb464.98214c",
              "x": 190,
              "y": 640,
              "wires": [
                  [
                      "44592b43.bba6d4",
                      "d7b40093.e136f"
                  ]
              ]
          },
          {
              "id": "44592b43.bba6d4",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "Energy meter output",
              "active": false,
              "console": "false",
              "complete": "true",
              "x": 420,
              "y": 640,
              "wires": []
          },
          {
              "id": "9e471178.61b8f",
              "type": "subflow:bed2e35d.412d2",
              "z": "67deb464.98214c",
              "name": "",
              "x": 420,
              "y": 220,
              "wires": [
                  [
                      "173aba02.e8c546",
                      "9aecc18f.21f6d"
                  ]
              ]
          },
          {
              "id": "9bdc2a5b.6423d8",
              "type": "subflow:bed2e35d.412d2",
              "z": "67deb464.98214c",
              "name": "Domoticz out",
              "x": 1110,
              "y": 420,
              "wires": [
                  [
                      "4755dfb8.b8aa2"
                  ]
              ]
          },
          {
              "id": "9ebb1391.6144f",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "gw debug",
              "active": false,
              "console": "false",
              "complete": "true",
              "x": 1320,
              "y": 480,
              "wires": []
          },
          {
              "id": "49c6c17b.b6394",
              "type": "subflow:4c13992e.b3ec68",
              "z": "67deb464.98214c",
              "x": 1110,
              "y": 480,
              "wires": [
                  [
                      "9ebb1391.6144f"
                  ]
              ]
          },
          {
              "id": "602db35f.9fd24c",
              "type": "serial in",
              "z": "67deb464.98214c",
              "name": "Domoticz (20)",
              "serial": "b5105521.4aefa8",
              "x": 190,
              "y": 220,
              "wires": [
                  [
                      "9e471178.61b8f"
                  ]
              ]
          },
          {
              "id": "173aba02.e8c546",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "Domoticz in",
              "active": false,
              "console": "false",
              "complete": "payload",
              "x": 650,
              "y": 180,
              "wires": []
          },
          {
              "id": "3ff64036.ae116",
              "type": "subflow:9b272654.9ad688",
              "z": "67deb464.98214c",
              "name": "InfluxDB",
              "x": 1100,
              "y": 380,
              "wires": [
                  [
                      "aec232d3.2860b"
                  ],
                  [
                      "1d454a20.ff7ae6"
                  ]
              ]
          },
          {
              "id": "aec232d3.2860b",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "",
              "active": false,
              "console": "false",
              "complete": "true",
              "x": 1310,
              "y": 340,
              "wires": []
          },
          {
              "id": "a056d087.fb87f",
              "type": "change",
              "z": "67deb464.98214c",
              "name": "mark NRF",
              "rules": [
                  {
                      "t": "set",
                      "p": "radio",
                      "pt": "msg",
                      "to": "nrf",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 390,
              "y": 480,
              "wires": [
                  [
                      "581b2ac8.2248c4"
                  ]
              ]
          },
          {
              "id": "ba16f31f.9adc5",
              "type": "change",
              "z": "67deb464.98214c",
              "name": "mark RFM",
              "rules": [
                  {
                      "t": "set",
                      "p": "radio",
                      "pt": "msg",
                      "to": "rfm",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 390,
              "y": 520,
              "wires": [
                  [
                      "581b2ac8.2248c4"
                  ]
              ]
          },
          {
              "id": "5990dc86.7a2ef4",
              "type": "function",
              "z": "67deb464.98214c",
              "name": "net detect",
              "func": "var net = flow.get('network') || {};\nvar msg2 = {};\nnet[msg.nodeId] = msg.radio;\nflow.set('network', net);\nmsg2.payload = net;\nreturn [msg, msg2];",
              "outputs": "2",
              "noerr": 0,
              "x": 720,
              "y": 500,
              "wires": [
                  [
                      "1202b756.eb6449"
                  ],
                  [
                      "ee23ee4a.b5f14"
                  ]
              ]
          },
          {
              "id": "ee23ee4a.b5f14",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "",
              "active": false,
              "console": "false",
              "complete": "false",
              "x": 890,
              "y": 520,
              "wires": []
          },
          {
              "id": "581b2ac8.2248c4",
              "type": "mysdecenc",
              "z": "67deb464.98214c",
              "name": "",
              "x": 570,
              "y": 500,
              "wires": [
                  [
                      "5990dc86.7a2ef4",
                      "b10cb69c.3e3d18",
                      "ea57b38e.eecb5"
                  ]
              ]
          },
          {
              "id": "1202b756.eb6449",
              "type": "mysdecenc",
              "z": "67deb464.98214c",
              "name": "",
              "x": 890,
              "y": 480,
              "wires": [
                  [
                      "8b4a855.f74b578",
                      "49c6c17b.b6394",
                      "9bdc2a5b.6423d8",
                      "3ff64036.ae116"
                  ]
              ]
          },
          {
              "id": "22f329c0.24f896",
              "type": "function",
              "z": "67deb464.98214c",
              "name": "Net switch",
              "func": "var net = flow.get('network');\nmsg_nrf = null;\nmsg_rfm = null;\nmsg_nodered = null;\nif (msg.nodeId in net) {\n    var network = net[msg.nodeId];\n    if (network == 'rfm') msg_rfm = msg;\n    if (network == 'nrf') msg_nrf = msg;\n    if (network == 'nodered') msg_nodered = msg;\n} else {\n    msg_nrf = msg;\n    msg_rfm = msg;\n    msg_nodered = msg;\n}\nreturn [msg_nrf,msg_rfm, msg_nodered];\n",
              "outputs": "3",
              "noerr": 0,
              "x": 890,
              "y": 220,
              "wires": [
                  [
                      "56c9c62f.f1cbc8"
                  ],
                  [
                      "4c477db.4619e84"
                  ],
                  []
              ]
          },
          {
              "id": "9aecc18f.21f6d",
              "type": "mysdecenc",
              "z": "67deb464.98214c",
              "name": "",
              "x": 650,
              "y": 220,
              "wires": [
                  [
                      "22f329c0.24f896",
                      "b10cb69c.3e3d18"
                  ]
              ]
          },
          {
              "id": "56c9c62f.f1cbc8",
              "type": "mysdecenc",
              "z": "67deb464.98214c",
              "name": "",
              "x": 1110,
              "y": 180,
              "wires": [
                  [
                      "47b5936e.b84a6c",
                      "932ebb67.4968d8"
                  ]
              ]
          },
          {
              "id": "4c477db.4619e84",
              "type": "mysdecenc",
              "z": "67deb464.98214c",
              "name": "",
              "x": 1110,
              "y": 240,
              "wires": [
                  [
                      "6b2fe680.509218",
                      "aac8db1a.8aa468"
                  ]
              ]
          },
          {
              "id": "932ebb67.4968d8",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "msg_nrf",
              "active": false,
              "console": "false",
              "complete": "payload",
              "x": 1320,
              "y": 140,
              "wires": []
          },
          {
              "id": "6b2fe680.509218",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "msg_rfm",
              "active": false,
              "console": "false",
              "complete": "payload",
              "x": 1320,
              "y": 280,
              "wires": []
          },
          {
              "id": "8919748d.f19738",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "RFM Input",
              "active": false,
              "console": "false",
              "complete": "payload",
              "x": 390,
              "y": 560,
              "wires": []
          },
          {
              "id": "8155e57b.a7b2e8",
              "type": "serial in",
              "z": "67deb464.98214c",
              "name": "Mysensors RFM",
              "serial": "48886e04.c4cc6",
              "x": 200,
              "y": 540,
              "wires": [
                  [
                      "ba16f31f.9adc5",
                      "8919748d.f19738"
                  ]
              ]
          },
          {
              "id": "aac8db1a.8aa468",
              "type": "serial out",
              "z": "67deb464.98214c",
              "name": "Mysensors RFM",
              "serial": "48886e04.c4cc6",
              "x": 1340,
              "y": 240,
              "wires": []
          },
          {
              "id": "8cb827f.b90b8d8",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "NRF input",
              "active": false,
              "console": "false",
              "complete": "payload",
              "x": 380,
              "y": 440,
              "wires": []
          },
          {
              "id": "b10cb69c.3e3d18",
              "type": "link out",
              "z": "67deb464.98214c",
              "name": "UI link",
              "links": [
                  "2f8a6093.73ef7",
                  "6d7cc489.0bb81c",
                  "ad2dd4f0.d2c718",
                  "d6fb4a23.fcf218"
              ],
              "x": 755,
              "y": 320,
              "wires": []
          },
          {
              "id": "cc31c979.e15578",
              "type": "link in",
              "z": "67deb464.98214c",
              "name": "",
              "links": [
                  "5d82dd49.5350d4"
              ],
              "x": 755,
              "y": 360,
              "wires": [
                  [
                      "1202b756.eb6449",
                      "22f329c0.24f896"
                  ]
              ]
          },
          {
              "id": "d7b40093.e136f",
              "type": "change",
              "z": "67deb464.98214c",
              "name": "mark nodered",
              "rules": [
                  {
                      "t": "set",
                      "p": "radio",
                      "pt": "msg",
                      "to": "nodered",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 400,
              "y": 600,
              "wires": [
                  [
                      "581b2ac8.2248c4"
                  ]
              ]
          },
          {
              "id": "1d454a20.ff7ae6",
              "type": "link out",
              "z": "67deb464.98214c",
              "name": "Trigger KWH to dashboard",
              "links": [
                  "1e4f3d9a.978582"
              ],
              "x": 1275,
              "y": 380,
              "wires": []
          },
          {
              "id": "ea57b38e.eecb5",
              "type": "debug",
              "z": "67deb464.98214c",
              "name": "",
              "active": false,
              "console": "false",
              "complete": "true",
              "x": 710,
              "y": 580,
              "wires": []
          },
          {
              "id": "821a7286.7de59",
              "type": "serial-port",
              "z": "",
              "serialport": "/dev/ttyNRF24",
              "serialbaud": "115200",
              "databits": "8",
              "parity": "none",
              "stopbits": "1",
              "newline": "\\n",
              "bin": "false",
              "out": "char",
              "addchar": true
          },
          {
              "id": "b5105521.4aefa8",
              "type": "serial-port",
              "serialport": "/dev/ttyS80",
              "serialbaud": "115200",
              "databits": "8",
              "parity": "none",
              "stopbits": "1",
              "newline": "\\n",
              "bin": "false",
              "out": "char",
              "addchar": true
          },
          {
              "id": "48886e04.c4cc6",
              "type": "serial-port",
              "z": "67deb464.98214c",
              "serialport": "/dev/ttyRFM69",
              "serialbaud": "115200",
              "databits": "8",
              "parity": "none",
              "stopbits": "1",
              "newline": "\\n",
              "bin": "false",
              "out": "char",
              "addchar": true
          }
      ]```
      W Offline
      W Offline
      wergeld
      wrote on last edited by
      #52

      @tbowmo I feel I have a lot of reading to do...
      Setting up my own custom dashboard has been on my todo list forever (I have the shell made and used the Domoticz API to pull in data but am not really satisfied at all with Domo's APIs). InfluxDB is neat but so, so, limited in my opinion (I do SQL Server big data analytics in the real world).

      1 Reply Last reply
      0
      • NeverDieN NeverDie

        I want to pick a controller, but I don't want to jump in feet first only to find out later that it's somehow seriously flawed. Domoticz, Openhab, and Vera appear to be the most popular based on number of topics and posts. I think I can rule out Vera based on prior negative experience with it. So, I guess that makes it Domoticz vs. OpenHAB. Any reasons to prefer one over the other? The built-in graphing in Domoticz looks very appealing.

        Bogus ExceptionB Offline
        Bogus ExceptionB Offline
        Bogus Exception
        wrote on last edited by
        #53

        @NeverDie I tried for days. Too buggy, and not enough support. I landed with MyController, which takes advantage of MySensors, plus allows a lot of scripting, etc.

        </$0.02>

        "If you drop it and it breaks, it was good." ~ Mr. Lehr, my Electronics Vo-Tech teacher, on testing vacuum tubes...
        -Arduinos (UNO, Nano, Pro-Mini, Mega, ...)
        -ATTiny, ATMega, STM32
        -Geek Channel: https://www.youtube.com/TheSalesEngineer

        1 Reply Last reply
        1
        • gohanG gohan

          @Anticimex don't you think MQTT is better suited for this task? I am still quite new to node-red and haven't tikered with it much as learning javascript is low on the priority list :D

          AnticimexA Offline
          AnticimexA Offline
          Anticimex
          Contest Winner
          wrote on last edited by
          #54

          @gohan which task? I have never used MQTT and I have not felt a need to use it so far.

          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

          gohanG 1 Reply Last reply
          0
          • AnticimexA Anticimex

            @gohan which task? I have never used MQTT and I have not felt a need to use it so far.

            gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #55

            @Anticimex I'm referring to the task of communicating between 2 or more platforms/devices: it was built for that. If I knew how to do it, I'd try to make it myself 😅

            AnticimexA 1 Reply Last reply
            0
            • gohanG gohan

              @Anticimex I'm referring to the task of communicating between 2 or more platforms/devices: it was built for that. If I knew how to do it, I'd try to make it myself 😅

              AnticimexA Offline
              AnticimexA Offline
              Anticimex
              Contest Winner
              wrote on last edited by
              #56

              @gohan ok, well I use node-red. It works for me, and I can easily hook in anything imaginable (including MQTT things) while also having the ability to easily inspect and manipulate the data as it flows through the grid. Perhaps MQTT offer that by itself. I don't know.

              Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

              1 Reply Last reply
              1
              • tbowmoT Offline
                tbowmoT Offline
                tbowmo
                Admin
                wrote on last edited by
                #57

                with node-red as middleware you can in theory filter nodes out that you won't let domoticz handle..

                Or run both domoticz and pidome (or another controller) in parallel, for example if you want to switch controller for some reason, then move things slowly over to the new platform. I have done this a couple of times, when I wanted to check out a new controller..

                MQTT could probably be used, as it can have multiple clients listen to the same data. I just want to get in between the mysensors network, and everything else, so I can manipulate data as I see fit. And that is possible with node-red. You don't need javascript knowledge for basic stuff.. As it's a graphical click and draw thing, and quite intuitive imho.

                gohanG 1 Reply Last reply
                1
                • W wergeld

                  I have used Domoticz for about 2+ years. I like it a lot but wish for something...more.
                  Pros:
                  Quick setup for mysensors nodes
                  One-stop location for data storage and data presentation
                  Android app is very good
                  Customizable scripting options once you leave their scripting environment and use API values.

                  Cons:
                  Event scripting (lua? really?) needs more advanced features.
                  Has interesting issue lately where if I lose power to the Pi I lose all data back to May 23 of this year. I have a cron job that backs up the DB nightly and send to my NAS so I can lose hours instead of days. But, man, is this annoying - I have not tracked down the reason yet.
                  Graphs are just sort of...there. I do data viz at my job and use Highcharts (Domoticz' charting library) daily. The charts in Domoticz need a lot of work.

                  I have started writing my own front end that calls data from the Domoticz API (as well as other APIs) for showing info in our house. Nothing crazy cool, but it will eventually work fine for me.

                  Which brings me to the point - there is no perfect controller. You need to find the one that is right for you.

                  ronnyandreR Offline
                  ronnyandreR Offline
                  ronnyandre
                  wrote on last edited by
                  #58

                  @wergeld said in Are folks here happy with Domoticz?:

                  Event scripting (lua? really?) needs more advanced features.

                  You should check out dzVents which makes LUA-scripting much more powerful and even simpler.

                  Newbie with RPi and Domoticz, trying to automate my home.

                  tbowmoT 1 Reply Last reply
                  1
                  • tbowmoT tbowmo

                    with node-red as middleware you can in theory filter nodes out that you won't let domoticz handle..

                    Or run both domoticz and pidome (or another controller) in parallel, for example if you want to switch controller for some reason, then move things slowly over to the new platform. I have done this a couple of times, when I wanted to check out a new controller..

                    MQTT could probably be used, as it can have multiple clients listen to the same data. I just want to get in between the mysensors network, and everything else, so I can manipulate data as I see fit. And that is possible with node-red. You don't need javascript knowledge for basic stuff.. As it's a graphical click and draw thing, and quite intuitive imho.

                    gohanG Offline
                    gohanG Offline
                    gohan
                    Mod
                    wrote on last edited by
                    #59

                    @tbowmo I played with it few months ago and indeed it is simple click and drag, but when you want to do real things you need to know javascript

                    1 Reply Last reply
                    0
                    • ronnyandreR ronnyandre

                      @wergeld said in Are folks here happy with Domoticz?:

                      Event scripting (lua? really?) needs more advanced features.

                      You should check out dzVents which makes LUA-scripting much more powerful and even simpler.

                      tbowmoT Offline
                      tbowmoT Offline
                      tbowmo
                      Admin
                      wrote on last edited by
                      #60

                      @ronnyandre

                      It seems that dzVents are part of domoticz now.. I have it in ./scripts/dzVents, and looking at the domoticz repository, it's also included there..

                      1 Reply Last reply
                      1
                      • gohanG Offline
                        gohanG Offline
                        gohan
                        Mod
                        wrote on last edited by
                        #61

                        It actually is part of domoticz events

                        0_1501709496201_upload-6eaa6cae-df78-4a4b-ba19-3014d98e95fe

                        1 Reply Last reply
                        1
                        • stefaanvS Offline
                          stefaanvS Offline
                          stefaanv
                          wrote on last edited by
                          #62

                          I've used domoticz for a few years but got more-and-more stuck on it's limitations. I'm not a great fan of lua either. I'm more a c# and javascript person.
                          I have invested my time in OpenHAB2 lately and I'm very happy with it. Much more solid in terms of software design imho. Very large hardware support. Seems to be a larger community as well.
                          Setup is not as easy as with Domoticz, takes more reading and getting used to, but in the end I'm happy that I switched to OpenHAB.
                          HabPanel is a nice extension to OpenHAB for building UI's.

                          1 Reply Last reply
                          1
                          • D Offline
                            D Offline
                            dakipro
                            wrote on last edited by dakipro
                            #63

                            Exactly the same as @stefaanv and many others, I started with Domoticz and used it for few years, but after a while it was a bit too much "this script for this", and "this hack for that", and this in python and seven virtual switches for that hack... So I was looking into a more robust solution, and I was sold on presentations that leading people of OpenHAB held online, showing the architecture, the reasons and plans, having clear roadmap and long term plan for the system. I feel I understand how and why openhab works the way it does, why it is organized in such a fashion. And that is very important with any software, to have a good documentation (technical, not just for the users).
                            With domoticz, almost no idea about how it was internally organized, why and what the future plans are. It was always somehow "well this is what we have, it works, and here are the workarounds... with bunch of hidden difficult to find virtual switches and rest api"

                            When I started making more "abstracted" rules about events and logic, then lua showed quite a few challenges, but it was mainly having 30-40-50 virtual switches, a pain in the ** keeping track them all, making rules for each of them (f.eks. switches for datetime: isSunrise, isMorning, isAfternoon, isEvening, isNighttime, isDaytime..... isSomeoneHome, isMeHome, isWifeHome,... ) And this was actually the biggest issue I had with domoticz, handling and organizing the automation part and virtual switches. At the end I had like 6-7 times more virtual switches then physical ones.

                            Then I moved in another apartment and decided to try openhab2. It is just way more robust. It didn't took me a long time to get up and running, and having items defined in a text file is a blessing as you can just do a backup, organize them in multiple files, use git (or backup) for versioning. Writing comments also helps A LOT when you come back to the item after few months/years.

                            Only thing I was struggling a bit is the RFlink, whose binding is not quite ready yet. But I managed to install and use rflink->mqtt "gateway" and all works as expected.
                            I am also using node-red for logic as @Fabien which I am still learning, but so far it looks much much better and easier to debug.

                            Not all challenges from above are domoticz related, some are also "me a rookie" related, so not to downspeak on domoticz, it works great! As long as you are comfortable with all above and dont plan to overgrow it. My goal is to make "smarter home", more then just basic rules and remote home. (about remote home, my.domoticz.com for remote access never actually worked for me, noone could/tried to solve it, so I felt it didn't work)

                            And that is where the community comes in place, it feels that the people on the openhab are more technical, and generally have great technical discussions about best solutions and approaches. F.eks. only for persisting values, you can have multiple completely different database systems, using the advantage of each of them. And each is very easy to install, as they all comply to some "technical rules and documentation". Now that is a downside, as you need to know that you need persistence strategy at all, I wish some would come predefined, but...
                            I am not developing anything, but I feel there are "big boys" who think hard about issues and then develop a long term and best solution for the problem. And I want a stable and long term solution for my home automation, and waf :)

                            On the other side, openhab is a bit more technical, but I think that someone who can change mysensors sketches and make that work, can make openhab work as well. They are very focused on "non-technical" user these days, and it shows with every update. I guess home-assistant is pushing its way forward.

                            (a novel about my life and divorce with domoticz will be published someday, snippet above is just the preview, I have too much caffeine cannot sleep help)

                            C: OpenHAB2 with node-red on linux laptop
                            GW: Arduino Nano - W5100 Ethernet, Nrf24l01+ 2,4Ghz mqtt
                            GW: Arduino Mega, RFLink 433Mhz

                            1 Reply Last reply
                            3
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            22

                            Online

                            11.7k

                            Users

                            11.2k

                            Topics

                            113.1k

                            Posts


                            Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • MySensors
                            • OpenHardware.io
                            • Categories
                            • Recent
                            • Tags
                            • Popular