Re: Tasmota: Daten per MQTT empfangen

Welche Geräter können mit dieser Anzeige benutzt werden?
Laderegler, Wallboxen, Batterie-Management-Systeme, WLAN Schalter mit Tasmota Firmware und Wechselrichter

Moderator: Ulrich

TeamO
Beiträge: 1147
Registriert: Mo 22. Jun 2020, 08:58
Wohnort: Ulm / Neu-Ulm
Hat sich bedankt: 24 Mal
Danksagung erhalten: 228 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von TeamO »

Kann es sein, dass Du nicht das Script von hier genommen hast, sondern ein geändertes? Versuch mal bitte folgendes:

Code: Alles auswählen

>D
;start, define variables
cnt=1
timer=1
w_new=0
w_delta=0
p:w_last=0

>B
;setup sensor
->sensor53 r

>T
w_new=WAERME#w_total

>S
timer=int(time)
if chg[timer]>0 
then
switch timer
case 0
print It is midnight
print wakeup start
sml(-1 1 "2400:8N1")
for cnt 1 72 1
sml(1 1 "55555555555555555555")
next
print wakeup end
print wait for the meter
delay(350)
sml(-1 1 "2400:8E1")
print request data
sml(1 1 "105BFE5916")
case 1
print It is a minute after midnight
print calculating daily value
print w_last %0w_last%
w_delta=w_new-w_last
w_last=w_new
svars
print w_new %0w_new%
print w_delta %0w_delta%
ends
endif

>J  
,"w_delta":%w_delta% 

>W
===============
Vortagsverbrauch:    {m} %3w_delta% KWh 

>M 1
+1,3,rE1,0,2400,WAERME,1
1,0C06bcd8@1,Total Energy,kWh,w_total,0
1,0C13bcd8@1000,Total volume,m³,v_total,2
1,0C2Bbcd8@1,Current power,W,p_act,0
1,0B3Bbcd6@1000,Current flow,m³/h,F_akt,3
1,0A5Abcd4@10,Flow temp,°C,t_flow,1
1,0A5Ebcd4@10,Return temp,°C,t_return,1
1,0A62bcd4@10,Temp diff,°C,t_diff,2
#
Oder stell Dein Script hier mal ein.
Gruß Timo

Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen

Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de

Tibber Invite (100% Öko-Strom + 50€ Bonus)

nick-tech
Beiträge: 15
Registriert: Sa 14. Jan 2023, 21:41
Hat sich bedankt: 1 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von nick-tech »

Hallo TeamO,

ich verwende tatsächlich ein anderes Script:

Code: Alles auswählen

>D
;start, define variables
wkup=0
timer=0
p:w_last=0
p:w_new=0
w_reading=0
w_delta=0
p_average=0
read=0
calc=0


>B
->sensor53 r
;w_new=26466
;svars


>T
if WAERME#w_total>0
then
w_reading=WAERME#w_total
endif


>S
if read==1
then
=#readmeter
read=0
endif

if calc==1
then
=#calculate
calc=0
endif

timer=int(time)
if chg[timer]>0
;once every minute
then
switch timer

case 1
print it is midnight
w_last=w_new
=#readmeter

case 2
print p_new is definitively updated, start calculation
=#calculate

ends
endif

#calculate
w_new=w_reading
print save value
svars
w_delta=w_new-w_last
p_average=w_delta/24

print w_last %0w_last%
print w_new %0w_new%
print w_delta %0w_delta%
print p_average %3p_average%


#readmeter

print wakeup start
;set serial protocol
sml(-1 1 "2400:8N1")

;0x55 for 2,2 seconds with 8N1 (53x), 2400 baud (wakeup sequence)
for wkup 0 52 1
sml(1 1 "55555555555555555555")
next
wkup=0

print wait for the meter
delay(350)

;switch protocol
sml(-1 1 "2400:8E1")
print request data
;send "105BFE5916" (request data)
sml(1 1 "105BFE5916")


>J  
;MQTT
,"WAERME_CALC":{"w_total":%w_new%
,"w_delta":%w_delta%
,"p_average":%p_average%}

