NEWS
Shelly plus 1pm OTA Tasmota flashen
-
@sborg nee, nee, nee. Deine Gewinnkalkulation wäre aber ein finanzielles Fiasko für mich gewesen. Es sind nur 57 Adapter. Also nur 1.026 €. Aber Nerven hat es mich für mindestens 3.000€ gekostet. Shelly Plus 1PM braucht 7 Pins. https://templates.blakadder.com/shelly_plus_1PM.html
Letztendlich habe ich ein Netzwerkkabel (starr) genommen. Es war eine Fummelei wie auf den Partys in meiner Jugend. Aber wie damals, hat sich auch heute gelohnt! Ich habe tasmota32solo1.bin geflasht und dann die GPIOs manuell konfiguriert. Alles auf der blakadder Seite beschrieben.
Jetzt mach ich mich an die weitere Arbeit. Aber danke dir für die moralische Unterstützung.
-
Hallo, danke für den Tipp mit dem Link und dass nur "tasmota32solo1.bin" funktioniert. Ich habe alles mit dem Web-Flasher umgesetzt, weil es mit Tasmotizer auf dem PC und dem o.g. .bin nicht funktioniert hat. Anmerkung: Obige .bin war dort in zwei Ausführungen aufgeführt.
Ich habe mir 1,27 mm Steckerleisten besorgt. Diese dann durch das Gehäuse geführt (einfach mit etwas Kraftaufwand durchgesteckt) und mit einer feinen Zange die Pins abwechselnd mit einem 90-Grad-Winkel nach links und rechts gebogen. Im Anschluss Dupontkabel auf einer Seite von der Plastikkappe befreit und etwas mit der Zange gequetscht, weil die Steckerbuchsen sonst rausrutschen. Beim "Flashvorgang" den Pinstift auf "GND" und die ser. Verbindung in den USB-Anschluss stecken. Shelly ist nun im Programmiermodus. Arbeitsaufwand 5-10 Min. Und es funktionierte.
Auch wenn das Thema schon älter ist, gibt es kaum ausführliche Beschreibung. Deshalb für andere "flasher", die einen Shelly Plus 1PM auf Tasmota umstellen wollen, die kleine Ausführung von mir.!
-
@truderinger Danke für die Rückmeldung. Es ist ein gutes Gefühl, wenn deine Arbeit auch für andere nützlich ist.
-
@a200 said in Shelly plus 1pm OTA Tasmota flashen:
Die Shelly Weboberfläche bietet OTA an, leider klappt es bei mir nicht, siehe Screenshot.
Hat jemand eine Idee, woran das liegen kann oder klappt es generell nicht? Der Shelly hat die heute aktuell verfügbare Firmware.
Vielen Dank für die Unterstützung! -
@frankd sagte in Shelly plus 1pm OTA Tasmota flashen:
Hat jemand eine Idee, woran das liegen kann oder klappt es generell nicht?
Ja und ja.
Entweder prüft Shelly die *.bin und lehnt sie ab, oder es gibt nicht genügend Platz (die Shelly FW benötigt Speicher und du musst beim flashen zumindest temporär dann auch noch die tasmota.bin in den Speicher packen), oder... -
@sborg
Danke für die schnelle Reaktion!
Der Plus1PM hat 4 MByte Flash, das Tasmota-FW aus dem gezeigten Link sollte ok sein (das kann ich nicht prüfen) und das .bin- File hat "nur" 1517K und passt wohl zum ESP32 vom Plus1PM. Welche weiteren "oder..." könnte ich probieren?Was mir aufgefallen ist: Das "failed to update" kommt extrem schnell (unter 1 Sekunde). Vielleicht stimmt an meiner Syntax z.B. beim Link etwas nicht oder mache ich einen anderen simplen Fehler, der mir nicht auffällt?
Leider habe ich auch das flashen über die Kabelverbindung trotz korrekt verdrahtetem Adapter nicht hinbekommen, daher die Nachfrage zur Alternative über OAT.
Nochmal danke für die Unterstützung!
VG Frank -
@frankd sagte in Shelly plus 1pm OTA Tasmota flashen:
Das "failed to update" kommt extrem schnell
Dann wird, so macht man das eigentlich auch, Shelly wohl eine Prüfsumme haben. Damit kann man Übertragungsfehler erkennen und verhindern, dass man bei einer defekt geladenen "bin" das Device zerflasht.
Die FW erwartet jetzt eine "bin" mit einer Prüfsumme "123", die tasmota.bin hat aber "456" (mal ganz einfach gesprochen).
Daran kannst du so nichts ändern, außer halt direkt per FTDI mittels RX/TX flashen, denn da schickt er die bin 1:1 und prüft vorher nichts, da im Flashmodus dann nichts von der Original-Firmware mehr läuft, sondern nur noch die rudimentäre Flashroutine des ESP-Chips. Du musst es leider nochmal per Kabel versuchen... -
Lt Shelly API Dokumentation sollte es so gehen
curl http://${SHELLY}/ota?url=http://third-party-firmware.site/path/to/image.zip
Das Beispiel hat ein zip - kann also sein, dass das Web-Interface den Fehler rauswirft, weil es ein ungeziptes Bin bekommt.
https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Shelly#http-endpoint-otaEDIT:
Weitergesucht und dies gefunden:
https://github.com/tasmota/mgos32-to-tasmota32
Da sind die bins gezipt.Ich kann das leider gerade nicht probieren, weil kein Testgerät verfügbar.
-
Was ist der Vorteil von Tasmota auf dem/den Shelly(s) ?
-
- vergisst zum Bespiel die Zählerstände nach einem Reboot nicht
- Direkte Emulation von Steckdose oder Licht für Alexa & Co ohne Cloud/Skill
- Dank Rules mehr Möglichkeiten für Automatisierung
- Zeitpläne auch ohne App oder Cloud
- ab ESP32 Modellen auch kleine Skripte direkt auf dem Gerät
- Automatische Backups der Konfiguration möglich (ich nutze https://github.com/danmed/TasmoBackup) und so einfach Austausch bei einem Defekt (ich habe über 100 Geräte und ja, da geht auch mal eines kaputt)
- Tasmota auch für ESP8266 oder ESP32 direkt verfügbar für eigene Projekte - Kleine Info-Display, Kühlschranküberwachung, Temperaturfühler mit mehreren Sensoren, Alte Haustürklingel mit 4x Mono-D smart machen sind einige meiner Projekte.
- Geräte verschiedener Hersteller bekommen so eine einheitliche Oberfläche (Shelly, Sonoff, Blitzwolff, Nous usw.) und Bedienformat
- mir fällt bestimmt noch mehr ein ...
-
@bananajoe OK.
Danke für die Auflistung. Habe bisher erst 5 Shelly im Einsatz und deshalb die Frage.
-
Hi,
nur zum Verständnis - wieso verwendet Ihr nicht das hier :
https://github.com/tasmota/mgos32-to-tasmota32Da braucht nichts an den Shelly gelötet werden, sondern die Datei wird (über den angegebenen Link) direkt über die Weboberfläche geflasht.
-
@BananaJoe und @all,
der Thread ist schon älter, erscheint mir aber der richtige zu sein.
Ich möchte die Leistung meines BKW sinnvoll messen und diese Messwerte auch für weitere Berechnungen verwenden.
Es kommt dafür aus praktischen Gründen ein Shelly Plus 1 PM zum Einsatz. Leider zappeln die Messwerte ziemlich rum und kommen auch in unregelmäßigen Abständen.
Daraus kann ich keine Werte gewinnen, mit denen man sinnvoll rechnen kann. Daher spiele ich mit dem Gedanken den PM auf Tasmota zu flashen.Fragen dazu:
Bietet der mit Tasmota geflashte Shelly dann auch die Möglichkeit in definierten Zeitabständen (1Min.) einen Mittelwert mittels MQTT an den iobroker zu senden?
Die mir bekannten Tasmotas wie Nous A1T und der Hichi IR Adapter bieten diese Option ja out of the box.
Und ist nach dem Flashen auch ein Abgleich der Spannungs- und Stromwerte möglich wie bei den genannten Geräten?Danke und Gruß
-
@opöl So ein Shelly der mit Tasmota geflasht wurde verhält der sich genauso und sieht auch so aus wie du das von deinen Nous kennst (einmal das richtige Template eingestellt und Kalibriert).
Wie oft er die Leistungsdaten per MQTT sendet kann du über die
TelePeriod
einstellen, Default ist meine ich300
für 300 Sekunden, das kleinste ist 15 Sekunden, ich habe was Strom misst zumeist auf 60 Sekunden. Die Solaranlagen auf 15 Sekunden damit es schöne Kurven gibt und meine Statusanzeige sich schneller aktualisiert. -
vielen Dank. Hat soweit geklappt mit dieser Anleitung:
https://github.com/tasmota/mgos32-to-tasmota32
Das originale gezappel der Messwerte ist jetzt unter Kontrolle, die Werte gleichen sehr einem Nous Adapter, der zur Kontrolle mitläuft. Im ersten Ansatz habe ich nur geflasht nach der Anleitung und habe zeitweise noch längere Aussetzer des Shellys. Das heißt, dass er zeitweise keine Werte liefert, sich dann aber wieder von selbst fängt. Gerade habe ich noch auf die aktuelle FW aktualisiert. Mal sehen, wie es morgen aussieht.Nun habe ich noch zwei Fragen. Vielleicht kannst Du mir auch dabei helfen.
-
Kann man die Tasmota Geräte (Hichi IR, Nous, geflashte Shellys) auch aktiv via Script abfragen? Grund ist, dass ich Berechnungen durchführen möchte und die Messwerte idealerweise zur gleichen Zeit zur Verfügung stehen sollten.
-
Bei einem zweiten Plus 1 PM bin ich nach den Flashen bei der Eingabe des Web Admin Passworts abgelenkt worden. Was soll ich sagen… Ich kann mich nicht mehr an die Web Oberfläche anmelden. MQTT und iobroker Anbindung funktioniert aber. Hast Du oder sonst jemand aus dem Forum die Möglichkeit das Ding gegen Aufwandsentschädigung wieder zugänglich zu machen? Entweder mit originaler Shelly oder Tasmota SW. Ich möchte das Gerät nicht einfach entsorgen, sondern mit Blick auf die Ressourcen gerne wiederbeleben.
Danke und Gruß
-
-
@opöl zu 1: Ja, per http-Request. kannst du dir die Werte auch holen:
http://{HOST.IP}/cm?user={$TASMOTA_USER}&password={$TASMOTA_PASSWORD}&cmnd=Status%208 {HOST.IP} = IP des Gerätes {$TASMOTA_USER} = admin {$TASMOTA_PASSWORD} = dein Passwort cmnd=Status%208 = Führe den Befehl "Status 8" aus, %20 = Leerzeichen
Alternativ kannst du auch per MQTT im
cmnd
Zweig (da wo auch POWER steht) ein TopicStatus
mit dem Wert8
senden, das Triggert das Senden des Wertes unmittelbar an. Das passiert auch beim http-Request.zu 2:
Du könntest GPIO0 und GND für 40 Sekunden miteinander verbinden nachdem du den Shelly mit Strom versorgt hast. Das könnte aber gefährlich sein (Da der dann an 230V hängt, oder du hängst den solange an 12V)Einfacher wäre den einfach noch mal zu flashen (also per Kabel) mit vorherigem Löschen. Jetzt müsste man einen Flasher haben der die Option bietet, wenn man den Webflasher nimmt sehe ich die Option da nicht.
Der hat doch einen Knopf auf der Rückseite, Reset könnte klappen wenn der Shelly Saft hat und du diesen Knopf länger als 40 Sekunden drückst.
Ansonsten gäbe es noch die Tasmota "Quick Power" Methode:
- Gerät mit Strom Versorgen und eine Minute oder mehr so lassen
- Gerät für 30 Sekunden vom Strom trennen
- Gerät 6 mal Ein und wieder Ausschalten, der Abstand zwischen den einzelnen Ein- und Aus muss weniger als 10 Sekunden betragen
- Gerät nach dem letzten Aus wieder Einschalten und An lassen. Es sollte nun auf Werkseinstellungen stehen.
Siehe auch: https://tasmota.github.io/docs/Device-Recovery/
-
Das Wiederbeleben hat geklappt, vielen Dank. Für die Nachwelt:
Meinen 1. Plus 1 PM, aus dem ich mich ausgesperrt hatte, habe ich mit dem Reset Knopf auf der Rückseite (40 Sekunden betätigen) dazu bekommen, wieder das Tasmota Netz aufzuspannen. Danach konnte ich ihn wie gewohnt konfigurieren. Die vorher geflashte Tasmota Version blieb dabei erhalten.
Ein 2. Plus 1 PM blieb nach dem Flashen per .zip File von hier: https://github.com/tasmota/mgos32-to-tasmota32
in der "Safeboot" Schleife hängen. Das Gerät war im WLAN ansprechbar, hat aber nur die Temperatur gezeigt. Nach einem OTA per Update URL wie hier beschrieben:
https://github.com/yaourdt/mgos-to-tasmota
war auch dieses Gerät im Leben zurück.Die "Quick Power" Methode hat bei meinen Shellys leider nicht funktioniert.
Der Shelly Plus 1 PM, den ich für dieLeistungsmessung meines BKW einsetze, ist sich seit dem Flashen mit Tasmota auch weitgehend einer Meinung mit der zur Kontrolle eingesetzten Nous Steckdose (auch mit Tasmota), was die BKW Leistung angeht. Beide sind aber speziell bei größeren Änderungen der Leistung nicht der gleichen Meinung wie der Boss (Deye) WR, außerdem gibt es hin und wieder noch Ausreißer, die sich nicht durch Änderung der Einstrahlung erklären lassen. Kannst Du solche Ausreißer bei den Messwerten auch bestätigen und wenn ja, wie kompensierst Du das?
Dein o.g. Tipp, mit dem die Tasmotas direkt ausgelesen werden können klappt ebenfalls super:
http://{HOST.IP}/cm?user={$TASMOTA_USER}&password={$TASMOTA_PASSWORD}&cmnd=Status%208 {HOST.IP} = IP des Gerätes {$TASMOTA_USER} = admin {$TASMOTA_PASSWORD} = dein Passwort cmnd=Status%208 = Führe den Befehl "Status 8" aus, %20 = Leerzeichen
Auslesen meines Hichi Stromzählers ergibt:
{ "StatusSNS": { "Time": "2024-03-09T18:44:14", "Stromz": { "Counter": 14597.6, "Watt_L1": 121.92, "Watt_L2": 0, "Watt_L3": 79.62, "Power": 201.57, "Volt_L1": 230.7, "Volt_L2": 230.3, "Volt_L3": 230.8, "Total_out": 0 } } }
Könntest Du mir noch einen Code Schnipsel geben der zeigt, wie ich das per Java Script umsetze, um die einzelnen Werte in Variablen zu bekommen?
Mein Ziel ist es ja, für Berechnungen und zur Automatisierung die Geräte gezielt abzufragen, damit Messwerte mit annähernd gleichem Zeitstempel vorliegen. Dann könnte ich diese Werte auch per Script in die DB schreiben und auf die MQTT Messages der Geräte verzichten.
Vielen Dank und Gruß
-
@opöl müsste - wenn ich mich nicht vertan habe - auf Anhieb funktionieren.
Pfade, Adressen, Passwort anpassen!<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</variable> <variable id="1dcL`^?r}+f7z~SP)(ud">JSONWert</variable> <variable id="nQ8OGR590H_l`?A^^;Wo">Einheit</variable> <variable id="481|Dt$rVMnSnlk,J!1?">JSON_Value</variable> <variable id="de{+~TZqTNY6TW,2vZ_0">Stammpfad_Hichi</variable> <variable id="3ME[S-]bgXBpt[S)a=I*">JSON_Object</variable> <variable id="}blX?6,REU$3TVqk[0|r">Benutzer</variable> <variable id="OZAhl(+T)M6^~0UBwO~A">Passwort</variable> <variable id="5_yg^SSe`K/^74FWi4:)">IP_Adresse</variable> <variable id="dQ86e:G0lqzF/yxQSsIY">result</variable> </variables> <block type="procedures_defcustomnoreturn" id="l(.(|wVZ(GS{-P%@qK=|" x="38" y="-962"> <mutation statements="false"> <arg name="Stammpfad" varid="??n.IB}@F$R+yuB8Pj_S"></arg> <arg name="JSONWert" varid="1dcL`^?r}+f7z~SP)(ud"></arg> <arg name="Einheit" varid="nQ8OGR590H_l`?A^^;Wo"></arg> </mutation> <field name="NAME">CreatyMyStateV2</field> <field name="SCRIPT">aWYgKEVpbmhlaXQubGVuZ3RoID09PSAwKSB7DQogICAgYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhTdGFtbXBmYWQgKyBKU09OV2VydCwgMCwgeyB0eXBlOiAnbnVtYmVyJywgcmVhZDogdHJ1ZSwgd3JpdGU6IGZhbHNlIH0pOw0KfSBlbHNlIHsNCiAgICBhd2FpdCBjcmVhdGVTdGF0ZUFzeW5jKFN0YW1tcGZhZCArIEpTT05XZXJ0LCAwLCB7IHR5cGU6ICdudW1iZXInLCByZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UgLCB1bml0OiBFaW5oZWl0IH0pOw0KfQ==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defnoreturn" id=")wl+9Qrk`.UZ@vOm*Z;v" x="38" y="-912"> <mutation> <arg name="JSON_Value" varid="481|Dt$rVMnSnlk,J!1?"></arg> </mutation> <field name="NAME">WriteToState</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="control_ex" id="hNvq`6;2Z0BVTBTD=l+!"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="C]`KNdvfy+4E1E^WN{5A"> <field name="oid">Object ID</field> </shadow> <block type="text_join" id="FX/{iZD7Uej7ddPz4xkN"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="(OeMfaw27fwM%=;CJ0MA"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="cQ]Y(,I7GF_)ON=-*iVJ"> <field name="VAR" id="481|Dt$rVMnSnlk,J!1?">JSON_Value</field> </block> </value> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="dLL+]Q?WZ8wDoG6wkn(G"> <field name="BOOL">TRUE</field> </shadow> <block type="get_attr" id="wKLe[f8ZY{2LFX=Zif=i" inline="false"> <value name="PATH"> <shadow type="text" id="]cG4fgRAdpJFupi@AoIl"> <field name="TEXT"></field> </shadow> <block type="text_join" id="~t1W.@J]$%=EN~+FeB,v"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="bs1t`e0#019cyRmka:[%"> <field name="TEXT">StatusSNS.Stromz.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="9Ky[tx~(fn}tvXRrcb;n"> <field name="VAR" id="481|Dt$rVMnSnlk,J!1?">JSON_Value</field> </block> </value> </block> </value> <value name="OBJECT"> <block type="variables_get" id="lM}O8!Ok,4~4-%fvB%XZ"> <field name="VAR" id="3ME[S-]bgXBpt[S)a=I*">JSON_Object</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="?#T4d(2@aMV`N5N8esHW"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> <block type="comment" id="nAbszD8.ekn0PcQ/Q2.y" x="38" y="-587"> <field name="COMMENT">Pfad wo die Objekte angelegt werden sollen</field> <next> <block type="comment" id="hx5VP1-ch5_hQb!c^8XT"> <field name="COMMENT">. Punkt am Ende nicht vergessen!</field> <next> <block type="variables_set" id=";K--N08duhPa$a]$B@DG"> <field name="VAR" id="de{+~TZqTNY6TW,2vZ_0">Stammpfad_Hichi</field> <value name="VALUE"> <block type="text" id="aHOB#1%1UFsbW.6^q-]t"> <field name="TEXT">0_userdata.0.000-Testen.Hichi.</field> </block> </value> <next> <block type="comment" id="_2_7}Ds4`i~UUr6azPA!"> <field name="COMMENT">Zugangsdaten Hichi</field> <next> <block type="variables_set" id="r1kbopWpMPP5cwZhwTAa"> <field name="VAR" id="}blX?6,REU$3TVqk[0|r">Benutzer</field> <value name="VALUE"> <block type="text" id="NWP)JE:,j|fkZe%?C50/"> <field name="TEXT">admin</field> </block> </value> <next> <block type="variables_set" id="8-f/Sb%Fd61WR2c3?T9P"> <field name="VAR" id="OZAhl(+T)M6^~0UBwO~A">Passwort</field> <value name="VALUE"> <block type="text" id="n5Q,:?Ngbqj@VS~uSDeK"> <field name="TEXT">meinpasswort</field> </block> </value> <next> <block type="variables_set" id="[ow`@Wx^QRxtoNI04~R:"> <field name="VAR" id="5_yg^SSe`K/^74FWi4:)">IP_Adresse</field> <value name="VALUE"> <block type="text" id="W.ghF|2Zd^l)my]:z:o{"> <field name="TEXT">192.168.1.167</field> </block> </value> <next> <block type="comment" id="vg(|^)ui$k[QUMd9P3}E"> <field name="COMMENT">Datenpunkte anlegen</field> <next> <block type="procedures_callcustomnoreturn" id="{Vrmrelmqo6`1tv~hR3o" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="|z,l*k)_KTg!GVUB6jcY"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="TPz)p_M:fntJ3l8MT#uk"> <field name="TEXT">Counter</field> </block> </value> <value name="ARG2"> <block type="text" id="`=hQ`,|k7v[xn;*:y`Vo"> <field name="TEXT"></field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="s/7}m:0;oNDv=mH`zOB/" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="v9z?0yqW6I:Y5?M}gNC#"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="qv](l/?Tz!PV`!PRv`|["> <field name="TEXT">Watt_L1</field> </block> </value> <value name="ARG2"> <block type="text" id=",b-bFy4J.[.}?Vx[{ei5"> <field name="TEXT">W</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="DeLlV`ic~7QaB-+efz?#" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="t9Kh#9Sr`@JnqRWc6Aui"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="-EOlXPWkVBre8!fPb)pX"> <field name="TEXT">Watt_L2</field> </block> </value> <value name="ARG2"> <block type="text" id="FXAvlfhXCk+Md?*.4ZRz"> <field name="TEXT">W</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="gMN7m88;9yfF29G([)}P" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="G_@M(tlpi1tdBRFLw#d+"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="#q1fuLm6$%_AI[`rZ/L5"> <field name="TEXT">Watt_L3</field> </block> </value> <value name="ARG2"> <block type="text" id="GHBs3b-2S$n:|A)~#rpb"> <field name="TEXT">W</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="2XgSJ8DsFUj5MO`i|sRf" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="U?eE;KUyw20H$o{3@?Ks"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id=")_fYO5{-|fAh[|KIY#E="> <field name="TEXT">Power</field> </block> </value> <value name="ARG2"> <block type="text" id="$Ym]u1d,n1(M}4uR{):3"> <field name="TEXT">W</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="/,$`Uie}EPG{;:[bO4Br" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}Q:$|B6{s|`hiDZ%[+A$"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="FIc|2WxN;L!8y(#?vTkG"> <field name="TEXT">Volt_L1</field> </block> </value> <value name="ARG2"> <block type="text" id="l]E8^-~CC{AQ4`[ND+9E"> <field name="TEXT">V</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="q.,UBQ_;Ay4,ynpy1+6z" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="-|[ICdpZfzLc2#Ex%.GC"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="@ePdzLQwS=:q/U=rH#5c"> <field name="TEXT">Volt_L2</field> </block> </value> <value name="ARG2"> <block type="text" id="K*Hd1},QIV],OS_O4g*|"> <field name="TEXT">V</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="4E$_:EZmQ*%BF|].T/wf" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="zuC=lfYdIlRYRx/{Th7]"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="{$=Y:7JL0KKpOSr9QPwh"> <field name="TEXT">Volt_L3</field> </block> </value> <value name="ARG2"> <block type="text" id="jdR4%D4#V`{hR=)8JP@:"> <field name="TEXT">V</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="Hdvy.j|yU)mcr-eGH)mA" inline="true"> <mutation name="CreatyMyStateV2"> <arg name="Stammpfad"></arg> <arg name="JSONWert"></arg> <arg name="Einheit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="g1Yv?lX.wFDbFG=0i}2m"> <field name="VAR" id="??n.IB}@F$R+yuB8Pj_S">Stammpfad</field> </block> </value> <value name="ARG1"> <block type="text" id="r9MW6?*q.sMXDi_2%?]t"> <field name="TEXT">Total_out</field> </block> </value> <value name="ARG2"> <block type="text" id="*T_dh!T`{14E$^tVEl``"> <field name="TEXT"></field> </block> </value> <next> <block type="comment" id="|GJ7]V-*I/eg1[%IqNx$"> <field name="COMMENT">StatusSNS per http holen</field> <next> <block type="request" id="^eHa^)9[r-Yq6rzvfp_,"> <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="URL"> <shadow type="text" id="Z~ayiLoA2s5H5n8_d@E*"> <field name="TEXT">http://</field> </shadow> <block type="text_join" id="G.RPz+JIMxkjl#gj1|Ym"> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="OA3b=!-zzom9Px7D)0*A"> <field name="TEXT">http://</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="vKFPh-E@#T%qHXnXWzcE"> <field name="VAR" id="5_yg^SSe`K/^74FWi4:)">IP_Adresse</field> </block> </value> <value name="ADD2"> <block type="text" id="A2wyc}BvWfj@gIBP3/b4"> <field name="TEXT">/cm?user=</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="lGe]55TlM1dNUqBzRJ!X"> <field name="VAR" id="}blX?6,REU$3TVqk[0|r">Benutzer</field> </block> </value> <value name="ADD4"> <block type="text" id="m$+#}a=JEBQ6j,PV:+la"> <field name="TEXT">&password=</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="]Lx$[U)$,Ve%J/Lhw$v-"> <field name="VAR" id="OZAhl(+T)M6^~0UBwO~A">Passwort</field> </block> </value> <value name="ADD6"> <block type="text" id=")F.YGJMxd8n31*Dp0P#d"> <field name="TEXT">&cmnd=Status%208</field> </block> </value> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="^_Q(4yi6ApsQnqM.NLU."> <field name="VAR" id="3ME[S-]bgXBpt[S)a=I*">JSON_Object</field> <value name="VALUE"> <block type="convert_json2object" id="FV|/o4I)0At@.[ph%$gF"> <value name="VALUE"> <block type="variables_get" id="k-nB*{cPgm_3#7yoUK`C"> <field name="VAR" id="dQ86e:G0lqzF/yxQSsIY">result</field> </block> </value> </block> </value> <next> <block type="procedures_callnoreturn" id="QY~wI0nzp};pB*.XH,9W" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="2gMHnAin4ZkhC9jhmO*U"> <field name="TEXT">Counter</field> </block> </value> <next> <block type="procedures_callnoreturn" id="Ig;A*u5(IU^6@(b+B%]/" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="e%ecf$ga=FgJ.O^L2SY~"> <field name="TEXT">Watt_L1</field> </block> </value> <next> <block type="procedures_callnoreturn" id="}YHu8yF$@Xl@Y3KSHdj5" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="UHbv4w6/4*7]^!`L1Tv;"> <field name="TEXT">Watt_L2</field> </block> </value> <next> <block type="procedures_callnoreturn" id="BJcdoz?Y^rF=$tO.O0i4" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="UT@(l1hd)vB4,fQ8o3FB"> <field name="TEXT">Watt_L3</field> </block> </value> <next> <block type="procedures_callnoreturn" id="R}%(|{`enKjj-w}K7%(b" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="h#f0?siwP%a]97M[UtLl"> <field name="TEXT">Power</field> </block> </value> <next> <block type="procedures_callnoreturn" id="77*sEXgT$FPwpJu9M{IY" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="zl*UHPOrmcs]?4.wXZFd"> <field name="TEXT">Volt_L1</field> </block> </value> <next> <block type="procedures_callnoreturn" id="/ST~J4!%Bn~r2#),-zG%" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="yY)oJ6Rmk}e0s*i5ofN_"> <field name="TEXT">Volt_L2</field> </block> </value> <next> <block type="procedures_callnoreturn" id="aoATB(vUL-35W504PR5d" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="xJR.kY+f0rceuOVubZ0n"> <field name="TEXT">Volt_L3</field> </block> </value> <next> <block type="procedures_callnoreturn" id="/Vj*:0Q4Qs,ZlYF:g;9T" inline="true"> <mutation name="WriteToState"> <arg name="JSON_Value"></arg> </mutation> <value name="ARG0"> <block type="text" id="sJn/ob%Xu{5hI3BaMch8"> <field name="TEXT">Total_out</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
Es werden die Datenpunkte angelegt (so das man diese sofort benutzen kann) und dann einmal die Daten geholt und geschrieben.
Nachtrag:
Ich hatte mir gestern zufällig genau so etwas gebaut (Daten von Pylontech per http holen und den JSON auseinander bauen). Da du den JSON gleich mitgeliefert hast, habe ich mein Skript einfach nur anpassen müssen. -
ich habe es mal kurz probiert, aber mit Blockly fremdel ich momentan noch mehr als mit Java Script. Kurzum, es liegt ziemlich sicher an mir, aber aber ich bin mit Deinem Blockly nicht weiter gekommen.
Stattdessen habe ich den Weg mit der direkten HTTP Abfrage mal eruiert. Das sieht bisher sehr gut aus. Ich frage die Werte des Hichi Stromzählers und des Shelly Plus 1 PM (beide auf Tasmota geflasht) alle 6 Sekunden ab und errechne daraus meinen Eigenverbrauch (in 1/10 Wm). Wenn man das System in Ruhe laufen lässt, klappt das bisher auch zuverlässig. Auffällig ist, dass die teilweise langen Aussetzer des Shellys (bisher) nicht mehr auftreten. Mit den Werten kann man rechnen
Der Offset von einem W im Bild kommt von dem Nous Adapter, der im Moment noch zur Kontrolle mitläuft und seine Werte via MQTT übermittelt. Der hat zeitweise noch Aussetzer.Ich habe so den Verdacht, als ob im Zweifelsfall die direkte HTTP Abfrage zuverlässiger ist.
Ich behalte das Ganze noch eine Weile im Auge, aber es sieht im Moment so aus, als ob das der richtige Weg ist.
Danke nochmal für Deine Unterstützung.
Gruß
-
@opöl naja, alle 10 Sekunden über MQTT vs alle 6 Sekunden per Web abfragen.
Du rechnest Bezug gegen erzeugte Solarleistung um den Eigenverbrauch zu erhalten?
Ich rechne da nur die Endsummen gegen ... Stromzähler Bezug aktueller Tag gegen Produktion Solar aktueller Tag.