[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

DasQ

#15
moin Beta-User nicht explizit, da ich auf der sml seite nur "NO_USE_SML_SCRIPT_CMD" finde, geh ich davon aus es ist standardmäßig aktiv.
sag bescheid wenn das elementar ist. jetzt kurz gesucht und noch nicht gefunden.

also die user_config_override.h schaut bei mir so aus. den undef part hab ich aus meiner älteren TasmotaSML version übernommen, dachte ja zunächst das Bin-file ist zu groß.

#ifndef _USER_CONFIG_OVERRIDE_H_
#define _USER_CONFIG_OVERRIDE_H_

// hier ist für standard wlan usw config auskommentiert

#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif
#define USE_UFILESYS


#undef USE_DOMOTICZ
#undef USE_HOME_ASSISTANT
#undef USE_EMULATION_HUE
#undef USE_EMULATION_WEMO
#undef ROTARY_V1
#undef USE_SONOFF_RF
#undef USE_SONOFF_SC
#undef USE_TUYA_MCU
#undef USE_ARMTRONIX_DIMMERS
#undef USE_PS_16_DZ
#undef USE_SONOFF_IFAN
#undef USE_BUZZER
#undef USE_ARILUX_RF
#undef USE_SHUTTER
#undef USE_DEEPSLEEP
#undef USE_EXS_DIMMER
#undef USE_DEVICE_GROUPS
#undef USE_PWM_DIMMER
#undef USE_SONOFF_D1
#undef USE_SHELLY_DIMMER
#undef USE_WS2812
#undef USE_MY92X1
#undef USE_SM16716
#undef USE_SM2135
#undef USE_SONOFF_L1
#undef USE_ELECTRIQ_MOODL
#undef USE_LIGHT_PALETTE
#undef USE_DGR_LIGHT_SEQUENCE
#undef USE_DS18x20
#undef USE_ADE7953
#undef USE_SERIAL_BRIDGE
#undef USE_ENERGY_MARGIN_DETECTION
#undef USE_PZEM004T
#undef USE_PZEM_AC
#undef USE_PZEM_DC
#undef USE_MCP39F501
#undef USE_DHT
#undef USE_BL0940
#undef USE_IR_REMOTE
#undef USE_IR_RECEIVE
#undef USE_ZIGBEE_ZNP
#endif


***edit***
da es fehlerfrei durch läuft sollten xdrv_10_scripter.ino und xsns_53_sml.ino abgearbeitet worden sein und dort ist es aktiv. (so mit morgentlich müden augen kurz abgecheckt) aber ich kontrollier des nach dem ersten kaffe nochmals
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

DasQ

#16
moin die zweite

schau mal was ich da für dich habe (zähler config bitte anpassen)
in sml[3] ist bei mir auch nur ne 0 drin. arrays fangen aber bei 0 an, also 0,1,2,

>D
pow=0
p0=0

>B
=>sensor53 r
>S
pow=0
p0=0
print %pow% %p0% %sml[0]% %sml[1]% %sml[2]%
;disable publishing at MQTT teleperiod, on boot
smlj=0
pow=sml[1]
print log1 %pow% %p0%

;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
p0=sml[2]
print log2 %pow% %p0%

;pow=sml[3]
; just publish power value
=>Publish tele/%topic%/SENSOR {"Script":{"power":%sml[1]%}}
endif
>M 1
+1,12,s,0,9600,SML
1,77070100010800ff@1000,Total Consumed,KWh,Total_in,3
1,77070100100700ff@1,Current Consumption,W,Power_cur,0
1,77070100020800ff@1000,Total Delivered,KWh,Total_out,3
1,7707010060320101@#,Service ID,,Meter_id,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

Vielen Dank für's Recherchieren und Austesten!

Jetzt kommt (mit der auf 0 Stellen angewiesenen sml[3]-Variable in der publish-Anweisung) schon mal der ungeglättete Power-Wert!!!!

Strange ist das trotzdem, dass das gestern den Tag über nicht wollte. Da scheint also tatsächlich dieses feature aus irgendwelchen Gründen nicht aktiv gewesen sein, oder man darf in der publish-Anweisung nur das sml-Array verwenden?

Na ja, wie dem auch sei: Muss das ganze dann mal noch mit der gleitenden Mittelwert-Betrachtung erweitern, dafür sollte der Speicher in dem 01-er 8266 ausreichen (der ist schön mit im Lesekopf verbaut!), und dann versuche ich irgendwann noch, die firmware auch mal selbst zu bauen (falls nicht was funktionierendes in dem repo zu finden ist).

Anmerkungen noch:
- Die Doku bei Tasmota-Scripting ist wirklich sehr gut! (Es ging mir eigentlich wirklich eher darum, mich für so ein "Standardproblem" (?!?) nicht auch noch da einlesen zu müssen ::) )
- An ein Problem mit der Zählung im Array hatte ich auch zuerst gedacht und mein script daher direkt auf [2] umgestellt. Nachdem da aber immer derselbe Wert kam, ist mir aufgefallen, dass der zu groß ist bzw. das falsche Vorzeichen hat... Warum das bei uns unterschiedlich zu sein scheint, ist mir jedenfalls völlig unerklärlich.

Na ja, für's erste bin ich jedenfalls ausgesprochen Happy, Danke vielmals (!!!) für eure Unterstützung bis hierher und werde jetzt erst mal "normale Samstags-Jobs" erledigen...
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

#18
das coole an der sache ist, ich kanns für mich selbst verwenden.

