FHEM zeigt Tasmota mit DS18B20 als Temperatur 0.0 an

Begonnen von ersthelfer, 27 Oktober 2018, 14:30:16

Vorheriges Thema - Nächstes Thema

ersthelfer

Hallo,

ich habe hier ein Gerät mit Tasmota 6.2.1.14 geflasht, ei dem ein DS18B20 verbaut ist.
Auf der Web-Page wird die richtige Temperatur angezeigt.

In den Readings erscheint auch
TempTas
{"Time":"2018-10-12T19:03:14","DS18B20":{"Temperature":26.4},"TempUnit":"C"}


Aber in meinen STATE wird immer 0.0 angezeigt :-(

Hier meine Definition
defmod TestTasmota MQTT_DEVICE
attr TestTasmota IODev Mosquitto
attr TestTasmota room 98_Test
attr TestTasmota stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"temperature",0))}
attr TestTasmota subscribeReading_TempTas tele/sonoff/SENSOR

setstate TestTasmota Temperatur: 0.0 Grad
setstate TestTasmota 2018-10-12 20:03:14 TempTas {"Time":"2018-10-12T19:03:14","DS18B20":{"Temperature":26.4},"TempUnit":"C"}
setstate TestTasmota 2018-10-12 20:03:14 transmission-state incoming publish received


Was mache ich falsch?

Danke für Eure Hilfe...

Gisbert

Hallo ersthelfer,

gibt es denn ein reading "temperature"? Wenn nicht, dann wird der Ersatzwert genommen, den du als "0" definiert hast.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

ersthelfer

als Reading habe ich TempTas.

Aber ich habe keine Ahnung, wie ich die Syntax jetzt aufbauen muss.

Bei einen Easy ESP geräten kommt immer direkt die Temparatur zurück und nicht wie hier ein String, den ich noch irgendwie zerlegen muss

Gisbert

#3
Hallo ersthelfer,

ich hänge mal ein list meines Devices ("Heizung") und die raw-Definition an, auf dem auch Tasmota läuft.
Vielleicht findest du dort noch die ein oder andere Anregung.

In deinem Fall müsste dann das richtig sein:
attr TestTasmota stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"TemTas",0))}
Das setzt voraus, dass ein Reading "TempTas" vorhanden ist.
Falls nicht, dann setze das folgende Attribut, damit werden alle Sendungen des Devices subskribiert:
autoSubscribeReadings +/Heizung/+ - wobei bei mir das MQTT-Topic in Tasmota "Heizung" lautet.


