Sonoff in FHEM einrichten

Begonnen von cyb_thommy, 03 Dezember 2016, 09:37:35

Vorheriges Thema - Nächstes Thema

cyb_thommy

Hallo,

könnte mir jemand einen Tipp geben, wie ich den Sonoff mit MQTT in FHEM einrichte. Benutze auf den Sonoffs arendst/Sonoff-MQTT-OTA-Arduino. Die anderen Beispiele hier im Forum und im Wiki laufen nicht. Wahrscheinlich, weil man den Status mit 1 & 0 setzen muss und nicht mit on/off. Mit der aktuellen Einstellung kann ich zwar in FHEM die Lampe ein/ausschalten, aber in der Homebridge steht der Schalter immer auf Ein und kann nicht bedient werden.
Schön wäre es auch, wenn wieder ne Birne mit on/off angezeigt würde.

___
Meine Config:

defmod Stehlampe MQTT_DEVICE
attr Stehlampe IODev mqtt
attr Stehlampe devStateIcon On:on:off Off:off:on
attr Stehlampe eventMap 1:on 0:off
attr Stehlampe publishSet 1 0 cmnd/sonoff-plug1/power
attr Stehlampe room Wohnung
attr Stehlampe stateFormat state
attr Stehlampe subscribeReading_state stat/sonoff-flur/POWER
____

Viele Grüße
Thommy

digiart

Hallo Thommy
Ich habe auch viel herumtesten müssen, bis Schalten und Rückmeldung funktioniert haben.
Meine Definition sieht so aus:
define SZ.Licht.Schrank MQTT_DEVICE
attr SZ.Licht.Schrank IODev mqtt
attr SZ.Licht.Schrank devStateIcon on:Lamp_on off:Lamp_off *.subscription.*:Lamp_set_off
attr SZ.Licht.Schrank eventMap ON:on OFF:off
attr SZ.Licht.Schrank publishSet ON OFF fhem_sub/sonoff_SZ/1/POWER/set
attr SZ.Licht.Schrank stateFormat {sprintf("%s",ReadingsVal("SZ.Licht.Schrank","state","OFF"))}
attr SZ.Licht.Schrank subscribeReading_Licht fhem/sonoff_SZ/1/LIGHT
attr SZ.Licht.Schrank subscribeReading_state fhem/sonoff_SZ/1/POWER/set
attr SZ.Licht.Schrank webCmd ON:OFF


Die Console im Webinterface hat mir da sehr geholfen.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

cyb_thommy

#2
Wenn ich bei der neusten Softwareversion von arendst/Sonoff-MQTT-OTA-Arduino folgendes mache, klappt es einwandfrei.

mosquitto_sub -h mqtt_server_name.com -t stat/sonoff_plug1/POWER -v    # listen for status
mosquitto_pub -h mqtt_server_name.com -t cmnd/sonoff_plug1/power -m 1  # turn on the light


Mit on/off usw. klappt es aber nicht.
Dem entsprechend klappt das aus deinem Listing leider auch nicht mehr. Auch das /SET scheint nicht angenommen zu werden. Hat es jemand am laufen und könnte hier aushelfen?


Mein Beispiel oben hat schonmal so funktioniert, dass man den Sonoff in FHEM ein/ausschalten konnte. Aber über die Homebridge stehen die Schalter immer auf Ein und man kann nicht schalten. Weiß da jemand, wie man das hin bekommt?

Reinhart

Zitat von: cyb_thommy am 03 Dezember 2016, 09:37:35
Hallo,
Die anderen Beispiele hier im Forum und im Wiki laufen nicht

Hallo Thommy!

kannst du mir sagen welches Beispiel aus dem Wiki nicht läuft?

