Sonoff in FHEM einrichten

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

Vorheriges Thema - Nächstes Thema

Bernd-Steffen

Ich hab es im expandJSON mit Sensor und SENSOR probiert und es hat nicht funktioniert. Dann hab ich es mit .* versucht und es ging trotzdem nicht. Erst nach Neustart funkte es. Dann war es vielleicht ein doppelter Fehler?
Viele Grüße Bernd-Steffen

Mikesch

#16
hallo,

ich komme mit expandJSON garnicht klar. (bin auch neu hier)
Das habe ich versucht damit komme ich nicht weiter.
define ejSENSOR expandJSON Sonoff_Temp:SENSOR:.{.*}

Das ist der String den der  TH10 mit einem SI7021 Sensor auf der Kommandozeile ausgibt sieht so aus:
Schalter01/tele/SENSOR {"Time":"2018.02.21 12:44:55","SI7021":{"Temperature":18.2,"Humidity":45.6},"TempUnit":"C"}

und unter Sensor steht das hier:   
{"Time":"2018.02.21 12:54:55","SI7021":{"Temperature":18.2,"Humidity":45.6},"TempUnit":"C"}


wie kann ich daraus ein stateFormat generieren?
Das müsste man für diese Hardware Kombination nur einmal machen?

Das habe ich versucht, leider ohne Erfolg:
{sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"SI7021_temperature",0), ReadingsVal($name,"SI7021_humidity",0))}

list Sonoff_Temp
Internals:
   IODev      myBroker
   NAME       Sonoff_Temp
   NR         48
   STATE      Temperatur: 0.0 Grad Feuchte: 0.0
   TYPE       MQTT_DEVICE
   READINGS:
     2018-02-21 12:54:55   Sensor          {"Time":"2018.02.21 12:54:55","SI7021":{"Temperature":18.2,"Humidity":45.6},"TempUnit":"C"}
     2018-02-21 12:54:55   transmission-state incoming publish received
   message_ids:
   sets:
   subscribe:
     tele/Schalter01/SENSOR
     Schalter01/tele/SENSOR
   subscribeExpr:
     ^tele\/Schalter01\/SENSOR$
     ^Schalter01\/tele\/SENSOR$
   subscribeReadings:
     Schalter01/tele/SENSOR:
       cmd       
       name       Sensor
     tele/Schalter01/SENSOR:
       cmd       
       name       Sensor
Attributes:
   IODev      myBroker
   icon       temperature_humidity
   room       MQTT
   stateFormat {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"SI7021_temperature",0), ReadingsVal($name,"SI7021_humidity",0))}
   subscribeReading_Sensor Schalter01/tele/SENSOR




Wie kann man sich eigentlich anzeigen was das stateFormat gerade bewirkt also welche Daten vom Sensor genommen werden?

pink99panther

Dein Reading heißt Sensor, dann musst Du bei expandJSON auch Sensor und nicht SENSOR schreiben.
Oder die Eingrenzung auf Sensor gleich ganz weg lassen
expandJSON Sonoff_Temp:.*:.{.*}

Mikesch

#18
Soll das dann so aussehen?

define ejSENSOR expandJSON Sonoff_Temp::.{.*}
Ist Sonoff_Temp der Selbst vergebene Name oder der Name vom Schalter? Der heißt ja Schalter01/tele/SENSOR.

Gibt es kein Muster nachdem man dieses Reading in ein state Format beschreiben kann?

pink99panther

Dein expandJSON muß einfach nur wissen, bei welchem Device es welche Readings zelegen soll,
oder ob bei dem Device alle Readings zelegt werden sollen.

Bernd-Steffen

#20
Hallo Mikesch,
Bin selber neu und am Suchen, aber ich meine, dass die Antwort auf deine Frage lautet:
defmod ejSENSOR expandJSON Schalter01.*:.*:.{.*}
Dann wird alles, was bei Schalter01* als Nachricht kommt durch die Funktion in seine Einzelteile zerlegt. Probier das mal. Unter dem Device-Overview von Schalter01 müsste dann unter den Readings nicht nur das Ergebnis von tele/Schalter01/SENSOR sondern auch die aus dem JSON-String expandierten Werte von Temperatur und Luftfeuchte stehen (SI7021_Temperature und SI7021_Humidity) sowie Zeit als auch Temp-Einheit.
Ich glaube, hier im Forum sind die meisten schon so lange dabei, dass sie bei diesen Anfängerfragen nicht auf solche Trivilitäten kommen, die wir noobs als totale ko-Punkte erleben. 8)
Viele Grüße von Bernd-Steffen

