[gelöst per scripting] Tasmota rule, OBIS Zähler und deutliche Power-Änderungen

Begonnen von Beta-User, 08 März 2023, 21:58:34

Vorheriges Thema - Nächstes Thema

Beta-User

Hallo zusammen,

bestimmt habe ich zu kurz oder falsch gesucht, ganz sicher aber  bin im falschen Forum,
jedenfalls kann ich mir nicht vorstellen, dass das bisher noch niemand gelöst hat und seine Lösung teilen möchte...

Also: Gegeben ist ein smarter Stromzähler (Landis Gyr+ E320), der von einem Tasmota-ESP via IR-Lesekopf ausgelesen wird. Der Tasmota kennt also ca. alle Sekunde den aktuellen Verbrauch bzw. die aktuelle Einspeisung.

Versendet wird dann immer alles, wenn teleperiode um ist. (z.B. die Wifi-Daten). Daher finde ich es nicht die optimale Lösung, die deutlich zu verkürzen, zumal dann auch kein Filter dran ist, um vorab zu checken, ob das wirklich interessant ist. Denn wenn die aktuelle Einspeisung von 3456W auf 3277W sinkt, ist das nicht optimal, aber vermutlich kein Anlass, irgendeinen Automatismus anlaufen zu lassen. Wie dem auch sei, was ich gerne hätte, wäre dass sich der ESP merkt, welchen Wert er zuletzt gesendet hat und dann bei jedem Mess-Durchlauf checkt, ob die Abweichung dazu (z.B., Absolutwerte, also für Einspeisung und Bezug gleich)
bei unter 250W gesamt mehr als 50W,
bei unter 1000W gesamt mehr als 100W,
bei unter 2000W gesamt mehr als 250W,
und darüber mehr als 500W beträgt.

Wenn ja: Sende (nur) den (einen) neuen Wert...

Bestimmt ein Klacks für jemand, der sich mit Tasmota-rules oder Tasmota-scripting auskennt ;) . (Ich wollte mich da aber nicht auch noch einarbeiten ::) ).

Danke für zielführende Hinweise oder fertigen Code ::) , ich würde ihn dann ggf. auch teilen bzw. eventuell ein attrTemplate für Tasmota-OBIS basteln, über das man das dann ggf. auch wiederfinden kann...

Grüße, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

mit tasmota rules auskennt, ist sehrwahrscheinlich viel zu hochtrabend von mir. aber ich habe schon einige rules erstellt.

als erstes fällt mir da natürlich das hier ein. ich habe sinnigerweise einen ähnlich geartet fall und zwar wird mir sporadisch ein viel zu hoher wert aufgelesen und versaut mir dadurch den nullpunkt im fhem plot.
das wollte ich schon längst gelöst haben und schlägt in die selbe kerbe (so denk ich)

ich nehm dein post jetzt mal zum anlass, diesen missstand bei mir in angriff zu nehmen. weg muss er eh und zeit zum lernen hab ich grade auch.

ich meld mich sobald ich erste erfolge zu verbuchen habe.

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Cool, Danke schon mal vorab!