>W
;web UI
===============
Verbrauch Vortag:    {m} %0w_delta% kWh
Durchschnittsleistung: {m} %3p_average% kW
Zählerstand alt: {m} %0w_last% kWh
Zählerstand neu: {m} %0w_new% kWh

bu(read "lese aus" "Zähler auslesen")
bu(calc "..." "berechnen")


>M 1
+1,3,rE1,0,2400,WAERME,1
;Sensor 1: 8E1
1,0C78bcd8@1,ModuSeriennummer,,serialnum,0
1,0406uuUUUUUU@1,Total energy,kWh,w_total,0
1,0C14bcd8@100,Total volume,m³,v_total,2

1,0B2Dbcd6@0.01,Current power,W,p_act,0
1,0B3Bbcd6@1000,Current flow,m³/h,f_akt,3

1,0A5Abcd4@10,Flow temp,°C,t_flow,1
1,0A5Ebcd4@10,Return temp,°C,t_return,1
1,0B61bcd6@100,Temp diff,°C,t_diff,2

1,046Dbcd8@1,Time,,time,0
1,0227uuUU@1,Meter days,d,OpDays,0
1,09FD0Euu@1,Firmware Version,,FW_Version,0
1,09FD0Fuu@1,Software Version,,SW_Version,0
1,684d4d68080072x4uuUU@1,Manufacturer,,manufacturer,0
1,684d4d68080072x4x2uu@1,Generation,,generation,0
1,684d4d68080072x4x2x1uu@1,Medium,,media,0
1,684d4d68080072x4x2x1x1uu@1,Zaehler Auslesungen,,cnt_read,0
1,684d4d68080072x4x2x1x1x1uu@1,Fehlerbyte,,Error_State,0
#
  • bietet die Möglichkeit eine Auslesung manuell anzustoßen
  • MQTT-Nachricht ist etwas umfangreicher


Ich habe mal testweise das von dir gepostete verwendet, macht aber leider keinen Unterschied:

Code: Alles auswählen

04.03. 21:51:01    -Multi Regler Auslesen [Start].
04.03. 21:51:01    -Verarbeitung von: '1.user.config.php'   Regler: 29
04.03. 21:51:01 |----------------   Start  go-e_wallbox.php   ---------------------
04.03. 21:51:01    -Zentraler Timestamp: 1677963061
04.03. 21:51:01 o  -Hardware Version:
04.03. 21:51:06    -car: 1
04.03. 21:51:06    -alw: 1
04.03. 21:51:06    -amp: 20
04.03. 21:51:06    -ast: 2
04.03. 21:51:06    -Firmware Version: 041.0
04.03. 21:51:06    -Protokoll Version: B
04.03. 21:51:06    -MQTT Daten zum [ localhost ] senden.
04.03. 21:51:06 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
04.03. 21:51:06    -Multi-Regler-Ausgang. 2
04.03. 21:51:08    -OK. Datenübertragung erfolgreich.
04.03. 21:51:08 |----------------   Stop   go-e_wallbox.php   ---------------------
04.03. 21:51:08    -Verarbeitung von: '2.user.config.php'   Regler: 23
04.03. 21:51:08 |----------------   Start  sonoff_mqtt.php    ---------------------
04.03. 21:51:08    -Zentraler Timestamp: 1677963061
04.03. 21:51:08 +  -Die Daten werden ausgelesen...
04.03. 21:51:09 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
04.03. 21:51:14    -Keine Daten vom Sonoff Modul empfangen.
04.03. 21:51:14 !! -Keine gültigen Daten empfangen.
04.03. 21:51:14 |----------------   Stop   sonoff_mqtt.php     --------------------
04.03. 21:51:14    -Verarbeitung von: '3.user.config.php'   Regler: 23
04.03. 21:51:14 |----------------   Start  sonoff_mqtt.php    ---------------------
04.03. 21:51:14    -Zentraler Timestamp: 1677963061
04.03. 21:51:14 +  -Die Daten werden ausgelesen...
04.03. 21:51:20    -Keine Daten vom Sonoff Modul empfangen.
04.03. 21:51:20 !! -Keine gültigen Daten empfangen.
04.03. 21:51:20 |----------------   Stop   sonoff_mqtt.php     --------------------
04.03. 21:51:21    -Multi Regler Auslesen [Stop].
Ich dachte Anfangs, dass Solaranzeige einfach MQTT-Nachrichten versteht und die empfangenen Werte in die Datenbank schreibt. Das ist ja nicht der Fall. Alternativ könnte ich in Tasmota die Nachricht anpassen. xxx und yyy sind durch das Script bestimmt, einzig der Zeitstempel ist schon in der Tasmota Firmware festgelegt so weit ich weiß.