Reinhart

Zitat von: pink99panther am 21 Februar 2018, 14:11:12
Dein expandJSON muß einfach nur wissen, bei welchem Device es welche Readings zelegen soll,
oder ob bei dem Device alle Readings zelegt werden sollen.

ja genau um das geht beim Filter.

(Sonoff.*|ebus.*:.*:.{.*.*{.*.*}})
Der Filter Sonoff.* oder ebus.* sind die Anfangsbuchstaben des Device, daher sollten die Devices sinnvolle Namen haben die alle gleich beginnen. Hier im angehängten Bild werden alle Readings automatisch angelegt deren Devicename mit "ebus" beginnt. Man könnte jetzt dahinter noch zusätzlich nach "SENSOR" oder irgendwas anderes filtern, so wie hier unten.

define ej3 expandJSON Sonoff.*:(ENERGY.*|SENSOR.*):.{.*} (Power|Current|Voltage|Yesterday|Today|AnalogInput0)
das wäre schon ein ziemliches genaues Filter

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

Bernd-Steffen

Hallo Reinhart, danke für die Erläuterung! Eine Frage zur Definition: hat es was zu sagen, dass die Funktion in euren Beispielen immer ej3 heißt? Oder kann man den Namen frei wählen?
Viele Grüße von Bernd-Steffen

Reinhart

#23
das ist völlig egal wie du den nennst!

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

dev0

Yep. 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.

Mikesch

#25
Ich hab leider noch immer Fragezeichen im Gesicht.
wenn ich das ej3 Device anlege.
defmod ej3 expandJSON Sonoff.*:(ENERGY.*|SENSOR.*):.{.*} (Power|Current|Voltage|Yesterday|Today|AnalogInput0)
setstate ej3 active
setstate ej3 2018-02-22 14:51:41 state active


Muss ich nicht dann trotzdem unter dem MQTT_Device das stateFormat definieren?
da steht ja im Moment {sprintf("Temperatur: %.1f Grad Feuchte: %.1f ", ReadingsVal($name,"SI7021_temperature",0), ReadingsVal($name,"SI7021_humidity",0))}
Und wenn ich das stateFormat  kennen würde, bräuchte ich das ej3 Device nicht?

Mikesch

@Bernd-Steffen

ich habe den Befehl defmod ejSENSOR expandJSON Schalter01.*:.*:.{.*} abgesetzt.

Ich sehe nichts neues? Oder schaue ich an der falschen Stelle? Siehe Bild.  :-\

pink99panther

Wo ist Dein Reading
subscribeReading_Sensor Schalter01/tele/SENSOR
geblieben?
Immer nur an einem Schräubchen gleichzeitig drehen, sonst erkennst Du die Zusammenhänge nie!

Bernd-Steffen

#28
@Mikesch:
Hab jetzt erst gesehen, dass du das subscribeReading_Sensor und das stateFormat mit der Ausgabe von Temp. und Feuchte unter dem Device Sonoff_Temp angelegt hast. Schau mal dort, ob da die Readings vom Sensor enthalten sind. Bei mir sieht das Device zur Temp.anzeige so aus (s. Screenshot)
Viele Grüße, Bernd-Steffen

Frank_Huber

Zitat von: Bernd-Steffen am 22 Februar 2018, 16:34:13
@Mikesch:
Hab jetzt erst gesehen, dass du das subscribeReading_Sensor und das stateFormat mit der Ausgabe von Temp. und Feuchte unter dem Device Sonoff_Temp angelegt hast. Schau mal dort, ob da die Readings vom Sensor enthalten sind. Bei mir sieht das Device zur Temp.anzeige so aus (s. Screenshot)
Viele Grüße, Bernd-Steffen

btw: arg trocken dein Wohnzimmer.
oder ein defekter DHT?