(Eilt nicht, schaffe grade erst die Voraussetzungen, um sinnige Reaktionen aus dieser Art Wert abzuleiten...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

#3
Hmm, irgendwie bin ich grade noch bei "scripting language" gelandet und habe zwei snipplets gefunden, die interessant aussehen:
https://tasmota.github.io/docs/Scripting-Language/#send-power-reading-with-formatted-time-stamp-via-websend und https://tasmota.github.io/docs/Scripting-Language/#fast-polling

>T
et=ENERGY#Total
p=ENERGY#Power
; every 5 minutes
if upsecs%300==0
then
y=sb(tstamp 0 4)
m=sb(tstamp 5 2)
d=sb(tstamp 8 2)
=>%ws%/service/r2/addstatus.jsp?key=%key%&sid=%id%&d=%1.0(y)%%2.0(m)%%2.0(d)%&t=%1(sb(tstamp 11 5))%&v2=%s(2.0p)%
endif


(publish-Anweisung; auch für einen T>-Abschnitt)
; publish abs hum every teleperiod time
if mqtts>0
and upsecs%tper==0
then
; calc abs humidity
tmp=pow(2.718281828 (17.67*temp)/(temp+243.5))
tmp=(6.112*tmp*hum*18.01534)/((273.15+temp)*8.31447215)
; publish median filtered value
=>Publish tele/%topic%/SENSOR {"Script":{"abshum":%med(0 tmp)%}}
endif
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Mal mein aktueller Zwischenstand:

Man kann wohl entweder scripting haben oder rules, und für die SML-Auswertung braucht man so oder so scripting. Für den E320 gibt es einen "Smart Meter Descriptor". Von daher hier das erweiterte script für den E320:
>D
pow=0
>B
=>sensor53 r
;disable publishing at MQTT teleperiod, on boot
smlj=0
>S
;re-enable publishing at MQTT teleperiod, after 10 seconds of uptime
if upsecs>10
then
smlj|=1
endif

; publish power every teleperiod/20 time (default result: 15 sec)
if mqtts>0
and upsecs%(tper/20)==0
then
pow=#Power_in

;pow=sml[3]
; just publish power value
=>Publish tele/%topic%/SENSOR {"Script":{"power":%0pow%}}
endif
>M 1
+1,3,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,kWh,Total_out,3
1,77070100010800ff@1000,Total Consumed,kWh,Total_in,3
1,77070100100700ff@1,Current power,W,Power_in,0
1,77070100600100ff@#,Server-ID,,Meter_Number,0
#

Das sendet schon mal regelmäßig zur jeweils erwarteten Zeit, aber leider mit "pow=nur Nullen oder (mit dem Versuch, auf das sml-Array zuzugreifen) kaputte JSON (und eine Fehlermeldung in der Tasmota-Konsole)...

Ergo stellt sich die Frage, wie man auf den Wert zugreifen kann? Der muss ja irgendwo gespeichert sein?!?
E320#Power_in wollte jedenfalls auch nicht...

Für das sml[3]-Ding gibt es vielleicht eine Erklärung:
ZitatTo get the value of one of the descriptor lines, use sml[X]. X = Line number. Starts with 1. (compiling with USE_SML_SCRIPT_CMD required)
Muss vermutlich die Tasmota-Firmware dann doch mal selber compilien. Oder mal die "scripting"-firmware aus dem hier verlinkten repo testen: https://github.com/arendst/Tasmota/discussions/17733#discussioncomment-4709425
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

#5
Wie du hast die nicht selbst kompiliert? Die SML Version muss man zwingend selber bauen. Das ist nicht im Release

Btw. Ich hab gestern die meiste Zeit damit verbummelt wieder mein plattfomio zu reparieren. Eigentlich sollte alles passen, wenn willst Bau ich's dir
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Na ja, den Lesekopf gab es mit oder ohne ESP, und mit kostete nicht wesentlich mehr wie ohne. Da ich mir nicht unnötig Komplexität einhandeln wollte, habe ich "mit" gekauft, und da war halt das passende Tasmota gleich drauf...

Wichtiger wie ein fertiges bin wäre mir ein user-Konfig-file für ein "Minimal"-Tasmota mit scripting und der nämlichen Erweiterung. Dann kann ich das bei Bedarf auch künftig ggf. auf den aktuellen Stand holen... (Andererseits: ein aktuelles fertiges bin hätte schon auch was!).

OT:
VSCode mit pio ist zumindest im Moment nicht das Problem, nachdem ich mich gedanklich erfolgreich von Atom verabschiedet habe und das für die MI-Integration in AhoyDTU jetzt auf dem aktuellen Stand habe ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

#7
minimal kannst relativ einfach in der platformio_override.ini aktivieren
semikolon vor tasmota-minimal entfernen.


***edit*** ich bau dir eins extra, im letzten bin waren noch wlanconfigs drin.****
solltest du ein wemos ähnlichen esp haben (1Mb) häng ich mal ein funktionierendes bin an
auf welchen gpios ist der lesekopf?

(hast du die pin für dein zähler, wenn er denn ein hat?)

script sollte das sein. (GPIO ggf anpassen)

>D
>B
=>sensor53 r
>M 1
+1,3,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,KWh,Total_out,3
1,77070100010800ff@1000,Total Consumed,KWh,Total_in,3
1,77070100100700ff@1,Current power,W,Power_in,3
1,77070100600100ff@#,Server-ID,,Meter_Number,0   
#
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

#8
THX. Ist ein "nackiger" 01-ESP8266 (mit den 8 PINs), der da verbastelt ist. Von denen habe ich noch ein paar staubige in meiner Bastelkiste ganz unten...

Leider meldet das Ding für OTA, dass der Speicher nicht ausreicht.... Ist vielleicht sowieso besser, wenn ich das bin erst mal auf einen anderen packe und das dann damit teste. Irgendwo sollte ich auch so ein "flash-board" für die 01-er ESP's rumliegen haben. (Hatte ich schon angemerkt, dass ich die Dinger eigentlich nicht leiden kann...?!? Hätte nicht geglaubt, dass ich die jemals wieder rauskrame.)

"Mein" erweitertes script hattest du gesehen? Das ist die von dir gepostete Fassung (aus der Tasmota-Doku) mit ein paar Erweiterungen ;) .

