Sonoff in FHEM einrichten

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

Vorheriges Thema - Nächstes Thema

Bernd-Steffen

#30
@Frank_Huber:
Der Sensor liegt auf dem Boden hinter dem Fernseher und vor einem Fenster, wo gerade die Sonne drauf scheint - natürlich nicht direkt auf den Sensor! Aber da ist wahrscheinlich die Feuchtigkeit grad voll verdunstet. Allerdings hab ich ihn noch nicht mit einem richtigen Hygrometer abgeglichen. Demnächst bekomme ich noch einen DHT22 - mal sehen, was der im Vergleich liefert.
Viele Grüße, Bernd-Steffen

Mikesch

#31
Ne da ist auch nix.
Das ist ein TH16 mit einem SI7021 Sensor. Deswegen zwei Devices. Ein Schalter und ein Sensor.

Ich verstehe es schon richtig dass das stateFormat definiert wie die Werte unter Sensor: zerlegt werden?

Der Unterschied ist doch nur das du den DHT11 hast und ich den SI7021.
{sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"SI7021_temperature",0), ReadingsVal($name,"SI7021_humidity",0))}
{sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"DHT11_temperature",0), ReadingsVal($name,"DHT11_humidity",0))}


Vielleicht ist ja etwas anderes falsch kann man mit irgendeinen Befehl sich die Informationen unter Schalter01/tele/SENSOR ansehen oder nur über Kommandozeile am MQTT. Meine Ausgabe an der Kommerzielle sieht so aus. wie sieht es bei dir aus?

Schalter01/tele/SENSOR {"Time":"2018.02.21 12:49:55","SI7021":{"Temperature":18.2,"Humidity":45.6},"TempUnit":"C"}

Bernd-Steffen

ZitatIch verstehe es schon richtig dass das stateFormat definiert wie die Werte unter Sensor: zerlegt werden?

Nein, die Zerlegung erfolgt mit expandJSON - in stateFormat wird definiert welche Werte wie angezeigt werden sollen. Wenn du im Reading des Devices, wo du subscribeReading_Sensor definiert hast, keine separaten Readings der Temperatur und Feuchte erhälst, dann funktioniert dein expandJSON nicht (richtig). Dann stimmt vielleicht der Filter nicht.

Zitatkann man mit irgendeinen Befehl sich die Informationen unter Schalter01/tele/SENSOR ansehen
Was der Sensor sendet, siehst du im Reading "Sensor".
Versuch doch mal die Vorgehensweise, die Reinhart am Anfang des Posts beschrieben hat - über: mosquitto_sub -d -v -t \# und die Aktionen mit dem Web-Interface des Sonoff-Schalters.

Viele Grüße, Bernd-Steffen



Mikesch

#33
Hallo Bend, vielen Dank das du mir hilfst (ich stehe echt auf dem Schlauch)

ich bin etwas weitergekommen.  Habe noch zwei Fragen.
Die Sonoff TH10 heißen bei mir Schalter01, Schalter02 usw.
Schalter01/stat/POWER,  Schalter02/stat/POWER
Die Sensoren dann:
Schalter01/tele/SENSOR,  Schalter02/tele/SENSOR

Mit dem defmod ej3test expandJSON Schalter01:.*:.{.*}
Bekomme ich immerhin am Device: Schalter01_Sensor unter Readings eine Anzeige. Siehe Bild 1.

Ich bekomme es nicht hin ej3test so zu gestalten damit auch die Werte vom Schlater02 zerlegt werden. Ich hab Kombinationen aus . und * versucht leider ohne Erfolg. Hast du da eine Idee?

Und das zweite Problem ist dass zwar die Werte unter Readings: auftauchen aber nicht unter STATE.
Sieht man auch auf dem Bild. Das sollte doch am stateFormat liegen, oder?


das liefert mosquitto_sub -d -v -t \#
Schalter02/tele/SENSOR {"Time":"2018.02.23 10:41:26","SI7021":{"Temperature":22.5,"Humidity":41.6},"TempUnit":"C"}
Schalter01/tele/SENSOR {"Time":"2018.02.23 10:42:02","SI7021":{"Temperature":20.9,"Humidity":44.1},"TempUnit":"C"}

Bernd-Steffen

#34
Hallo Mikesch:
da bist du doch schon ein großes Stück weiter gekommen. Du musst aber noch die Bezeichnung im stateFormat korrigieren. Die abgefragten Werte müssen genauso heißen, wie sie im Reading angezeigt werden: also "SI7021_Temperature" und "SI7021_Humidity"!
Wenn du dann deinen Rechner (PC, FB, Raspberry...) auf dem FHEM und MQTT läuft, neu startest, dann müsstest du zumindest für Schalter01 die richtigen Werte in der Anzeige haben, da das expandJSON ja funktioniert, wie die Readings da zeigen.
Für den Schalter2 musst du ein 2. expandJSON für das Device anlegen. z.B. so:
defmod ej3test2 expandJSON Schalter02:.*:.{.*}
Dabei muss der Name (hier: Schalter02) jener vom Device sein muss, wo es angezeigt werden soll.

Ich hab das gerade so gemacht, da ich heute die DHT22-Sensoren bekommen habe. (s. Screenshot)
Jetzt sind auch die Temp. und Feuchtewerte für das Wohnzimmer plausibler.  :)
Viele Grüße, Bernd-Steffen

Reinhart

#35
nein, bitte nicht ein 2. expandJson anelgen, das ist ja der Sinn des Filters!
Es genügt eine Definition für expandJson, damit können bei geschickter Wahl der Regexp tausende Devices erfasst werden.
Schau doch noch einmal beim Beispiel oben mit den "ebus_".

