Hallo zusammen ,
vor einiger Zeit hatte ich meine entfernten 1wire Temperatur Sensoren über ein fhem2fhem in das produktive Fhem übermittelt.
Dabei handelte es sich um einen Raspberry der im Keller lief ( inkl. 2. installiertes Fhem für das fhem2fhem ) .
Um es einfacher und evtl auch vernünftiger zu gestalten versuche ich mich gerade an MQTT
Der Raspi im Keller liest meine 1wire Temperatursensoren brav aus .
auf dem Raps erstellte bash rufe ich über Cronjob alle 5 min auf
#!/bin/bash
jacuzzitemp=$(cat /sys/bus/w1/devices/28-00000554757c /w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-)
jacuzzitempc=$(bc -l <<< "$jacuzzitemp/1000" | cut -c -6)
mosquitto_pub -h 192.168.178.26 -t /SmartHome/Keller/Temperatur -m $jacuzzitempc
Im Fhem selbst habe ich das MQTT2-Server device angelegt und es wird auch ein Device ( aus dem Keller ) angelegt :
Internals:
CID m2s
DEF m2s
FUUID 64d68fbe-f33f-9812-1489-3ac767f773332b2f
IODev m2s
LASTInputDev m2s
MSGCNT 2
NAME Jacuzzitemperatur
NR 1014
STATE ???
TYPE MQTT2_DEVICE
eventCount 2
m2s_CONN m2s_192.168.178.24_35704
m2s_MSGCNT 2
m2s_TIME 2023-08-13 11:05:02
READINGS:
2023-08-13 10:56:31 IODev m2s
2023-08-13 11:05:02 Temperatur 37.187
Attributes:
readingList m2s:/Jacuzzi/Temperatur:.* Temperatur
room MQTT2_DEVICE
Auch die Temperatur wird in ein Reading geschrieben !
Aber als STATE sehe ich nur ??? - wie bekomme ich es nun hin , das mir die Temperatur direkt angezeigt wird ?
mosquitto_pub generiert per Voreinstellung zufaellige ClientIDs, was mit autocreate fuer jeden moquitto_pub Aufruf zu jeweils einem neuen MQTT2_DEVICE fuehren wuerde.
Deswegen werden fuer autocreate clientIDs, die mit mosqpub oder mosq_ beginnen, ignoriert.
Loesung: wenn man autocreate haben will, mit der Option -i einen festen/anderen ClientID setzen.
Erstmal vielen Dank für die Antwort !
Auch wenn ich zugeben muss , das ich bis jetzt nicht wirklich viel verstanden habe ....MQTT ist ein absolut neues Thema für mich .
Wenn ich dich richtig verstanden habe ,dürfte das was ich gemacht habe ,eigentlich nicht funktionieren ,oder ?
script auf dem Raps ,welches alle 5min per Cron läuft:
#!/bin/bash
jacuzzitemp=$(cat /sys/bus/w1/devices/28-00000554757c/w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-)
jacuzzitempc=$(bc -l <<< "$jacuzzitemp/1000" | cut -c -6)
aussentemp=$(cat /sys/bus/w1/devices/28-0000055410a4/w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-)
aussentempc=$(bc -l <<< "$aussentemp/1000" | cut -c -6)
kellertemp=$(cat /sys/bus/w1/devices/28-00000557f7da/w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-)
kellertempc=$(bc -l <<< "$kellertemp/1000" | cut -c -6)
mosquitto_pub -h 192.168.178.26 -t /Jacuzzi/Jacuzzitemperatur -m $jacuzzitempc
mosquitto_pub -h 192.168.178.26 -t /aussen/Aussentemperatur -m $aussentempc
mosquitto_pub -h 192.168.178.26 -t /keller/Kellertemperatur -m $kellertempc
Ergebnis auf Fhem:
list 1WireKeller
Internals:
CID m2s
DEF m2s
FUUID 64d68fbe-f33f-9812-1489-3ac767f773332b2f
IODev m2s
LASTInputDev m2s
MSGCNT 35
NAME 1WireKeller
NR 1014
STATE ???
TYPE MQTT2_DEVICE
eventCount 41
m2s_CONN m2s_192.168.178.24_47236
m2s_MSGCNT 35
m2s_TIME 2023-08-13 12:55:04
OLDREADINGS:
READINGS:
2023-08-13 12:55:04 Aussentemperatur 21.750
2023-08-13 10:56:31 IODev m2s
2023-08-13 12:55:04 Jacuzzitemperatur 37.562
2023-08-13 12:55:04 Kellertemperatur 21.500
Attributes:
readingList m2s:/aussen/Aussentemperatur:.* Aussentemperatur
m2s:/Jacuzzi/Jacuzzitemperatur:.* Jacuzzitemperatur
m2s:/keller/Kellertemperatur:.* Kellertemperatur
room MQTT2_DEVICE
die Readings werden alle 5min brav importiert .
Wenn ich dich richtig verstanden habe , müsste es alle 5min neue Devices anlegen , oder ? Tut es aber nicht .
Aber ich muss mich nun in MQTT einlesen ...scheint ein spannendes Thema zu sein ...
Allerdings läuft mir gerade ein wenig die Zeit davon , da ich Fhem gerade auf Proxmox VM umziehe und es für die Frau erstmal laufen muss :-)
In diesem Zug habe ich nur Fhem2Fhem erstmal entsorgt
ZitatWenn ich dich richtig verstanden habe , müsste es alle 5min neue Devices anlegen , oder ? Tut es aber nicht .
Es wird nur dann was Neues angelegt, wenn kein passendes ClientID oder readingsList-Eintrag gefunden wurde. In deinem Fall deckt readingsList die drei Faelle ab.