list "Heizung":
Internals:
   .autoSubscribeExpr ^[^/]+\/Heizung\/([^/]+)$
   .autoSubscribeTopic +/Heizung/+
   .lastTimeDS18B20-1_Id 1540645048.78619
   .lastTimeDS18B20-1_Temperature 1540645048.78619
   .lastTimeDS18B20-2_Id 1540645048.78619
   .lastTimeDS18B20-2_Temperature 1540645048.78619
   .lastTimeDS18B20-3_Id 1540645048.78619
   .lastTimeDS18B20-3_Temperature 1540645048.78619
   .lastTimeDS18B20-4_Id 1540645048.78619
   .lastTimeDS18B20-4_Temperature 1540645048.78619
   .lastTimeHeizung.Ruecklauf 1540645048.6821
   .lastTimeHeizung.Spreizung 1540645048.6821
   .lastTimeHeizung.Vorlauf 1540645048.6821
   .lastTimeLWT 1540637121.098
   .lastTimePOWER1 1540645048.73335
   .lastTimePOWER2 1540645048.73335
   .lastTimePumpe 1540645048.6821
   .lastTimeRESULT 1540642534.41355
   .lastTimeSENSOR 1540645048.76364
   .lastTimeSTATE 1540645048.71147
   .lastTimeSystem.Info 1540645048.6821
   .lastTimeTempUnit 1540645048.78619
   .lastTimeTime 1540645048.73335
   .lastTimeUPTIME 1540642559.67874
   .lastTimeUptime 1540645048.73335
   .lastTimeVcc 1540645048.73335
   .lastTimeWarmwasseraustritt 1540645048.6821
   .lastTimeWarmwasserpumpe 1540645048.6821
   .lastTimeWarmwasserspeicher 1540645048.6821
   .lastTimeWifi_AP 1540645048.73335
   .lastTimeWifi_APMac 1540645048.73335
   .lastTimeWifi_RSSI 1540645048.73335
   .lastTimeWifi_SSId 1540645048.73335
   .lastTimeZeitstempel 1540645048.6821
   .lastTimetransmission-state 1540645048.6821
   CFGFN      ./FHEM/HeizungWarmwasser.cfg
   IODev      MyBroker
   NAME       Heizung
   NR         408
   STATE      <span style='color:#000000'>Speicherpumpe: aus</span><br/>Speicher: 54.1°C<br/>Leitung: 51.8°C<br/>Vorlauf: 25.3°C<br/>Rücklauf: 23.6°C<br/>Spreizung: 1.7°C<br/>Betrieb: 10123 min<br/>RSSI: 28%<br/>2018-10-27 14:57
   TYPE       MQTT_DEVICE
   .attraggr:
   .attrminint:
     .*:110
   .qos:
     *          0
   .retain:
     *          0
   .userReadings:
     HASH(0x4856348)
     HASH(0x485a4e8)
     HASH(0x485a578)
     HASH(0x485a620)
     HASH(0x485a680)
     HASH(0x485a740)
     HASH(0x485a7d0)
     HASH(0x485a860)
     HASH(0x485a8f0)
   READINGS:
     2018-10-27 14:57:28   DS18B20-1_Id    00000758CE9A
     2018-10-27 14:57:28   DS18B20-1_Temperature 23.62
     2018-10-27 14:57:28   DS18B20-2_Id    02160148D6EE
     2018-10-27 14:57:28   DS18B20-2_Temperature 51.81
     2018-10-27 14:57:28   DS18B20-3_Id    0216015DC7EE
     2018-10-27 14:57:28   DS18B20-3_Temperature 54.13
     2018-10-27 14:57:28   DS18B20-4_Id    03160508A1FF
     2018-10-27 14:57:28   DS18B20-4_Temperature 25.31
     2018-10-27 14:57:28   Heizung.Ruecklauf 23.6
     2018-10-27 14:57:28   Heizung.Spreizung 1.7
     2018-10-27 14:57:28   Heizung.Vorlauf 25.3
     2018-10-20 14:14:03   INFO1           {"Module":"Sonoff Dual","Version":"6.2.1","FallbackTopic":"Heizung_2A9659","GroupTopic":"sonoffs"}
     2018-10-20 14:14:03   INFO2           {"WebServerMode":"Admin","Hostname":"Heizung-5721","IPAddress":"192.168.2.18"}
     2018-10-20 14:14:03   INFO3           {"RestartReason":"Power on"}
     2018-10-27 12:45:21   LWT             Online
     2018-10-20 14:14:03   POWER           
     2018-10-27 14:57:28   POWER1          OFF
     2018-10-27 14:57:28   POWER2          OFF
     2018-10-27 14:57:28   Pumpe           1
     2018-10-27 14:15:34   RESULT          {"POWER1":"OFF"}
     2018-10-27 14:57:28   SENSOR          {"Time":"1970-01-08T00:43:29","DS18B20-1":{"Id":"00000758CE9A","Temperature":23.62},"DS18B20-2":{"Id":"02160148D6EE","Temperature":51.81},"DS18B20-3":{"Id":"0216015DC7EE","Temperature":54.13},"DS18B20-4":{"Id":"03160508A1FF","Temperature":25.31},"TempUnit":"C"}
     2018-10-27 14:57:28   STATE           {"Time":"1970-01-08T00:43:29","Uptime":"7T00:42:16","Vcc":3.226,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"IoTSenham","RSSI":28,"APMac":"FE:EC:DA:87:88:E6"}}
     2018-10-27 14:57:28   System.Info     10123
     2018-10-27 14:57:28   TempUnit        C
     2018-10-27 14:57:28   Time            1970-01-08T00:43:29
     2018-10-27 14:15:59   UPTIME          {"Time":"1970-01-08T00:02:00","Uptime":"7T00:00:47"}
     2018-10-27 14:57:28   Uptime          7T00:42:16
     2018-10-27 14:57:28   Vcc             3.226
     2018-10-27 14:57:28   Warmwasseraustritt 51.8
     2018-10-27 14:57:28   Warmwasserpumpe <span style='color:#000000'>Speicherpumpe: aus</span>
     2018-10-27 14:57:28   Warmwasserspeicher 54.1
     2018-10-27 14:57:28   Wifi_AP         1
     2018-10-27 14:57:28   Wifi_APMac      FE:EC:DA:87:88:E6
     2018-10-27 14:57:28   Wifi_RSSI       28
     2018-10-27 14:57:28   Wifi_SSId       IoTSenham
     2018-10-27 14:57:28   Zeitstempel     2018-10-27 14:57
     2018-10-27 14:57:28   transmission-state incoming publish received
   helper:
     bm:
       MQTT::DEVICE::Attr:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.10. 12:47:20
         max        0.00529193878173828
         tot        0.00529193878173828
         mAr:
           set
           Heizung
           subscribeReading_POWER1
           cmnd/Heizung/POWER1
       MQTT::DEVICE::Set:
         cnt        346
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.10. 12:47:20
         max        0.0640430450439453
         tot        0.316527843475342
         mAr:
           HASH(0x4857340)
           Heizung
           POWER1
           off
   message_ids:
   publishSets:
     POWER1:
       topic      cmnd/Heizung/POWER1
       values:
         ON
         OFF
     POWER2:
       topic      cmnd/Heizung/POWER2
       values:
         ON
         OFF
   sets:
     POWER1     ON,OFF
     POWER2     ON,OFF
   subscribe:
     +/Heizung/+
     tele/Heizung/INFO1
     tele/Heizung/INFO2
     tele/Heizung/INFO3
     tele/Heizung/LWT
     cmnd/Heizung/POWER
     stat/Heizung/POWER1
     stat/Heizung/POWER2
     stat/Heizung/RESULT
     tele/Heizung/SENSOR
     tele/Heizung/STATE
     tele/Heizung/UPTIME
     cmnd/Heizung/POWER1
   subscribeExpr:
     ^[^/]+\/Heizung\/([^/]+)$
     ^tele\/Heizung\/INFO1$
     ^tele\/Heizung\/INFO2$
     ^tele\/Heizung\/INFO3$
     ^tele\/Heizung\/LWT$
     ^cmnd\/Heizung\/POWER$
     ^stat\/Heizung\/POWER1$
     ^stat\/Heizung\/POWER2$
     ^stat\/Heizung\/RESULT$
     ^tele\/Heizung\/SENSOR$
     ^tele\/Heizung\/STATE$
     ^tele\/Heizung\/UPTIME$
     ^cmnd\/Heizung\/POWER1$
   subscribeQos:
     +/Heizung/+
     cmnd/Heizung/POWER 0
     cmnd/Heizung/POWER1 0
     stat/Heizung/POWER1 0
     stat/Heizung/POWER2 0
     stat/Heizung/RESULT 0
     tele/Heizung/INFO1 0
     tele/Heizung/INFO2 0
     tele/Heizung/INFO3 0
     tele/Heizung/LWT 0
     tele/Heizung/SENSOR 0
     tele/Heizung/STATE 0
     tele/Heizung/UPTIME 0
   subscribeReadings:
     cmnd/Heizung/POWER:
       cmd       
       name       POWER
     cmnd/Heizung/POWER1:
       cmd       
       name       POWER1
     stat/Heizung/POWER1:
       cmd       
       name       POWER1
     stat/Heizung/POWER2:
       cmd       
       name       POWER2
     stat/Heizung/RESULT:
       cmd       
       name       RESULT
     tele/Heizung/INFO1:
       cmd       
       name       INFO1
     tele/Heizung/INFO2:
       cmd       
       name       INFO2
     tele/Heizung/INFO3:
       cmd       
       name       INFO3
     tele/Heizung/LWT:
       cmd       
       name       LWT
     tele/Heizung/SENSOR:
       cmd       
       name       SENSOR
     tele/Heizung/STATE:
       cmd       
       name       STATE
     tele/Heizung/UPTIME:
       cmd       
       name       UPTIME
Attributes:
   IODev      MyBroker
   autoSubscribeReadings +/Heizung/+
   event-min-interval .*:110
   icon       sani_buffer_temp_all
   publishSet_POWER1 ON OFF cmnd/Heizung/POWER1
   publishSet_POWER2 ON OFF cmnd/Heizung/POWER2
   room       Heizung,Mobile
   stateFormat Warmwasserpumpe<br/>Speicher: Warmwasserspeicher°C<br/>Leitung: Warmwasseraustritt°C<br/>Vorlauf: Heizung.Vorlauf°C<br/>Rücklauf: Heizung.Ruecklauf°C<br/>Spreizung: Heizung.Spreizung°C<br/>Betrieb: System.Info min<br/>RSSI: Wifi_RSSI%<br/>Zeitstempel
   subscribeReading_INFO1 tele/Heizung/INFO1
   subscribeReading_INFO2 tele/Heizung/INFO2
   subscribeReading_INFO3 tele/Heizung/INFO3
   subscribeReading_LWT tele/Heizung/LWT
   subscribeReading_POWER cmnd/Heizung/POWER
   subscribeReading_POWER1 cmnd/Heizung/POWER1
   subscribeReading_POWER2 stat/Heizung/POWER2
   subscribeReading_RESULT stat/Heizung/RESULT
   subscribeReading_SENSOR tele/Heizung/SENSOR
   subscribeReading_STATE tele/Heizung/STATE
   subscribeReading_UPTIME tele/Heizung/UPTIME
   userReadings Warmwasseraustritt {sprintf('%.1f', ReadingsVal($name,'DS18B20-2_Temperature',''))},
Warmwasserspeicher {sprintf('%.1f', ReadingsVal($name,'DS18B20-3_Temperature',''))},
Warmwasserpumpe {(ReadingsVal($name,'POWER1','') eq "OFF") ? "<span style='color:#000000'>Speicherpumpe: aus</span>":"<span style='color:#FF0000'>Speicherpumpe: an</span>"},
Pumpe {(ReadingsVal($name,'POWER1','') eq "OFF") ? "1":"0"},
Heizung.Vorlauf {sprintf('%.1f', ReadingsVal($name,'DS18B20-4_Temperature',''))},
Heizung.Ruecklauf {sprintf('%.1f', ReadingsVal($name,'DS18B20-1_Temperature',''))},
Heizung.Spreizung {sprintf('%.1f', ReadingsVal($name,'Heizung.Vorlauf','')-ReadingsVal($name,'Heizung.Ruecklauf',''))},
Zeitstempel {substr(ReadingsTimestamp($name,'STATE',''),0,16)},
System.Info {sprintf('%.0f',(time_str2num(ReadingsVal($name,'Time','')) + 3600) / 60)}


raw-Defintion:
defmod Heizung MQTT_DEVICE
attr Heizung IODev MyBroker
attr Heizung autoSubscribeReadings +/Heizung/+
attr Heizung event-min-interval .*:110
attr Heizung icon sani_buffer_temp_all
attr Heizung publishSet_POWER1 ON OFF cmnd/Heizung/POWER1
attr Heizung publishSet_POWER2 ON OFF cmnd/Heizung/POWER2
attr Heizung room Heizung,Mobile
attr Heizung stateFormat Warmwasserpumpe<br/>Speicher: Warmwasserspeicher°C<br/>Leitung: Warmwasseraustritt°C<br/>Vorlauf: Heizung.Vorlauf°C<br/>Rücklauf: Heizung.Ruecklauf°C<br/>Spreizung: Heizung.Spreizung°C<br/>Betrieb: System.Info min<br/>RSSI: Wifi_RSSI%<br/>Zeitstempel
attr Heizung subscribeReading_INFO1 tele/Heizung/INFO1
attr Heizung subscribeReading_INFO2 tele/Heizung/INFO2
attr Heizung subscribeReading_INFO3 tele/Heizung/INFO3
attr Heizung subscribeReading_LWT tele/Heizung/LWT
attr Heizung subscribeReading_POWER cmnd/Heizung/POWER
attr Heizung subscribeReading_POWER1 cmnd/Heizung/POWER1
attr Heizung subscribeReading_POWER2 stat/Heizung/POWER2
attr Heizung subscribeReading_RESULT stat/Heizung/RESULT
attr Heizung subscribeReading_SENSOR tele/Heizung/SENSOR
attr Heizung subscribeReading_STATE tele/Heizung/STATE
attr Heizung subscribeReading_UPTIME tele/Heizung/UPTIME
attr Heizung userReadings Warmwasseraustritt {sprintf('%.1f', ReadingsVal($name,'DS18B20-2_Temperature',''))}, \
Warmwasserspeicher {sprintf('%.1f', ReadingsVal($name,'DS18B20-3_Temperature',''))}, \
Warmwasserpumpe {(ReadingsVal($name,'POWER1','') eq "OFF") ? "<span style='color:#000000'>Speicherpumpe: aus</span>":"<span style='color:#FF0000'>Speicherpumpe: an</span>"}, \
Pumpe {(ReadingsVal($name,'POWER1','') eq "OFF") ? "1":"0"}, \
Heizung.Vorlauf {sprintf('%.1f', ReadingsVal($name,'DS18B20-4_Temperature',''))}, \
Heizung.Ruecklauf {sprintf('%.1f', ReadingsVal($name,'DS18B20-1_Temperature',''))}, \
Heizung.Spreizung {sprintf('%.1f', ReadingsVal($name,'Heizung.Vorlauf','')-ReadingsVal($name,'Heizung.Ruecklauf',''))}, \
Zeitstempel {substr(ReadingsTimestamp($name,'STATE',''),0,16)}, \
System.Info {sprintf('%.0f',(time_str2num(ReadingsVal($name,'Time','')) + 3600) / 60)}


Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

