Seite 1 von 3

Tasmota: Daten per MQTT empfangen

Verfasst: Mo 16. Jan 2023, 21:25
von nick-tech
Hallo Zusammen,

ich habe seit längerem eine Solaranzeige-Installation am laufen die bisher "nur" Daten von einem go-e-charger empfängt.

Mittlerweile sind zwei weitere Geräte hinzugekommen. Beide sollten mit Solaranzeige eigentlich auslesbar sein.
Auf beiden Geräten läuft Tasmota, beide Geräte senden ihre Werte per MQTT, das funkitoniert meiner Ansicht nach auch wie gewünscht:
Screenshot 2023-01-16 203203.png
Auf dem solaranzeige-rechner sehe ich mit (mosquitto_sub...) die gleichen Werte, die Werte kommen also dort an.

In den beiden Datenbanken die ich dafür in influx angelegt habe, landen aber keine Daten.
Mir ist unklar wie aus den JSON-Daten in den MQTT-Topics die Tasmota schickt einzelne Werte werden, die in der Datenbank landen sollen.
Vermutlich ist dazu der Eintrag "Device Name" zuständig. Ich habe hier mit nichts erfolg gehabt (hätte erwartet, dass zumindest einige Werte aus dem JSON entnommen werden können. So unterschiedlich sind die ja nicht, zumindest bei dem Stromstecker (JSON Inhalte siehe unten).

Der Stromstecker ist bei mir der Sensor "3", hier die aus meiner Sicht relevanten Daten der Konfiguration (der Wärmezähler (Sensor "2")) sollte analog funktionieren:

Code: Alles auswählen

$Regler = "23";
$GeraeteNummer = "3";
$InfluxDB_local = true;
$InfluxDBLokal = "epresso" //was da wohl dran hängt? Entsprechende Datenbank existiert
$MQTT = true;
$MQTTBroker = "localhost";
$MQTTGeraet = "3";
$MQTTTopic[1] = "solaranzeige/anzeige/3/#";
$Topic = "3"; //Wieso steht hier in der Anleitung was von sonoff? hier ist doch nur 1-6 möglich?
 
Wie finde ich denn heraus wo es hängt?


JSON-Inhalte aus den MQTT-Nachrichten
Stromstecker:

Code: Alles auswählen

{
  "Time": "2023-01-16T21:02:01",
  "ANALOG": {
    "Temperature": 33
  },
  "ENERGY": {
    "TotalStartTime": "2022-01-03T21:28:09",
    "Total": 145.822,
    "Yesterday": 0.535,
    "Today": 0.619,
    "Period": 0,
    "Power": 0,
    "ApparentPower": 0,
    "ReactivePower": 0,
    "Factor": 0,
    "Voltage": 0,
    "Current": 0
  },
  "TempUnit": "C"
}
Wärmezähler:

Code: Alles auswählen

{
  "Time": "2023-01-16T20:59:32",
  "WAERME": {
    "w_total": 26360,
    "v_total": 902.6,
    "p_act": 200,
    "f_akt": 0.007,
    "t_flow": 55.2,
    "t_return": 30.7,
    "t_diff": 24.75,
    "OpDays": 1096
  },
  "WAERME_CALC": {
    "w_delta": 43,
    "p_average": 1.79
  }
}
Vielen Dank im Vorraus!

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mo 16. Jan 2023, 21:54
von nick-tech
Nachtrag:
Kann es sein, dass beim auslesen des go-e-chargers was schief läuft und 3.user.config.php gar nicht ausgelesen wird? Wobei ich in Grafana aktuelle Werte habe..?

Mich wundert der Eintrag:
16.01. 21:51:05 -Daten nicht zur lokalen InfluxDB gesendet! info: array (

allerdings gibt es dnach ja einen Fehler beim einlesen der sonoff mqtt-Werte..

Code: Alles auswählen

16.01. 23:11:10    -Daten nicht zur lokalen InfluxDB gesendet! info: array (
  'url' => 'http://localhost/write?db=solaranzeige&precision=s',
  'content_type' => 'application/json',
  'http_code' => 400,
  'header_size' => 531,
(................)
  'total_time_us' => 76983,
)
16.01. 23:10:18    -Multi-Regler-Ausgang. -8
16.01. 23:10:18    -OK. Datenübertragung erfolgreich.
16.01. 23:10:18 |----------------   Stop   go-e_wallbox.php   ---------------------
16.01. 23:10:18    -Verarbeitung von: '2.user.config.php'   Regler: 23
16.01. 23:10:18 |----------------   Start  sonoff_mqtt.php    ---------------------
16.01. 23:10:18    -Zentraler Timestamp: 1673907002
16.01. 23:10:18 +  -Die Daten werden ausgelesen...
16.01. 23:10:24    -Keine Daten vom Sonoff Modul empfangen.
16.01. 23:10:24 !! -Keine gültigen Daten empfangen.
16.01. 23:10:24 |----------------   Stop   sonoff_mqtt.php     --------------------
16.01. 23:10:24    -Verarbeitung von: '3.user.config.php'   Regler: 23
16.01. 23:10:24 |----------------   Start  sonoff_mqtt.php    ---------------------
16.01. 23:10:24    -Zentraler Timestamp: 1673907002
16.01. 23:10:24 +  -Die Daten werden ausgelesen...
16.01. 23:10:30    -Keine Daten vom Sonoff Modul empfangen.
16.01. 23:10:30 !! -Keine gültigen Daten empfangen.
16.01. 23:10:30 |----------------   Stop   sonoff_mqtt.php     --------------------
16.01. 23:10:30    -Multi Regler Auslesen [Stop].


Re: Tasmota: Daten per MQTT empfangen

Verfasst: Di 17. Jan 2023, 10:34
von TeamO
Beim Shelly Plug S bin ich mir nicht sicher, ob Ulrich diesen bereits implementiert hat.
Beim Wärmezähler kann ich Dir sagen -> Dieser ist noch nicht implementiert. Siehe hier
Um was für einen Zähler handelt es sich genau (ist er in dieser Liste hier enthalten) oder kannst Du mir das entsprechende Script geben, damit ich ihn einbinden kann?

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Di 28. Feb 2023, 21:56
von nick-tech
Hallo TeamO,

es hat ein bisschen gedauert bis der Zähler in der Tasmota-Doku aufgenommen wurde, weil man beim Auslesen die Parität umschalten muss. Das ist mittlerweile (Tasmota 12.2) enthalten.

Es geht um diesen Zäherl hier https://tasmota.github.io/docs/Smart-Me ... -pro-m-bus

Tasmota liefert die Daten per MQTT, die kommen auch an, werden aber nicht verarbeitet und nicht in die Datenbank geschrieben:

Code: Alles auswählen

28.02. 21:44:23    -Verarbeitung von: '3.user.config.php'   Regler: 23
28.02. 21:44:23 |----------------   Start  sonoff_mqtt.php    ---------------------
28.02. 21:44:23    -Zentraler Timestamp: 1677617041
28.02. 21:44:23 +  -Die Daten werden ausgelesen...
28.02. 21:44:24 MQT-Daten in die Influx Datenbank 'warmezaehler' geschrieben. Gerätenummer: 2 Spalte: SENSOR  Wert: {"Time":"2023-02-28T21:44:14","WAERME":{"serialnum":20360384,"w_total":27985,"v_total":955.76,"p_act":0,"f_akt":0.000,"t_flow":55.6,"t_return":18.3,"t_diff":38.99,"time":23611335,"OpDays":1139,"FW_Version":7,"SW_Version":17,"manufacturer":9874,"generation":23,"media":4,"cnt_read":239,"Error_State":0}  ,"WAERME_CALC":{"w_total":27978.00,"w_delta":67.00,"p_average":2.79}} RC: Daten nicht zur InfluxDB gesendet! info: Array
(
    [url] => http://localhost/write?db=warmezaehler&precision=s
    [content_type] => application/json
    [http_code] => 404
    [header_size] => 322
    [request_size] => 543
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.00071
    [namelookup_time] => 0.000116
    [connect_time] => 0.000117
    [pretransfer_time] => 0.00022
    [size_upload] => 386
    [size_download] => 49
    [speed_download] => 49000
    [speed_upload] => 386000
    [download_content_length] => 49
    [upload_content_length] => 386
    [starttransfer_time] => 0.000676
    [redirect_time] => 0
    [redirect_url] =>
    [primary_ip] => 127.0.0.1
    [certinfo] => Array
        (
        )

    [primary_port] => 8086
    [local_ip] => 127.0.0.1
    [local_port] => 46586
    [http_version] => 2
    [protocol] => 1
    [ssl_verifyresult] => 0
    [scheme] => HTTP
    [appconnect_time_us] => 0
    [connect_time_us] => 117
    [namelookup_time_us] => 116
    [pretransfer_time_us] => 220
    [redirect_time_us] => 0
    [starttransfer_time_us] => 676
    [total_time_us] => 710
)

Die json payload passt doch eigentlich:

Code: Alles auswählen

{
    "Time":"2023-02-28T21:44:14",
    "WAERME":{
        "serialnum":20360384,
        "w_total":27985,
        "v_total":955.76,
        "p_act":0,
        "f_akt":0.000,
        "t_flow":55.6,
        "t_return":18.3,
        "t_diff":38.99,
        "time":23611335,
        "OpDays":1139,
        "FW_Version":7,
        "SW_Version":17,
        "manufacturer":9874,
        "generation":23,
        "media":4,
        "cnt_read":239,
        "Error_State":0
    },
    "WAERME_CALC":{
        "w_total":27978.00,
        "w_delta":67.00,
        "p_average":2.79
    }
}
Oder muss ich noch irgendwas machen um genau diese payload zu zerlegen? Ich bin bisher davon ausgegangen, dass ohne weitere Konfiguration einfach alle daten die als json per mqtt kommen in einzelne Spalten zerlegt und in die Datenbank geschrieben werden. Falls man weniger möchte, kann man das in der user.config.php einschränken

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mi 1. Mär 2023, 10:41
von TeamO
Wie schon gesagt, können die Daten auch noch nicht in die Datenbank geschrieben werden, da dieser Zähler noch nicht eingebunden ist.
Ich schau, dass ich Dir die passenden Dateien zum Testen erstelle.

EDIT: Versuch es mal mit diesen beiden Dateien.

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Mi 1. Mär 2023, 23:39
von nick-tech
Hallo und vielen Dank für deine Mühe!

ich habe deine Dateien in meine Installation kopiert. Leider bringt das noch nicht den erhofften Erfolg. (siehe Log unten)

`2.user.config.php`ist der Wärmezähler. Ich habe die Konfiguration angehängt:
2.user.config.php
(30.69 KiB) 112-mal heruntergeladen
Hier noch die MQTT Konfiguration von Tasmota
tasmota config.png
Mit `mosquitto_sub -h localhost -v -t solaranzeige/#`sehe ich dass die Nachrichten vom Wärmezähler ankommen

Was muss ich denn in Tasmota bei "DeviceName" für den Wärmezähler eintragen?

Code: Alles auswählen

01.03. 23:13:01    -Multi Regler Auslesen [Start].
01.03. 23:13:01    -Verarbeitung von: '1.user.config.php'   Regler: 29
01.03. 23:13:01 |----------------   Start  go-e_wallbox.php   ---------------------
01.03. 23:13:01    -Zentraler Timestamp: 1677708781
01.03. 23:13:01 o  -Hardware Version:
01.03. 23:13:06    -car: 1
01.03. 23:13:06    -alw: 0
01.03. 23:13:06    -amp: 12
01.03. 23:13:06    -ast: 2
01.03. 23:13:06    -Firmware Version: 041.0
01.03. 23:13:06    -Protokoll Version: B
01.03. 23:13:06    -MQTT Daten zum [ localhost ] senden.
01.03. 23:13:06 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
01.03. 23:13:06    -Multi-Regler-Ausgang. 2
01.03. 23:13:08    -OK. Datenübertragung erfolgreich.
01.03. 23:13:08 |----------------   Stop   go-e_wallbox.php   ---------------------
01.03. 23:13:09    -Verarbeitung von: '2.user.config.php'   Regler: 23
01.03. 23:13:09 |----------------   Start  sonoff_mqtt.php    ---------------------
01.03. 23:13:09    -Zentraler Timestamp: 1677708781
01.03. 23:13:09 +  -Die Daten werden ausgelesen...
01.03. 23:13:15    -Keine Daten vom Sonoff Modul empfangen.
01.03. 23:13:15 !! -Keine gültigen Daten empfangen.
01.03. 23:13:15 |----------------   Stop   sonoff_mqtt.php     --------------------
01.03. 23:13:15    -Verarbeitung von: '3.user.config.php'   Regler: 23
01.03. 23:13:15 |----------------   Start  sonoff_mqtt.php    ---------------------
01.03. 23:13:15    -Zentraler Timestamp: 1677708781
01.03. 23:13:15 +  -Die Daten werden ausgelesen...
01.03. 23:13:16 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
01.03. 23:13:21    -Keine Daten vom Sonoff Modul empfangen.
01.03. 23:13:21 !! -Keine gültigen Daten empfangen.
01.03. 23:13:21 |----------------   Stop   sonoff_mqtt.php     --------------------
01.03. 23:13:22    -Multi Regler Auslesen [Stop].
3.user.config.php ist übrigens ein `Shelly Plug S` den würde ich auch noch gerne einbinden. Dieser Stecker liefert folgendes Json:

Code: Alles auswählen

{
  "Time": "2023-03-01T23:42:17",
  "ANALOG": {
    "Temperature": 32.3
  },
  "ENERGY": {
    "TotalStartTime": "2022-01-03T21:28:09",
    "Total": 164.058,
    "Yesterday": 0.543,
    "Today": 0.36,
    "Period": 0,
    "Power": 0,
    "ApparentPower": 0,
    "ReactivePower": 0,
    "Factor": 0,
    "Voltage": 0,
    "Current": 0
  },
  "TempUnit": "C"
}

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Do 2. Mär 2023, 08:40
von TeamO
Trag mal in der MQTT Konfiguration bei Tasmota unter Host die IP von der Solaranzeige ein.
Ich gehen von 192.168.11.181 aus, wenn ich mir Deine 2.user.config.php anschaue.
Dann geb bitte mal in der Tasmota Console "status 0" ein und schick mir das Ergebnis.
Der DeviceName ist für das Aslesen uninteressant.

Wegen dem Plug S schauen wir danach. Eins nach dem anderen ;)

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Do 2. Mär 2023, 21:23
von nick-tech
Hallo,

ich hab in der MQTT-Konfiguration von Tasmota die IP-Adresse vom Solaranzeige Server eingetragen (bisher stand da der hostname, aber die Nachrichten kamen ja damit auch bei der Solaranzeige an).

Die IP n der "2.user.config.php" ($WR_IP = "192.168.11.181";) ist die IP des Wärmezählers. Ich gehe davon aus dass das so stimmt.

Hier die Ausgabe von "status 0":

Code: Alles auswählen

21:20:52.615 CMD: status 0
21:20:52.617 SRC: WebConsole from 192.168.11.67
21:20:52.619 CMD: Grp 0, Cmd 'STATUS', Idx 1, Len 1, Pld 0, Data '0'
21:20:52.626 MQT: solaranzeige/anzeige/2/STATUS = {"Status":{"Module":0,"DeviceName":"waermezaehler","FriendlyName":["waermezaehler"],"Topic":"2","ButtonTopic":"0","Power":1,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0,"InfoRetain":0,"StateRetain":0,"StatusRetain":0}}
21:20:52.631 MQT: solaranzeige/anzeige/2/STATUS1 = {"StatusPRM":{"Baudrate":2400,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"http://ota.tasmota.com/tasmota/release/tasmota.bin.gz","RestartReason":"Software/System restart","Uptime":"0T00:29:41","StartupUTC":"2023-03-02T19:51:11","Sleep":50,"CfgHolder":4617,"BootCount":46,"BCResetTime":"2022-11-27T00:36:33","SaveCount":551,"SaveAddress":"F9000"}}
21:20:52.635 MQT: solaranzeige/anzeige/2/STATUS2 = {"StatusFWR":{"Version":"12.3.0(tasmota)","BuildDateTime":"2023-01-11T20:35:05","Boot":31,"Core":"2_7_4_9","SDK":"2.2.2-dev(38a443e)","CpuFrequency":80,"Hardware":"ESP8266EX","CR":"377/699"}}
21:20:52.639 MQT: solaranzeige/anzeige/2/STATUS3 = {"StatusLOG":{"SerialLog":0,"WebLog":3,"MqttLog":0,"SysLog":0,"LogHost":"","LogPort":514,"SSId":["XXXXXX",""],"TelePeriod":60,"Resolution":"558180C0","SetOption":["00008009","2805C80001000600003C5A0A192800000000","00000080","00006000","00004000","00000000"]}}
21:20:52.650 MQT: solaranzeige/anzeige/2/STATUS4 = {"StatusMEM":{"ProgramSize":671,"Free":332,"Heap":15,"ProgramFlashSize":1024,"FlashSize":1024,"FlashChipId":"14325E","FlashFrequency":40,"FlashMode":"DOUT","Features":["00000809","879AC787","043E8001","000000CF","010013C0","C000F989","00004004","00001000","54000020","00000080"],"Drivers":"1,2,3,4,5,6,7,8,9,10,12,16,18,19,20,21,22,24,26,27,29,30,35,37,45,62","Sensors":"1,2,3,4,5,6,53"}}
21:20:52.657 MQT: solaranzeige/anzeige/2/STATUS5 = {"StatusNET":{"Hostname":"christoph-waermezaehler","IPAddress":"192.168.11.181","Gateway":"192.168.11.1","Subnetmask":"255.255.255.0","DNSServer1":"192.168.11.1","DNSServer2":"0.0.0.0","Mac":"C8:C9:A3:5B:E7:ED","Webserver":2,"HTTP_API":1,"WifiConfig":4,"WifiPower":17.0}}
21:20:52.662 MQT: solaranzeige/anzeige/2/STATUS6 = {"StatusMQT":{"MqttHost":"192.168.11.6","MqttPort":1883,"MqttClientMask":"waermezaehler","MqttClient":"waermezaehler","MqttUser":"DVES_USER","MqttCount":1,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30,"SOCKET_TIMEOUT":4}}
21:20:52.668 MQT: solaranzeige/anzeige/2/STATUS7 = {"StatusTIM":{"UTC":"2023-03-02T20:20:52","Local":"2023-03-02T21:20:52","StartDST":"2023-03-26T02:00:00","EndDST":"2023-10-29T03:00:00","Timezone":"+01:00","Sunrise":"07:30","Sunset":"18:33"}}
21:20:52.678 MQT: solaranzeige/anzeige/2/STATUS10 = {"StatusSNS":{"Time":"2023-03-02T21:20:52","WAERME":{"serialnum":0,"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,"time":0,"OpDays":0,"FW_Version":0,"SW_Version":0,"manufacturer":0,"generation":0,"media":0,"cnt_read":0,"Error_State":0}  ,"WAERME_CALC":{"w_total":28072.00,"w_delta":0.00,"p_average":0.00}}}
21:20:52.684 MQT: solaranzeige/anzeige/2/STATUS11 = {"StatusSTS":{"Time":"2023-03-02T21:20:52","Uptime":"0T00:29:41","UptimeSec":1781,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"HabaHome","BSSId":"68:D7:9A:11:7F:E9","Channel":6,"Mode":"11n","RSSI":100,"Signal":-45,"LinkCount":1,"Downtime":"0T00:00:03"}}}
In der Payload MQTT-Nachricht stehen gerade nur "0"-Werte, weil ich den Tasmota gerade neu gestartet habe.

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Do 2. Mär 2023, 21:39
von TeamO
nick-tech hat geschrieben:
Do 2. Mär 2023, 21:23
Die IP n der "2.user.config.php" ($WR_IP = "192.168.11.181";) ist die IP des Wärmezählers. Ich gehe davon aus dass das so stimmt.
Leider nein. Da muss auch die IP vom Raspi rein. Dann sollte es funktionieren

Re: Tasmota: Daten per MQTT empfangen

Verfasst: Do 2. Mär 2023, 22:05
von nick-tech
Ich habe nun die IP von der Solaranzeige (ist ein Docker image, hat aber eine eigene IP) in "2.user.config.php" eingetragen:
$WR_IP = "192.168.11.6";

Macht scheinbar keinen Unterschied:

Code: Alles auswählen

02.03. 22:00:01    -Multi Regler Auslesen [Start].
02.03. 22:00:01    -Verarbeitung von: '1.user.config.php'   Regler: 29
02.03. 22:00:01 |----------------   Start  go-e_wallbox.php   ---------------------
02.03. 22:00:01    -Zentraler Timestamp: 1677790801
02.03. 22:00:01 o  -Hardware Version:
02.03. 22:00:06    -car: 1
02.03. 22:00:06    -alw: 0
02.03. 22:00:06    -amp: 12
02.03. 22:00:06    -ast: 2
02.03. 22:00:06    -Firmware Version: 041.0
02.03. 22:00:06    -Protokoll Version: B
02.03. 22:00:06    -MQTT Daten zum [ localhost ] senden.
02.03. 22:00:06    -Alle 10 Minuten werden die Statistikdaten übertragen.
02.03. 22:00:06 *  -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
02.03. 22:00:06    -Multi-Regler-Ausgang. 2
02.03. 22:00:08 MQT-MQTT Daten zum Broker gesendet bzw. vom Broker empfangen. Adresse: localhost Port: 1883
02.03. 22:00:08    -OK. Datenübertragung erfolgreich.
02.03. 22:00:08 |----------------   Stop   go-e_wallbox.php   ---------------------
02.03. 22:00:09    -Verarbeitung von: '2.user.config.php'   Regler: 23
02.03. 22:00:09 |----------------   Start  sonoff_mqtt.php    ---------------------
02.03. 22:00:09    -Zentraler Timestamp: 1677790801
02.03. 22:00:09 +  -Die Daten werden ausgelesen...
02.03. 22:00:15    -Keine Daten vom Sonoff Modul empfangen.
02.03. 22:00:15 !! -Keine gültigen Daten empfangen.
02.03. 22:00:15 |----------------   Stop   sonoff_mqtt.php     --------------------
02.03. 22:00:15    -Verarbeitung von: '3.user.config.php'   Regler: 23
02.03. 22:00:15 |----------------   Start  sonoff_mqtt.php    ---------------------
02.03. 22:00:15    -Zentraler Timestamp: 1677790801
02.03. 22:00:15 +  -Die Daten werden ausgelesen...
02.03. 22:00:21    -Keine Daten vom Sonoff Modul empfangen.
02.03. 22:00:21 !! -Keine gültigen Daten empfangen.
02.03. 22:00:21 |----------------   Stop   sonoff_mqtt.php     --------------------
02.03. 22:00:22    -Multi Regler Auslesen [Stop].