Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Mqtt best practice

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Mqtt best practice

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @mickym last edited by

      Ich habe aber gerade gesehen, dass Du bei Deinen Shellies sowieso eigene mqtt-Prefixe nutzt. Also Küche etc..

      Dann brauchst eigentlich keinen Alias. Wenn Du tatsächlich mal ein Gerät austauschen musst, dann kannst Du ja den gleichen Prefix wieder verwenden und musst weder in Deinen Logikmaschinen noch in Deiner Visualisierung was ändern.

      D 1 Reply Last reply Reply Quote 0
      • D
        dos1973 @mickym last edited by

        @mickym
        auch so einer der spät bastelt 🙂

        ja, ich bin noch am ausprobieren und hab da mal mit den Prefixen rumprobiert.
        ich weiß eben noch nicht was mir u.U. Vorteile / Nachteile bringt. spiele derzeit auch mit dem Alias Adapter

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @dos1973 last edited by mickym

          @dos1973 Ja ich gehöre eher zu den Eulen, als zu den Lerchen.

          Für Deine Shellies alleine ist der Vorteil eigentlich marginal.

          Man kann halt eine ähnliche Struktur über verschiedene Gerätetypen machen.

          Unten habe ich Dir ja im Screenshot gezeigt, wie man zum Beispiel bei Lesen on in true, off in false übersetzt.

          Man kann aber auch zum Beispiel einzelne Werte direkt aus einem JSON Objekt rauslösen.
          Der Zustand bzw. das Dimmlevel, sprich die Helligkeit des Shelly Dimmers wird ja im status Wert ausgegeben:

          7eddd06c-c3e6-4fff-8b5b-aa40911fe2ef-image.png

          Das kann man dann im Alias direkt rauslösen

          69eaec98-fa45-492e-aab5-1364f727ebc9-image.png

          In der Alias Definition gibt man dafür den Befehl in Javascript zum Lesen ein.

          72695603-d8c3-443c-ba9b-46f8298c4676-image.png

          Was allerdings mit einem Alias nicht geht, bei Lesen und Schreiben unterschiedliche Datenpunkte als Quelle angeben!!

          D 1 Reply Last reply Reply Quote 0
          • D
            dos1973 @mickym last edited by

            @mickym
            du überforderst mich 🙂 scheinst die Möglichkeiten ja wirklich extrem auszunutzen.

            Ich fange jetzt an die Shellys vom Shelly Adapter auf den Mosquitto umzuziehen.
            Jetzt weiß ich nur nicht, ob ich mir noch die Alias Struktur geben soll, weil ich ja ale VIS und Script ebenfalls "anfassen" muss...

            ich mach mal für heute Schluss und schlaf mal eine Nacht drüber.

            mickym 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @dos1973 last edited by

              @dos1973
              Also wie gesagt mit Deinem benutzerspezifischen Prefix - musst Du es wegen den Shellies aus meiner Sicht nicht machen.

              Schlaf gut - und möge Dich Dein Schlaf erleuchten. 😉

              D 1 Reply Last reply Reply Quote 1
              • D
                dos1973 @mickym last edited by

                @mickym
                nochmals ich, gibt es noch einen einfach Trick/ Vorgehensweise um Infos mittels Mqqt aus dem shelly Status abzufragen und als DP anzulegen?

                http://shelly-ip/status

                und manche Shellys haben noch den Datenpunkt "announce", da stehen auch einige infos drin, / manche DP sind leer aber eben nicht überall gleich die Regel dazu habe ich noch nicht verstanden

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @dos1973 last edited by mickym

                  @dos1973 Du kannst direkt unter allen shellies nochmal einen Datenpunkt command anlegen oder bei den einzelnen shellies. Dort kann man dann mit announce die shellies zwingen ihren status im info Datenpunkt abzulegen oder bei Bedarf kann man das nutzen um die Firmware zu aktualisieren.

                  siehe: https://shelly-api-docs.shelly.cloud/gen1/#common-mqtt-commands

                  Im Info-Datenpunkt findest in der Regel fast alle Infos zu dem Shelly in einem JSON zusammengefasst. So auch ob es ein FW Update gibt, welche FW Version etc.

                  3e848d3e-149f-4a15-af4e-6f3b2bc2e57b-image.png

                  Mit announce in dem command Punkte - entweder beim Einzelgerät oder für alle werden die info DP aktualisiert, mit update die normalen states, mit update_fw kannst Du Firmwareupdates anstossen.

                  Aus dem Link siehst, dass die announce Datenpunkte eher alt sind und bis zur FW. 1.6.x genutzt wurden, ab Version 1.8.x wird Info genutzt. Aktuell siehst ja an meinem Screenshot sind wir bei einer FW Version 1.11.x

                  Und wenn Du mit NodeRed arbeiten würdest könntest ja meinen Flow nutzen der daraus einzelne Datenpunkte unter userdata macht - (Wenn derzeit auch mit Nacharbeit wegen Admin5). Zeig es Dir mal an einem Beispiel. Theoretisch könnte Dir so ein Flow auch selbst den Info DP unter mqtt aufdröseln.

                  mickym 1 Reply Last reply Reply Quote 1
                  • mickym
                    mickym Most Active @mickym last edited by mickym

                    @mickym sagte in Mqqt best practice:

                    Und wenn Du mit NodeRed arbeiten würdest könntest ja meinen Flow nutzen der daraus einzelne Datenpunkte unter userdata macht - (Wenn derzeit auch mit Nacharbeit wegen Admin5). Zeig es Dir mal an einem Beispiel. Theoretisch könnte Dir so ein Flow auch selbst den Info DP unter mqtt aufdröseln.

                    Mit diesem kleinen Flow - könntest Du dann alle states aus dem Info Datenpunkt aufdröseln:

                    5f4be813-e9a7-4ab3-81ed-52e135ec1a8c-image.png

                    22a7dba1-6199-4b6c-93a3-97e576c8dd35-image.png

                    Dann muss man halt wieder das javascript drüber jagen - dieses Mal über userdata - damit einmalig die fehlenden Objekte angelegt werden. NodeRed kann im Moment nur states und keine Objekte anlegen.

                    Fehlende Stiftsymbole !!!

                    6b9a7240-9168-4461-bf40-3400df32b2f5-image.png

                    8a656a47-685a-4221-b27c-2340cf0b47e8-image.png

                    Das Skript macht dann aus allen fehlenden Objekten - Folderobjekte:

                    1d665166-dc10-4adb-89bb-aaaf59d9b777-image.png

                    Ist das aber einmal erledigt, dann werden diese Datenpunkte mit Aktualisieren des Info Datenpunktes automatisch aktualisiert.

                    ee5a15f6-07be-46d4-9c3b-7d92cf8d2abe-image.png

                    Ich habe deshalb niemals verstanden, warum man Adapter nutzt, die kaum was anderes machen, als kompakte JSON-String Datenpunkte in einzelne Datenpunkte zerlegt. OK man muss keine Datenpunkte selbst anlegen, wenn man Kommandos verschickt. 🙂 - Punkt gegen mqtt. 😉
                    Bei Bedarf kann man sich ja auch nur einzelne Datenpunkte aus dem JSON rausholen und in einem Alias beispielsweise abspeichern (habe ich ja vorher schon mal gezeigt, wie das geht).

                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @mickym last edited by mickym

                      In diesem Info Datenpunkt bekommt man in meinen Augen mind. soviel Infos wie in dem Adapter:

                      8f5854cc-3b20-418e-9a46-5d56ac368148-image.png

                      So siehst Du zum Beispiel, ob der Shelly gerade mit einem FW Update beschäftigt ist oder auch RAM Belegung ,die Güte des WLAN Signals, Uhrzeit des Shellies usw.

                      Uptime ist hier die Zeit in Sekunden (nicht Millisekunden 😉 ), seitdem das Gerät neu gebootet hat- also 548006 Sekunden sind in diesem Fall ca. 152 Stunden oder vor gut 6 Tagen.

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @mickym last edited by mickym

                        @dos1973
                        Falls Du übrigens mal den Shelly über Deine VIS und nicht das WEB-Interface konfigurieren willst und Du feststellst es geht nicht über MQTT, dann bleibt Dir immer noch die HTTP Schnittstelle, mit der kannst quasi alles machen.

                        Um zum Beispiel den Zeitserver zu ändern stehen Dir ja die unter settings beschriebenen Parameter zur Verfügung:
                        https://shelly-api-docs.shelly.cloud/gen1/#settings

                        Ich hab das sowohl mit GET und POST Requests getestet und funktioniert wunderbar:

                        663eb4bf-82c6-4f25-a8bf-055ba5e9929d-image.png

                        Die Get-Requests funktionieren zum Testen auch im Browser wunderbar:

                        Mit
                        b6f0f924-291c-455f-a169-8c54b803eb67-image.png

                        kannst also zum Beispiel den SNTP Server setzen:

                        8a55bbc2-b8dc-475b-874a-cd48471b7637-image.png

                        So nun hab ich aber glaube genug Möglichkeiten der Steuerung ohne Adapter aufgezeigt. 😉

                        Ergänzend sei noch hinzugefügt: Natürlich kannst Du solche HTTP Requests auch über Blockly machen - aber ich bin da kein Fan von, deswegen habe ich hier nur begrenztes Wissen, aber dafür gibts ja dann andere hier an Board.

                        D 1 Reply Last reply Reply Quote 0
                        • D
                          dos1973 @mickym last edited by

                          @mickym sagte in Mqqt best practice:

                          So nun hab ich aber glaube genug Möglichkeiten der Steuerung ohne Adapter aufgezeigt

                          eindeutiges JA.
                          eigentlich war/ ist genau das mein Ziel.
                          Da ich inzwischen Zuviele von den kleinen Dingern habe, möchte ich nicht Abhängig vom Adapter und der Entwicklung sein.

                          kann der node-red "Status Teil exportiert werden. Das sehen ja bestimmt noch Sachen drin welche im Screenshot nicht ersichtlich sind.

                          mickym 2 Replies Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @dos1973 last edited by mickym

                            @dos1973 sagte in Mqqt best practice:

                            @mickym sagte in Mqqt best practice:

                            So nun hab ich aber glaube genug Möglichkeiten der Steuerung ohne Adapter aufgezeigt

                            eindeutiges JA.
                            eigentlich war/ ist genau das mein Ziel.
                            Da ich inzwischen Zuviele von den kleinen Dingern habe, möchte ich nicht Abhängig vom Adapter und der Entwicklung sein.

                            kann der node-red "Status Teil exportiert werden. Das sehen ja bestimmt noch Sachen drin welche im Screenshot nicht ersichtlich sind.

                            Der Subflow-Node ist hier in meinem Thread genau beschrieben (z. Bsp muss man im NodeRed Adapter die Erstellung von Fremdobjekten zulassen und die Stringkonvertierung ausschalten):
                            Beides hier nochmal als Screenshot (Projektfunktion brauchst Du nicht):

                            09557395-1c8d-44fb-a483-56979f4de2f3-image.png

                            https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur
                            https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur/9

                            Ich hab Dir mal nur den Teil exportiert ohne die mqtt-In Node - das kannst ggf. selbst machen oder alternativ eine iobroker-in Node vorne dran hängen:

                            1daaf436-db13-4487-97e8-e47d3712409e-image.png

                            Hier der Flow zum Import - enthält dann automatisch die Subflow Node mit Beschreibung:

                            
                             [
                                {
                                    "id": "c3403a60.92fbb8",
                                    "type": "subflow",
                                    "name": "JSON or Obj to IOBroker",
                                    "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs no `msg.top` property is defined, then you will get an error in the following iobroker-out node (key or topic does not exist) - if you append a debug node to the subflow node you will get the message: \n> Please define msg.top as root for the object structure \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls in keine Angabe in msg.top definiert wurde, wird man in der darauffolgenden iobroker-out node den Fehler erhalten, dass kein key oder topic definiert ist. Falls eine debug Node an den Subflow angehängt wirde erhält man folgende Ausgabe:\n> Please define msg.top as root for the object structure ",
                                    "category": "parser",
                                    "in": [
                                        {
                                            "x": 60,
                                            "y": 160,
                                            "wires": [
                                                {
                                                    "id": "94876630.f71748"
                                                }
                                            ]
                                        }
                                    ],
                                    "out": [
                                        {
                                            "x": 2280,
                                            "y": 260,
                                            "wires": [
                                                {
                                                    "id": "74b0b536.02371c",
                                                    "port": 0
                                                },
                                                {
                                                    "id": "ab9b1e85.eea2a",
                                                    "port": 0
                                                }
                                            ]
                                        }
                                    ],
                                    "env": [],
                                    "meta": {},
                                    "color": "#E2D96E",
                                    "icon": "node-red/batch.svg"
                                },
                                {
                                    "id": "eea737e7.7e8fb8",
                                    "type": "split",
                                    "z": "c3403a60.92fbb8",
                                    "name": "split object",
                                    "splt": "\\n",
                                    "spltType": "str",
                                    "arraySplt": 1,
                                    "arraySpltType": "len",
                                    "stream": false,
                                    "addname": "key",
                                    "x": 1170,
                                    "y": 160,
                                    "wires": [
                                        [
                                            "dc473616.c2b508"
                                        ]
                                    ]
                                },
                                {
                                    "id": "dc473616.c2b508",
                                    "type": "change",
                                    "z": "c3403a60.92fbb8",
                                    "name": "add key to topic",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "stateName",
                                            "pt": "msg",
                                            "to": "key",
                                            "tot": "msg"
                                        },
                                        {
                                            "t": "set",
                                            "p": "topic",
                                            "pt": "msg",
                                            "to": "topic  & '.' & key",
                                            "tot": "jsonata"
                                        },
                                        {
                                            "t": "change",
                                            "p": "topic",
                                            "pt": "msg",
                                            "from": " ",
                                            "fromt": "str",
                                            "to": "_",
                                            "tot": "str"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 1360,
                                    "y": 160,
                                    "wires": [
                                        [
                                            "78697695.9a72c8"
                                        ]
                                    ]
                                },
                                {
                                    "id": "78697695.9a72c8",
                                    "type": "switch",
                                    "z": "c3403a60.92fbb8",
                                    "name": "is type?",
                                    "property": "payload",
                                    "propertyType": "msg",
                                    "rules": [
                                        {
                                            "t": "istype",
                                            "v": "array",
                                            "vt": "array"
                                        },
                                        {
                                            "t": "istype",
                                            "v": "object",
                                            "vt": "object"
                                        },
                                        {
                                            "t": "else"
                                        }
                                    ],
                                    "checkall": "true",
                                    "repair": false,
                                    "outputs": 3,
                                    "x": 1540,
                                    "y": 160,
                                    "wires": [
                                        [
                                            "d839cef8.577f1"
                                        ],
                                        [
                                            "eea737e7.7e8fb8"
                                        ],
                                        [
                                            "bdfdae99.f4d9d"
                                        ]
                                    ]
                                },
                                {
                                    "id": "d839cef8.577f1",
                                    "type": "split",
                                    "z": "c3403a60.92fbb8",
                                    "name": "split array",
                                    "splt": "\\n",
                                    "spltType": "str",
                                    "arraySplt": 1,
                                    "arraySpltType": "len",
                                    "stream": false,
                                    "addname": "",
                                    "x": 580,
                                    "y": 280,
                                    "wires": [
                                        [
                                            "36327f2d.8efc3"
                                        ]
                                    ]
                                },
                                {
                                    "id": "36327f2d.8efc3",
                                    "type": "change",
                                    "z": "c3403a60.92fbb8",
                                    "name": "add index to topic",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "topic",
                                            "pt": "msg",
                                            "to": "topic  & '.' & parts.index",
                                            "tot": "jsonata"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 770,
                                    "y": 280,
                                    "wires": [
                                        [
                                            "d8f58d9b.b6a1"
                                        ]
                                    ]
                                },
                                {
                                    "id": "74b0b536.02371c",
                                    "type": "change",
                                    "z": "c3403a60.92fbb8",
                                    "name": "finalize msg.topic",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "top",
                                            "pt": "msg",
                                            "to": "'0_userdata.0.' & top",
                                            "tot": "jsonata"
                                        },
                                        {
                                            "t": "set",
                                            "p": "topic",
                                            "pt": "msg",
                                            "to": "top & topic",
                                            "tot": "jsonata"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 1970,
                                    "y": 240,
                                    "wires": [
                                        []
                                    ]
                                },
                                {
                                    "id": "4cdee7cb.910c38",
                                    "type": "switch",
                                    "z": "c3403a60.92fbb8",
                                    "name": "is type?",
                                    "property": "payload",
                                    "propertyType": "msg",
                                    "rules": [
                                        {
                                            "t": "istype",
                                            "v": "json",
                                            "vt": "json"
                                        },
                                        {
                                            "t": "istype",
                                            "v": "object",
                                            "vt": "object"
                                        },
                                        {
                                            "t": "istype",
                                            "v": "array",
                                            "vt": "array"
                                        },
                                        {
                                            "t": "else"
                                        }
                                    ],
                                    "checkall": "true",
                                    "repair": false,
                                    "outputs": 4,
                                    "x": 400,
                                    "y": 160,
                                    "wires": [
                                        [
                                            "c1c41535.17d3b8"
                                        ],
                                        [
                                            "eea737e7.7e8fb8"
                                        ],
                                        [
                                            "d839cef8.577f1"
                                        ],
                                        [
                                            "d8f58d9b.b6a1"
                                        ]
                                    ]
                                },
                                {
                                    "id": "c1c41535.17d3b8",
                                    "type": "json",
                                    "z": "c3403a60.92fbb8",
                                    "name": "",
                                    "property": "payload",
                                    "action": "",
                                    "pretty": false,
                                    "x": 570,
                                    "y": 120,
                                    "wires": [
                                        [
                                            "3ccd67db.375058"
                                        ]
                                    ]
                                },
                                {
                                    "id": "bdfdae99.f4d9d",
                                    "type": "switch",
                                    "z": "c3403a60.92fbb8",
                                    "name": "is msg.top != null",
                                    "property": "top",
                                    "propertyType": "msg",
                                    "rules": [
                                        {
                                            "t": "nnull"
                                        },
                                        {
                                            "t": "null"
                                        }
                                    ],
                                    "checkall": "true",
                                    "repair": false,
                                    "outputs": 2,
                                    "x": 1750,
                                    "y": 280,
                                    "wires": [
                                        [
                                            "74b0b536.02371c"
                                        ],
                                        [
                                            "7ba7dc21.fdb214"
                                        ]
                                    ]
                                },
                                {
                                    "id": "7ba7dc21.fdb214",
                                    "type": "change",
                                    "z": "c3403a60.92fbb8",
                                    "name": "payload = warning",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "payload",
                                            "pt": "msg",
                                            "to": "Please define msg.top as root for the object structure",
                                            "tot": "str"
                                        },
                                        {
                                            "t": "delete",
                                            "p": "topic",
                                            "pt": "msg"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 1970,
                                    "y": 300,
                                    "wires": [
                                        [
                                            "ab9b1e85.eea2a"
                                        ]
                                    ]
                                },
                                {
                                    "id": "ab9b1e85.eea2a",
                                    "type": "rbe",
                                    "z": "c3403a60.92fbb8",
                                    "name": "",
                                    "func": "rbe",
                                    "gap": "",
                                    "start": "",
                                    "inout": "out",
                                    "septopics": true,
                                    "property": "payload",
                                    "x": 2130,
                                    "y": 300,
                                    "wires": [
                                        []
                                    ]
                                },
                                {
                                    "id": "94876630.f71748",
                                    "type": "change",
                                    "z": "c3403a60.92fbb8",
                                    "name": "",
                                    "rules": [
                                        {
                                            "t": "delete",
                                            "p": "topic",
                                            "pt": "msg"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 210,
                                    "y": 160,
                                    "wires": [
                                        [
                                            "4cdee7cb.910c38"
                                        ]
                                    ]
                                },
                                {
                                    "id": "3ccd67db.375058",
                                    "type": "switch",
                                    "z": "c3403a60.92fbb8",
                                    "name": "is array?",
                                    "property": "payload",
                                    "propertyType": "msg",
                                    "rules": [
                                        {
                                            "t": "istype",
                                            "v": "array",
                                            "vt": "array"
                                        },
                                        {
                                            "t": "else"
                                        }
                                    ],
                                    "checkall": "true",
                                    "repair": false,
                                    "outputs": 2,
                                    "x": 700,
                                    "y": 120,
                                    "wires": [
                                        [
                                            "d839cef8.577f1"
                                        ],
                                        [
                                            "eea737e7.7e8fb8"
                                        ]
                                    ]
                                },
                                {
                                    "id": "80dde279.c28ec",
                                    "type": "comment",
                                    "z": "c3403a60.92fbb8",
                                    "name": "Array",
                                    "info": "",
                                    "x": 400,
                                    "y": 280,
                                    "wires": []
                                },
                                {
                                    "id": "95ee816e.68a16",
                                    "type": "comment",
                                    "z": "c3403a60.92fbb8",
                                    "name": "object",
                                    "info": "",
                                    "x": 1140,
                                    "y": 100,
                                    "wires": []
                                },
                                {
                                    "id": "d8f58d9b.b6a1",
                                    "type": "switch",
                                    "z": "c3403a60.92fbb8",
                                    "name": "is type?",
                                    "property": "payload",
                                    "propertyType": "msg",
                                    "rules": [
                                        {
                                            "t": "istype",
                                            "v": "object",
                                            "vt": "object"
                                        },
                                        {
                                            "t": "istype",
                                            "v": "array",
                                            "vt": "array"
                                        },
                                        {
                                            "t": "else"
                                        }
                                    ],
                                    "checkall": "true",
                                    "repair": false,
                                    "outputs": 3,
                                    "x": 960,
                                    "y": 280,
                                    "wires": [
                                        [
                                            "eea737e7.7e8fb8"
                                        ],
                                        [
                                            "d839cef8.577f1"
                                        ],
                                        [
                                            "bdfdae99.f4d9d"
                                        ]
                                    ]
                                },
                                {
                                    "id": "61325de1.acf564",
                                    "type": "json",
                                    "z": "169f5b00.a13415",
                                    "name": "",
                                    "property": "payload",
                                    "action": "",
                                    "pretty": false,
                                    "x": 480,
                                    "y": 220,
                                    "wires": [
                                        [
                                            "cf5f91d.7edbb7"
                                        ]
                                    ]
                                },
                                {
                                    "id": "cf5f91d.7edbb7",
                                    "type": "change",
                                    "z": "169f5b00.a13415",
                                    "name": "",
                                    "rules": [
                                        {
                                            "t": "set",
                                            "p": "top",
                                            "pt": "msg",
                                            "to": "shellies.kueche.spuelmaschine",
                                            "tot": "str"
                                        }
                                    ],
                                    "action": "",
                                    "property": "",
                                    "from": "",
                                    "to": "",
                                    "reg": false,
                                    "x": 670,
                                    "y": 220,
                                    "wires": [
                                        [
                                            "f873a8e3.a764f8"
                                        ]
                                    ]
                                },
                                {
                                    "id": "f873a8e3.a764f8",
                                    "type": "subflow:c3403a60.92fbb8",
                                    "z": "169f5b00.a13415",
                                    "name": "",
                                    "x": 910,
                                    "y": 220,
                                    "wires": [
                                        [
                                            "a85e782b.a06c68"
                                        ]
                                    ]
                                },
                                {
                                    "id": "a85e782b.a06c68",
                                    "type": "ioBroker out",
                                    "z": "169f5b00.a13415",
                                    "name": "",
                                    "topic": "",
                                    "ack": "true",
                                    "autoCreate": "true",
                                    "stateName": "",
                                    "role": "",
                                    "payloadType": "",
                                    "readonly": "false",
                                    "stateUnit": "",
                                    "stateMin": "",
                                    "stateMax": "",
                                    "x": 1140,
                                    "y": 220,
                                    "wires": []
                                }
                            ]
                            

                            Standardmässig werden die Datenpunkte nur als Read-Only Datenpunkte angelegt - macht eigentlich auch Sinn, da man damit ja nichts steuert, sondern Informationen liest. Willst Du das alle Datenpunkte, die von dem Flow angelegt werden beschreibbar sind, musst Du das in der iobroker-out Node angeben:

                            a3e37ac9-e4fd-4cba-a3f5-369fc75d2f6b-image.png

                            Ausserdem bekommt man glaub sogar Warnungen im LOG wenn man ReadOnly Felder beschreiben will. Ganz blicke ich das auch nicht - alles Admin5 Änderungen.
                            EDIT2: Na anscheinend kann man die Datenpunkte doch ReadOnly lassen und sie werden es gibt keine Fehlermeldungen wenn der Adapter die Datenpunkte beschreibt. Vielleicht wurde da was geändert im Admin5.

                            Und wie gesagt in der Hilfe zu der Subflow Node habe ich die Funktionsweise nochmals kurz beschrieben:

                            b17036cc-33ce-4f05-917e-d419d01a15cb-image.png

                            Die Bäume werden also als msg.top Datenpunkte ALLE unter 0_userdata.0 angelegt. Wenn Du diese selbst wieder als mqtt topics über die mqtt-out Nodes beschreiben willst, musst halt über eine Change Node die topics wieder anpassen!

                            Wenn Du nun natürlich mehrere Geräte unter userdata.0 aufgesplittet haben willst brauchst nur den vorderen Teil zu ändern, der hintere kann gleich bleiben.

                            4a0fcd38-e76e-49a2-a07a-1ca3878a55be-image.png

                            Zur Veranschaulichung habe ich mal die zugehörigen Nodes gruppiert und beschriftet:

                            242984df-8170-4cb8-b14f-b36c06112c84-image.png

                            Man kann aber auch alle 5 Nodes gruppieren und pro Device machen - macht wahrscheinlich keinen Unterschied.

                            EDIT: Sorry hatte die Code-Tags beim Flow vergessen, habe ich nun nachgetragen, damit man das leichter kopieren kann. Ich hasse das selbst, wenn man da ewig scrollen muss anstelle "Select All" und dann kopieren. 😉

                            1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @dos1973 last edited by

                              @dos1973 Ach und ändere doch mal die Überschrift vom "Mqqt" in "Mqtt" - ansonsten findet das niemand und schaut grauslig aus. 😉

                              D 1 Reply Last reply Reply Quote 0
                              • D
                                dos1973 @mickym last edited by dos1973

                                @mickym sagte in Mqtt best practice:

                                @dos1973 Ach und ändere doch mal die Überschrift vom "Mqqt" in "Mqtt" - ansonsten findet das niemand und schaut grauslig aus.

                                habe ich gemacht.

                                und ich habe auch die ganzen Infos reinbekommen. Schon toll, wie schnell und einfach.
                                Bildschirmfoto 2021-09-23 um 16.27.08.png

                                ok, gebe zu, dass ich momentan noch nicht alles verstehe - sondern nur nachbaue. Aber beeindruckt mich.

                                aber ich muss den DP (mqtt.0.shellies.command) aktiv triggern über ein cronjob z.b alle 30 Sekunden damit die Werte aktualisiert werden?

                                mit dem Wert "update" und "announce"

                                richtig?

                                Bildschirmfoto 2021-09-23 um 16.41.58.png

                                mickym 2 Replies Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @dos1973 last edited by mickym

                                  @dos1973 Nein das würde ich auf keinen Fall machen. Die wichtigsten Werte wie Schaltzustände und Verbräuche und Temperaturen werden zeitnah aktualisiert.

                                  Das ist sinnloser Netzverkehr und belastet den ioBroker und die Shellies unnötig.

                                  Ich würde das announce Kommando allenfalls als eine Art Refresh Button ansehen, das man mal auf Bedarf drückt. Alles wichtige aktualisiert sich on demand und selbstständig. Die Intervalle kannst Du über die mqtt Parameter im Shelly einstellen.

                                  Im Prinzip gibt es neben den Schaltzuständen also relays, lights, noch den Stromverbrauch zu überprüfen und den announce Datenpunkt (enthält Benachrichtigung über FW Updates). Damit ist eigentlich das wichtigste abgedeckt.

                                  Ansonsten würde ich den Info DP eben nur auf Bedarf holen oder wenn Du unbedingt willst, in wesentlich längeren Zeitabständen (alle Stunde oder so).

                                  1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @dos1973 last edited by

                                    @dos1973
                                    Noch eine Anmerkung meinerseits. Ich persönlich nutze die Aufspaltung des JSON strings in einzelne Objekte nicht, da weder der Informationsgehalt steigt und Du nun aus 1 Objekt 50 Objekte machst. Gut es wird übersichtlicher dargestellt aber auch der Zugriff auf Eigenschaften eines JavaScript Objekts ist keine Hexerei und spart Ressourcen.

                                    D 1 Reply Last reply Reply Quote 0
                                    • D
                                      dos1973 @mickym last edited by

                                      @mickym

                                      ja, ich hab auch recht schnell gemerkt, ich brauch die Infos eigentlich nicht.
                                      Ich hätte gerne einezelne Werte daraus, IP, WLAN, RSSI etc. ein paar ausgewählte.

                                      ich habe eben den Shelly Motion eingebunden, bei dem muss ich den Node-Red Ansatz fahren...

                                      der bietet nur diese DP an.
                                      Bildschirmfoto 2021-09-23 um 20.45.35.png

                                      im Status sind dann die Werte die ich für die Logik brauche, insbesondere "motion" um die Beleuchtung ein/ auszuschalten.

                                      Bildschirmfoto 2021-09-23 um 20.46.23.png

                                      was mir aber heute extrem auffällt, diverse Adapter starten immer wieder neu, Zigbee, Harmony... auch der Shelly Adapter. Kann das daran liegen dass dort noch hinreferenziert wird, aber eben zT noch fehlerhaft...?

                                      mickym 1 Reply Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @dos1973 last edited by mickym

                                        @dos1973 Grundsätzlich kannst Du die Parameter auch direkt abgreifen.

                                        Wenn Du aus dem status was brauchst - dann bekommst mit der json Node ein Javascript objekt und kannst dann über payload.eigenschaft direkt darauf zugreifen. Aber egal - ich hab den Flow ja gebastelt, wenn man das in einzelnen Datenpunkten haben will.

                                        Shelly Adapter kenn ich nicht, Harmony oder Zigbee kommunizieren ja gar nicht über mqtt - das hat meines Erachtens überhaupt nichts mit Deinen Umstellungen zu tun.

                                        Wenn Du einzelne Werte brauchst kannst ja die Objekte selbst rauslösen bevor Du sie in die Subflow Node speist.

                                        76468f60-7142-4412-ac44-54b56ef5d205-image.png

                                        67d9f775-d6ac-4e94-83a2-36d95b945727-image.png

                                        Aber wie gesagt auf einzelne Werte greifst einfach nach dem json Node direkt zugreifen

                                        019052cf-058c-4711-a89c-197404345d0c-image.png

                                        D 1 Reply Last reply Reply Quote 0
                                        • D
                                          dos1973 @mickym last edited by

                                          @mickym

                                          ich dachte ...ich änder mal "schnell" auf Mosquitto 😉
                                          das ganze ist ganz schön in Arbeit ausgeartet... und ich bin noch nicht fertig.

                                          Aber ich bin damit echt zufrieden.👍

                                          D 1 Reply Last reply Reply Quote 0
                                          • D
                                            dos1973 @dos1973 last edited by

                                            @mickym

                                            jetzt habe ich doch ein mittelschwere Problem in meiner VIS.

                                            Bildschirmfoto 2021-09-23 um 23.38.13.png

                                            Ich benutze den DP zum schalten

                                            mqtt.0.shellies.Küche_Lichtschalter.relay.0.command
                                            

                                            aber die Werte Syncen sich nicht zueinander

                                            mqtt.0.shellies.Küche_Lichtschalter.relay.0
                                            

                                            d.h, wenn jemand das Licht am Schalter ausmacht, wird mein State nicht aktualisiert... das wäre für mich ein NoGo.

                                            irgendeine Idee?

                                            mickym 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            647
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            mosquitto mqtt shellys
                                            6
                                            136
                                            9942
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo