Interne Temperaturwerte über MQTT senden (GELÖST)

Begonnen von cyrusfd, 05 April 2024, 14:02:47

Vorheriges Thema - Nächstes Thema

cyrusfd

Hallo,

FHEM ist auf einem RaspberryPi installiert und es ist 1 DS18B20-Sensor über GPIO4 angeschlossen (Temperatur Pool). Es gibt noch 2 ESP8266 die per MQTT Temperaturwerte aus dem Garten senden(ESP8266Client und ESP8266_D1_Client). Die Werte werden vom SERVER empfangen und im FHEM angezeigt.
Ich verwende den FHEM-eigenen MQTT2-FHEM-Server.
Ich habe einen weiteren ESP8266 mit einem TFT-Display, der mir die Temperaturen vom Pool und Garten anzeigen soll.
Die Daten, die von den beiden ESP8266 im Garten per MQTT kommen, werden auch vom ESP8266 gelesen und über das Display angezeigt.
Wie bekomme ich FHEM dazu die internen Werte des angeschlossenen DS18B20-Sensors im Intervall von 30' über MQTT zu schicken.

Vielen Dank für eure Hilfe

Cyrus

betateilchen

define mqtt_at at +*00:00:30 set <mqtt2_server> publish <topic_des_Sensors> <Messwert_des_DS18B20>
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cyrusfd

#2
Vielen Dank!

Wie würde denn die Syntax <Messwert_des_DS18B20> aussehen

cyrusfd

ich habe im TempWasser den richtigen Wert, jedoch wird über MQTT nicht der Wert, sondern WasserTemp als String gesendet

define mqtt_at at +*00:00:30 set MQTT2_FHEM_Server publish ESP/Temperature3 WasserTemp
attr mqtt_at userReadings WasserTemp {ReadingsVal("TempWasser","temperature",0)}
#   CFGFN     
#   COMMAND    set MQTT2_FHEM_Server publish ESP/Temperature3 WasserTemp
#   DEF        +*00:00:30 set MQTT2_FHEM_Server publish ESP/Temperature3 WasserTemp
#   FUUID      660fee11-f33f-be15-48e8-8919969c4809ba61
#   NAME       mqtt_at
#   NR         69
#   NTM        15:04:52
#   PERIODIC   yes
#   RELATIVE   yes
#   REP        -1
#   STATE      Next: 15:04:52
#   TIMESPEC   00:00:30
#   TRIGGERTIME 1712322292.93968
#   TRIGGERTIME_FMT 2024-04-05 15:04:52
#   TYPE       at
#   eventCount 79
#   READINGS:
#     2024-04-05 15:04:22   WasserTemp      18.562
#     2024-04-05 15:04:22   state           Next: 15:04:52
#
setstate mqtt_at Next: 15:04:52
setstate mqtt_at 2024-04-05 15:04:22 WasserTemp 18.562
setstate mqtt_at 2024-04-05 15:04:22 state Next: 15:04:52


betateilchen

#4
Das userReading im at ist doch völlig unnötig.

Du kannst im publish einfach den Wert aus dem entsprechenden reading ('temperature' ?) des Sensor-devices ('TempWasser' ?) verwenden.

Also etwas in der Art:

define mqtt_at at +*00:00:30 set MQTT2_FHEM_Server publish ESP/Temperature3 [TempWasser:temperature]
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cyrusfd

#5
Ich bin ein Depp! Ich habe WasserTemp anstatt TempWasser in das Publish eingetragen ;-)
Jetzt funktioniert es.

Danke für die Hilfe!!


Ja der Sensor ist TempWasser und das Reading temperature

define TempWasser GPIO4 28-c97aea1d64ff
attr TempWasser alias Pool
attr TempWasser event-min-interval .*:1800
attr TempWasser event-on-change-reading .*:0.5
attr TempWasser group Pool
attr TempWasser model DS18B20
attr TempWasser room Pool,Temperatur
attr TempWasser stateFormat {sprintf("<div style='font-size:160%%;;text-align:right'>%.1f",ReadingsVal("TempWasser","temperature",0))." °C</div>"}
attr TempWasser webCmd :
#   DEF        28-c97aea1d64ff
#   FUUID      626fd4ef-f33f-be15-b73e-b588c4f215262137
#   NAME       TempWasser
#   NR         43
#   NTFY_ORDER 50-TempWasser
#   STATE      <div style='font-size:160%;text-align:right'>20.8 °C</div>
#   TYPE       GPIO4
#   eventCount 18
#   READINGS:
#     2024-04-05 10:32:43   failures        0
#     2024-04-05 16:07:34   state           T: 20.812
#     2024-04-05 16:07:34   temperature     20.812
#   fhem:
#     interfaces temperature
#
setstate TempWasser <div style='font-size:160%;;text-align:right'>20.8 °C</div>
setstate TempWasser 2024-04-05 10:32:43 failures 0
setstate TempWasser 2024-04-05 16:07:34 state T: 20.812
setstate TempWasser 2024-04-05 16:07:34 temperature 20.812



Das habe ich jetzt ausprobiert.
DEF
+*00:00:30 set MQTT2_FHEM_Server publish ESP/Temperature3 [WasserTemp:temperature]

Ich bekomme leider immer noch den String und nicht den Wert als MQTT-Nachricht.

6:06:31.348 -> Nachricht empfangen im Thema: ESP/Temperature3
16:06:31.348 -> Nachricht: [WasserTemp:temperature]
16:06:31.348 -> -----------------------

betateilchen

Zitatdefine TempWasser GPIO4 28-c97aea1d64ff

Zitatpublish ESP/Temperature3 [WasserTemp:temperature]

Du findest den Fehler bestimmt selbst...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cyrusfd

;D
ja, habe ihn tatsächlich selbst gefunden.
Danke!!!

OdieKessler