ersthelfer

Hallo und erstmal danke für die Antworten.

Ich habe das jetzt so abgeändert:
defmod TestTasmota MQTT_DEVICE
attr TestTasmota IODev Mosquitto
attr TestTasmota room 98_Test
attr TestTasmota stateFormat {sprintf("Temperatur: %.1f Grad", ReadingsVal($name,"TempTas",0))}
attr TestTasmota subscribeReading_TempTas tele/sonoff/SENSOR

setstate TestTasmota Temperatur: 0.0 Grad
setstate TestTasmota 2018-10-27 17:45:16 TempTas {"Time":"2018-10-27T16:45:16","DS18B20":{"Temperature":23.8},"TempUnit":"C"}
setstate TestTasmota 2018-10-27 17:45:16 transmission-state incoming publish received


Aber es wird immer noch 0.0 angezeigt.
Ich frage mich, wie der String denn hier durchsucht wird.
Irgendwo muss ich doch bestimmt einen Teilstring eintragen, damit FHEM weis wo denn genau die Temperatur steht ?!?!

Ich habe mich an dieses Beispiel hier gehalten:
https://wiki.fhem.de/wiki/Sonoff
Aber das scheint auch nicht richtig zu funktionieren  :(

Gisbert

Hallo ersthelfer,

diese Definition zerpflückt die Bandwürmer an Readings in Einzelteile, Stichwort JSON, mehr weiß ich allerdings auch nicht.
define ej3 expandJSON .*:TempTas:.{.*}
Damit wird das Readings "TempTas" zerlegt.

Wenn du es für alle Devices und alle Readings haben willst, dann müsste es wahrscheinlich so aussehen (ungestest); ich würde das aber nicht machen, da dann alle Readings in allen Devices, die so aufgebaut sind, in Einzelteile zerlegt werden:
define ej3 expandJSON .*:.*:.{.*}

Dann musst du schauen, wie dein neues Reading heißt, vermutlich "TempTas_DS18B20_Temperature", da bin ich mir allerdings nicht ganz sicher.
Es würde mich interessieren, ob es wie vorgschlagen klappt.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

ersthelfer

Hat geklappt, wie Du beschrieben hast  ;D
Super, danke....