NEWS
JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen
-
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym Okay ich verstehe, quasi ein manuelles anstoßen um Daten zu erhalten, gut zu wissen
Genau, wenn Du also ein Update willst einfach ein get unter dem friendlyName mit {"state": ""} publishen und Du bekommst ein Update.
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@noah3112 Bin erst seit kurzem mit zigbee2mqtt unterwegs. Ich hatte sehr viele Probleme mit dem zigbee Adapter und bin bis jetzt sehr angetan. Allerdingt fehlt die Langzeiterfahrung und was damit alles geht.
Ja da bist Du nicht der Erste. In meinen Augen ist es in diesem Fall sogar ein Vorteil unabhängig von iobroker Updates zu sein.
Ungelogen ich musste jeden Tag mindestens 2 Sensoren wieder anlernen. Unerklärliche Abstürze obwohl keine Änderungen vorgenommen wurden. Ohne Änderungen ist der Adapter wieder gelaufen. Das war nur ein kleiner Einblick der Probleme. Hab lange mit mir gerungen diesen Schritt zu gehen. Bei inzwischen 109 Zigbee Geräten ist es schon ein bissel Arbeit Aber es ist geschafft...zumindest das anlernen.
-
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@noah3112 Bin erst seit kurzem mit zigbee2mqtt unterwegs. Ich hatte sehr viele Probleme mit dem zigbee Adapter und bin bis jetzt sehr angetan. Allerdingt fehlt die Langzeiterfahrung und was damit alles geht.
Etwas was mir sehr positiv aufgefallen ist, gerade bei Lampen, dass Du das Einschaltverhalten steuern kannst. Mit dem Zigbee adapter sind nach Stromausfall immer meine Lampen angegangen. Das kann man zwar mit einem Send-Command irgendwie einstellen, aber das gibt es dort direkt einzustellen:
Stabiltät der Verbindungen ist auch besser und das Anlernen ging auch schneller, obwohl ja "eigentlich" die gleiche Technik dahinter steckt. Aber das ist hier off-topic-. Ausserdem wurde der conbee2 Stick bis vor einigen Monaten nicht offiziell unterstützt wurde, das zigbee2mqtt hat es aber getan und mir war das dann irgendwann zu blöd, dass man keine Hilfe bekommt, weil man halt ein nicht unterstütztes Gerät benutzt.
-
@mickym Ich finde das ganze Handling einfach und intuitiv. Ja ich weiß im Prinzip soll es der Zigbee Adapter nichts anderes sein. Aber das Teil läuft einfach besser. Ich habe auf meinen Proxmox System einen LXC Container nur für zigbee2mqtt laufen. Lies sich super leicht einrichten. Selbst das durchreichen des Sticks war kein Problem.
-
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym Ich finde das ganze Handling einfach und intuitiv. Ja ich weiß im Prinzip soll es der Zigbee Adapter nichts anderes sein. Aber das Teil läuft einfach besser. Ich habe auf meinen Proxmox System einen LXC Container nur für zigbee2mqtt laufen. Lies sich super leicht einrichten. Selbst das durchreichen des Sticks war kein Problem.
Na um wieder zum Thema zurück zu kommen, dann habe ich ja mit dem Aufbohren des Subflows einen richtigen Mehrwert geschaffen.
-
@mickym So ich glaube ich muss mal kurz die Augen zu machen iss schon bissel spät Ich weiß nicht wie oft ich mich schon bei dir bedankt habe. Macht Spaß dich um Hilfe zu bitten. Man wird nicht gleich nieder gemacht wenn man etwas nicht verstanden hat...DANKE und gute Nacht
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym Ich finde das ganze Handling einfach und intuitiv. Ja ich weiß im Prinzip soll es der Zigbee Adapter nichts anderes sein. Aber das Teil läuft einfach besser. Ich habe auf meinen Proxmox System einen LXC Container nur für zigbee2mqtt laufen. Lies sich super leicht einrichten. Selbst das durchreichen des Sticks war kein Problem.
Na um wieder zum Thema zurück zu kommen, dann habe ich ja mit dem Aufbohren des Subflows einen richtigen Mehrwert geschaffen.
Ja das hast du
-
@mickym Ich muss mich nochmal zum Thema melden Diese Fehlermeldung kommt hin und wieder...
Hast du ein Tipp wie ich dem Verursacher auf die Schliche komme?
-
@noah3112 Das ist Deine mqtt-IN Node - da hast wahrscheinlich angegeben, dass es sich um ein analysiertes JSON Objekt handelt.
Du musst das nur wieder auf String und Buffer umstellen - der Subflow wandelt Strings automatisch um. Das Problem mit der Analyse eines analysierten JSON Objektes der mqtt-In Node schmeisst den Fehler bei Analyse des Objekts bei normalen Strings. Ich hab das im Node Red Forum schon moniert und hoffe, dass es in der Version 3 behoben wird. Also einfach wieder auf String und Buffer umstellen.
Falls es Dich interessiert habe ich das Problem hier beschrieben.
https://discourse.nodered.org/t/improvement-of-mqtt-in-nodes/55445/17Falls Du in anderen Situationen trotzdem die Funktion des analysierten JSON Objektes in Deiner mqtt-IN Node nutzen willst und aber auch teilweise Strings hast, dann kann man dass auch mit einer Catch NOde abfangen. In dem Fall kann aber der Subflow damit umgehen, da die erste Switch Node sogar den Typ JSON String kennt.
Grundsätzlich kannst Du dich schon verlassen, welche Node einen Fehler verursacht:
Also die Node "zigbee2mqtt to iobroker"
Also lange Rede - kurzer Sinn - einfach wieder auf Auto-Erkennung (string or buffer) umstellen.
-
@mickym Kaum macht man es richtig und schon ist wieder Ruhe Dankeschön...mal wieder
PS: Woher die Meldung kam war mir klar. Ich dachte nur weil es nicht ständig passierte das einer der eingelesenen Datenpunkte den Fehler verursacht. Okay falsch gedacht und dazu gelernt. -
@noah3112 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
Ich dachte nur weil es nicht ständig passierte das einer der eingelesenen Datenpunkte den Fehler verursacht. Okay falsch
Na ja alle Datenpunkte mit "normalen" Strings haben den Fehler verursacht. Wenn Du diese Diskussion in dem Thread nachverfolgst, sind die Entwickler davon ausgegangen, dass man immer wüßte welche Datentypen eingelesen werden - als entweder JSON Strings oder normale Strings. Das man mit Wildcards ganz unterschiedliche Datentypen einlesen kann, hatten sie nicht auf dem Schirm bzw. wollten bewußt einen Fehler erzeugen, dass ein String eben kein analysierbares JSON Objekt ist. Mit den anderen Datentypen hatten sie damit kein Problem (was ich dann als inkonsequent moniert hatte). Wie Du aber an dem Thread erkennen kannst, haben sie doch ein Einsehen - anscheinend haben sie in der kommenden NodeRed Version 3.0 auch generell einiges an den mqtt-Nodes gemacht. Ich hab da im Moment auch einiges komisches Verhalten entdeckt, was angeblich ab der Version 3 behoben ist. Wir werden dann nur wieder unsere iobroker Entwickler überzeugen müssen, dass sie über den Adapter uns diese Version zur Verfügung in einem absehbaren Zeitraum zur Verfügung stellen. Im Moment ist es immer noch Beta. Aber es kommen Dinge die sehr nützlich sind. So wird man Flows im Editor anhalten kann - um zum Beispiel Probleme zu beheben - ohne das man Node Red komplett neu starten muss. ....
-
Hallo @mickym,
erst mal Danke für den Flow, habe aber noch ein paar Probleme die bestimmt vor dem Bildschirm sitzen zu aller erst mal das sind meine ersten steh und geh versuche mit NodeRed, also bitte nicht schlagen
habe vor nach und nach alles auf Mqtt zu ändern, da sich so einiges angesammelt hat (sonoff, schelly, owtrack,....) evtl.dann im Winter noch Zigbee.
Habe am Wochenende mal einen Test IOBoker aufgesetzt, um mal zu schauen was auf mich zu kommt...
Habe jetzt den Flow mal soweit eingerichtet, läuft auch fast gut. Als Topic habe ich erstmal nur # genommen, macht das sinn? möchte ja im Prinzip erst alles haben, oder mache ich besser für jedes Gerät der jede Gruppe einen eigenen Flow. Bekomme einige Fehler im Log da er alle States als readonly anlegt, das muss ich bestimmt irgendwo ändern, nur wo ?
dann habe ich bei den shellys ein komisches verhalten, da legt er 2 Ordner für jeden shelly an habe mal ein par Bilder angefügt wie es unter Userdata.0 aussieht und im MQTT Adapter. Bestimmt ist da auch nu was falsch eingestellt
Hier erst mal die Bilder
Userdata.0
MQTT Adapter
könntest du bitte etwas licht ins dunkle bringen
Vielen Dank
Gruß Frank -
Hallo erstmal - ist immer bissi schwierig das herauszufinden, das herauszufinden.
Habe jetzt den Flow mal soweit eingerichtet, läuft auch fast gut. Als Topic habe ich erstmal nur # genommen, macht das sinn?
Vielleicht solltest Du auch nicht gleich mit # anfangen, um nicht gleich alles zu laden. Aber das nur am Rande.
Ich gehe mal davon aus, dass Du einen mit # das Subscribe Pattern des mqtt Adapters mit einem externen Broker meinst? Oder nutzt Du die mqtt-Nodes ...
Bekomme einige Fehler im Log da er alle States als readonly anlegt, das muss ich bestimmt irgendwo ändern, nur wo ?
Nun das machst Du nur in der iobroker-Out Node - hat mit dem Flow selbst nichts zu tun.
Einfach da fix eintragen. - Ich hätte das zwar auch in dem Flow machen können, aber so ist man ggf. flexibler:dann habe ich bei den shellys ein komisches verhalten, da legt er 2 Ordner für jeden shelly an habe mal ein par Bilder angefügt wie es unter Userdata.0 aussieht und im MQTT Adapter.
Ich hab den Flow überarbeitet, damit sollte der Fehler nicht mehr auftreten. Bitte die Node aus dem nachfolgenden Post importieren und den Subflow wie beschrieben ersetzen.
@frank579 - also vielen Dank - für das Beschreiben des Bugs - das mit dem 2. Ordner sollte nicht mehr auftreten. So wird der Flow immer besser. - Ich empfehle Dir nochmal den ganzen Objektbaum unter 0_userdata.0 zu löschen, der von dem Flow angelegt wurde und neu zu erstellen - auch wegen den Schreibrechten - ich werde solche Einstellungen aber nicht in dem Flow festlegen, so dass man selbst entscheiden kann über die iobroker-Out Node.
-
@mickym So ich habe es nun selbst getestet und die Änderung durchgeführt.
Hier ist nun eine neue Version des Subflows:
Für alle die, die Node bereits benutzen - wie folgt vorgehen.
- Den Code normal in die Zwischenablage kopieren und dann importieren.
- Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.
- Anschließend braucht man nur den Subflow ersetzen.
- Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym So ich habe es nun selbst getestet und die Änderung durchgeführt.
Hier ist nun eine neue Version des Subflows:Wow vielen Dank, sorry war gestern nochmal unterwegs, habs gerade mal schnell getestet sieht auf den ersten Blick sehr gut aus, Danke
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
Ich gehe mal davon aus, dass Du einen mit # das Subscribe Pattern des mqtt Adapters mit einem externen Broker meinst? Oder nutzt Du die mqtt-Nodes ...
Ja genau habe einen Mosquitto server laufen, da laufen aktuell aber erst mal zum testen nur die drei Geräte.
Aber hier komme ich jetzt erst mal weiter die Json zu zerlegen und ich alle Infos schon mal in eigenen Datenpunkten habe.
Muss jetzt mal schauen wie ich das alles umsetze, auch nachher mit der Ansteuerung der Datenpunkte. -
Hallo @mickym,
bin endlich mal dazu gekommen hier weiter zu machen, mit Tasmota funktioniert es seit damals einwandfrei.
Jetzt habe ich gerade mal versucht das gleiche mit meinem Shelly 3EM zu testen, da wirft er mir aber das log voll für jeden datenpunkt des 3EM.node-red.0 2022-11-01 11:35:37.209 error The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." node-red.0 2022-11-01 11:35:37.209 error Error: The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." at Utils.validateId (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/utils.js:148:23) at Adapter.setForeignState (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:6030:23) at /opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2116:16 at new Promise (<anonymous>) at Adapter.setForeignStateAsync (/opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2115:16) at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.node-red/nodes/ioBroker.js:252:59) node-red.0 2022-11-01 11:35:37.209 error unhandled promise rejection: The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." node-red.0 2022-11-01 11:35:37.209 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
aus der debug node:
1.11.2022, 13:01:42node: debug 1 0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.2.power. : msg.payload : string[5] "47.54"
der "." ist also wirklich Zuviel wie bekomme ich den weg?
Gruß Frank
-
@frank579 Kannst Du mal den JSON des kompletten Datenpunktes posten und hier in CodeTags einbetten?
-
@mickym
sorry lag an mir hatte das ganze Topic drin wenn ich nur den /Info nehme klappte es bei den anderen ist es ja auch kein JSONTrotzdem danke
-
@frank579 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym
sorry lag an mir hatte das ganze Topic drin wenn ich nur den /Info nehme klappte es bei den anderen ist es ja auch kein JSONTrotzdem danke
Hmm aber eigentlich darf es gar keine topics geben, die mit . enden. Was meinst Du mit ganzem topic?