@ticaki Danke - das hilft mir.
NEWS
Latest posts made by alexkl
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@homoran Danke für die Rückmeldung! Immerhin das Feedback, das auf mein eigentliches Anliegen, die Doku, eingeht. (Ich habe mein Problem ja gelöst, siehe mein allererstes Posting.) Ich habe meine unschöne Erfahrung mit der letztlich fruchtlosen Sucherei berichtet und denke Andere sollten bessere Erfahrungen machen. Jeder der mit SW zu tun hat, weiß, dass Doku das Problem ist. Ich denke der vorgeschlagene Ort in der Doku wäre ok, zumindest um dort weitere Hinweise zu bekommen. Aber, ich bin ioBroker zum ersten mal vor zwei Wochen begegnet. welche Kompetenz sollte ich haben, wo was am besten wie dokumentiert wird?
Ich glaube mqtt ist wichtig - und muss natürlich nicht in ioBroker erklärt werden, wohl aber, wie man in ioBroker damit umgeht. Gleiches gilt für den User-Namensraum. Meiner Meinung reicht jeweils ein Satz, von jemand, der sich damit auskennt. Tu ich nicht.
Aber ich wüsste ich immer noch gerne was 'web config' ist (darauf nimmt das readme von sonoff auf github Bezug), damit ich mein Zeug konfigurieren kann.
Ansonsten: ich finde ioBroker richtig gut. Und ich danke der community! Alex
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
- In welchen FAQ? Ich kann nur von meiner Sucherei berichten und meinen Schlussfolgerungen berichten. Ich denke:
https://www.iobroker.net/#de/documentation/basics/README.md dort unter ioBroker Grundlagen > Software. Dort unbedingt den Hinweis, dass es einen User-Namespace gibt, was der bedeutet, welche Aufgaben der hat, wie man ihn verwendet, etc. (und Verweise auf Details, Beispiele etc.).
Am besten aber, setzt man jemand vor ioBroker, der keine Angst vorm keyboard hat, der weiß was mqtt ist und beobachtet ihn beim Suchen. Im nachhinein können sich dei Erfahrenen nicht mehr vorstellen, wie's ist, wenn eine Materie neu ist. - Ja, der sonoff Adapter, der wär's wohl gewesen, aber kein Beispiel gefunden, auch nicht 'web config'. Keine Ahnung was das ist.
- 'Gefühlte hundert Threads' ... that's the problem. Weil keine Doku. Also hunderte, die sich das zusammenreimen mussten - wie ich. Das ist doch der eindeutigste Hinweis darauf, dass Doku fehlt.
- und, ich weiß ja wirklich nicht ob's stimmt, aber ich glaube mqtt ist was ganz Fundamentales...
Vielen Dank! Ist übrigens die erste Resonanz, die mE das eigentliche Problem adressiert (wie man so schön sagt).
- In welchen FAQ? Ich kann nur von meiner Sucherei berichten und meinen Schlussfolgerungen berichten. Ich denke:
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@codierknecht Schade, schade dass ich vor zwei Wochen diese Information nicht gefunden habe! Gibt es denn irgendwo ein Beispiel, wie man den sonoff Adapter einbindet, eine Anleitung, ein Beispiel? Auf link text war ich vor zwei Wochen schon, aber bin wie gesagt daran gescheitert, zu verstehen, was 'In the web config ...' bedeutet. Und ich habe wie in meinem ersten Post schon geschrieben, lange gebraucht, um zu verstehen, dass die original-Datenpunkte (sollte es so heißen?) erst in den User-Namespace (sollte es so heißen) kopiert werden müssen etc., usw. Danke jedenfalls.
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@mickym Pardon, ich habe mich missverständlich ausgedrückt: ich hatte Deinen Flow damals nicht gefunden. Jetzt natürlich schon - und chapeau wieviel Arbeit und Fachwissen da drin steckt! Aber ich habe ihn vor zwei Wochen nicht gefunden. Probier mal in der Suche 'mqtt JSON', es kommt brutal viel, was man durcharbeiten muss. Ich finde nach wie vor, in den FAQ ist eine Art Grundsatzartikel nötig. (Es stimmt auch: ich mag nodered nicht, ebensowenig js, Java. Ich habe mit FORTRAN angefangen, dann Pascal, Assembler, Algol, PHP, ABAP usw, inzwischen bin ich noch einigermaßen vertraut mit python, weil ich nur noch sehr selten programmiere. Ich sag Euch, das Zeug ist ALLES viel zu kompliziert - wer soll das alles mal warten? Ohne Doku??)
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@ticaki Danke! Ich hab's erst jetzt durch deinen Link (vielleicht) kapiert: Alle meine tasmota Datenquellen (GOSUND Steckdosen und einige esp32 (mit bme280)) senden zu einem raspi auf dem ein mqtt broker läuft. Wenn ich die Tabelle recht verstehe, hätte ich die also alle umleiten müssen (?) auf den ioBroker.sonoff? ... Ich glaube sogar, dass ich die Tabelle gesehen habe und dann gelesen 'In the web config, you can determine which MQTT telegrams create the new objects not in default data points:'. Dann habe ich nach 'web config' gesucht und nichts gefunden... Wieder das Problem mit der Doku...
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@codierknecht Vielen Dank - das hätte ich gerne vorher gewusst! Leider nicht gefunden (hab' ich was übersehen? Sicherlich! Aber wo??), und ehrlich gefragt: du schreibst: 'Daher ist an der Ecke "selbermachen" angesagt.' Und wo steht geschrieben wie das geht, Beispiele zB? (Ich will mich nicht wiederholen, s. meine Antwort zu mickym). Danke jedenfalls.
-
RE: Umwandlung MQTT JSON in iobroker Datenpunkte
@mickym Vielen Dank! Leider habe ich ihn nicht gefunde. Und, ob nodered, Blockly oä, das macht mE keinen substantiellen Unterschied: in einem halben Jahr verstehe ich nichts mehr (vor einem Jahr habe ich nodered mal ansatzweise verstanden, als ich versucht habe das Ganze mal so nebenher in HomeAssistant zu erledigen - und mir tun die Augen jetzt noch weh, wen ich mich dran erinnere. Ich habe HA schnell aufgegeben und nodered). Und dann: wahrscheinlich hätte ich Deinen nodered-flow auch verwendet - aber ich habe ihn nicht gefunden. Vielleicht habe ich nicht gut gesucht, aber ich habe ihn nicht gefunden. Das ist das Problem. Wie damals (R) bei Siemens: Siemens weiß nicht was Siemens weiß.
-
Umwandlung MQTT JSON in iobroker Datenpunkte
Das ist offensichtlich ein extrem komplexes Thema, denn ich habe trotz ziemlich intensiver Suche keine gute Anleitung gefunden, nicht einmal eine schlechte.
Die Aufgabe an sich ist allerdings einfach und noch dazu wahrscheinlich sehr, sehr häufig: mqtt Werte in iobroker weiterverwenden...In meinem Fall: einige GOSUND Steckdosen und einige esp32 (mit bme280), alle mit tasmota geflasht, senden Daten an einen mqtt Server.
iobroker holt sich die Werte mittels des mqtt-Adapters. (Der sonoff-Adapter liefert mir, warum auch immer, gar keine Werte).
Die importierten Daten finden sich dann (bei mir) in der Rubrik Objekte unter "mqtt.0.tasmota.tele.tasmota-gosund-EP2-03.SENSOR",
und zwar als JSON-String:
{"Time": "202x-01-23T02:13:58", "ENERGY": {"TotalStartTime": "202x-10-13T00:12:31", "Total": 1058.409, ... , "Current": 0.67}}Es hat lange gedauert (Doku schlecht zu finden?), bis ich verstanden habe, dass das mqtt-JSON in dieser Form einfach nicht zu gebrauchen ist, weil es:
- erst in einzelne Werte umgewandelt werden muss; und dass
- diese Umwandlung mittels einer JS-function namens 'on(){}' passiert, wenn ein Ereignis stattfindet (zB Neuer Wert eingetroffen ist); und dass
- diese umgewandelten Werte (Datenpunkte) unter der Objekt-Rubrik: '0_userdata.0.usw.usf...' abgespeichert werden müssen; und dass
- erst diese Datenpukte in iobroker importiert oder anderweitig (zB grafana) weiter verwendet werden können.
So etwas Prinzipielles sollte doch eigentlich in den FAQ stehen?
Die Aufgaben 1. bis 4. müssen irgendwie erledigt werden, zB über Blockly. Aber bitte, warum wieder irgendwas Neues und superspezielles lernen??
Also Programmieren -> aber wo bitte gibt es sowas wie Musterlösungen ?? Viel gesucht, wenig gefunden.
(Und übrigens: wer soll das ganze Wunderwerk denn irgendwann mal warten, wenn unsereins den Spass daran verloren hat, zB weil die Augen nicht mehr mitmachen? Glaubt denn irgendwer, dass außer den afficionados sich irgendjemand in so was einarbeiten wird - v.a. wenn's nicht die eigene Lösung ist? Lauter technische Schulden und viel zu kompliziert.)Hier also meine Lösung:
ein kleines python Programm (github: https://github.com/alex-kline/mqtt_JSON_to_iobroker) erzeugt aus einer mqtt-JSON Zeile- eine JavaScript-Funktion "on(...){...}" (die man nur geringfügig anpassen muss (v.a. den Datentyp)),
- diese JavaScript-Funktion wandelt das JSON in Einzelwerte um und
- diese JavaScript-Funktion speichert die Einzelwerte in der korrekten Objekt-Rubrik: '0_userdata.0.usw.usf...' ab, wobei
- diese JavaScript-Funktion den Objekt-Pfad anlegt, sofern er nicht vorhanden ist.
Um das python Programm auszuprobieren kann man es aus github kopieren (https://github.com/alex-kline/mqtt_JSON_to_iobroker) und zB online laufen lassen:
https://www.w3schools.com/python/trypython.asp?filename=demo_indentation oder
https://www.online-python.com/ oder
https://jupyterlite.github.io/demo/lab/index.htmlDie Konfiguration auf eigene Belange ist einfach:
# 1. den angegebenen Beispiel mqtt-JSON String durch den eigenen ersetzen; der meine ist:
json_str = '{"Time": "2100-01-19T00:16:16", "ENERGY": { "TotalStartTime": "2099-10-13T00:12:31", "Total": 1050.239, "Yesterday": 1.833, "Today": 0.040000000000000001,"Period": 0,"Power": 171, "ApparentPower": 200, "ReactivePower": 104, "Factor": 0.84999999999999998, "Voltage": 290, "Current": 0.68999999999999995 }}'
#
# 2. den angegebenen Beispiel-Ursprung des JSON-Strings durch den eigenen ersetzen; der meine ist::
s_idJson = "'mqtt.0.tasmota.tele.tasmota-gosund-EP2-02.SENSOR';" # object-path des mqtt-JSON Strings
#
# 3. (Ziel-) Path der Werte, die im JSON-String enthalten sind, und die von dort
# zB in grafana angezeigt werden sollen, durch den eigenen ersetzen.
s_path = "'0_userdata.0.tasmota-gosund-EP2-02.SENSOR.';" # object-path der zugehörigen Einzelwerte im User-NamensraumDas Python Programm erzeugt eine js-function 'on(){}', die alle key:value des JSON-Strings in den object-Namensraum des Users kopiert nachdem sie vorher dort passende Objekte angelegt hat.
Man braucht nun (höchstwahrscheinlich) nicht alle Werte aus dem JSON-String. Die überflüssigen Umwandlungen also bitte einfach in der js-function 'on(){}' löschen.Es gilt noch
- den Typ des betreffenden Wertes ('number'|'boolean'|'string') anzupassen -- sonst passiert ein Laufzeit-Fehler!
- die Einheit (zB '°C', 'kWh', usw.) anzugeben -- das ist unkritisch.
nb: die on(){} Funktion besteht im wesentlichen aus einer großen try{} catch() Anweisung (oder wie man das in JavaScript nennt - ich kann diese Sprache nicht). Laufzeitfehler werden dadurch zwar offensichtlich abgefangen, aber nicht gemeldet oder ausgewertet. Das bedeutet, dass man gar nicht merkt, dass ein Fehler passiert. Man merkt nur, dass keine Werte an der erwarteten Stelle (in '0_userdata.0. ...') auftauchen. Zur Fehlersuche also am besten die try{} catch() Anweisung löschen/auskomentieren und bei der getesteten Version wieder aktivieren.
Vielleicht erbarmt sich ja jemand und wandelt das python script in eine JavaScript-Funktion um, die dann evtl im iobroker als Dienst an geeigneter Stelle aufgerufen werden kann? Und vielleicht erbarmt sich jemand, und schreibt in irgendwo in der Dokumentation, wie sich das mit den mqtt-JSON Strings verhält.