bin aber ernsthaft am überlegen mein sml kopf mit nem esp32 zu bestücken. btw. is da kein meter daneben einer der meine heizungstemperaturen erfasst. der hätte noch genug ressourcen offen die sml geschichte zu übernehmen. (da lassen sich auch ganz hübsche webif`s basteln hab ich gesehn)

ach ja das mit dem vorzeichen hatte ich zu anfang auch mal, aber nach dem ich den modul type auf generic (18) gestellt hatte wars danach weg. (der müsste fallback seitig bei dir auf "sonoff basic (1)" stehen)
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

Zitat von: DasQ am 11 März 2023, 08:36:44
das coole an der sache ist, ich kanns für mich selbst verwenden.
So oder so: Danke!

Hatte schon den "Verdacht", dass das ganze ein Thema ist, das nicht nur einen interessiert, und bei dem es mehr Fallstricke gibt, als man auf den ersten Blick annehmen würde...

Zitat
bin aber ernsthaft am überlegen mein sml kopf mit nem esp32 zu bestücken. btw. is da kein meter daneben einer der meine heizungstemperaturen erfasst. der hätte noch genug ressourcen offen die sml geschichte zu übernehmen. (da lassen sich auch ganz hübsche webif`s basteln hab ich gesehn)
Na ja, bei mir ist _an dieser Stelle_ tatsächlich nur der Stromzähler, da macht "mehr Power" oder ein Display gar keinen Sinn.

ABER: Demnächst werde ich (hoffentlich) noch etwas Solarthermie in Betrieb nehmen (der Puffer ist endlich da). Und für diesen Zweck habe ich einen EPS32 mit LAN-Schnittstelle vorgesehen - die Thermie-Steuerung hat jedenfalls eine (u.a.) per Tasmota-Scripting auslesbare Schnittstelle...
(Im Endausbau soll aber der ESP die gesamte Heizungsanlage einschließlich der Junkers-Therme steuern, mal sehen, ob ich das hinbekomme... Das wird dann aber vermutlich kein Tasmota mehr. Wobei....)

Zitat
ach ja das mit dem vorzeichen hatte ich zu anfang auch mal, aber nach dem ich den modul type auf generic (18) gestellt hatte wars danach weg. (der müsste fallback seitig bei dir auf "sonoff basic (1)" stehen)
Das mit dem Vorzeichen paßt schon, da hängt auf meiner Seite eine Solananlage dran, die grade mehr erzeugt als verbraucht wird ;) . Daher auch die ganze Umstellung bzw. der Bedarf für zeitnahe Werte... Wenn Strom im Überfluss da ist und Heizbedarf besteht, kann der auch direkt da rein gehen 8) .
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

hehe danke das ich hier weiter OT mitschreiben darf.

also weil es mir keine ruhe lies und ich ja einen wemos mini im einsatz habe, meine sml-tasmota version von 2022 (v11) einen punkt "verwalte dateisystem" hatte und ich in der infomationen anzeige nur 1024kb zur verfügung hatte (weil ja für esp01 gebaut), habe ich nun noch eine version für den Wemos gemacht. (schachtelsätzekannichsupa ::))

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

Sany

@Beta-User
aus dem ersten Post von Dir lese ich, Du möchtest einerseits die Datenflut eindämmen und andererseits Fehlauslesungen nicht gesendet bekommen. Falsche Werte liest mein Tasmota auch aus, keine Ahnung ob das am Script oder in der Natur des Sache liegt. Was ich für mich realisiert habe ist folgendes:
- der tasmota kennt die Uhrzeit
- ich lese sekündlich die Zählerdaten aus (Zählerstände, nicht den Powerwert) Dann wird gecheckt, ob der Wert ok ist, falls nicht (im Moment noch) lasse ich den in ein Error-Reading publishen, man möchte die möglichen Fehler ja kennenlernen.
- ich erhöhe jede Sekunde einen Zähler.
- beim Minutenwechsel publische ich einerseits die Zählerstände, andererseits wird die Differenz der Zählerstände mit dem Sekundenzähler verrechnet und als Power-wert für diese Minute gepublished.
- in fhem mache ich noch zeitgleich eine Abfrage vom Wechselrichter und habe am Ende innerhalb der ersten paar Sekunden nach einem Minutenwechsel die Power-Werte für Bezug, Einspeisung und Erzeugung und kann dann einen validen Wert für den Verbrauch des Hauses errechnen.
Final brauchts die Zählerstände um die Verbrauchswerte für Tag/Monat/Jahr etc zu rechnen und zu plotten, die Powerwerte sind eigentlich nur zur Anzeige, so erstellt allerdings auch irgendwie valide verglichen mit wild sich ändernden Power-Werten direkt vom Zähler.
Ob das in den ESP-01 passt, keine Ahnung. Käme auf einen Versuch an.

Bei Interesse schreib mich an, ich müsste mein Script erst von den anderen Sachen, die es noch macht, bereinigen.

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

hatte ich wie gesagt auch ... sinnigerweise in den letzten log files nicht mehr. (immer wenn man ein sporadischen fehler braucht, gibt es ihn nicht mehr Fu**)

btw. hier ein stückchen aus der tasmota manual
ZitatMeter Definition~

    +<M>,<rxGPIO>,<type>,<flag>,<parameter>,<jsonPrefix>{,<txGPIO>,<txPeriod>,<cmdTelegram>}

<flag> ... - 16 - enable median filter for that meter. Can help with sporadic dropouts, reading errors (not available for counters). this option is enabled by default #define USE_SML_MEDIAN_FILTER, if you are low on memory and dont use this feature you may outcomment this define in the driver

vielleicht hilft ja das?
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, nochmal vielen Dank für eure Rückmeldungen!

Vorläufige Fassung des scripts:
>D
M:pavg=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

; add to moving average filter
pavg=sml[3]

; publish power every teleperiod/20 time (default result: 15 sec)
if mqtts>0
and upsecs%(tper/20)==0
then
; just publish power value
=>Publish tele/%topic%/SENSOR {"Script":{"power":%0sml[3]%,"p_avg":%0pavg[-2]%}}
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
#


Anmerkungen: Ob es überhaupt Lesefehler usw. gibt, weiß ich (noch) nicht. Das, was bisher an Werten zu sehen war, sah ziemlich plausibel aus, und auch das, was (seit kurzem) per moving average vom ESP geliefert wurde.
Generell gefällt mir der Ansatz, diese Standardaufgaben vom ESP lösen zu lassen und an FHEM dann eben nur die verdichteten Infos zu pushen.