EDIT: dein .bin wird wieder gelöscht, warte dann auf das "gereinigte"
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

#9
welche tasmota version ist drunter? je nach version musst du erst mal hoch patchen

dazu die lite-release versionen in der reihenfolge verwenden
https://tasmota.github.io/docs/Upgrading/
Upgrade Flow~

v1.0.11  🔀  v3.9.22  🔀  v4.2.0  🔀  v5.14.0  🔀  v6.7.1  🔀  v7.2.0  🔀  v8.5.1  🔀  v9.1  🔀  Current release

p.s. eben versucht die minimal mit sml zu bastel siehe screenshot ... muss ich erstmal fixen
p.s.2. also minimal und lite lässt sich nicht mit sml kompilieren.
p.s.3. mit dem minimal war käse. da hat sich inzwischen soviel geändert das ich unqualifiziert mist gesagt hab. sorry
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

THX.

Da ist grade eine 12.3.1 am werkeln, und nachdem mir das mit der Kellerkiste wieder eingefallen ist, werde ich wohl erst mal versuchen, die sensors-bin auf einen jungfäulichen ESP zu knallen und meine readingList vorab entsprechend anzupassen...

Das muss aber noch ein bißchen warten ::) .

Wenn kein OTA geht, und man immer diesen Zwischenschritt über die Minimal braucht (ist bei tasmota2zigbee genauso, wenn ich mich recht entsinne), dann ist das mit dem updaten schon immer ein wenig lästig.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DasQ

#11
du sagtest esp01 ... da musst mit den gpios aufpassen, der hat ja eigentlich nur 2. wenn der nicht ausfrisiert ist (ports vom ic direkt abgegriffen)

btw.
so sieht der sml reader bei mir in fhem aus. wobei mir die werte von gestern und heut über statistik modul gemacht werden, die werte sollten morgen wieder stimmen
defmod MQTT2_DVES_79008C MQTT2_DEVICE DVES_79008C
attr MQTT2_DVES_79008C alias Stromzaehler
attr MQTT2_DVES_79008C devStateIcon Online:10px-kreis-gruen Offline:10px-kreis-rot
attr MQTT2_DVES_79008C group Stromzähler
attr MQTT2_DVES_79008C readingList DVES_79008C:stat/tasmota_79008C/RESULT:.* { json2nameValue($EVENT) }\
DVES_79008C:tele/tasmota_79008C/LWT:.* LWT\
DVES_79008C:cmnd/tasmota_79008C/POWER:.* POWER\
DVES_79008C:tele/tasmota_79008C/INFO1:.* { json2nameValue($EVENT) }\
DVES_79008C:tele/tasmota_79008C/INFO2:.* { json2nameValue($EVENT) }\
DVES_79008C:tele/tasmota_79008C/INFO3:.* { json2nameValue($EVENT) }\
DVES_79008C:tele/tasmota_79008C/STATE:.* { json2nameValue($EVENT) }\
DVES_79008C:tele/tasmota_79008C/SENSOR:.* { json2nameValue($EVENT) }\
DVES_79008C:stat/tasmota_79008C/POWER:.* POWER\
DVES_79008C:tasmota/discovery/807D3A79008C/config:.* { json2nameValue($EVENT) }\
DVES_79008C:tasmota/discovery/807D3A79008C/sensors:.* { json2nameValue($EVENT) }
attr MQTT2_DVES_79008C room Keller
attr MQTT2_DVES_79008C sortby 1
attr MQTT2_DVES_79008C stateFormat <a href="http://Info2_IPAddress" target="_blank">\
LWT\
</a>\
uptime: Uptime\
<br>\
Heut: statSML_Total_inDay Wh\
Gestern: statSML_Total_inDayLast Wh\
<br>\
aktuell: SML_Power_cur W\
Gesamt: SML_Total_in Wh



