NEWS
Tasmota Steckdose per MQTT sofort abfragen möglich?
-
@arumpel Wieso denn HTTP? - das sind doch Datenpunkte im MQTT im cmnd Ast.
Wenn Du 0 hier eingibst, werden alle Status Datenpunkte unter Stat aktualisiert ausser Status 12 und 8.
Im Status Feld ohne Nr. hast Du Dein JSON mit dem der aktuelle Power Status ausgelesen werden kann.
Ich habe noch Tasmota 8.1 drauf - also Version ist kein Problem.
Ich sehe gerade status 8 enthält die Energiedaten - auch kein Problem - dann eben oben statt 0 die 8 eintragen, der enthält die Energiedaten in JSON:
{"StatusSNS":{"Time":"2021-03-16T14:54:36","ENERGY":{"TotalStartTime":"2020-01-24T22:21:27","Total":1.347,"Yesterday":0.000,"Today":0.003,"Power":127,"ApparentPower":133,"ReactivePower":40,"Factor":0.95,"Voltage":228,"Current":0.586}}}
Über HTTP den Status 8 abfragen geht natürlich auch:
http://<ip>/cm?user=<username>&password=<password>&cmnd=status%208
Wie Du das mit Blockly machst, musst DU die Blockly Fans fragen, ich arbeite mit NodeRed.
-
@arumpel sagte in Tasmota Steckdose per MQTT sofort abfragen möglich?:
@bananajoe said in Tasmota Steckdose per MQTT sofort abfragen möglich?:
cmnd/NameDesGerätes/Status 8
Das Kommando muss ich dann irgendwie per HTTP Aufruf an die Steckdose bringen? Den HTTP-Aufruf Befehl müsste ich dann im Blockly Script reinbringen. Hast Du vielleicht ein Beispiel wie das aussieht mit steckdosen IP 192.168.0.54 ?
Das schreibst du einfach in den mqtt.0/cmd/NamedesGeraetes/Status Datenpunkt mit dem Blockly Steuere, Aktualisiere oder Schreibe Block.
Den Datenpunkt gibt es wahrscheinlich noch nicht, also muss du entweder den "Schreibe" Block nehmen, bei Object Id dann ein Textfeld anhängen und den Pfad da reinschreiben.
Oder du legst den Datenpunkt händisch unter Objekte an, dann kannst du den in Blockly auswählen wie jeden anderen Datenpunkt auch -
Ich benutzte den Sonoff Adapter für die Tasmotas und nicht Mqtt.
Habe es hinbekommen, den Punkt cmnd/status angelegt und wenn ich da eine 0 oder 8 reinschreibe zeigt die Steckdose im Webinterface unter Console auch die Rückmeldung STATUS8 oder STATUS gefolgt von weiteren 11 Zeilen STATUS1 bis STATUS11 an mit Werten an.
Nur diese Werte Werte im Sonoff Adapter im IOBroker nicht aktualisiert. Stehen nur im Console Interface. Ein Update erfolgt erst nach Ablauf der eingestellten Zeit welche ich Testhalber von dem 10s Intervall wieder auf normale 300s gestellt habe.
Insofern also alles für die Katz und man kann der Steckdose eben doch nicht sagen Sie soll die Werte einmalig aktuell über MQTT senden?
-
@arumpel Wenn Du nicht das normale MQTT (sondern lieber den Sonoff Adapter) nutzen willst, ich hab Dir doch den HTTP Befehl geschickt mit dem Du die Werte auf Bedarf rausbekommst?
-
Ja, wenn ich im Browser eingebe:
http://192.168.0.54/cm?user=<username>&password=<password>&cmnd=status 8Dann liefert er im Browser folgendes zurück:
{"StatusSNS":{"Time":"2021-03-17T15:55:07","ENERGY":{"TotalStartTime":"2021-03-05T19:21:10","Total":2.225,"Yesterday":0.185,"Today":0.129,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}}Nun bin ich leider noch nicht so fit wie ich den HTTP Aufruf in Blockly Schreibe und hieraus wieder die aktuelle Leistung als Variable rausbekomme um vergleichen zu können ob es nun über oder unter 50W sind.
Du meinst der MQTT Adapter würde sich aktualisieren nach dem Status Befehl?
Hab den nicht genommen da hier alle Werte als ein langer String rauskommen. Das ist unübersichtlich und ich muss im Script wieder die Werte herausextrahieren. Zudem kann ich für den Influx DB Adapter einfach in den Objekten rechts klicken und schon schreibt er nur den Power Wert in die Datenbank, alles andere brauch ich auch gar nicht und ich habe es in Grafana auch nicht auf die Reihe gebracht hier wieder den Power Wert rauszulesen. Insofern war mit der Sonoff Adapter viel lieber und einfacher aber der aktualisiert sich eben nicht nach dem Status Befehl. -
@arumpel Nun wenn Du NodeRed und nicht Blockly nutzen würdest, könnte ich Die schnell helfen. Der String ist nicht so kompliziert, da einfach ein JSON String und Du mit einem parse das leicht in ein Objekt wandeln kannst.
Ich hab das mal in so einen JSON Formatter eingegen und dann schaut dieser String schon sehr übersichtlich aus:Wenn Du sowas mit parse im Javascript oder in NodeRed zugreifen willst, dann geht das ziemlich einfach:
var obj = JSON.parse('{"StatusSNS":{"Time":"2021-03-17T15:55:07","ENERGY":{"TotalStartTime":"2021-03-05T19:21:10","Total":2.225,"Yesterday":0.185,"Today":0.129,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}}');
damit kannst Du dann via obj.StatusSNS.ENERGY.ApparentPower direkt auf den Wert zugreifen, ohne dass Du lange den String analysieren muss.
@arumpel sagte in Tasmota Steckdose per MQTT sofort abfragen möglich?:
Du meinst der MQTT Adapter würde sich aktualisieren nach dem Status Befehl?
Ja - das habe ich Dir doch an meinem Screenshot gezeigt. Allerdings nutze ich wegen Problemen den MQTT Adapter als Client und mosquitto als Broker, aber zum Anfang kannst Du es ja auch mit dem MQTT Adapter als Broker versuchen.
Un wie gesagt, wenn Du mit Deiner Logikmaschine noch nicht so festgelegt bist, dann helfe ich Dir gerne sowas mit NodeRed zu implementieren. Vielleicht hänge ich mal einen kleinen Flow an damit Du siehst wie easy das geht.
So ich mal schnell so einen Flow gebaut - mit der Taste im Inject Node trigger ich den HTTP Befehl:
Dann siehst Du aus der 1. Debug Node das JAVA Objekt und daraus die Apparent Power wie oben beschrieben oder hier nochmals gezeigt extrahiert:
Das geht sicher auch easy im Blockly aber da kann Dir dann @paul53 sicher helfen - ich bin da raus.
Im Blockly gibts aber auch sowas ähnliches mit dem Du URLs abfragen und dann weiterverarbeiten kannst:
Edit: Vielleicht noch eine kleine Anmerkung - ich habe Dir den Node Red Flow nicht zum importieren rauskopiert, weil es mir nicht darum geht, dass Du es nicht in Blockly machst. Aber mit Node Red kann man eben auch gut die Schritte visualisieren, die Du halt im Blockly nachbauen musst - also:
- URL abrufen
- Ergebnis mit parse in ein Objekt umwandeln (macht die JSON Node)
- Apparent Power extrahieren und in Variable abspeichern - habe ich ja im Text auch erklärt (im Flow die Change Node)
- Dann hast Du Deinen Wert und fragst halt dann > oder < 50 ab und schaltest Deine Pumpe und das ganze vielleicht noch in einer Schleife und triggern musst Du das Ganze auch noch.
-
@arumpel sagte in Tasmota Steckdose per MQTT sofort abfragen möglich?:
Nun bin ich leider noch nicht so fit wie ich den HTTP Aufruf in Blockly Schreibe und hieraus wieder die aktuelle Leistung als Variable rausbekomme um vergleichen zu können ob es nun über oder unter 50W sind.
Der Rest ist dann ja easy mit >50 und dann mache dies, sonst mache das usw.
Wollte ich eigentlich an das letzte Posting anhängen - aber egal.
Jedenfalls wollte ich Dir sagen, dass das das geringste Problem ist. Und mit den Wetterdaten und Blockly bin ich eher raus.
-
@arumpel sagte in Tasmota Steckdose per MQTT sofort abfragen möglich?:
Ich benutzte den Sonoff Adapter für die Tasmotas und nicht Mqtt.
Habe es hinbekommen, den Punkt cmnd/status angelegt und wenn ich da eine 0 oder 8 reinschreibe zeigt die Steckdose im Webinterface unter Console auch die Rückmeldung STATUS8 oder STATUS gefolgt von weiteren 11 Zeilen STATUS1 bis STATUS11 an mit Werten an.
Nur diese Werte Werte im Sonoff Adapter im IOBroker nicht aktualisiert. Stehen nur im Console Interface. Ein Update erfolgt erst nach Ablauf der eingestellten Zeit welche ich Testhalber von dem 10s Intervall wieder auf normale 300s gestellt habe.
Insofern also alles für die Katz und man kann der Steckdose eben doch nicht sagen Sie soll die Werte einmalig aktuell über MQTT senden?
Und deshalb nutze ich den Sonoff Adapter nicht (mehr) sondern den normalen MQTT und Werte das in einem eigenen JavaScript aus. Insbesondere um an die Werte zu kommen die der Sonoff-Adapter nicht verwertet.
Und beim MQTT benutze ich nicht den MQTT-Adapter als Server sondern als Client an einem Mosquitto-MQTT Server da der MQTT-Server von ioBroker mit meinen inzwischen über 60 Tasmota-Geräten überfordert war (es geht bis man den Adapter mal neu startet und sich dann alle Tasmota-Geräte sich auf einmal anmelden wollen).So, das ist Klugscheißerei und hilft dir nicht weiter, bleibt der Abruf per HTTP-Request
http://192.168.1.10/cm?user=admin&password=test1234&cmnd=Status%208
Da bekommst du allerdings auch ein JSON zurück den du dir auseinanderfummeln musst.
-
@arumpel sagte in Tasmota Steckdose per MQTT sofort abfragen möglich?:
Zudem kann ich für den Influx DB Adapter einfach in den Objekten rechts klicken und schon schreibt er nur den Power Wert in die Datenbank, alles andere brauch ich auch gar nicht und ich habe es in Grafana auch nicht auf die Reihe gebracht hier wieder den Power Wert rauszulesen. Insofern war mit der Sonoff Adapter viel lieber und einfacher aber der aktualisiert sich eben nicht nach dem Status Befehl.
Du kannst Dir im übrigen jeden von Dir extrahierten Wert in einen eigenen Datenpunkt wegschreiben. Diese Werte später mit dem Schraubenschlüssel in eine Datenbank zu schreiben, funktioniert mit jedem - auch von Dir selbst erstellten Datenpunkten - und ist eine der tollen iobroker Features. Das ist also eine Funktion des iobrokers und nicht eines Adapters.
-
gelöscht