Code: Alles auswählen

{
  "Time": "2023-03-04T22:05:29",
  "xxx": {
    yyy
  }
}

TeamO
Beiträge: 1147
Registriert: Mo 22. Jun 2020, 08:58
Wohnort: Ulm / Neu-Ulm
Hat sich bedankt: 24 Mal
Danksagung erhalten: 228 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von TeamO »

Da war noch ein kleiner Fehler in der sonoff_mqtt.php.
Hier die korrigierte Version, welche mit meinem Script funktioniert.
Die Anpassungen welche ich mache verwenden zu mindestens 95% das originale Script von Github mit kleinen Änderungen, damit es verständlicher ist und der Code eventuell von mehreren Zählern kombiniert werden kann.
Dateianhänge
sonoff_mqtt.php
(33.02 KiB) 118-mal heruntergeladen
Gruß Timo

Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen

Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de

Tibber Invite (100% Öko-Strom + 50€ Bonus)

nick-tech
Beiträge: 15
Registriert: Sa 14. Jan 2023, 21:41
Hat sich bedankt: 1 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von nick-tech »

Lieder funktioniert das immer noch nicht.

Noch mal der Reihe nach:
1. Die Daten kommen beim MQTT-Broker von Solaranzeige an:

Code: Alles auswählen

admin@solaranzeige2:/var/www/html$ mosquitto_sub -h localhost -v -t solaranzeige/#
liefert:

Code: Alles auswählen

