Seite 2 von 3

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Do 2. Mär 2023, 22:41
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.

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Sa 4. Mär 2023, 22:07
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
  }
}

Re: Tasmota: Daten per MQTT empfangen

Verfasst: So 5. Mär 2023, 07:54
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.

Re: Tasmota: Daten per MQTT empfangen

Verfasst: So 5. Mär 2023, 12:34
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

Re: Tasmota: Daten per MQTT empfangen

Verfasst: So 5. Mär 2023, 13:08
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.

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mo 6. Mär 2023, 20:27
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!

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mo 6. Mär 2023, 22:11
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

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Di 14. Mär 2023, 15:04
von canner
Hi,
konnten Ihr den Fehler fixen? Ich bekomme nämlich die gleiche Meldung im solaranzeige.log
VG
Christian

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Di 14. Mär 2023, 15:29
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

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mo 24. Apr 2023, 11:46
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ß