NEWS
Array mit Objekten in iOBroker anlegen
-
@hackypaddy Hast Du denn zu der Node keinen Beispielflow gefunden mit dem Du einzelne Partitionen abfragen kannst?
-
Nein, es gibt zwar ein Beispiel. Aber das hat nichts damit zu tun.
Hier der Beispiel-Flow vom Entwickler.[ { "id": "9c44cf3001e5d6f2", "type": "tab", "label": "Secvest", "disabled": false, "info": "", "env": [] }, { "id": "fb9b7833467bb649", "type": "inject", "z": "9c44cf3001e5d6f2", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "unset", "payloadType": "str", "x": 110, "y": 280, "wires": [ [ "139564743bb8b131" ] ] }, { "id": "90e82662da299ce2", "type": "Secvest Status", "z": "9c44cf3001e5d6f2", "name": "", "server": "67c1d8818c300c5c", "partition": "2", "command": "state", "x": 320, "y": 140, "wires": [ [ "4619a3617e5b649b" ] ] }, { "id": "139564743bb8b131", "type": "Secvest Command", "z": "9c44cf3001e5d6f2", "name": "", "server": "67c1d8818c300c5c", "partition": "3", "command": "payload", "x": 290, "y": 280, "wires": [ [ "9d1e4f9edf40cbab" ] ] }, { "id": "4619a3617e5b649b", "type": "debug", "z": "9c44cf3001e5d6f2", "name": "debug 6", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 520, "y": 140, "wires": [] }, { "id": "9d1e4f9edf40cbab", "type": "debug", "z": "9c44cf3001e5d6f2", "name": "debug 7", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 500, "y": 280, "wires": [] }, { "id": "b23c678c622af7f7", "type": "inject", "z": "9c44cf3001e5d6f2", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 360, "wires": [ [ "948e6cf133e3cab4" ] ] }, { "id": "948e6cf133e3cab4", "type": "Secvest Command", "z": "9c44cf3001e5d6f2", "name": "", "server": "67c1d8818c300c5c", "partition": "3", "command": "unset", "x": 310, "y": 360, "wires": [ [ "9b0f5d90ba26630f" ] ] }, { "id": "2e4ef7561e93f3a1", "type": "comment", "z": "9c44cf3001e5d6f2", "name": "Ex. : Get state of Partition 2", "info": "", "x": 180, "y": 80, "wires": [] }, { "id": "2e597cdec7162587", "type": "comment", "z": "9c44cf3001e5d6f2", "name": "Ex. : 2 ways to unset Partition 3", "info": "", "x": 190, "y": 220, "wires": [] }, { "id": "52237c57a097f979", "type": "inject", "z": "9c44cf3001e5d6f2", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 140, "wires": [ [ "90e82662da299ce2" ] ] }, { "id": "9b0f5d90ba26630f", "type": "debug", "z": "9c44cf3001e5d6f2", "name": "debug 9", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 500, "y": 360, "wires": [] }, { "id": "22acdbcecc7ddf20", "type": "comment", "z": "9c44cf3001e5d6f2", "name": "Ex. : partset Partition 1 via MQTT", "info": "", "x": 190, "y": 440, "wires": [] }, { "id": "441a1c2dbbc62730", "type": "mqtt in", "z": "9c44cf3001e5d6f2", "name": "", "topic": "/secvest/cmd/", "qos": "2", "datatype": "auto-detect", "broker": "", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 210, "y": 560, "wires": [ [ "fe208e5ff91d6bd4" ] ] }, { "id": "fe208e5ff91d6bd4", "type": "Secvest Command", "z": "9c44cf3001e5d6f2", "name": "", "server": "67c1d8818c300c5c", "partition": "1", "command": "payload", "x": 430, "y": 560, "wires": [ [] ] }, { "id": "8894a1b6066e0132", "type": "mqtt out", "z": "9c44cf3001e5d6f2", "name": "", "topic": "/secvest/cmd", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "", "x": 340, "y": 500, "wires": [] }, { "id": "b0c6544ed8dc8152", "type": "inject", "z": "9c44cf3001e5d6f2", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "partset", "payloadType": "str", "x": 110, "y": 500, "wires": [ [ "8894a1b6066e0132" ] ] }, { "id": "67c1d8818c300c5c", "type": "ABUS Secvest", "servername": "Secvest_Example", "host": "192.168.1.100", "port": "4433", "user": "Admin", "password": "1234" } ]
-
Lassen wir das mit dem Error sonst erstmal weg. Würde dann folgendes funktionieren?:
Globale Variable = counter.secvest
Der Flow startet, die erste Abfrage wird über einen Timestamp initialisiert, dann läuft die Abfrage durch, dann zählt der Counter eins hoch. Bei der nächsten Abfrage wird geprüft, ob Counter bei 1, dann 2. Abfrage, wieder Counter einen hoch zählen. usw.
Bis alle 4 Bereiche durch sind und dann wieder bei 1 einfangen. und das immer in einer schleife.
Dann schenken wir uns das erstmal mit dem Error-Handling. Wäre zwar ein nice to have, aber wenn das so ausufert, dann ist das blödsinn.
-
Na ja in der Hilfe steht auch nichts - was hast Du bisher gemacht, wenn Du alle 4 Nodes einzeln abgefragt hast? und das nicht über die payload gemacht hast? Alle 4 Partitionen in die Node eingetragen und nun wolltest Du 4 Nodes machen und dann damit jede Partition einzeln abfragen?
Wenn ich die Beschreibung des Textes lese kann man das ja alles als payload schicken. Ich habe diese Node nicht, aber es sieht so aus, wenn Du den Status abfrägst, dass das Kommando "state" ist.
{ "id": "90e82662da299ce2", "type": "Secvest Status", "z": "9c44cf3001e5d6f2", "name": "", "server": "67c1d8818c300c5c", "partition": "2", "command": "state" .....
Aus der Beschreibung der Node (s. Screenshot) steht.
You can also set the desired partition (1/2/3 or 4) as msg.payload.
Du könntest also einfach mal in der Inject Node eine payload schicken mit der partition und dies in der Node leer lassen.
Also:
hier zum Import:
[ { "id": "30a75b4cea8b0f90", "type": "inject", "z": "517cd16e4d7e6ae4", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"partition\":\"3\"}", "payloadType": "json", "x": 360, "y": 1240, "wires": [ [] ] } ]
Wichtig ist, dass es als Objekt schickt (s. Pfeil)
Eventuell auch die 3 oder Anführungszeichen sondern als Zahl
-
@hackypaddy Nein wir müssen uns das nicht schenken - lass uns das erst mal eins nach dem anderen machen. Ich stelle Fragen und überlege mir was ich für die beste Lösung halte. Du kannst es dann ja immer noch ändern. Jetzt lass mich Dir erst mal den anderen Vorschlag machen und Dir die Vorteile erklären, wenn Du die Struktur beläst so wie sie rauskommt.
Und nochmal die Frage??? - hast Du alle 4 Partitionen bisher aufeinmal abgefragt und Du willst nur die fehlerhaften Aussortieren? Falls das so ist und Du nur die fehlerhaften wegschmeißen kannst, dann ist das easy. Wollen wir deshalb mit dem einfachsten anfangen?
-
@hackypaddy sagte in Array mit Objekten in iOBroker anlegen:
BW Fen. R.
So also erst nochmal zu meinem Alternativvorschlag und dann im nächsten Post welche Vorteile das hat - daneben dass Du auch die Originalnamen behalten kannst.
-
Ok.
Genau, bisher habe ich die 4 Partitionen gleichzeitig abgefragt. Damit kommt die Anlage aber nicht klar, dass ist zu viel auf einmal.
Deshalb sollen die Bereiche sequenziell nacheinander abgefragt werden. Als Auslöser der nächsten Abfrage würde ich mir den node.status "OK" wünschen.
Wenn ein Error ausgegeben wird, ist das nicht wichtig für mich. Bei der nächsten Anfrage wird er nicht mehr da sein. D.h. auch bei einem Error kann die Abfragesequenz fortgesetzt werden.
Ganz toll wäre es natürlich, wenn er bei einem Error die Abfrage nochmal macht. Aber das ist nicht zwingend notwendig.
-
@hackypaddy Lass Dir erst nochmal die Vorteile meiner Alternativstruktur erklären und dann auch nochmal die Frage, wenn Du alle 4 Partitionen auf einmal abfragst - kommt das nur manchmal vor, dass die Anlage nicht klar kommt und kannst Du dann ggf. auf diese Abfrage verzichten oder geht es grundsätzlich nicht?
Bei meiner Alternativstruktur kannst Du dann nämlich mit Wildcards (nachdem anfänglich erst mal alle Initialisiert wurde) - nur noch auf Änderungen reagieren und alle states auf einmal überwachen:
Da der Datenpunkt mit dem state immer gleich heißt - hast Du so immer den aktuellen Status - der Name wird eigentlich gar nicht gebraucht kannst ihn aber mit einer get-Node ggf. auslesen. Da hier der Name des Datenpunktes ebenfalls konstant ist, ist das hier natürlich von Vorteil
Wie gesagt den Originalnamen brauchst Du nicht. Im oberen Ast - hast Du im Topic ja den Pfad zur Originalquelle. Wenn Du unbedingt den Originalnamen als topic haben willst, dann holst Du ihn Dir via get Node.
Hier der Import
-
Das ist echt ne geile Idee. So baue ich das um.
Wegen der Abfragen: Es gehen maximal 2 zeitgleich. Lieber aber sequenziell hintereinander. Dann kommen die Antworten auch schneller.
4 Abfragen gehen garnicht… bricht ab. Entweder stürzt die Anlage ab oder der Node Server.
-
@hackypaddy sagte in Array mit Objekten in iOBroker anlegen:
Das ist echt ne geile Idee. So baue ich das um.
Wegen der Abfragen: Es gehen maximal 2 zeitgleich. Lieber aber sequenziell hintereinander. Dann kommen die Antworten auch schneller.
4 Abfragen gehen garnicht… bricht ab. Entweder stürzt die Anlage ab oder der Node Server.
Hier noch der Import - um die andere Struktur aufzubauen:
-
@hackypaddy sagte in Array mit Objekten in iOBroker anlegen:
Das ist echt ne geile Idee. So baue ich das um.
Wegen der Abfragen: Es gehen maximal 2 zeitgleich. Lieber aber sequenziell hintereinander. Dann kommen die Antworten auch schneller.
4 Abfragen gehen garnicht… bricht ab. Entweder stürzt die Anlage ab oder der Node Server.
Hast Du mal versucht mit einer payload die einzelnen Partitionen abzufragen, anstatt das in der Node fest zu verdrahten?
-
Ne, weil ich nichts genau weiß wie...
Ich schick Dir gleich mal mein Flow, wie er im Moment aussieht.Dann kannst Du das besser nachvollziehen.
-
Probiere doch mal wie ich gesagt habe die Partition nicht in der Node zu verwenden sondern mit der payload?
hast Du denn das schon versucht: https://forum.iobroker.net/post/1098790
Ich probiere parallel einen Flow zu erstellen, aber Du würdest Dir das Leben viel einfacher machen. Bitte probiere das erst aus.
-
hier mal mein Flow, wie ich ihn gerade verwende. Ziel wäre es, die einzelnen Bereiche nacheinander abzufragen. Erst Bereich 1, dann Bereich 2, usw.
[ { "id": "21ba77d9f363fc5c", "type": "tab", "label": "Secvest", "disabled": false, "info": "", "env": [] }, { "id": "7de9826e28d68b1d", "type": "split", "z": "21ba77d9f363fc5c", "name": "", "splt": "\\n", "spltType": "str", "arraySplt": 1, "arraySpltType": "len", "stream": false, "addname": "topic", "x": 690, "y": 220, "wires": [ [ "7ae37472e7b5ca96" ] ] }, { "id": "7ae37472e7b5ca96", "type": "change", "z": "21ba77d9f363fc5c", "name": "", "rules": [ { "t": "change", "p": "payload.name", "pt": "msg", "from": ".", "fromt": "str", "to": "", "tot": "str" }, { "t": "set", "p": "topic", "pt": "msg", "to": "\"0_userdata.0.Alarm.\" & payload.id & \".\" & payload.name", "tot": "jsonata" }, { "t": "set", "p": "payload", "pt": "msg", "to": "payload.state", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 730, "y": 300, "wires": [ [ "3f9d9626684a6018" ] ] }, { "id": "3f9d9626684a6018", "type": "ioBroker out", "z": "21ba77d9f363fc5c", "name": "", "topic": "", "ack": "true", "autoCreate": "true", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 720, "y": 380, "wires": [] }, { "id": "736b74f1fd7dfdd5", "type": "Secvest Status", "z": "21ba77d9f363fc5c", "name": "Bereich 1", "server": "5dc4b66ee70b8720", "partition": "1", "command": "zones", "x": 400, "y": 140, "wires": [ [ "7de9826e28d68b1d" ] ] }, { "id": "c9f81194989a2d11", "type": "inject", "z": "21ba77d9f363fc5c", "name": "Alle 45 Sek.", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": "1", "topic": "", "payload": "", "payloadType": "date", "x": 130, "y": 100, "wires": [ [ "736b74f1fd7dfdd5", "3149fd696d113580", "427ed92e5fcf9fa0", "a7ae4222d4fc65a0" ] ] }, { "id": "3149fd696d113580", "type": "Secvest Status", "z": "21ba77d9f363fc5c", "name": "Bereich 2", "server": "5dc4b66ee70b8720", "partition": "2", "command": "zones", "x": 420, "y": 200, "wires": [ [ "7de9826e28d68b1d" ] ] }, { "id": "427ed92e5fcf9fa0", "type": "Secvest Status", "z": "21ba77d9f363fc5c", "name": "Bereich 3", "server": "5dc4b66ee70b8720", "partition": "3", "command": "zones", "x": 400, "y": 260, "wires": [ [ "7de9826e28d68b1d" ] ] }, { "id": "a7ae4222d4fc65a0", "type": "Secvest Status", "z": "21ba77d9f363fc5c", "name": "Bereich 4", "server": "5dc4b66ee70b8720", "partition": "4", "command": "zones", "x": 390, "y": 320, "wires": [ [ "7de9826e28d68b1d" ] ] }, { "id": "5dc4b66ee70b8720", "type": "ABUS Secvest", "servername": "Secvest", "host": "192.168.10.121", "port": "4433", "user": "Alert", "password": "xxxx" } ]
-
@hackypaddy Ja trotzdem probiere es bitte -
Nimm einfach eine von den Secvest Nodes - mach dahinter eine Debug Node und schau ob Du mit
einer Inject Node mit einer payload die eine der 3. Partitions enthält abfragst?Wie gesagt es geht auch mit 4 Nodes - aber es ist einfach ÜBERFLÜSSIG, wenn der Entwickler anbietet, dass man mit einer payload die Partitionen einzeln abfragen kann.
-
@hackpaddy
Hast Du es probiert???
-
Ich bin noch dabei, aber so wie es aussieht, funktioniert das nicht...
-
@hackypaddy dann probiere es mal mit den beiden Inject Nodes und schau ob da was rauskommt.
In der Node löscht Du Command und Partition bitte.
-
So nachdem ich von Dir leider keinen Response bekomme, und das eigentlich gehen müsste, habe ich Dir hier nun einen Flow gebastelt - der den Status abfragt und mit dem ich Deine Secvest Nodes simuliert habe
Die Nachricht kommt nur raus, wenn der Status OK ist.
Du musst aber vorher in der Statusermittlung die ID der Nodes in die Switch Node eintragen. Wenn Du das mal durchgespielt hast hier mit diesem Flow - dann wirst Du es auch auf den realen Flow umsetzen können:
Vorerst ist das Thema aber für mich damit erst mal abgeschlossen.
-
Wow, danke.
Ich bin grad unterwegs, deshalb kann ich das nicht so schnell durchtesten...Wenn ich nachher zuhause bin, schau ich mir Deinen Flow mal an und versuche den zu verstehen.
Wahnsinn, vielen Dank für deine Arbeit!