Ich habe die Beispiele alle ausgetestet und auch produktiv im Einsatz. Da der Entwickler mehrmals pro Woche neue Versionen heraus bringt, komme ich mit der Korrektur im Wiki kaum nach. Wenn was nicht klappt, dann ist die häufigste Fehlerquelle eine falsch eingestellte Topic am Modul. Mit dem Befehl "mosquitto_sub -d -v -t \#" am Broker findest du das aber sehr schnell heraus. In einem zweiten Konsolenfenster ( Putty ) setze ich dann Befehle ab und kann alles live mit verfolgen. Die zweite Fehlerquelle kann auch eine falsch eingestellte "user_config.h" sein (zB: das falsche Modul gewählt oder keine MQTT Ausgaben bei den GPIOs aktiviert).

Übrigens, die Befehle ON OFF funktionieren tadellos! Einfach in die Befehlszeile eingeben "set DeviceName ON" ( Devicename= sonoff_dht ) bzw. direkt am Broker:
mosquitto_pub -q 2 -t cmnd/sonoff_dht/1/light/set -m "ON"


cmnd/sonoff_dht/1/light/set ON
Received PUBLISH (d0, q0, r0, m0, 'stat/sonoff_dht/1/LIGHT', ... (2 bytes))
stat/sonoff_dht/1/LIGHT ON

in der Konsole sieht dann das so aus und im Webif des Device steht dann sofort "ON" (siehe Bild)

Meine Konfiguration dazu sieht so aus:
define Sonoff_dht MQTT_DEVICE
attr Sonoff_dht IODev myBroker
attr Sonoff_dht alias Raumtemperatur
attr Sonoff_dht group Thermostat
attr Sonoff_dht icon temperature_humidity
attr Sonoff_dht publishSet ON OFF cmnd/sonoff_dht/1/LIGHT/set
attr Sonoff_dht room Entwicklung
attr Sonoff_dht stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"TEMPERATURE",0), ReadingsVal($name,"HUMIDITY",0))}
attr Sonoff_dht subscribeReading_HUMIDITY tele/sonoff_dht/DHT/HUMIDITY
attr Sonoff_dht subscribeReading_TEMPERATURE tele/sonoff_dht/DHT/TEMPERATURE
attr Sonoff_dht subscribeReading_state cmnd/sonoff_dht/1/LIGHT/set


LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Reinhart

hier nochmals eine Kurzzusammenfassung aus dem Wiki:

1. am Broker diesen Befehl eingeben, der lauscht dann auf alle Topic im Netzwerk: mosquitto_sub -d -v -t \#
2. am Webinterface des Sonoff Device eine beliebige Topic einstellen (sonoff3, Wohnzimmer, Kinderzimmer etc., was immer euch beliebt)
3. Im Webif auf die "Toggle" drücken und am Broker schauen was da für ein String ankommt.

Wenn am Broker die falsche Topic kommt oder euch der Name nicht gefällt entweder Punkt 2 wiederholen oder in der Fhem Konfiguration die "neue" Topic bei den "subscribeReading" und "publishSet" anpassen. Diese beiden Konfigurationen müssen immer mit der eingestellten Topic des Sonooff Modules übereinstimmen! MQTT ist ein sehr einfaches und übersichtliches Protokoll und sehr ausgereift.

Achtung: die Topic ist NICHT der Name des Device, sondern das was im Eingabefeld "Topic" steht (siehe Bild)!!!!
Der Name des Device steht im Tab "configure Wifi" unter Hostname und spielt für unsere Zwecke keine weitere Rolle!

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Axel74

Hallo Zusammen

Ich versuche gerade meinen Sonoff TH16 in FHEM einzubinden.
Klappt aber leider nicht komplett.
Die gemessene "Temperature" und "Humidity" erscheinen zwar als Reading, werden aber nicht im StateFormat angezeigt.

Hat jemand eine Idee, was ich falsch gemacht habe?

pink99panther

Hallo Axwel74
Zerleg mal dein JSON-Reading in sene Einzelteile.
Das geht mit expandJSON.
define ejSENSOR expandJSON Sonoff_SwitchTH01:SENSOR:.{.*}

Axel74

Hallo pink99panther

Danke für Deine Hilfe!!!

Es fehlte die genaue Bezeichnung "AM2301_..."

{sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}

Da wäre ich alleine nie drauf gekommen.

Gruß
Axel





Bernd-Steffen