Sehr cool finde ich auch, dass man direkt sieht, was so ein script (grade) macht. Von daher bin ich echt grade am Überlegen, ob das nicht doch ein relativ einfach zu debuggender Ansatz für meine Heizungssteuerung ist.

Weiß jemand auf die Schnelle, ob das Auslesen von DS18B20 nonblocking ausgelegt ist und wie oft die ausgelesen werden (das scheint allgemein vom publish entkoppelt zu sein)?
Wenn es dann noch fertige bin-files mit scripting und ESP32 incl. LAN (!) gäbe, würde ich wohl mal den Versuch unternehmen...
Außer, dass das ziemlich speicherhungrig zu sein scheint, sehe ich im Moment keine Nachteile.
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

Wenn mir erklärst was nonblocking ist, ich hab 10 DS18B20 an nem ESP32 mit espeasy hängen.

So eben kurz nachgelesen aber noch nicht verstanden was das Problem ist. Geht's um schnelles auslesen? Das klappt mir ein paar aussetzten bis zu 1 Sekunde. Aber Temperatur ist für gewöhnlich langsamer.
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

Zitat von: DasQ am 12 März 2023, 21:40:21
Wenn mir erklärst was nonblocking ist, ich hab 10 DS18B20 an nem ESP32 mit espeasy hängen.
Also - kurzer Exkurs zu DS18x20:
Um von denen eine Temperatur zu bekommen, muss der Ablauf "Bitte messen" - "warten" - "auslesen" sein, wobei die Dauer von "warten" von der gewünschten Auflösung abhängt. Jetzt kann man wirklich "warten" (=>blocking), oder eben zwischenzeitlich was anderes tun und später den Auslese-Code ausführen (=>nonblocking).

Wenn ich das ab https://github.com/arendst/Tasmota/blob/master/tasmota/tasmota_xsns_sensor/xsns_05_ds18x20.ino#L497 korrekt interpretiere, ist das (wenig überraschend) nonblocking ausgelegt, wobei ziemlich häufig gemessen wird (?), nämlich jeden 2. (?) Durchlauf (also alle 2 Sekunden). Ist eigentlich deutlich mehr, als ich brauche, aber andererseits auch nicht optimal, weil wohl jeder Sensor beim Auslesen 12ms benötigt. Das sind bei geschätzt 10-15 Sensoren (muss mal nachzählen...) dann immerhin schon knapp 15-20% der in jedem 2. Durchlauf verfügbaren Zeit...

Zum Vergleich: meine aktuelle MySensors-Heizungsnode (ATMega32) liest einen Sensor alle 10 Sekunden aus, die restlichen (6?) alle 30 Sekunden oder noch seltener. Die hat aber praktisch auch wenig anderes zu tun...
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

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

coolheizer

Ich grätsche hier mal mit rein, DasQ hat ja schon einen Link zu https://ottelo.jimdofree.com/stromz%C3%A4hler-auslesen-tasmota/
gepostet.

Hier ist das Script um Google Chart erweitert, hiermit wird auf dem Tasmota Gerät auch gleich der Tagesverbrauch/ Monatsverbrauch sowie Tages und Monats Einspeisung angezeigt, auch bei 1 Richtungszähler.

Dazu werden noch Graphen zu den Werten angezeigt, eine klasse Arbeit die dort geleistet wurde, mit guter Anleitung.

Leider werden die zusätzlichen Berechnungen nicht über Mqtt ausgegeben, und genau hier erhoffe ich mir Hilfe.

Hat jemand eine Idee wie ich die zusätzlichen Daten in FHEM bekomme, Mqtt läuft soweit, wie gesagt nur leider ohne den zusätzlichen Werten.

Wenn es Interessiert hier mal mein funktioniererendes Script:

