Landys+Gyr Ultra Heat

Moin Moin,

ich habe einen Fernwärmezähler in meinem Haus welchen ich leider (noch) nicht ausgelesen bekomme.

Receive GPIO Pin ist 5
Transmit GPIO Pin ist 4

Das nachfolgende Skript soll auslesen können nachdem es den Zähler mit einer anderen Baud Rate aufweckt.

Sieht jemand auf Anhieb den Fehler?
Von Tasmota habe ich leider gar keine Ahnung …

>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,5,o,16,2400,LGUH50,4

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

#

Edit1:
Script angepasst, so leuchtet die Sende LED schon mal nicht permanent :wink:

Edit2:
Es ist ein UltraHeat 330

:crayon:by HarryP: Zusammenführung Doppelpost

Hallo,

Hast du es hin bekommen den Zähler auszulesen?

Gruß Marcel

Ich nutze diesen Lesekopf:

Mt folgendem Script habe ich einen Ultraheat 550 ausgelesen bekommen:

>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#heat_energy_total
v2=LGUH50#heat_energy_year
v3=LGUH50#heat_power_max
v4=LGUH50#volume_total
v5=LGUH50#volume_year
v6=LGUH50#volume_flow
v7=LGUH50#volume_flow_max
v8=LGUH50#temp_vorlauf_max
v9=LGUH50#flow_hours

>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 10
;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")
case 24
print "Anfrage wird verarbeitet"
res=sml(1 0 2400)
case 300
print 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
print "Restart Loop"
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,0,2400,LGUH50,1
1,=so2,1
; Energie
1,6.8(@1,Zählerstand,MWh,heat_energy_total,3
1,6.8*01(@1,Zählerstand_year,MWh,heat_energy_year,3
; Leistung
1,6.6(@1,maximale Heizleistung,kWh,heat_power_max,1
; Volumen gesamt / Jahr
1,6.26(@1,Durchlauf,m³,volume_total,2
1,6.26*01(@1,Durchlauf_year,m³,volume_year,2
; aktueller Volumenstrom (vorher "unknown")
1,9.24(@1,Volumenstrom,m³h,volume_flow,1
; maximaler Volumenstrom
1,6.33(@1,maximaler Durchlauf,m³h,volume_flow_max,3
; maximale Vorlauftemperatur
1,9.4(@1,maximale VR Temp,C,temp_vorlauf_max,1
; Fließdauer gesamt
1,9.31(@1,Fließdauer,h,flow_hours,0
#

:crayon:by HarryP: Post formatiert

1 „Gefällt mir“