[gelöst]MQTT und Sonoff Basic

Begonnen von HomerJ, 22 November 2017, 15:29:07

Vorheriges Thema - Nächstes Thema

HomerJ

Hallo ich bin neu auf dem Gebiet von Fhem. Seit ca 12 Wochen.  Und eins muss man sagen es macht süchtig  ;) ;)

Ich habe folgendes Problem was mich jetzt schon seit 2 Wochen zur Verzweiflung treibt

Ich habe 2 Sonoff – Basic Geräte in Fhem integriert dazu habe ich 2 anliegen
1 . anzeigen lassen der Sonoff Geräte beim Schaltwechsel zb. über Alexa.
2. Zu der Temperatur Anzeige der Sonoff Geräte das sie über DeviceOverview
Angezeigt werden

Was ich schon geschafft habe ist das die Geräte schon mal in Fhem angezeigt werden sowie auch geschaltet werden können. Was ich aber nicht hinkriege ist das der jeweilige wert sich dann ändert.
zb. wenn ich über Alex das Licht einschalte wird der state nicht geändert. Er verbleibt in der alten Stellung.

das ist die Einstellung vom Test Sonoff


Test Sonoff
defmod Sonoff_Test MQTT_DEVICE
attr Sonoff_Test IODev Mosquitto
attr Sonoff_Test event-on-change-reading state
attr Sonoff_Test eventMap ON:on OFF:off TOGGLE:toggle
attr Sonoff_Test publishSet publishSet on off toggle cmnd/Sonoff_Test/POWER
attr Sonoff_Test room Test
attr Sonoff_Test stateFormat state
attr Sonoff_Test subscribeReading_state state/Sonoff_Test/POWER
attr Sonoff_Test webCmd on:off:toggle

setstate Sonoff_Test off
setstate Sonoff_Test 2017-11-22 11:58:48 state OFF
setstate Sonoff_Test 2017-11-22 13:25:08 transmission-state subscription acknowledged



Der 2te Basic ist genauso eingestellt natürlich nur mit einem anderen Namen und Pfad.

zu Punkt 2 wie bekomme ich die Aktuelle Temperatur in der DeviceOverview angezeigt.

Folgendes habe ich konfiguriert

Sonoff Test


defmod Sonoff_Temp MQTT_DEVICE
attr Sonoff_Temp IODev Mosquitto
attr Sonoff_Temp icon temperature_humidity
attr Sonoff_Temp room Test
attr Sonoff_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ",ReadingsVal($name,"DHT22_Temperature",0),ReadingsVal($name,"DHT22_Humidity",0))}
attr Sonoff_Temp subscribeReading_Sensor tele/Sonoff_Test/SENSOR

setstate Sonoff_Temp Temperatur: 0.0 Grad Feuchte: 0.0
setstate Sonoff_Temp 2017-11-22 15:07:36 DHT22_Feuchtigkeit 45
setstate Sonoff_Temp 2017-11-22 15:07:36 DHT22_Temperatur 20.6
setstate Sonoff_Temp 2017-11-22 15:07:36 Sensor {"Zeit":"2017-11-22T15:07:36", "DHT22":{"Temperatur":20.6, "Feuchtigkeit":45.0}, "TempUnit":"C"}
setstate Sonoff_Temp 2017-11-22 15:07:36 TempUnit C
setstate Sonoff_Temp 2017-11-22 15:07:36 Zeit 2017-11-22T15:07:36
setstate Sonoff_Temp 2017-11-22 15:07:36 transmission-state incoming publish received




Sonoff KU


defmod Sonoff_KU_Temp MQTT_DEVICE
attr Sonoff_KU_Temp IODev Mosquitto
attr Sonoff_KU_Temp icon temperature_humidity
attr Sonoff_KU_Temp room Test
attr Sonoff_KU_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ",ReadingsVal($name,"DHT22_Temperature",0),ReadingsVal($name,"DHT22_Humidity",0))}
attr Sonoff_KU_Temp subscribeReading_Sensor tele/Sonoff_KU_Licht/SENSOR

setstate Sonoff_KU_Temp Temperatur: 0.0 Grad Feuchte: 0.0
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 DHT22_Feuchtigkeit 40.3
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 DHT22_Temperatur 22.8
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 Sensor {"Zeit":"2017-11-22T15:10:36", "DHT22":{"Temperatur":22.8, "Feuchtigkeit":40.3}, "TempUnit":"C"}
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 TempUnit C
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 Zeit 2017-11-22T15:10:36
setstate Sonoff_KU_Temp 2017-11-22 15:10:36 transmission-state incoming publish received



Die expandJSON habe ich für beide Geräte einzelnd angelegt oder ist es zu viel des Guten.
Als Temperatur Fühler benutze ich einen DHT 22 angeschlossen an GPIO 14