>D 40
M:p:sday=0 288
M:p:dcon=0 31
M:p:dprod=0 31
M:p:mcon=0 24
M:s4h=0 480
EnFrGrid=0
p:EnToGrid=0
power=0
p:mval=0
p:dval=0
p:mval2=0
p:dval2=0
tmp=0
m5=0
cstr="cnt0/12"
cstr2="cnth0/120"
utm="00d 00h 00m"
avgv=0
avgv2=0
avgvc=0
avgvc2=0
hour=0
da=1
swesp=0
swespflg=0
PToGridS=0
>B
=>sensor53 r
is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
smlj=0
#rst24h
for tmp 1 sday[-1] 1
sday[tmp]=0
next
#daysub
wcs <div id="day" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dcon[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dcon[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dcon[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dcon[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tagesverbräuche Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('day'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#dayprod
wcs <div id="dayp" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dprod[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dprod[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dprod[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dprod[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tageseinspeisung Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('dayp'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#monthsub
wcs <div id="month" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Monat','Energie [kWh]',{role: 'style'}],
for tmp 1 12 1
if (tmp<month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'green'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'green'],
}
if (tmp==month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'red'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'red'],
}
if (tmp>month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,''],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Monatliche Verbräuche / Solareinspeisungen Jahresansicht',vAxis:{format:'# kWh'}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('month'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
>D
>B
TelePeriod 30
=>sensor53 r
>M 1
+1,3,o,0,9600,SM,1
1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18
1,1-0:1.8.0*255(@1,Energie Bezug,KWh,1_8_0,3
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
>S
if (sml[2]>0)
{
smlj=1
}
if (year<2020)
{
print NTP not ready
break
}
if (secs%3==0)
{
power=sml[1]
avgv+=power
avgv2+=power
avgvc+=1
avgvc2+=1
if (power<0)
{
PToGridS-=power
}
if (swesp==1)
{
if ((power<-50) and (swespflg==0))
{
swespflg=1
}
if ((power>30) and (swespflg==1))
{
swespflg=0
}
}
}
if (secs%30==0)
{
s4h=avgv/avgvc
avgv=0
avgvc=0
cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
}
if (secs%60==0)
{
hour=hours
utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
if (PToGridS>0)
{
EnToGrid+=PToGridS/1200000
PToGridS=0
}
EnFrGrid=sml[2]
dcon[day]=EnFrGrid-dval
mcon[month]=EnFrGrid-mval
dprod[day]=EnToGrid-dval2
mcon[month+12]=EnToGrid-mval2
m5=int((((hours*60)+mins)/5)+1)
sday[0]=m5
if (chg[m5]>0)
{
sday[m5]=int(avgv2/avgvc2)
avgv2=0
avgvc2=0
}
cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
if ((chg[hour]>0) and (hour==0))
{
if (day>1)
{
da=day
}
else
{
for tmp (da+1) 31 1
dprod[tmp]=0
dcon[tmp]=0
next
mval=EnFrGrid
mval2=EnToGrid
}
dval=EnFrGrid
dval2=EnToGrid
svars
}
}
>W
Tagesverbrauch:{m}%2(EnFrGrid-dval)% kWh
Monatsverbrauch:{m}%2(EnFrGrid-mval)% kWh
Tageseinspeisung:{m}%2(EnToGrid-dval2)% kWh
Monatseinspeisung:{m}%2(EnToGrid-mval2)% kWh
Gesamteinspeisung:{m}%2(EnToGrid)% kWh
Datum:{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
Uptime:{m}%0utm%
$<div style="margin-left:-20px">
$<div id="chart1" style="text-align:center;width:400px"></div>
$gc(lt s4h "wr" "Leistung [W]" cstr2)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 4 Stunden [Watt]'
$};
$gc(e)
$<div id="chart2" style="text-align:center;width:400px"></div>
$gc(lt sday "wr" "Leistung [W]" cstr)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 24 Stunden [Watt]'
$};
$gc(e)
%=#daysub
%=#dayprod
%=#monthsub
$<center><span style="font-size:10px;">
$Version 29.12.2023 (PV+) by ottelo.jimdo.de & Dennis<br>
$Hinweis: Die Daten werden immer um Mitternacht gespeichert!<br>
$Sofort speichern dies in Console eingeben: "script >svars"<br>
$</span></center></div>
#


Edit: Ich Antworte mir mal selbst, evtl hilft es dem einen oder anderen:

Am Ende des Scrips einfach:
>T
=>publish stat/%topic%/RESULT {"Tagesverbrauch":%2(EnFrGrid-dval)%}
=>publish stat/%topic%/RESULT {"Monatsverbrauch":%2(EnFrGrid-mval)%}
=>publish stat/%topic%/RESULT {"Tageseinspeisung":%2(EnToGrid-dval2)%}
=>publish stat/%topic%/RESULT {"Monatseinspeisung":%2(EnToGrid-mval2)%}
=>publish stat/%topic%/RESULT {"Gesamteinspeisung":%2(EnToGrid)%}

einfügen, so werden die berechneten Daten per Mqtt mit übertragen.

Hier noch mein gesammtes Script:

>D 40
M:p:sday=0 288
M:p:dcon=0 31
M:p:dprod=0 31
M:p:mcon=0 24
M:s4h=0 480
EnFrGrid=0
p:EnToGrid=0
power=0
p:mval=0
p:dval=0
p:mval2=0
p:dval2=0
tmp=0
m5=0
cstr="cnt0/12"
cstr2="cnth0/120"
utm="00d 00h 00m"
avgv=0
avgv2=0
avgvc=0
avgvc2=0
hour=0
da=1
swesp=0
swespflg=0
PToGridS=0
>B
=>sensor53 r
is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
smlj=0
#rst24h
for tmp 1 sday[-1] 1
sday[tmp]=0
next
#daysub
wcs <div id="day" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dcon[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dcon[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dcon[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dcon[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tagesverbräuche Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('day'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#dayprod
wcs <div id="dayp" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dprod[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dprod[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dprod[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dprod[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tageseinspeisung Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('dayp'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#monthsub
wcs <div id="month" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Monat','Energie [kWh]',{role: 'style'}],
for tmp 1 12 1
if (tmp<month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'green'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'green'],
}
if (tmp==month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'red'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'red'],
}
if (tmp>month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,''],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Monatliche Verbräuche / Solareinspeisungen Jahresansicht',vAxis:{format:'# kWh'}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('month'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
>D
>B
TelePeriod 30
=>sensor53 r
>M 1
+1,3,o,0,9600,SM,1
1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18
1,1-0:1.8.0*255(@1,Energie Bezug,KWh,1_8_0,3
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
>S
if (sml[2]>0)
{
smlj=1
}
if (year<2020)
{
print NTP not ready
break
}
if (secs%3==0)
{
power=sml[1]
avgv+=power
avgv2+=power
avgvc+=1
avgvc2+=1
if (power<0)
{
PToGridS-=power
}
if (swesp==1)
{
if ((power<-50) and (swespflg==0))
{
swespflg=1
}
if ((power>30) and (swespflg==1))
{
swespflg=0
}
}
}
if (secs%30==0)
{
s4h=avgv/avgvc
avgv=0
avgvc=0
cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
}
if (secs%60==0)
{
hour=hours
utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
if (PToGridS>0)
{
EnToGrid+=PToGridS/1200000
PToGridS=0
}
EnFrGrid=sml[2]
dcon[day]=EnFrGrid-dval
mcon[month]=EnFrGrid-mval
dprod[day]=EnToGrid-dval2
mcon[month+12]=EnToGrid-mval2
m5=int((((hours*60)+mins)/5)+1)
sday[0]=m5
if (chg[m5]>0)
{
sday[m5]=int(avgv2/avgvc2)
avgv2=0
avgvc2=0
}
cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
if ((chg[hour]>0) and (hour==0))
{
if (day>1)
{
da=day
}
else
{
for tmp (da+1) 31 1
dprod[tmp]=0
dcon[tmp]=0
next
mval=EnFrGrid
mval2=EnToGrid
}
dval=EnFrGrid
dval2=EnToGrid
svars
}
}
>W
Tagesverbrauch:{m}%2(EnFrGrid-dval)% kWh
Monatsverbrauch:{m}%2(EnFrGrid-mval)% kWh
Tageseinspeisung:{m}%2(EnToGrid-dval2)% kWh
Monatseinspeisung:{m}%2(EnToGrid-mval2)% kWh
Gesamteinspeisung:{m}%2(EnToGrid)% kWh
Datum:{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
Uptime:{m}%0utm%
$<div style="margin-left:-20px">
$<div id="chart1" style="text-align:center;width:400px"></div>
$gc(lt s4h "wr" "Leistung [W]" cstr2)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 4 Stunden [Watt]'
$};
$gc(e)
$<div id="chart2" style="text-align:center;width:400px"></div>
$gc(lt sday "wr" "Leistung [W]" cstr)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 24 Stunden [Watt]'
$};
$gc(e)
%=#daysub
%=#dayprod
%=#monthsub
$<center><span style="font-size:10px;">
$Version 29.12.2023 (PV+) by ottelo.jimdo.de & Dennis<br>
$Hinweis: Die Daten werden immer um Mitternacht gespeichert!<br>
$Sofort speichern dies in Console eingeben: "script >svars"<br>
$</span></center></div>
>T
=>publish stat/%topic%/RESULT {"Tagesverbrauch":%2(EnFrGrid-dval)%}
=>publish stat/%topic%/RESULT {"Monatsverbrauch":%2(EnFrGrid-mval)%}
=>publish stat/%topic%/RESULT {"Tageseinspeisung":%2(EnToGrid-dval2)%}
=>publish stat/%topic%/RESULT {"Monatseinspeisung":%2(EnToGrid-mval2)%}
=>publish stat/%topic%/RESULT {"Gesamteinspeisung":%2(EnToGrid)%}
#
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

The-Holgi

Hallo,
suche gerade nach einer Lösung das die readings nicht jede Sekunde an fhem übertragen werden. Benötige auch keine Zeitangabe, die jede Sekunde mit übertragen wird. Hier mal mein script:
>D
>B
=>sensor53 r
>M 1
+1,13,s,0,9600,SML
1,77070100010800FF@100000000,Energie Bezug,kWh,1_8_0,2
1,77070100020800FF@100000000,Energie Export,kWh,2_8_0,2
1,77070100100700FF@1,Leistung,W,16_7_0,18
1,77070100240700FF@1,Leistung L1,W,36_7_0,18
1,77070100380700FF@1,Leistung L2,W,56_7_0,18
1,770701004C0700FF@1,Leistung L3,W,76_7_0,18
#
Änderung mittels periodic brachten keine Veränderung. Im Tasmota webinterface werden die readings ca. alle 3 Sekunden angezeigt.
Vielleicht kann mir jemand helfen?

Hier das device in fhem:
Internals:
   CID        DVES_7C6865
   DEF        DVES_7C6865
   FUUID      660d6e91-f33f-6571-83ac-0bf9ec1172c9d893
   IODev      myBroker2
   LASTInputDev myBroker2
   MSGCNT     272718
   NAME       MQTT2_DVES_7C6865
   NR         533
   STATE      Aktuell: 541.07 W <br> Gesamtverbrauch: 13676.80 KWh <br> Verschenkt: 147.59 KWh
   TYPE       MQTT2_DEVICE
   eventCount 270089
   myBroker2_CONN myBroker2_192.168.178.79_54280
   myBroker2_MSGCNT 272718
   myBroker2_TIME 2024-04-04 11:37:53
   Helper:
     DBLOG:
       power:
         myDbLog:
           TIME       1712221895.61423
           VALUE      2054.97
   OLDREADINGS:
   READINGS:
     2024-04-04 11:26:23   BootCount       15
     2024-04-04 11:26:23   FallbackTopic   cmnd/DVES_7C6865_fb/
     2024-04-04 11:26:23   GroupTopic      cmnd/tasmotas/
     2024-04-04 11:37:47   Heap            11
     2024-04-04 11:26:23   Hostname        tasmota-7C6865-2149
     2024-04-03 16:59:12   IODev           myBroker2
     2024-04-04 11:26:23   IPAddress       192.168.178.79
     2024-04-04 11:26:23   LWT             Online
     2024-04-04 11:37:47   LoadAvg         19
     2024-04-04 11:06:07   LogHost         
     2024-04-04 11:06:07   LogPort         514
     2024-04-04 11:26:23   Module          Generic
     2024-04-04 11:37:47   MqttCount       1
     2024-04-04 11:06:07   MqttLog         2
     2024-04-04 11:26:23   RestartReason   Software/System restart
     2024-04-04 11:37:53   SML_16_7_0      541.07
     2024-04-04 11:25:54   SML_1_8_0       13676.80
     2024-04-03 17:06:50   SML_1_8_1       1366802948.874
     2024-04-03 17:06:50   SML_1_8_2       101700.000
     2024-04-04 11:25:54   SML_2_8_0       147.59
     2024-04-03 17:41:50   SML_32_7_0      237.4
     2024-04-04 11:37:53   SML_36_7_0      36.92
     2024-04-03 17:41:50   SML_52_7_0      237.2
     2024-04-04 11:37:53   SML_56_7_0      123.53
     2024-04-03 17:41:50   SML_72_7_0      238.5
     2024-04-04 11:37:53   SML_76_7_0      380.62
     2024-04-04 11:26:03   SML_CMD         restart
     2024-04-04 06:54:16   SaveData        off
     2024-04-04 11:37:53   Script_p_avg    479
     2024-04-04 11:37:53   Script_power    541
     2024-04-04 11:06:07   SerialLog_0_Active 0
     2024-04-03 17:01:18   SetOption26     on
     2024-04-04 11:37:47   Sleep           50
     2024-04-04 11:37:47   SleepMode       Dynamic
     2024-04-03 17:01:17   StateText1      off
     2024-04-03 17:01:17   StateText2      on
     2024-04-03 17:01:17   StateText3      toggle
     2024-04-03 17:01:17   StateText4      hold
     2024-04-04 11:06:07   SysLog_0_Active 0
     2024-04-04 11:06:07   TelePeriod      10
     2024-04-04 11:37:53   Time            2024-04-04T11:37:53
     2024-04-04 11:37:47   Uptime          0T00:11:31
     2024-04-04 11:37:47   UptimeSec       691
     2024-04-04 11:26:23   Version         13.3.0(tasmota)
     2024-04-04 11:06:07   WebLog          2
     2024-04-04 11:26:23   WebServerMode   Admin
     2024-04-04 11:37:47   Wifi_AP         1
     2024-04-04 11:37:47   Wifi_BSSId      2C:91:AB:51:80:AC
     2024-04-04 11:37:47   Wifi_Channel    1
     2024-04-04 11:37:47   Wifi_Downtime   0T00:00:05
     2024-04-04 11:37:47   Wifi_LinkCount  1
     2024-04-04 11:37:47   Wifi_Mode       11n
     2024-04-04 11:37:47   Wifi_RSSI       72
     2024-04-04 11:37:47   Wifi_SSId       TheGate
     2024-04-04 11:37:47   Wifi_Signal     -64
     2024-04-03 17:01:17   attrTemplateVersion 20210523
     2024-04-04 11:11:35   power           2054.97
   hmccu:
Attributes:
   DbLogExclude 1
   alias      Stromzaehler
   autocreate 0
   comment    NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/tasmota_7C6865/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
   event-on-change-reading .*
   genericDeviceType ignore
   icon       arduino
   model      tasmota_basic_state_power1
   readingList tele/tasmota_7C6865/LWT:.* LWT
  tele/tasmota_7C6865/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/tasmota_7C6865/POWER1:.* state
  stat/tasmota_7C6865/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       MQTT2_DEVICE,Photovoltaik
   setList    setOtaUrl:textField cmnd/tasmota_7C6865/OtaUrl $EVTPART1
  upgrade:noArg   cmnd/tasmota_7C6865/upgrade 1
   stateFormat Aktuell: SML_16_7_0 W <br> Gesamtverbrauch: SML_1_8_0 KWh <br> Verschenkt: SML_2_8_0 KWh
Gruß Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

RalfRog

Hallo Holger

In Tasmota "Logging konfigurieren" der Parameter "Telemetrieperiode (300)" - bei mir 5 minuten = 300 Sekunden, was du halt haben willst.
In diesem Intervall schickt dann Tasmota die Daten an FHEM.

Du kannst auch in der Konsole sehen wie oft die Daten raus gehen.

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

The-Holgi

Genau das funktioniert bei mir leider nicht. Egal welchen Wert ich da eingebe, es ändert sich nichts.
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

RalfRog

Tja...

Ich kann das auch in der Konsole sehen. Habe mal 120 Sekunden eingestellt und dann wieder zurück auf 300.
12:29:59.313 MQT: tele/Zaehler_ESP/STATE = {"Time":"2024-04-04T12:29:59","Uptime":"44T14:10:08","UptimeSec":3852608,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":170,"Wifi":{"AP":1,"SSId":"WLAN","BSSId":"22:99:AA:99:DD:BB","Channel":6,"Mode":"11n","RSSI":46,"Signal":-77,"LinkCount":118,"Downtime":"0T00:19:10"}}
12:29:59.321 MQT: tele/Zaehler_ESP/SENSOR = {"Time":"2024-04-04T12:29:59","MT691":{"energy":39129.6,"power":0,"Meter_id":"49534b"},"hz_t":{"Total_in":0.000,"Power_cur":0,"Meter_id":""}}
12:31:59.331 MQT: tele/Zaehler_ESP/STATE = {"Time":"2024-04-04T12:31:59","Uptime":"44T14:12:08","UptimeSec":3852728,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":170,"Wifi":{"AP":1,"SSId":"WLAN","BSSId":"22:99:AA:99:DD:BB","Channel":6,"Mode":"11n","RSSI":52,"Signal":-74,"LinkCount":118,"Downtime":"0T00:19:10"}}
12:31:59.338 MQT: tele/Zaehler_ESP/SENSOR = {"Time":"2024-04-04T12:31:59","MT691":{"energy":39129.6,"power":0,"Meter_id":"49534b"},"hz_t":{"Total_in":0.000,"Power_cur":0,"Meter_id":""}}
12:32:11.900 MQT: stat/Zaehler_ESP/RESULT = {"SerialLog":{"0":{"Active":"0"}}}
12:32:11.910 MQT: stat/Zaehler_ESP/RESULT = {"WebLog":2}
12:32:11.917 MQT: stat/Zaehler_ESP/RESULT = {"MqttLog":0}
12:32:11.925 MQT: stat/Zaehler_ESP/RESULT = {"SysLog":{"0":{"Active":"0"}}}
12:32:11.931 MQT: stat/Zaehler_ESP/RESULT = {"LogHost":""}
12:32:11.937 MQT: stat/Zaehler_ESP/RESULT = {"LogPort":514}
==>>  12:32:11.942 MQT: stat/Zaehler_ESP/RESULT = {"TelePeriod":300}
12:32:12.346 MQT: tele/Zaehler_ESP/STATE = {"Time":"2024-04-04T12:32:12","Uptime":"44T14:12:21","UptimeSec":3852741,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":170,"Wifi":{"AP":1,"SSId":"WLAN","BSSId":"22:99:AA:99:DD:BB","Channel":6,"Mode":"11n","RSSI":52,"Signal":-74,"LinkCount":118,"Downtime":"0T00:19:10"}}
12:32:12.356 MQT: tele/Zaehler_ESP/SENSOR = {"Time":"2024-04-04T12:32:12","MT691":{"energy":39129.6,"power":0,"Meter_id":"49534b"},"hz_t":{"Total_in":0.000,"Power_cur":0,"Meter_id":""}}

Könnte eventuell der MQTT-Log-Level in die Suppe spucken? Steht bei mir auf 0 (keine).

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

The-Holgi

Zitat von: RalfRog link=msg=1309717 date=17122270

Könnte eventuell der MQTT-Log-Level in die Suppe spucken? Steht bei mir auf 0 (keine).

Gruß Ralf
/quote]
Da habe ich auch schon die Einstellung geändert. Leider auch ohne Erfolg
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Beta-User

Hmmm, das sieht mir nach einem Fehler im Tasmota-Code aus. Auf die Schnelle habe ich dazu keinen issue gefunden, bitte dort um support nachfragen, das hat mit
Zitat von: Beta-User am 04 April 2024, 08:24:08Fragen zu "wie publishe ich außerhalb der teleperiode was aus einem SML-Script" beantworte ich gerne in dem anderen thread nach dessen (gründlicher) Lektüre deinerseits. (ich müßte den auch suchen...)
wenig zu tun...

Um "infach nur zwischendurch" was zu publishen, muss (aus dem Kopf zitiert)
- eine neue Variable definiert werden;
- die beim Auslesen gefüllt werden, und
- ein Timer angelegt werden, in dem dann der publish-Befehl steht.

Mein Tasmota-Stand ist vermutlich etwas älter, kann grade aber nicht so einfach nachsehen. Da scheint das aber noch kein Thema gewesen zu sein mit dem ungeplanten sekündlichen publish. (Also ggf. dann in dem Fall mal (interimsweise) ein downgrade versuchen?)
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

RalfRog

Ja meiner ist auch etwas älter und läuft mit 11.1.0. Habe auch irgendwie dunkel im Kopf, dass es für SML ne spezielle Version gab... (oder nur ne bestimmet Konfiguration?)
Zumindest für den ESP8266 hab ich was hier rumliegen.

Gruß Ralf

Edit:
in Nummer #20 zeigt @DasQ ne 12.4.0.2, die scheint dann wohl auch ok zu sein.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

The-Holgi

Hm, hab die Version mal ota geflasht. Immer noch das Gleiche.
Allerdings bleiben beim flashen ota auch alle Einstellungen erhalten.

So nach komplett neu flashen des images von DasQ funktioniert die Einstellung jetzt.
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

DasQ

Bin leider voll beschäftigt, deshalb nur kurz


https://tasmota.github.io/docs/Peripherals/#additional-options

 
ZitatTo change the update interval (TelePeriod) of MQTT messages change the TelePeriod. Default interval is 300 seconds but can be set between 10 and 3600 seconds.
TelePeriod 10 will set the update interval to 10 seconds, so the sensor will update 6 times a minute.
Die Befehle setzt man über die Konsole in tasmota Konsole ab.
(Vorsicht,Befehle werden mit ,,Return" bestätigt nicht mit dem Button drunter.)
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

RalfRog

Zitat von: The-Holgi am 04 April 2024, 14:47:45So nach komplett neu flashen des images von DasQ funktioniert die Einstellung jetzt.
Welche Tasmota-Version war es denn die nicht ging und welche Version ist es nun die läuft?

Zitat von: DasQ am 04 April 2024, 19:01:11Die Befehle setzt man über die Konsole in tasmota Konsole ab.
Zumindest bei meiner 11.1.0 geht das auch im Webinterface (de) unter "Logging konfigurieren" / "Telemetrieperiode"

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

RalfRog

Als Befehl in der Konsole "TelePeriod 300" (oder eine andere Anzahl Sekunden bzw. ohne Paramter zur Abfrage)
   siehe: https://tasmota.github.io/docs/Commands/#mqtt

ZitatTelePeriod     See current value and force publish STATE and SENSOR message
                        0 = disable telemetry messages
                        1 = reset telemetry period to firmware default (TELE_PERIOD)
                        10..3600 = set telemetry period in seconds (default = 300)

Als Versuch auf der Konsole kann man auch einfach mal "Status" eingeben.

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

The-Holgi

Hallo,
wie ich geschrieben habe funktioniert es ja jetzt. Ich kann das Sendeintervall  übers webinterface und auch über die konsole einstellen.
Die funktionierende Version ist die 12.4.0.2 aus #20.
Die nicht funktionierende war ein fertiges .bin einer neue 13er.
Soweit bin ich erstmal zufrieden, muss nur noch herausfinden wie ich die unerwünschten readings, die tasmota so mitsended los werde. Wie zb die Zeit.

Danke für eure Hilfe.
Gruss Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

cvoigt

#40
Zitat von: The-Holgi am 04 April 2024, 11:36:56Hallo,
suche gerade nach einer Lösung das die readings nicht jede Sekunde an fhem übertragen werden. Benötige auch keine Zeitangabe, die jede Sekunde mit übertragen wird. Hier mal mein script:
>D
>B
=>sensor53 r
>M 1
+1,13,s,0,9600,SML
1,77070100010800FF@100000000,Energie Bezug,kWh,1_8_0,2
1,77070100020800FF@100000000,Energie Export,kWh,2_8_0,2
1,77070100100700FF@1,Leistung,W,16_7_0,18
1,77070100240700FF@1,Leistung L1,W,36_7_0,18
1,77070100380700FF@1,Leistung L2,W,56_7_0,18
1,770701004C0700FF@1,Leistung L3,W,76_7_0,18
#
Änderung mittels periodic brachten keine Veränderung. Im Tasmota webinterface werden die readings ca. alle 3 Sekunden angezeigt.
Vielleicht kann mir jemand helfen?

Hier das device in fhem:
Internals:
   CID        DVES_7C6865
   DEF        DVES_7C6865
   FUUID      660d6e91-f33f-6571-83ac-0bf9ec1172c9d893
   IODev      myBroker2
   LASTInputDev myBroker2
   MSGCNT     272718
   NAME       MQTT2_DVES_7C6865
   NR         533
   STATE      Aktuell: 541.07 W <br> Gesamtverbrauch: 13676.80 KWh <br> Verschenkt: 147.59 KWh
   TYPE       MQTT2_DEVICE
   eventCount 270089
   myBroker2_CONN myBroker2_192.168.178.79_54280
   myBroker2_MSGCNT 272718
   myBroker2_TIME 2024-04-04 11:37:53
   Helper:
     DBLOG:
       power:
         myDbLog:
           TIME       1712221895.61423
           VALUE      2054.97
   OLDREADINGS:
   READINGS:
     2024-04-04 11:26:23   BootCount       15
     2024-04-04 11:26:23   FallbackTopic   cmnd/DVES_7C6865_fb/
     2024-04-04 11:26:23   GroupTopic      cmnd/tasmotas/
     2024-04-04 11:37:47   Heap            11
     2024-04-04 11:26:23   Hostname        tasmota-7C6865-2149
     2024-04-03 16:59:12   IODev           myBroker2
     2024-04-04 11:26:23   IPAddress       192.168.178.79
     2024-04-04 11:26:23   LWT             Online
     2024-04-04 11:37:47   LoadAvg         19
     2024-04-04 11:06:07   LogHost        
     2024-04-04 11:06:07   LogPort         514
     2024-04-04 11:26:23   Module          Generic
     2024-04-04 11:37:47   MqttCount       1
     2024-04-04 11:06:07   MqttLog         2
     2024-04-04 11:26:23   RestartReason   Software/System restart
     2024-04-04 11:37:53   SML_16_7_0      541.07
     2024-04-04 11:25:54   SML_1_8_0       13676.80
     2024-04-03 17:06:50   SML_1_8_1       1366802948.874
     2024-04-03 17:06:50   SML_1_8_2       101700.000
     2024-04-04 11:25:54   SML_2_8_0       147.59
     2024-04-03 17:41:50   SML_32_7_0      237.4
     2024-04-04 11:37:53   SML_36_7_0      36.92
     2024-04-03 17:41:50   SML_52_7_0      237.2
     2024-04-04 11:37:53   SML_56_7_0      123.53
     2024-04-03 17:41:50   SML_72_7_0      238.5
     2024-04-04 11:37:53   SML_76_7_0      380.62
     2024-04-04 11:26:03   SML_CMD         restart
     2024-04-04 06:54:16   SaveData        off
     2024-04-04 11:37:53   Script_p_avg    479
     2024-04-04 11:37:53   Script_power    541
     2024-04-04 11:06:07   SerialLog_0_Active 0
     2024-04-03 17:01:18   SetOption26     on
     2024-04-04 11:37:47   Sleep           50
     2024-04-04 11:37:47   SleepMode       Dynamic
     2024-04-03 17:01:17   StateText1      off
     2024-04-03 17:01:17   StateText2      on
     2024-04-03 17:01:17   StateText3      toggle
     2024-04-03 17:01:17   StateText4      hold
     2024-04-04 11:06:07   SysLog_0_Active 0
     2024-04-04 11:06:07   TelePeriod      10
     2024-04-04 11:37:53   Time            2024-04-04T11:37:53
     2024-04-04 11:37:47   Uptime          0T00:11:31
     2024-04-04 11:37:47   UptimeSec       691
     2024-04-04 11:26:23   Version         13.3.0(tasmota)
     2024-04-04 11:06:07   WebLog          2
     2024-04-04 11:26:23   WebServerMode   Admin
     2024-04-04 11:37:47   Wifi_AP         1
     2024-04-04 11:37:47   Wifi_BSSId      2C:91:AB:51:80:AC
     2024-04-04 11:37:47   Wifi_Channel    1
     2024-04-04 11:37:47   Wifi_Downtime   0T00:00:05
     2024-04-04 11:37:47   Wifi_LinkCount  1
     2024-04-04 11:37:47   Wifi_Mode       11n
     2024-04-04 11:37:47   Wifi_RSSI       72
     2024-04-04 11:37:47   Wifi_SSId       TheGate
     2024-04-04 11:37:47   Wifi_Signal     -64
     2024-04-03 17:01:17   attrTemplateVersion 20210523
     2024-04-04 11:11:35   power           2054.97
   hmccu:
Attributes:
   DbLogExclude 1
   alias      Stromzaehler
   autocreate 0
   comment    NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/tasmota_7C6865/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
   event-on-change-reading .*
   genericDeviceType ignore
   icon       arduino
   model      tasmota_basic_state_power1
   readingList tele/tasmota_7C6865/LWT:.* LWT
  tele/tasmota_7C6865/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/tasmota_7C6865/POWER1:.* state
  stat/tasmota_7C6865/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       MQTT2_DEVICE,Photovoltaik
   setList    setOtaUrl:textField cmnd/tasmota_7C6865/OtaUrl $EVTPART1
  upgrade:noArg   cmnd/tasmota_7C6865/upgrade 1
   stateFormat Aktuell: SML_16_7_0 W <br> Gesamtverbrauch: SML_1_8_0 KWh <br> Verschenkt: SML_2_8_0 KWh
Gruß Holger

Hallo The-Holgi,

das Problem sind hier die angegebenen 18 Nachkommastellen:
1,77070100100700FF@1,Leistung,W,16_7_0,18
1,77070100240700FF@1,Leistung L1,W,36_7_0,18
1,77070100380700FF@1,Leistung L2,W,56_7_0,18
1,770701004C0700FF@1,Leistung L3,W,76_7_0,18
Werte > 16 führen zum sofortigem Senden der Daten (siehe https://tasmota.github.io/docs/Smart-Meter-Interface/#meter-metrics dort unter "<precision>")
d.h. eigentlich haben Sie 2 Nachkommastellen + 16 sofortiges Senden
schauen Sie im Handbuch vom Zähler, wie viele Nachkommenstellen pro Wert er hat
ansonsten können Sie es hier herausfinden https://tasmota-sml-parser.dicp.net/
Ihr angegebener Faktor "100000000" für die kWh erscheint mir auch falsch, hier währe auch ein Muster für Ihren Zähler: https://tasmota.github.io/docs/Smart-Meter-Interface/#landis-gyr-e320-sml wobei hier oft nicht alle verfügbaren Werte im Script drin stehen

Zitat von: The-Holgi am 04 April 2024, 21:37:15Soweit bin ich erstmal zufrieden, muss nur noch herausfinden wie ich die unerwünschten readings, die tasmota so mitsended los werde. Wie zb die Zeit.
das Atribut autocreate auf 0 setzen und die unnötigen Readings löschen mit
deletereading <gerät> <reading>

Beispiel:
deletereading MQTT2_xxxxx btn_.*

zusätzlich mit Attribut suppressReading diese Readings für die Zukunft unterdrücken (falls Sie autocreate mal aktivieren müssen)

VG