solaranzeige/anzeige/2/SENSOR {"Time":"2023-03-05T11:16:38","WAERME":{"w_total":0,"v_total":0.00,"p_act":0,"F_akt":0.000,"t_flow":0.0,"t_return":0.0,"t_diff":0.00}}
in "schön" (gerade wieder überall "0" weil Zähler neu gestartet:

im Topic "solaranzeige/anzeige/2/SENSOR" steht also:

Code: Alles auswählen

{
  "Time": "2023-03-05T11:19:38",
  "WAERME": {
    "w_total": 0,
    "v_total": 0,
    "p_act": 0,
    "F_akt": 0,
    "t_flow": 0,
    "t_return": 0,
    "t_diff": 0
  }
}

2. Die Daten sind so weit ich das verstehe genau in dem Format das dein Script erwartet:

Code: Alles auswählen

if ($k == "WAERME") { //Zähler LED WAERME
              $aktuelleDaten["Energie"] = ($v["w_total"] * 1000);
              $aktuelleDaten["Volumen"] = ($v["v_total"]);
	     	  $aktuelleDaten["Leistung"] = ($v["p_act"]);
			  $aktuelleDaten["Durchfluss"] = ($v["F_akt"]);
			  $aktuelleDaten["Temperatur"] = ($v["t_flow"]);
		      $aktuelleDaten["Ruecklauf_Temp"] = ($v["t_return"]);
		      $aktuelleDaten["Temp_differenz"] = ($v["t_diff"]);
			  $aktuelleDaten["Sensor"] = "WAERME";
            }
Trotzdem klappt das irgendwie nicht:

Code: Alles auswählen

05.03. 11:27:01    -Multi Regler Auslesen [Start].
05.03. 11:27:01    -Verarbeitung von: '1.user.config.php'   Regler: 29
05.03. 11:27:01 |----------------   Start  go-e_wallbox.php   ---------------------
05.03. 11:27:01    -Zentraler Timestamp: 1678012021
05.03. 11:27:01 o  -Hardware Version:
05.03. 11:27:06    -car: 1
05.03. 11:27:06    -alw: 1
05.03. 11:27:06    -amp: 20
05.03. 11:27:06    -ast: 2
05.03. 11:27:06    -Firmware Version: 041.0
05.03. 11:27:06    -Protokoll Version: B
05.03. 11:27:06    -MQTT Daten zum [ localhost ] senden.
05.03. 11:27:07 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
05.03. 11:27:07    -Multi-Regler-Ausgang. 1
05.03. 11:27:08    -OK. Datenübertragung erfolgreich.
05.03. 11:27:08 |----------------   Stop   go-e_wallbox.php   ---------------------
05.03. 11:27:08    -Verarbeitung von: '2.user.config.php'   Regler: 23
05.03. 11:27:08 |----------------   Start  sonoff_mqtt.php    ---------------------
05.03. 11:27:08    -Zentraler Timestamp: 1678012021
05.03. 11:27:08 +  -Die Daten werden ausgelesen...
05.03. 11:27:08 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
05.03. 11:27:14    -Keine Daten vom Sonoff Modul empfangen.
05.03. 11:27:14 !! -Keine gültigen Daten empfangen.
05.03. 11:27:14 |----------------   Stop   sonoff_mqtt.php     --------------------
05.03. 11:27:14    -Verarbeitung von: '3.user.config.php'   Regler: 23
05.03. 11:27:14 |----------------   Start  sonoff_mqtt.php    ---------------------
05.03. 11:27:14    -Zentraler Timestamp: 1678012021
05.03. 11:27:14 +  -Die Daten werden ausgelesen...
05.03. 11:27:20    -Keine Daten vom Sonoff Modul empfangen.
05.03. 11:27:20 !! -Keine gültigen Daten empfangen.
05.03. 11:27:20 |----------------   Stop   sonoff_mqtt.php     --------------------
05.03. 11:27:21    -Multi Regler Auslesen [Stop].
Bisher haben wir versucht:
- ändern von $WR_IP (einmal war hier die IP vom Tasmota-Gerät eingetragen, einmal die IP von der Solaranzeige), macht scheinbar keinen unterschied
- ändern von "Host" in den MQTT-Einstellungen vom Tasmota-Gerät (einmal die IP, einmal der Hostname), leider ohne Erfolg

So weit ich dein Script (sonoff_mqtt.php) verstehe, muss damit das ausgelesen wird die Variabel $k =="WAERME" sein. $k wird gefüllt aus $aktuelleDaten["Sensor"]. Das wird in Zeile 64 gefüllt mit $aktuelleDaten["Sensor"] = "0"

meine aktuelle Konfiguration noch mal im Anhang
Dateianhänge
2.user.config.php
(30.69 KiB) 104-mal heruntergeladen

TeamO
Beiträge: 1147
Registriert: Mo 22. Jun 2020, 08:58
Wohnort: Ulm / Neu-Ulm
Hat sich bedankt: 24 Mal
Danksagung erhalten: 228 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von TeamO »

Hier muss bei Dir was dann an der Konfig von Tasmota nicht passen.
Ich habe es mit meinem Script gestestet und ich bekomme keine Fehler und 0-Werte.
Ich kann mir das ganze gerne mal bei Dir über TeamViewer anschauen. Schick mir dazu mal ne PN.
Gruß Timo

Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen

Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de

Tibber Invite (100% Öko-Strom + 50€ Bonus)

nick-tech
Beiträge: 15
Registriert: Sa 14. Jan 2023, 21:41
Hat sich bedankt: 1 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von nick-tech »

Hallo TeamO,

ich hab dir eine PN geschrieben. Ich vermute die Fehlerursache eher bei der Solaranzeige, da die MQTT-Daten ja schon dort ankommen..
Aber egal, herzlichen Dank für dein Angebot!

TeamO
Beiträge: 1147
Registriert: Mo 22. Jun 2020, 08:58
Wohnort: Ulm / Neu-Ulm
Hat sich bedankt: 24 Mal
Danksagung erhalten: 228 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von TeamO »

Problem ist nicht ob Daten ankommen, sondern wie diese ankommen. ;)
Ich antworte morgen auf deine Nachricht. Dann bekommen wir das schon bei dir hin
Gruß Timo

Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen

Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de

