Are folks here happy with Domoticz?


  • Hardware Contributor

    Just to clarify I think Domoticz is very versatile and flexible when it comes to hardware but when it comes to GUI and how to visually show everything it's very nice but not configurable.


  • Mod

    Domoticz is very simple to get it running and if you don't need fancy functions it's OK. Of course there are more powerful solutions but you need to learn more an extra language (either for scripts or programs). I was looking at node-red too, but I don't have time right now to start learning Javascript and same for Openhab you still need to learn the code.



  • To clarify things wrt. to FHEM:

    It is pretty easy to set up and getting devices virtualised and browser-usable is also not a big issue, but without additional work not very nice-looking as a GUI (but nevertheless functional).
    But as soon as you want to implement logics, it is relatively easy possible within this environment.


  • Hero Member

    I think I'll first give Pi Dome a try, since that allegedly has an actual MQTT broker built into it, and it's already on the list of mysensors controllers. If there are any other controllers also built around MQTT, I'd be interested to hear which ones.


  • Hardware Contributor

    I've been using Domoticz for a while, because it was the most obvious system to use with my RFXTRX433 and my 433MHz modules.
    I agree with what has been said: very easy to setup, nice graphs/history but limitations in UI are very frustrating. There's a nice API too, but I'm not feeling like reprogramming the full UI to have something that I enjoy.
    I'm getting frustrated with the programming of events too, for very basic scenarios it's fine, but the way it works can quickly make it a mess. For example if you switch a light in a script it will re-trigger scripts based on light switching and you have no way to know if it was triggered by user action or by script, so you you have to start using global variables (declared in another part of the UI) to keep that information etc etc

    So, I'll start my controller shopping season too relatively soon I think πŸ™‚


  • Hardware Contributor

    I would like to use Domoticz because of its popularity here in the MyS community, but I've given up every time this far. Lately because there seems to be an issue with Eth-Gws for other MyS-systems on the same network(?). And I've also noticed an annoying 2-3s delay from sensor reading to registration. And the UI doesn't feel flexible, lightweight and reliable. Too much like the Vera I used before. Not to mention other controllers "responsive huge white spaces UI style".

    So, I'll continue with Fhem. A pain to master as non-German (nor Perl) speaking, but with a good feeling of old proven quality under the hood.


  • Hero Member

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

    I think I'll first give Pi Dome a try, since that allegedly has an actual MQTT broker built into it, and it's already on the list of mysensors controllers. If there are any other controllers also built around MQTT, I'd be interested to hear which ones.

    Actually, I think I'll start with Domoticz. Except for the last comment above, it seems to at least "work" at some level for most people, whereas I'm not sure if the same can be said for PiDome.


  • Mod

    Domoticz is for sure not the best solution, but at least it works and it's easy to setup. There is a random bug where it splits temp+humidity sensors though πŸ˜…


  • Hardware Contributor

    I am actually happy with domoticz. I have used it for about a year and its main advantage for was that it's very easy to learn and to use. Recently I discovered dzVents (which is now integrated in the domoticz beta) that allows for easier and more complex scripts. For now I was able to do anything I wanted in domoticz.
    The UI isn't perfect (although openhaps is way worse imho) but it gets the job done.

    I also tried to use openhab (2) earlier but thats a totally different beast. You can do awesome stuff but it's REALLY hard to get started. The new ui in openhab 2 looks great but its still a weird mix of using text files and the ui.
    HA also looks great but I haven't tried it yet.

    So overall I would start with domoticz and switch later if you are missing any features.

    PS also domoticz updates (at least for features related to mysensors) seem to be implemented pretty slow. I have opened several tickets in their git where the answer was mostly: implemented on you own πŸ˜‰ Which is fine (I dont pay them afterall) but other systems seem to be way more active.



  • Im on Domoticz since 2015. Running with Mysensors, Rflink(433MHz sensors), HA-Bridge (Amazon Echo), Broadlink (IR, 433MHz). Iwas looking at HA months ago - UI looks better, but then I installed Dashticz and my only problem was solved πŸ™‚


  • Hero Member

    So, I installed Domoticz, accepting all the default settings, and the very first thing I see is a browser page with an error message:
    "Access Error: 404 -- Not Found

    Cannot locate document: /"

    Oh, joy. 😦


  • Hardware Contributor

    @NeverDie - did you forget the :port ?


  • Hero Member

    Also pretty happy with Domoticz. Also installed Dashticz on one of my two installations (the other being at the local Makerspace). For me, at least historically, I needed something that could run well on a Raspberry. Domoticz is up and running in seconds obviously even on limited hardware. For me at least Domoticz is pretty flexible, with Blockly, LUA, Python and dzVents. I think there is also some sort of add-on for PHP. The interface and the handling of devices is a bit messy but still.

    Haven't tried HA but I would certainly consider it.


  • Hardware Contributor

    @NeverDie Have you tried something like this: https://ip.of.your.server/#/Dashboard ? Or with port and no HTTPS.



  • 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.


  • Hero Member

    I just now installed Domoticz on a different computer, and this time it all went without a hitch. No problem recognizing the serial gateway that's running on an nRF52832, and also no problem receiving from a sensor node (running on a different nRF52832). πŸ™‚

    I count it as a plus that Domoticz also has a LInux version, since Linux tends to be more stable than Windows for something that needs to be running constantly without downtime. So, I'll probably migrate my Domoticz to Linux after I get more familiar with it.


  • Hero Member

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

    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.

    You may want to consider using a Pi UPS, either for that reason or just in general. Lots of different ones available now--or simply make one yourself--which should allow enough time for an orderly shutdown. I would tend to favor one based on a supercap, for longevity sake, but maybe that's just me. Perhaps @ceech has something you could use that you might like. Ideally, of course, you want one with an auto-restart feature too, to resume after power is restored and your power source charges up (yet another reason to possibly prefer a supercap: charging speed).



  • @NeverDie
    Yes, I do have it on a UPS. What I meant is that if I power down the PI. I think the SD cards is toast on it. Nothing seems to be saved to disk - I made a cron job and saved it. But, after a reboot of the Pi the cron job was no longer there. Oh well.

    I have stated to mess with dashticz - looks promising but not ready for prime time. Documentation is thin, to say the least. Also, the config switch to use F instead of C works for the numeric value shown - but the suffix is still "C". Also, the culture set is using (for the US, anyway) the wrong thousands separator and decimal point characters. I can add in my Google Maps API key in the locations in the config (with my lat/lon) but it does not appear to "do" anything and I see nothing in the docs on what block or section I need to create to show the maps.

    Still, I do like Domoticz.



  • I've been using Domoticz for about 2 years and am happy with it. I tried a couple of others before, but Domoticz had a better look and worked with well with MySensors. I am comfortable with Lua, so that was OK for me.
    I use the Domoticz phone app to monitor when I am away. It's basic, but seems to work well.
    I've been able to set it up to respond to Alexa commands.
    Gizmocuz seems to be responsive in keeping it up to date with MySensors.


  • MySensors Evangelist

    In the beginning I worked with DomotiGa on a raspberry. However due to all the crashes of my SD card and the long restore time (rebuilding / recompiling of DomotiGa) I had a shadow system on a separate Raspberry with Domoticz to figure out how it worked. In the end I also moved Domoticz from SD to an SSD using a Cubietruck backend. To speed Domoticz a little bit more I moved away from the standard (integrated) scripts and lua to Pass2PHP. Now all automatic controls are dealt with by PHP while still being able to use all de 'hardware' features and interface of domoticz itself. . As a result I have a fast responding system that integrates with all my domotica hardware flawless. The community is really big. And yes. Sometimes you run into a bug. But I assume that can happen anywhere.



  • @wergeld, You can't blame domoticz for loosing power, that's a risk with all SD-card based systems. After a similar experience I run domoticz now on a intel NUC for about 4 years without any major issues, and I'm on Beta



  • I am trying to get away from Domoticz because of the 5 minute log interval that is built in to it.
    I have changed it to 1 minute but it is still useless for my boiler sensor.
    Sometimes the Boiler is only on 30-45 secs and the temperatures on the flow and return are completely missed.
    There has to be something better.
    I have been trying myHouse lately but the updates for fixes and enhancements have slowed down as the developer is busy with other things.
    So back to the drawing board.


  • Mod

    You could use node-red to log data to an external db and do whatever you want after that: it should be easier than replace the entire controller


  • Hero Member

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

    You could use node-red to log data to an external db and do whatever you want after that: it should be easier than replace the entire controller

    In that scenario, would Node Red be getting the sensor message first and then just somehow quickly piping it to Domoticz and a copy to the external database (e.g. MySQL)?



  • @Sweetpants Oh, I am not. Just saying that the issues I am having with logging do not have to do with Domoticz.


  • Mod

    @NeverDie no, both Domoticz and node-red are connecting to ethernet/mqtt gateway (I don't remember which one is supported), so they both get the same data coming from the gateway and would keep working independently



  • @sundberg84 i dont know about you, but i use imperihome as a front end over the top of domoticz with mydomoathome.....that way you get the strong base of domoticz, but i more user friendly and customisable front end


  • MySensors Evangelist

    @rmtucker I move the data directly from Domoticz into influxDB. This is as accurate as you will get it πŸ˜‰ Data for example of my smartmeter every 10 seconds. If the device is updated in Domoticz (energy sensor for example) this will add data to influxDB and you will get the bet graphs. Accurate for me.



  • Hello guys,
    I am a beginner with Domoticz. I would like to ask you a question. Can i find a way to recover the data from a sensor like temperature or smartmeter to be installed in local?
    I am working with Rasperbery +domoticz + Smartplug Fibaro.
    Firstly, i install domoticz in raspberry and i configure the plug fibaro to communicate with a usb Zwave. And it works. i can see the graph but I do not succed to retrieve the data locally into the raspberry.
    Someone has a solution to propose me?
    Thanks guys


  • Mod

    @kany are you referring to save data to something like influxdb?



  • @gohan yeah!! Possible.My goal is to use machine learning with the data i collect.
    So if you give me link where the explain how it's working influxdb it Will be good
    Thnnk@gohan for your reply



  • @kany Well, the data is in a SQLite database for domoticz already. You can move to InfluxDB easily. See this post on the Domoticz forum - this is how I set it up using these instructions.
    My qualms with InfluxDB is that deleting a value is nearly impossible.


  • Admin

    @NeverDie

    I use node-red with domoticz, MySensor data hits node-red first (serial gateway) which then pipes the data to domoticz via a fake serial port. That way I can manipulate data that I send to domoticz, and can inject fake mysensor sensors into domoticz as well..

    Node-red also dumps all data to influxdb for data storage, and then I use grafana for graphing purposes. Besides that I have created my own dashboard for tablets.

    Currently I mostly use domoticz as scripting engine (lua), for some basic events. For example turning on TV if someone starts streaming to my chromecast, and automatically turn it off again if chromecast have been in idle state for 2 minutes (the same for my chromecast audio, that just turn on amplifier instead of TV).



  • @tbowmo Do you have a link to your node-red setup? I would like to filter the output of my sensor nodes as well (got a flaky one that sends -47.5 F temp every once in a while.

    Found your github!
    For others looking it is here.


  • Mod

    @tbowmo would that work also for ethernet/mqtt gateway?


  • Admin

    @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
        }
    ]```

  • Admin

    @gohan

    In theory it should work, as you can set node-red up to receive MQTT messages, which could then be manipulated, and send off to domoticz (if needed).

    I think that @Anticimex made some experiments with mqtt/ethernet gateways using node-red. But can't remember details..


  • Contest Winner

    @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.


  • Admin

    @wergeld

    Btw. with the setup mentioned above, I have made a basic mysensors router in node-red, I can have two mysensors gateways attached to node-red (nRF24, and RFM69). I then keep track of which gateway I hear which node on, and use that to send commands through the right gateway, when domoticz want to turn on an actuator.

    Domoticz only knows of one gateway. It just sees a bunch of nodes reporting data πŸ™‚


  • Mod

    @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 πŸ˜„



  • @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).



  • @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>


  • Contest Winner

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


  • Mod

    @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 πŸ˜…


  • Contest Winner

    @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.


  • Admin

    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.



  • @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.


  • Mod

    @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


  • Admin

    @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..


  • Mod

    It actually is part of domoticz events

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



  • 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.



  • 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)


Log in to reply
 

Suggested Topics

  • 5
  • 8
  • 2
  • 1
  • 5
  • 1

8
Online

11.4k
Users

11.1k
Topics

112.7k
Posts