defmod ej3test2 expandJSON Schalter.*:.*:.{.*}

alle Devices die mit Schalter..... beginnen werden dabei erfasst! D.h. es funktioniert Schalter01, Schalter02, SchalterWohnzimmer, etc. Aber Nicht schaltertest und auch nicht Switch01.

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

Bernd-Steffen

Ich hatte aus dem post von dev0 verstanden, dass der filter möglichst eng gefasst wird.
ZitatYep. Wichtig ist beim Einsatz von expandJSON oder einem Notify nur, dass die regex für das Source Reading möglichst eng gefasst ist, sonst belastet man das System nur unnötig. Das Beispiel von Reinhard ist ideal.

Deshalb dachte ich, dass für jede Anzeige ein separates expandJSON angelegt werden sollte.  :-\ ???
Viele Grüße, Bernd-Steffen

Bernd-Steffen

So, ich glaube jetzt hab ich es. Ich hab die beiden expandJSON in eine Definition gepackt, die jetzt auch funktioniert:
defmod ej3 expandJSON WZ_Sonoff_Temp.*:.{.*}|WZ_Temp.*:.{.*}

So hat es nicht funktioniert:
defmod ej3 expandJSON WZ_Sonoff_Temp.*|WZ_Temp.*:.{.*}

Ich hoffe, das ist jetzt auch von den "FHEM-/MQTT-Rules" richtig so.

Viele Grüße, Bernd-Steffen

Mikesch

#38
Oh mein Gott es funktioniert endlich. Ich glaube es nicht.
Also danke euch!!! vielmals.
defmod ej3test2 expandJSON Schalter.*:.*:.{.*} funktioniert.
Ich habe es eigenltlich damit auch schon versucht also mit .* und *. als Platzhalter wolle vorher nicht, jetzt geht's.
Und bei dem stateFormat lag es daran dass ich temperature und humidity so wie im wiki hatte also klein geschrieben. Mit Großbuchstaben am Anfang geht das jetzt auch.  :D

Also falls noch eine andere arme Sau ein TH10 mit einem ITEAD SI7021 sich anschaffen sollte hier die Befehle.


### mosquitto_sub -d -v -t \# ###
Schalter01/tele/SENSOR {"Time":"2018.02.23 10:42:02","SI7021":{"Temperature":20.9,"Humidity":44.1},"TempUnit":"C"}
Schalter02/tele/SENSOR {"Time":"2018.02.23 10:41:26","SI7021":{"Temperature":22.5,"Humidity":41.6},"TempUnit":"C"}

### expandJSON definieren ###
defmod ej3 expandJSON Schalter.*:.*:.{.*}

### Temperatur und Luftfeuchte vom Sonoff TH10 und SI7021 ###
define Sonoff_Temp01 MQTT_DEVICE
attr Schalter01_Sensor IODev myBroker
attr Schalter01_Sensor room MQTT
attr Schalter01_Sensor stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"SI7021_Temperature",0), ReadingsVal($name,"SI7021_Humidity",0))}
attr Schalter01_Sensor subscribeReading_Sensor Schalter01/tele/SENSOR

### Schalterfunktion vom Sonoff TH10 ###
defmod Schalter01 MQTT_DEVICE
attr Schalter01 IODev myBroker
attr Schalter01 alias Schalter01
attr Schalter01 event-on-change-reading state
attr Schalter01 eventMap ON:on OFF:off
attr Schalter01 publishSet on off toggle Schalter01/cmnd/POWER
attr Schalter01 stateFormat state
attr Schalter01 subscribeReading_state Schalter01/stat/POWER
attr Schalter01 webCmd on:off:toggle


Ich wollte noch eine Logdatei erstellen, ist das richtig das ich eine Datenbank installieren muss?

Bekomme nämlich bei dem nachfolgendem Befehl "No Logdevice myDbLog"
define SVG_FileLog_Schalter01_Sensor SVG myDbLog:SVG_FileLog_Schalter01_Sensor:HISTORY
attr SVG_FileLog_Schalter01_Sensor room MQTT



######  UPDATE   ######

ich habe es mit einem File Probiert:
defmod FileLog_Schalter01_Sensor FileLog ./log/Schalter01_Sensor-%Y.log Schalter01_Sensor
attr FileLog_Schalter01_Sensor logtype text
attr FileLog_Schalter01_Sensor room MQTT



Nur noch zwei Tipps, die Werte kommen alle 5 Minuten und hier noch ein Screenshot vom Konfiguration des Schalters selbst (Tasmota)
Ich hoffe mit der Zusammenfassung schafft es der Nächste auch  ;)

Reinhart

Zitat von: Bernd-Steffen am 23 Februar 2018, 12:34:50
Ich hatte aus dem post von dev0 verstanden, dass der filter möglichst eng gefasst wird.
Deshalb dachte ich, dass für jede Anzeige ein separates expandJSON angelegt werden sollte.  :-\ ???
Viele Grüße, Bernd-Steffen

ja, dev0 hat das so gemeint, dass du auch hinten (rechst) filterst und nicht nur auf den Namen, denn das könnten ja dann sehr viele sein. Wenn du 20 Schalter hast und 3 davon sind MQTT, dann würde expandJson 17 mal umsonst das System belasten.

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

dev0

Man sollte auch das/die Readings angeben, die den JSON Strings enthalten. Das gilt auch für Notifies im Allgemeinen. In der commandref gibt's auch weitere Beispiele dazu.