bin hab ich oben angehängt
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Sany

Hallo Beta-User,
wenn der von Dir benutzte ESP den Zähler auslesen kann dann ist das scripting aktiv und Du bräuchtest eigentlich erst mal nix weiter, ausser dem richtigen script. Da Du von einem ESP-01 sprichst bin ich bei Details dazu erst mal raus, da ich meine "Forschungen" auf einem ESP32 Board mit Ethernet gemacht hab. Stichwort: Speicher, ist bei den ESP-01 halt eher klein, scripting und vor allem genutzte Variablen in scripting brauchen aber gerade eines: Speicher. Ich will mal unterstellen, dass mit Anstieg deiner Anforderungen wohl auch die Probleme ansteigen werden. Ich würde jetzt auf dem vorhandenen ESP versuchen, das script zum laufen zu bekommen, wenn beim Start vom Script dann schon "Fehlermeldungen" mit Bezug auf Speicher auftauchen würde ich performantere Hardware nehmen. Da kannst Du dann die .bin mit den gewünschten (oder ungewünschten) Komponenten brennen. Ich habe bei mir z.B. das ganze HomeAssit und Autokonfig und so rausgelassen.

Zum Script: Dein Script aus #4 liefert schon etwas, sprich auf der tasmota-Webseite kommen die Daten, und per MQTT wohl auch schon?
Mit der Vermutung von sml[3] bist du auf dem richtigen Weg: In sml sind alle ausgelesenen Zählerwerte, in [3] ist der Power-Wert, einfach der dritte definierte Wert:
Zitat>M 1
+1,3,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,kWh,Total_out,3    --> sml[1]
1,77070100010800ff@1000,Total Consumed,kWh,Total_in,3    --> sml[2]
1,77070100100700ff@1,Current power,W,Power_in,0              --> sml[3]
1,77070100600100ff@#,Server-ID,,Meter_Number,0
#

der Rest müßte eigentlich so gehen.
Noch ein paar Worte zum scripting (obwohl es mindestens so gut wie die fhem-commandref unter Tasmota/scripting beschrieben ist):
- Variablennamen so kurz wir möglich (Speicher!), müssen zu Beginn in >D deklariert werden
- Bedingungen: es gibt 2 Schreibweisen: if-then-endif etc oder if(Bedingung){Ausführung} else {andere Ausführung} darf man NICHT mischen!
ich finde die Klammern übersichtlicher, besonders wenn man irgendwann verschachtelte Zweige hat. Geschmacksfrage.
- zum testen kannst Du einfach print die Variable VAR hat den Inhalt: %3VAR% schreiben, wird dann in der Konsole ausgegeben. Die Variable wird zwischen %-zeichen gesetzt, die Zahl hinter dem ersten % ergibt die Kommastellen. Genau wie beim Publish.
...

Gruß



Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

DasQ

#13
kurze zwischen info
so tasmota hat mich mal wieder eineinhalbstunden meiner wertvollen lebenszeit gekostet.

not enough space

ich war stocksteif der meinung (laut anleitung) ich müsste von einer kleineren (minimal oder lite) version starten zu upgraden/flashen. ging aber nich :-\. jetzt hab ich einfach mal die 4m version genommen, danach die sml und siehe da  8)

schaut dein tasmota webif so aus?
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

So, kurzer frustrierter Zwischenstand:

Der Tasmota mit der sml-Version von DasQ läuft, ich mußte das Ding dazu aber ausbauen und auf meinem supertollen ESP-01-flash-helper-Board direkt via USB flashen, OTA war nicht genug Speicher da. (Die weiteren Geschichten des heutigen Versuches erspare ich euch...)

Ergebnis: wie vorher - das script läuft, alle Werte sind im Web-IF da und werden zur teleperiode versendet. Der Zusatz läuft auch, alle 15 Sekunden wird gepublisht - nur leider nach wie vor die "0".

Die Firmware ist mit "USE_SML_SCRIPT_CMD" konfiguriert gewesen, richtig?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files