Tibber Invite (100% Öko-Strom + 50€ Bonus)

canner
Beiträge: 10
Registriert: Do 2. Mär 2023, 09:29
Hat sich bedankt: 3 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von canner »

Hi,
konnten Ihr den Fehler fixen? Ich bekomme nämlich die gleiche Meldung im solaranzeige.log
VG
Christian

TeamO
Beiträge: 1147
Registriert: Mo 22. Jun 2020, 08:58
Wohnort: Ulm / Neu-Ulm
Hat sich bedankt: 24 Mal
Danksagung erhalten: 228 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von TeamO »

Der Wärme-Zähler ist eingebunden. Siehe hier viewtopic.php?t=3486
Problem war hier die Config von Tasmota, soweit ich mich erinnere
Gruß Timo

Auflistung Geräte/Dashboards/Anschlussart
Datenbankfelder der einzelnen Geräte
GANZ WICHTIG: Überblick der vorhandenen Anleitungen

Fertige Komplett-Systeme gibt es hier anfragen[AT]bauer-timo[.]de

Tibber Invite (100% Öko-Strom + 50€ Bonus)

ttoommeekk
Beiträge: 23
Registriert: Mo 20. Feb 2023, 09:21
Hat sich bedankt: 11 Mal
Danksagung erhalten: 5 Mal

Re: Tasmota: Daten per MQTT empfangen

Beitrag von ttoommeekk »

Hallo,

auf meinem Shelly Plug S läuft die Tasmota Version 12.4 .
Ich habe das Gerät auch in meine solaranzeige (als device "sonoff") erfolgreich einbinden können (als 2. Regler meiner Multiregler-Anzeige) und im solaranzeige.log wird es als "Sonoff POW R3 Modul" erkannt und für mich weitestgehend zufriedenstellend ausgelesen und auch in Grafana angezeigt.

Nun habe ich 2 Dinge, die mich noch nicht zufriedenstellen:
1.) das Feld "WattstundenGesamtGestern" wird nicht in die Influx-DB geschrieben (das Feld bleibt leer) - Tasmota liefert hier ja ENERGY "yesterday" im STATUS10
2.) die Temperatur wird ebenfalls nicht in die Influx-DB geschrieben (das Feld bleibt leider auch leer) - Tasmota liefert aber doch auch ANALOG "Temperature" im STATUS10

Da die Influx-DB (bei mir solaranzeige2) sich die Daten offenbar (warum auch immer) nicht zieht (bzw. sie nicht schreibt), erhalte ich aktuell natürlich auch keine Anzeige zu diesen 2 Feldern in meinem Grafana-Panel.

Was mache ich falsch oder ist das aktuell (noch) nicht unterstützt?

In der "sonoff_mqtt.php" sind diese Felder doch bereits zum Auslesen aufgeführt (sofern ich das richtig deute). Habe vorsorglich mal die 2 PHP-Dateien "sonoff_mqtt.php" und "sonoff_mqtt_senden.php" in meiner laufenden Version (32Bit V4.8.2) gegen die aktuellen aus Solaranzeige-V5.1.0-32Bit getauscht (in der Hoffnung, dass in der alten PHP noch eim Bug war), das hat aber auch keine Besserung gebracht. Die 2 Datenfelder bleiben leer. Bin leider komplett unerfahren in PHP-Code, daher mag es durchaus sein, dass ich die Zeilen in der PHP-Datei dort falsch deute.
In der Tasmota-Oberfläche werden die Daten jedenfalls angezeigt und auch aus der Anzeige in der Konsole auf der dem Shelly Plug S deute ich, dass die Daten "Temperature" und "Yesterday" gesendet werden.

Kann mir jemand bitte nen kleinen Anschubser geben, wie ich hier weiterkomme?
Danke und Gruß

Antworten

Zurück zu „Regler, Wallboxen und Wechselrichter“