defmod Sonoff_Temp_Read expandJSON Sonoff_Temp.*:.*:.{.*}
attr Sonoff_Temp_Read room Test

setstate Sonoff_Temp_Read 2017-11-22 15:12:36
setstate Sonoff_Temp_Read 2017-11-22 14:35:39 state active




defmod Sonoff_KU_Temp_Read expandJSON Sonoff_KU_Temp.*:.*:.{.*}
attr Sonoff_KU_Temp_Read room Test

setstate Sonoff_KU_Temp_Read 2017-11-22 15:10:36
setstate Sonoff_KU_Temp_Read 2017-11-22 14:40:53 state active



expandJSON ist um erhlich zu sein für einen Anfänger ganz schön tricky.

so ganz steige ich dort noch nicht durch  :-[

hat vielleicht jemand einen Tip wie ich es lösen kann.


Tedious

Passen denn die Topis zu 100%? Die müssen genau so heißen wie sie im Broker ankommen.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

HomerJ

#2
eigentlich ja



zb für Sonoff Test ein und ausschalten

Client mosqsub/1079-Raspberryp received PUBLISH (d0, q0, r0, m0, 'stat/Sonoff_Test/POWER', ... (3 bytes))
stat/Sonoff_Test/POWER OFF
Client mosqsub/1079-Raspberryp received PUBLISH (d0, q0, r0, m0, 'stat/Sonoff_Test/ERGEBNIS', ... (14 bytes))

das kommt vom Sensor zb vn der Küche

tele/Sonoff_KU_Licht/SENSOR {"Zeit":"2017-11-22T16:00:39", "DHT22":{"Temperatur":21.7, "Feuchtigkeit":41.9}, "TempUnit":"C"}



das wird mir über telnet mosquitto ausgegeben.

ich habe noch 2 bilder mit angehangen so sieht man es vielleicht besser. beim Sensor wird der Wert ja angezeigt aber nicht oben übernommen.


Tedious

Wenn ich das richtig sehe passt das aber nicht!

attr Sonoff_Temp subscribeReading_Sensor tele/Sonoff_Test/SENSOR

Client mosqsub/1079-Raspberryp received PUBLISH (d0, q0, r0, m0, 'stat/Sonoff_Test/ERGEBNIS', ... (14 bytes))

Deine SENSOR Info kommt ja von einem anderen Gerät:

tele/Sonoff_KU_Licht/SENSOR {"Zeit":"2017-11-22T16:00:39", "DHT22":{"Temperatur":21.7, "Feuchtigkeit":41.9}, "TempUnit":"C"}

FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

pink99panther

Beim expandJSON probier mal
Sonoff_Temp:Sensor:.{.*}

Dann das stateFormat noch auf die richtigen Readings ändern.

HomerJ

Zitat von: Tedious am 23 November 2017, 10:32:19
Wenn ich das richtig sehe passt das aber nicht!

attr Sonoff_Temp subscribeReading_Sensor tele/Sonoff_Test/SENSOR

Client mosqsub/1079-Raspberryp received PUBLISH (d0, q0, r0, m0, 'stat/Sonoff_Test/ERGEBNIS', ... (14 bytes))

Deine SENSOR Info kommt ja von einem anderen Gerät:

tele/Sonoff_KU_Licht/SENSOR {"Zeit":"2017-11-22T16:00:39", "DHT22":{"Temperatur":21.7, "Feuchtigkeit":41.9}, "TempUnit":"C"}

Das passt schon ich habe 2 Geräte. Einmal den Sonoff_Test und einmal den Sonoff_KU_Licht beide liefern unterschiedliche Werte die auch in den Readings angezeigt werden nur das sie nicht nach oben in dieDevice Overview übertragen werden.

Das erste Problem hat sich erledigt. Ich hatte einen Schreibfehler in der Sonoff_Test subscribeReading_state ich hatte ein a zuviel darum hat er es nicht gesehen. In dem anderem Sonoff hies es nict stat, sondern tele also das geht schonmal


falsch
attr Sonoff_Test subscribeReading_state state/Sonoff_Test/POWER
Richtig
attr Sonoff_Test subscribeReading_state stat/Sonoff_Test/POWER
falsch
attr Sonoff_KU subscribeReading_state stat/Sonoff_KU_Licht/POWER
richtig
attr Sonoff_KU subscribeReading_state tele/Sonoff_KU_Licht/POWER


es lag dadran das ich in der user_config was neues angelegt hatte



Client mosqsub/1014-Raspberryp received PUBLISH (d0, q0, r0, m0, 'tele/Sonoff_KU_Licht/STATUS', ... (147 bytes))
tele/Sonoff_KU_Licht/STATUS {"Zeit":"2017-11-24T18:45:23", "Laufzeit":92, "VCC":3.178, "POWER":"ON", "WLAN":{"AP":1, "SSID":"WarPig", "RSSI":100, "APMac":"44:4E:6D:00:0F:64"}}
Client mosqsub/1014-Raspberryp received PUBLISH (d0, q0, r0, m0, 'tele/Sonoff_KU_Licht/SENSOR', ... (96 bytes))
tele/Sonoff_KU_Licht/SENSOR {"Zeit":"2017-11-24T18:45:23", "DHT22":{"Temperatur":22.1, "Feuchtigkeit":44.5}, "TempUnit":"C"}
Client mosqsub/1014-Raspberryp sending PINGREQ
Client mosqsub/1014-Raspberryp received PINGRESP
Client mosqsub/1014-Raspberryp received PUBLISH (d0, q0, r0, m0, 'tele/Sonoff_Test/STATUS', ... (147 bytes))
tele/Sonoff_Test/STATUS {"Zeit":"2017-11-24T18:46:49", "Laufzeit":99, "VCC":3.160, "POWER":"OFF", "WLAN":{"AP":1, "SSID":"WarPig", "RSSI":66, "APMac":"44:4E:6D:00:0F:64"}}
Client mosqsub/1014-Raspberryp received PUBLISH (d0, q0, r0, m0, 'tele/Sonoff_Test/SENSOR', ... (96 bytes))
tele/Sonoff_Test/SENSOR {"Zeit":"2017-11-24T18:46:49", "DHT22":{"Temperatur":19.4, "Feuchtigkeit":50.3}, "TempUnit":"C"}


Sonoff_Temp:Sensor:.{.*} hat nichts gebracht ist immer noch nicht zu sehen
ich habe es so definiert


defmod Sonoff_Temp_Read expandJSON Sonoff_Temp:Sensor:.{.*}
attr Sonoff_Temp_Read room Test


ich habe keine weiteren readings oder so eingefügt

HomerJ

#7
Heureka das Problem ist endlich gelöst. Ich habe laut Heureka das Problem ist endlich gelöst. pink99panther hat mir einen Tipp gegeben. Ich habe die expandJSON auf Sonoff_Tempo:Sensor:.{.*} geändert was erst keinen Erfolg brachte. Anschließend habe ich noch die state bearbeitet in {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ",ReadingsVal($name,"DHT22_Temperatur",0),ReadingsVal($name,"DHT22_Feuchtigkeit",0))} und tada es wird angezeigt

Das komische ist, daß ich es schonmal so geschrieben hatte und es nicht geklappt  hatte und es nicht funktioniert hat erst als ich einen komplett Neustart vom Raspberry gemacht hatte wurde es erst angezeigt. Ein Fhem Neustart hat nichts gebracht .

Also jetzt läuft endlich die Anzeige der Temperatur sowie der on off Anzeige ich habe es jetzt so gemacht.


Licht Einstellung

defmod Sonoff_KU MQTT_DEVICE
attr Sonoff_KU IODev Mosquitto
attr Sonoff_KU alias Küche Oberlicht
attr Sonoff_KU event-on-change-reading state
attr Sonoff_KU eventMap ON:on OFF:off TOGGLE:toggle
attr Sonoff_KU icon light_downlight
attr Sonoff_KU publishSet publishSet on off toggle cmnd/Sonoff_KU_Licht/POWER
attr Sonoff_KU room Küche
attr Sonoff_KU stateFormat state
attr Sonoff_KU subscribeReading_state tele/Sonoff_KU_Licht/POWER
attr Sonoff_KU webCmd on:off:toggle

setstate Sonoff_KU on
setstate Sonoff_KU 2017-12-04 16:37:02 state ON
setstate Sonoff_KU 2017-12-04 16:37:02 transmission-state incoming publish received



Temp Einstellung

defmod Sonoff_KU_Temp MQTT_DEVICE
attr Sonoff_KU_Temp IODev Mosquitto
attr Sonoff_KU_Temp alias Küche Temperatur
attr Sonoff_KU_Temp icon temperature_humidity
attr Sonoff_KU_Temp room Küche
attr Sonoff_KU_Temp stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ",ReadingsVal($name,"DHT22_Temperatur",0),ReadingsVal($name,"DHT22_Feuchtigkeit",0))}
attr Sonoff_KU_Temp subscribeReading_Sensor tele/Sonoff_KU_Licht/SENSOR



expandJSON

defmod ej3 expandJSON Sonoff.*:.*:.{.*}
attr ej3 alias Sonoff Tools
attr ej3 icon hue_room_garage
attr ej3 room SonoffTools



so Funktioniert es bis jetzt super.

Vielen Dank für die Hilfe  :)

noxx

was heisst irgendwo?

schreibe ich das ende der cfg bekomme ich ein: Unknown module expandJSON

dev0

ZitatUnknown module expandJSON
Ein FHEM Update ausführen.