Hallo zusammen,
das Thema war zwar schon lange nicht mehr aktiv, aber ich habe das gleiche Problem wie Axel74:
Ich habe einen DHT11 am Sonoff Basic. Im Reading werden die Temp. und Feuchtewerte angezeigt, aber im stateFormat nicht, obwohl ich jetzt "DHT11_" ergänzt habe. (S. Screenshot)
Hat jemand eine Idee, was da noch falsch ist?
Viele Grüße, Bernd-Steffen

hexenmeister

#9
Du versuchst Readings mit den Namen 'DHT11_Temperature' und 'DHT11_Humidity auszulesen, die es gar nicht gibt. Funktion ReadingsVal liest vorhandene Readings und dein REading heißt 'Sensor'. Den Wert musst Du natürlich entsprechend zerlegen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Reinhart

#10
@Bernd-Steffen

Die Readings die du lesen willst werden normalerweise von expandJson automatisch angelegt. Ich nehme daher an, du hast expandJson noch nicht oder das Filter falsch konfiguriert. Such einfach hier im Forum nach "expandJson" und du findest viele Beispiele wie das funktioniert. Es ist ja nur eine Zeile! Wie der Name schon sagt wird dabei der Json String zerlegt und die Readings automatisch angelegt.

zB:
define ej3 expandJSON (Sonoff.*:.*:.{.*.*{.*.*}})

Der Rest des stateFormat passt dann schon!

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Bernd-Steffen

Hallo hexenmeister, hallo Reinhart,
danke für die Infos - ich verwende bereits expandJSON (so wie weiter oben beschrieben).
Die DEF dazu ist im 1. Screenshot zu sehen.
Das stateFormat von der Anzeige habe ich entsprechend korrigiert (Screenshot 2)
Leider ist immer noch ein Fehler drin, da es nichts an der Anzeige ändert.  >:(
Ich habe diverse Posts zu "expandJSON" gelesen, werde aber nicht schlauer - hab da nen Knoten im Kopf.  :'(
Für eure Hilfe dankt schon mal Bernd-Steffen

pink99panther

Groß-Kleinschreibung passt nicht!
SENSOR ist nicht gleich Sensor

Bernd-Steffen

Hallo pink99panther,
mit Groß-Klein-Schreibung hatte es nix zu tun. Es lag wohl daran, dass nach den ganzen Änderungen irgendwelche Parameter in FHEM nicht automatisch aktualisiert wurden. Erst nach Neustart des Raspi funktioniert jetzt alles.  :)
Die Konfiguration der Temp.anzeige sieht jetzt so aus:
defmod WZ_Sonoff_Temp MQTT_DEVICE
attr WZ_Sonoff_Temp IODev myBroker
attr WZ_Sonoff_Temp alias Wohnzimmer-Klima
attr WZ_Sonoff_Temp icon temperature_humidity
attr WZ_Sonoff_Temp room MQTT,Wohnzimmer
attr WZ_Sonoff_Temp stateFormat {sprintf("Temp: %.1f Grad / Feuchte: %.1f Proz.", ReadingsVal($name,"DHT11_Temperature",0), ReadingsVal($name,"DHT11_Humidity",0))}
attr WZ_Sonoff_Temp subscribeReading_Sensor tele/WZ_Sonoff1/SENSOR

setstate WZ_Sonoff_Temp Temp: 23.0 Grad / Feuchte: 14.0 Proz.
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 DHT11_Humidity 14
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 DHT11_Temperature 23
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 Sensor {"Time":"2018.02.19 11:44:05","DHT11":{"Temperature":23.0,"Humidity":14.0},"TempUnit":"C"}
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 TempUnit C
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 Time 2018.02.19 11:44:05
setstate WZ_Sonoff_Temp 2018-02-19 11:44:05 transmission-state incoming publish received

und das expandJSON so:
defmod ejSensor expandJSON WZ_Sonoff1:.*:.{.*}
Viele Grüße, Bernd-Steffen

pink99panther

Richtig!
Mit Groß-Kleinschreibung hat es nichtsmehr zu tun, wenn Du
beim expandJSON das reading Sensor außer acht lässt.