Wenn das in den kommenden Tagen doch wieder auseinanderlaufen sollte, dann gebe ich auf und werde doch ein weiteren "ai on edge" nutzen.
Und? Wie macht er sich bisher?
Wenn das in den kommenden Tagen doch wieder auseinanderlaufen sollte, dann gebe ich auf und werde doch ein weiteren "ai on edge" nutzen.
Und? Wie macht er sich bisher?
Und? Wie macht er sich bisher?
Ganz ok - aber nicht perfekt.
An den kalten Tagen, an denen wir einen starken Durchlauf hatten, da wurden ca. 0,5 m³/Tag zu viel erfasst. An den normalen Tagen funktioniert es allerdings ganz gut. Es ist auf jeden Fall wesentlich besser als der einfache Zähler vorher.
Als IRs habe ich den BPW 78 und TEKT5400 erfolgreich im Einsatz. Die lassen sich auf Grund ihrer Bauform auch schöner ankleben
Schön zu sehen, wie es (über die paar Millimeter) auch ohne viel Schmitt-Trigger-&Transistoren-Geraffel funktionieren kann.
Welche flachen seitlich strahlenden LEDs (die der ESP8266 idealerweise auch direkt treiben kann) welcher Wellenlänge beschaltest Du wie, in ebenso passender Bauform?
So könnte man das dann ja an einen einzigen Controller für alle Zähler im Schrank (vgl. https://community.simon42.com/t/anbindung-ei…t-esp-01/8515/5) leicht und flexibel verkabeln, mit durchsichtigem doppelseitigem Band ankleben, WLAN-Antenne rausführen (mangels Buchse auf den meisten Boards und in dieser störungsreichen Umgebung ggf. eine Kunst für sich) und dessen Tür dann jahrelang zulassen...
Hallo zusammen,
Hardware:
ich bin relativ neu in dem Thema und versuche seit Tagen die Daten des Zählers auszulesen, leider erfolglos. ich habe diverse Skripten aus dem Thread hier ausprobiert. Das angehängte Skript gibt mir der "Durchlauf_year" aber alle andere Werten sind leer. Muss der Zähler mit einem PIN erstmal "freigeschaltet" werden ? Ich bin für jeden Tipp dankbar.
Thanks
Skript:
>D
scnt=0
res=0
;Variablen zum Zwischenspeichern der Werte
v1=0
v2=0
v3=0
v4=0
v5=0
v6=0
v7=0
v8=0
v9=0
;Stundenvariable für Tageswert
hr=0
;persistenter Speicher des letzten Werts um 0 Uhr
p:sm1=0
p:sm2=0
;persistenter Speicher des letztens Tagesverbrauchs
p:sd1=0
p:sd2=0
>T
;Bei jeder Teleperiode werden die letzten Werte in die Temp Var geschrieben
v1=LGUH50#kwh_count
v2=LGUH50#kwh_count_year
v3=LGUH50#heizleistung_max
v4=LGUH50#m3_count
v5=LGUH50#m3_count_year
v6=LGUH50#unknown
v7=LGUH50#durchlauf_max
v8=LGUH50#lauf_max
v9=LGUH50#flow_count
>R
>B
=>sensor53 r
>F
; Fernwrämezähler läuft mit Batterie und wird daher nur stündlich abgefragt
; count 100ms
scnt+=1
switch scnt
case 600
;set sml driver to 300 baud and send /?! as HEX to trigger the Meter
res=sml(1 0 300)
print "Anfrage wird gesendet"
res=sml(1 1 "0000000000000000000000000000000000000000")
res=sml(1 1 "0000000000000000000000000000000000000000")
res=sml(1 1 "2F3F210D0A")
res=sml(1 0 2400)
case 3000
;Schicke Werte, falls sie nicht Null sind
if v1!=0
then
=>publish stat/Fernwaerme/RESULT {"kwh_count":%v1%}
endif
if v2!=0
then
=>publish stat/Fernwaerme/RESULT {"kwh_count_year":%v2%}
endif
if v3!=0
then
=>publish stat/Fernwaerme/RESULT {"heizleistung_max":%v3%}
endif
if v4!=0
then
=>publish stat/Fernwaerme/RESULT {"m3_count":%v4%}
endif
if v5!=0
then
=>publish stat/Fernwaerme/RESULT {"m3_count_year":%v5%}
endif
if v6!=0
then
=>publish stat/Fernwaerme/RESULT {"unknown":%v6%}
endif
if v7!=0
then
=>publish stat/Fernwaerme/RESULT {"durchlauf_max":%v7%}
endif
if v8!=0
then
=>publish stat/Fernwaerme/RESULT {"lauf_max":%v8%}
endif
if v8!=0
then
=>publish stat/Fernwaerme/RESULT {"flow_count":%v9%}
endif
if sd1!=0
then
=>publish stat/Fernwaerme/RESULT {"Tagesverbrauch_kWh":%sd1%}
endif
if sd2!=0
then
=>publish stat/Fernwaerme/RESULT {"Tagesverbrauch_m3":%sd2%}
endif
;Neue Runde alle 60 Minuten
case 36000
scnt=0
ends
>S
;Tagesverbrauch
hr=hours
if chg[hr]>0
and hr==1
and v2>0
then
sd1=v2-sm1
sd2=v5-sm2
sm1=v2
sm2=v5
svars
endif
>M 1
+1,3,o,16,2400,LGUH50,1
1,6.8(@1,Zählerstand,MWh,kwh_count,3
1,6.8*01(@1,Zählerstand_year,MWh,kwh_count_year,3
1,6.6(@1,maximale Heizleistung,kWh,heizleistung_max,1
1,6.26(@1,Durchlauf,m³,m3_count,2
1,6.26*01(@1,Durchlauf_year,m³,m3_count_year,2
1,9.24(@1,unknown,m³h,unknown,1
1,6.33(@1,maximaler Durchlauf,m³h,durchlauf_max,3
1,9.4(@1,maximale VR Temp,C,lauf_max,1
1,9.31(@1,Fließdauer,h,flow_count,0
#
Alles anzeigen
Logs:
00:00:00.001 HDW: ESP8266EX
00:00:00.050 CFG: aus Flash geladen von F9, Anzahl 59
00:00:00.055 QPC: Count 1
00:00:00.057 CFG: CR 386/699, Busy 0
00:00:00.116 SCR: nv=16, tv=0, vns=55, vmem=279, smem=2560
00:00:00.356 ROT: Mode 1
00:00:00.456 SRC: Restart
00:00:00.569 Projekt tasmota - Tasmota Version 13.1.0(TasmoCompiler-esp8266generic)-2_7_4_9(2023.11.09 19:58:23)
00:00:00.043 SCR: performs "sensor53 r"
00:00:00.213 SRC: Rule
00:00:00.314 CMD: Grp 0, Cmd 'SENSOR', Idx 53, Len 1, Pld -99, Data 'r'
00:00:02.058 SNS: Hardware Serial
00:00:02.059 meters: 1 , decode lines: 9, memory used: 1850 bytes
00:00:02.061 RSL: RESULT = {"Time":"1970-01-01T00:00:00","SML":{"CMD":"restart"}}
00:00:02.209 SNS: Hardware Serial
00:00:02.210 meters: 1 , decode lines: 9, memory used: 1850 bytes
00:00:02.269 CFG: in Flash gespeichert an F8, Anzahl 60, Bytes 4096
Alles anzeigen
Was wird im Debug Modus angezeigt?
welches Release läuft da - im Standardscript ist case ? sicherlich nicht enthalten
Was wird im Debug Modus angezeigt?
Debug modus ? Ich bin relativ neu, wie schalte ich denn der modus ein ?
weblog 4 auf der Konsole
welches Release läuft da - im Standardscript ist case ? sicherlich nicht enthalten
Tasmota Version | 13.1.0(TasmoCompiler-esp8266generic) |
---|---|
Erstellungs-Datum & -Uhrzeit | 2023.11.09 19:58:23 |
Core-/SDK-Version | 2_7_4_9/2.2.2-dev(38a443e) |
Hier die Debug Logs
11:13:15.522 CMD: Grp 0, Cmd 'BACKLOG', Idx 0, Len 77, Pld -99, Data ';SerialLog 4;WebLog 4;MqttLog 3;SysLog 4;LogHost 1;LogPort 514;TelePeriod 300'
11:13:15.525 HTP: Einstellungen
11:13:15.577 SRC: Backlog
11:13:15.580 CMD: Grp 0, Cmd 'SERIALLOG', Idx 1, Len 1, Pld 4, Data '4'
11:13:15.588 MQT: sml/tasmota/waerme/RESULT = {"SerialLog":{"4":{"Active":"4"}}}
11:13:15.598 SRC: Backlog
11:13:15.601 CMD: Grp 0, Cmd 'WEBLOG', Idx 1, Len 1, Pld 4, Data '4'
11:13:15.810 MQT: sml/tasmota/waerme/RESULT = {"WebLog":4}
11:13:16.015 SRC: Backlog
11:13:16.111 CMD: Grp 0, Cmd 'MQTTLOG', Idx 1, Len 1, Pld 3, Data '3'
11:13:16.413 MQT: sml/tasmota/waerme/RESULT = {"MqttLog":3}
11:13:16.729 SRC: Backlog
11:13:16.774 CMD: Grp 0, Cmd 'SYSLOG', Idx 1, Len 1, Pld 4, Data '4'
11:13:17.001 MQT: sml/tasmota/waerme/RESULT = {"SysLog":{"4":{"Active":"4"}}}
11:13:17.352 SRC: Backlog
11:13:17.437 CMD: Grp 0, Cmd 'LOGHOST', Idx 1, Len 1, Pld 1, Data '1'
11:13:17.732 CFG: CR 386/699, Busy 0
11:13:18.002 MQT: sml/tasmota/waerme/RESULT = {"LogHost":""}
11:13:18.262 SRC: Backlog
11:13:18.366 CMD: Grp 0, Cmd 'LOGPORT', Idx 1, Len 3, Pld 514, Data '514'
11:13:18.684 MQT: sml/tasmota/waerme/RESULT = {"LogPort":514}
11:13:19.010 SRC: Backlog
11:13:19.074 CMD: Grp 0, Cmd 'TELEPERIOD', Idx 1, Len 3, Pld 300, Data '300'
11:13:19.407 MQT: sml/tasmota/waerme/RESULT = {"TelePeriod":300}
11:13:19.737 CFG: in Flash gespeichert an FB, Anzahl 65, Bytes 4096
11:13:19.985 MQT: sml/tasmota/waerme/STATE = {"Time":"2024-03-07T11:13:19","Uptime":"0T00:01:55","UptimeSec":115,"Heap":12,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":332,"MqttCount":1,"POWER":"ON","Wifi":{"AP":1,"SSId":"MyIoTWLAN","BSSId":"7A:45:58:B4:27:EA","Channel":6,"Mode":"11n","RSSI":100,"Signal":-44,"LinkCount":1,"Downtime":"0T00:00:04"}}
11:13:21.001 MQT: sml/tasmota/waerme/SENSOR = {"Time":"2024-03-07T11:13:19","LGUH50":{"kwh_count":0.000,"kwh_count_year":0.000,"heizleistung_max":0.0,"m3_count":0.00,"m3_count_year":0.00,"unknown":0.0,"durchlauf_max":0.000,"lauf_max":0.0,"flow_count":0}}
11:14:27.992 SCR: compressed to 1279 bytes = 51 %
11:14:27.998 SCR: nv=16, tv=0, vns=55, vmem=279, smem=2560
11:14:27.001 SCR: performs "sensor53 r"
11:14:27.094 SRC: Rule
11:14:27.195 CMD: Grp 0, Cmd 'SENSOR', Idx 53, Len 1, Pld -99, Data 'r'
11:14:29.035 SNS: Hardware Serial
11:14:29.037 meters: 1 , decode lines: 9, memory used: 1850 bytes
11:14:29.041 MQT: sml/tasmota/waerme/RESULT = {"Time":"2024-03-07T11:14:27","SML":{"CMD":"restart"}}
11:14:29.047 HTP: Konsolen
11:14:29.414 CFG: in Flash gespeichert an FA, Anzahl 66, Bytes 4096
11:15:29.090 "Anfrage wird gesendet"
11:15:30.631 "Anfrage gesendet"
11:15:38.159 WIF: Prüfe Verbindung....
Alles anzeigen
Pin? wenn die Werte am Display ablesbar sind sollte es reichen, aber
;set sml driver to 300 baud and send /?! as HEX to trigger the Meter res=sml(1 0 300) print "Anfrage wird gesendet" res=sml(1 1 "0000000000000000000000000000000000000000") res=sml(1 1 "0000000000000000000000000000000000000000") res=sml(1 1 "2F3F210D0A") res=sml(1 0 2400)
diese Konstellation ist eine Trickanfrage die sicherlich mit der CPU-Frequenz, dem Chip und der sleep-Einstellung des System harmonieren muss -viel Glück beim probieren - oder Noschvie hat noch eine Idee.
Das System ist schwer überlastet und wird schon überhitzen !
aus WEBLOG 11:13:19.985 MQT: sml/tasmota/waerme/STATE = {"Time":"2024-03-07T11:13:19","Uptime":"0T00:01:55","UptimeSec":115,"Heap":12,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":332, und kann die Daten nicht mehr sicher abarbeiten (System-CPU zu schwach ?). Ein Versuch mit Sleep 250 wird nicht ausreichen !
>Status 2 in der Console zeigt uns das verwendete System.
kritischer Script - nur 1 Uhr und und !!
;Tagesverbrauch
hr=hours
if chg[hr]>0
and hr==1
and v2>0
then
für Test ersetzen durch:
;Tagesverbrauch (jede Minute)
hr=minutes
if chg[hr]>0
then
Alles anzeigen>Status 2 in der Console zeigt uns das verwendete System.
kritischer Script - nur 1 Uhr und und !!
;Tagesverbrauch
hr=hours
if chg[hr]>0
and hr==1
and v2>0
thenfür Test ersetzen durch:
;Tagesverbrauch (jede Minute)
hr=minutes
if chg[hr]>0
then
14:07:32.679 var not found: minutes
14:07:33.665 var not found: minutes
14:07:34.666 var not found: minutes
1.) ok - bei Minuten ist hier nur mins ausreichend um die Tasmota -Syntax zu befriedigen !
2.) Tasmota Befehl sensor53 d1 in der Konsole eingeben, damit die empfangenen SML Daten ausgegeben werden anstelle interpretiert zu werden.
Beispielhaft enthält die Tasmota Konsole anschließend Zeilen wie diese:
3.) Tasmota Befehl sensor53 d0 in der Konsole eingeben um den "Dump" Modus zu beenden.
Mal sehen ob bei der Idee von Noschvie was raus kommt.
4.) Entlasten der >F Session (100ms) schaffen das nicht bei einem 8266 !
d.h. >F Zeile löschen und gegen >S ersetzen und die alte >S Zeile löschen
ich bin etwas weiter, ein paar Daten werden doch ausgelesen...
22:32:09.967 "Anfrage wird gesendet"
22:32:13.776 : c
22:32:13.974 : 6.26*01(00909.84*m3)6.8*01(0027030*kWh)
22:32:14.118 : F(0)9.20(70686827)6.35(60*m)
22:32:14.468 : 6.6(0020.3*kW)6.6*01(0020.3*kW)6.33(000.516*m3ph)9.4(084.5*C&082.4*C)
22:32:14.827 : 6.31(0018709*h)6.32(0000000*h)9.22(R)9.6(000&70686827&0&000&70686827&0)
22:32:15.167 : 9.7(20000)6.32*01(0000000*h)6.36(01-01&00:00)6.33*01(000.516*m3ph)
22:32:15.354 : 6.8.1()6.8.2()6.8.3()6.8.4()6.8.5()
22:32:15.514 : 6.8.1*01()6.8.2*01()6.8.3*01()
22:32:15.634 : 6.8.4*01()6.8.5*01()
22:32:15.758 : 9.4*01(084.5*C&082.4*C)
22:32:15.964 : 6.36.1(2020-09-30)6.36.1*01(2020-09-30)
22:32:16.170 : 6.36.2(2023-01-23)6.36.2*01(2023-01-23)
22:32:16.368 : 6.36.3(2023-03-07)6.36.3*01(2023-03-07)
22:32:16.577 : 6.36.4(2023-11-05)6.36.4*01(2023-11-05)
22:32:16.899 : 6.36.5()6.36*02(01&00:00)9.36(2024-03-07&04:01:19)9.24(1.5*m3ph)
22:32:17.029 : 9.17(0)9.18()9.19()9.25()
22:32:17.381 : 9.1(0&1&0&1717&CECV&CECV&1&5.24&5.24&F&081008&041>04&08&0&00&:5&00&20)
22:32:17.526 : 9.2(&&)9.29()9.31(0011283*h)
22:32:17.880 : 9.0.1(00000000)9.0.2(00000000)9.34.1(000.00000*m3)9.34.2(000.00000*m3)
22:32:18.080 : 8.26.1(00000000*m3)8.26.2(00000000*m3)
22:32:18.306 : 8.26.1*01(00000000*m3)8.26.2*01(00000000*m3)
22:32:18.436 : 6.26.1()6.26.4()6.26.5()
22:32:18.700 : 6.26.1*01()6.26.4*01()6.26.5*01()0.0(70686827)
22:32:18.702 : !
Alles anzeigen
was hast du geändert?
Dein Zähler gibt zwar Obis Codes aus, hat aber kein LF am Ende jeden Codes.
Das kann nur mit "Pattern Compare shift mode" dekodiert werden und nicht im "Line Mode".
Line Mode ist aber default. Du musst also auf Pattern Compare umschalten.
Dazu diese Zeile in den Deskriptor einfügen:
1,=so2,0
Alles anzeigenDein Zähler gibt zwar Obis Codes aus, hat aber kein LF am Ende jeden Codes.
Das kann nur mit "Pattern Compare shift mode" dekodiert werden und nicht im "Line Mode".
Line Mode ist aber default. Du musst also auf Pattern Compare umschalten.
Dazu diese Zeile in den Deskriptor einfügen:
1,=so2,0
Danke für den Tip. Also so etwas ?
was hast du geändert?
Also der Script hat an sich die Daten ausgelesen.... Das Decoding/Mapping in den variablem passt noch nicht ...