[HowTo] Sonoff POW an Fhem anbinden

Begonnen von Reinhart, 07 November 2016, 16:53:53

Vorheriges Thema - Nächstes Thema

Reinhart

hier eine Darstellung meiner 4 POWs mit readingsGroup.
Da bei einem der Gefrierschränke der Thermostat defekt ist (UG), hat FHEM zusätzlich die Steuerung übernommen.
redingsGroup bietet ja den Vorteil, dass man eine schöne farbliche dynamische Darstellung bekommt.

LG

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

PeMue

Hallo Reinhart,

coole Darstellung. Könntest Du bitte Deine cfg posten?

Danke + Gruß

Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Reinhart

#92
@PeMue

die Schwellen der Farbumschaltung muss du halt auf deine persönlichen Bedürfnisse anpassen. Ich habe hier auch die Commands mit integriert, somit kannst du bequem aus dieser Ansicht auch Ein/Ausschalten.

{ if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }
Beispiel: zwischen einer Leistung von 0-100 Watt ist es grün.

.*(Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3|Sonoff_Pow4):
und hier die ReadingsName von deinen Modul Namen austauschen

define SonoffPows readingsGroup <%measure_power>,<aktuell>,<Tag>,<Gestern>,<Strom>,<Durchschnitt>,<max.P>,<Zyklus>,<Faktor>,<Status>,<hr> .*(Sonoff_Pow|Sonoff_Pow2|Sonoff_Pow3|Sonoff_Pow4):CURRENT_POWER,TODAY_ENERGY,YESTERDAY_ENERGY,CURRENT,CURRENT_POWER_avg_day,CURRENT_POWER_max_day,PERIOD_ENERGY,POWER_FACTOR,LIGHT
attr SonoffPows commands {'LIGHT.ON' => 'set $DEVICE OFF','LIGHT.OFF' => 'set $DEVICE ON'}
attr SonoffPows mapping %ALIAS
attr SonoffPows nameStyle style="color:yellow"
attr SonoffPows room Energie,MQTT
attr SonoffPows valueFormat {'CURRENT_POWER' =>"%.0f W", 'TODAY_ENERGY' =>"%.2f Kw",'YESTERDAY_ENERGY' =>"%.2f Kw", 'CURRENT' =>"%.2f A",'CURRENT_POWER_max_day' => "%.0f W",'CURRENT_POWER_avg_day' => "%.2f W",'CURRENT_POWER'=>"%.0f W",'POWER_FACTOR' => "%.2f "}
attr SonoffPows valueIcon {'LIGHT.ON' => 'rc_GREEN@green', 'LIGHT.OFF' => 'rc_RED@red'}
attr SonoffPows valueStyle { if($READING eq "CURRENT_POWER" && $VALUE >= 0 && $VALUE <= 100){ 'style="color:green;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE > 100 && $VALUE < 200){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "TODAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE <= 2.5){ 'style="color:green;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE > 2.5 && $VALUE < 4.8 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "YESTERDAY_ENERGY" && $VALUE >= 4.8){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT" && $VALUE <= 0.45){'style="color:green;;text-align:right"'}elsif( $READING eq "CURRENT" && $VALUE > 0.45 && $VALUE < 0.87 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT" && $VALUE >= 0.87){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_avg_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE <= 10){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE > 10 && $VALUE < 15 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "PERIOD_ENERGY" && $VALUE >= 15){ 'style="color:red;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE <= 100){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE > 100 && $VALUE < 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "CURRENT_POWER_max_day" && $VALUE >= 200){ 'style="color:red;;text-align:right"' } }



Die Durchschnittswerte habe ich hier noch zusätzlich mit average ausgewertet, dann erhälst du noch zusätzlich die im Bild dargestellten Readings. CURRENT_POWER_xxxxx
define Sonoff_Pow_CURRENT_POWER average Sonoff_Pow:CURRENT_POWER.*
define Sonoff_Pow2_CURRENT_POWER average Sonoff_Pow2:CURRENT_POWER.*
define Sonoff_Pow3_CURRENT_POWER average Sonoff_Pow3:CURRENT_POWER.*
define Sonoff_Pow4_CURRENT_POWER average Sonoff_Pow4:CURRENT_POWER.*


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

octek0815

Hallo,

ich bekomme nächste Woche meine POWs. Wie ist das, wenn nach einem Stromausfall der Strom wiederkehrt, geht der POW wieder in den Ursprungs-zustand?
Wäre ja z.B. bei einem Kühlschrank oder Gefrierschrank wichtig.

Grüße
Olli

Mickbaer

Hallo,
zuerst mal ein großes Lob an ALLE, die hier an dieser tollen Lösung mitgewirkt haben.

Ich habe auf die Software Version 3.9.11 20170204 (Tasmato)umgestellt.
Das Platformio Package runter geladen,
userconfig.h meine WiFi Daten angepasst,
compiliert und aufs Sonoff Pow runtergeladen
alles Super gelaufen, läuft, lässt sich einstellen,
MQTT subscribes auf das neue Format angepasst,
FHEM kommt alles an und lässt sich auch schalten.

Ab Version 3.9 haben sich die MQTT Topic's verändert z.B.
von:
CURRENT  0.000 2017-02-05 18:33:46

auf:
ENERGY
{"Time":"2017-02-06T02:14:52", "Yesterday":"0.424", "Today":"0.145", "Period":0, "Power":0, "Factor":"0.00", "Voltage":227, "Current":"0.000"}

Meine Frage ist,
wie bekomme ich den String in den Geschweiften Klammern, in FHEM zerlegt, damit ich z.B. Current  auswerten / weiter verarbeiten kann.
Für einen Hinweis wäre Ich dankbar.
Grüße aus Berlin sendet der Mickbaer.

Reinhart

#95
Zitat von: octek0815 am 05 Februar 2017, 21:48:16
ich bekomme nächste Woche meine POWs. Wie ist das, wenn nach einem Stromausfall der Strom wiederkehrt, geht der POW wieder in den Ursprungs-zustand?
Wäre ja z.B. bei einem Kühlschrank oder Gefrierschrank wichtig.

genau diese Anwendung habe ich auch, ich steuere sogar weil das Thermostat defekt ist und der POW kehrt nach Stromausfall wieder in den letzten Zustand zurück!

@Mickbaer
umstellen auf "LEGACY"! (Consoleneingabe: messageformat legacy)

hier der Ausschnitt aus dem Wiki, ist dort erwähnt:
In neueren Versionen (ab 3.2.8) wurde auch das Ausgabeformat von LEGACY auf JSON geändert. Gegebenenfalls ist auch hier auf LEGACY zu ändern, da alle Beispiele nur mit "LEGACY" funktionieren.

Die Topics haben sich nicht verändert, aber in JSON ist alles in einem String verpackt!

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

Billy

Zitat von: Reinhart am 06 Februar 2017, 09:30:58
@Mickbaer
umstellen auf "LEGACY"! (Consoleneingabe: messageformat legacy)
LG

In arendst/Sonoff-Tasmota gibt es so wie ich es sehe das Command MessageFormat nicht mehr!
Zumindest kann ich es nicht hier finden.
https://github.com/arendst/Sonoff-Tasmota/wiki/Commands

Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

SamNitro

#define MQTT_BUTTON_RETAIN     0                 // [ButtonRetain] Button may send retain flag (0 = off, 1 = on)
#define MQTT_POWER_RETAIN      0                 // [PowerRetain] Power status message may send retain flag (0 = off, 1 = on)
#define MQTT_SWITCH_RETAIN     0                 // [SwitchRetain] Switch may send retain flag (0 = off, 1 = on)


ich glaube es sind die hier in dem neuen sketch aber ungetestet...
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Mickbaer

Hallo,
ich habe die Version
Sonoff Pow Module
Sonoffpow
Program Version 3.9.11
Build Date/Time Feb 5 2017/14:54:39
Core/SDK Version 2_3_0/1.5.3(aec24ac9)

installiert.
Wie Billy schon bemerkt hat, gibt es In arendst/Sonoff-Tasmota
das command "messageformat legacy"
nicht mehr. :'(
Siehe hier unten die log Ausgabe.
---------------------------------------------------------
00:45:02 HTTP: Handle console
00:45:02 RSLT: Receive topic cmnd/sonoffpow1842/messageformat, data size 6, data legacy
00:45:02 RSLT: DataCb Topic sonoffpow1842, Group 0, Index 1, Type MESSAGEFORMAT, Data legacy (LEGACY)
00:45:02 MQTT: stat/sonoffpow1842/COMMANDS1 = {"Commands1":"Status, SaveData, SaveSate, Sleep, Upgrade, Otaurl, Restart, Reset, WifiConfig, Seriallog, Syslog, LogHost, LogPort, SSId1, SSId2, Password1, Password2, AP, Hostname, Module, Modules, GPIO, GPIOs"}
00:45:02 MQTT: stat/sonoffpow1842/COMMANDS2 = {"Commands2":"Mqtt, MqttHost, MqttPort, MqttUser, MqttPassword, MqttClient, Topic, ButtonTopic, ButtonRetain, SwitchTopic, SwitchRetain, PowerRetain, GroupTopic, Units, Timezone, LedState, LedPower, TelePeriod"}
00:45:02 MQTT: stat/sonoffpow1842/COMMANDS3 = {"Commands3":"Power, Light, PowerOnState, PulseTime, BlinkTime, BlinkCount, Weblog, Webserver, Emulation"}
00:45:02 MQTT: stat/sonoffpow1842/COMMANDS4 = {"Commands4":"DomoticzInTopic, DomoticzOutTopic, DomoticzIdx, DomoticzKeyIdx, DomoticzSwitchIdx, DomoticzSensorIdx, DomoticzUpdateTimer"}
00:45:02 MQTT: stat/sonoffpow1842/COMMANDS5 = {"Commands5":"PowerLow, PowerHigh, VoltageLow, VoltageHigh, CurrentLow, CurrentHigh, HlwPcal, HlwUcal, HlwIcal, SafePower, SafePowerHold, SafePowerWindow, MaxPower, MaxPowerHold, MaxPowerWindow, MaxEnergy, MaxEnergyStart"}
00:45:02 Wifi: Checking connection...
00:45:02 Wifi: Connected
---------------------------------------------------------

Kann mir einer einen Tip geben :P, wie ich den String in den Geschweiften Klammern
ENERGY
{"Time":"2017-02-06T02:14:52", "Yesterday":"0.424", "Today":"0.145", "Period":0, "Power":0, "Factor":"0.00", "Voltage":227, "Current":"0.000"}

in FHEM zerlegt, damit ich z.B. Current  auswerten / weiter verarbeiten kann.

Ich für jeden Tip dankbar. :)
Es grüßt der Mickbaer aus Berlin  :-*


dev0

Zitat von: Mickbaer am 07 Februar 2017, 01:03:13
Kann mir einer einen Tip geben :P, wie ich den String in den Geschweiften Klammern
ENERGY
{"Time":"2017-02-06T02:14:52", "Yesterday":"0.424", "Today":"0.145", "Period":0, "Power":0, "Factor":"0.00", "Voltage":227, "Current":"0.000"}

in FHEM zerlegt, damit ich z.B. Current  auswerten / weiter verarbeiten kann.

Entweder den Wert mit Capture Groups (http://perldoc.perl.org/perlre.html) extrahieren oder den JSON String mit dem Perl Modul JSON in einen Hash umwandeln (http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm) und dann den Key 'Current' nutzen. Den/die erhaltenen Werte kannst Du dann mit setreading (http://fhem.de/commandref.html#setreading) in ein Reading schreiben.

Mickbaer

ZitatEntweder den Wert mit Capture Groups (http://perldoc.perl.org/perlre.html) extrahieren oder den JSON String mit dem Perl Modul JSON in einen Hash umwandeln (http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm) und dann den Key 'Current' nutzen. Den/die erhaltenen Werte kannst Du dann mit setreading (http://fhem.de/commandref.html#setreading) in ein Reading schreiben.

Das kling ja alles hoch Kompliziert.
Aber wie soll ich das alles in FHEM machen?
Hast Du da mal ein Beispiel was ich da in FHEM eingeben muss?

Und warum musste Theo das MQTT Format umstellen?
Ich habe gelesen, wegen des Speicherplatzes, das neue Format ist schlanker für Ihn.

Ich konnte aber nirgends finden, wie er auf dieses kryptische Format in dem Result String gekommen ist?

Auch warum er die Bezeichner wie Current in Hochkomma eingeschlossen hat, verstehe ich nicht?

So eine Verschlüsselung habe ich noch nirgends gesehen. :'(

Eine Aufreihung der Messwerte wie Strom: 1.45, Power: 0,234 usw. würde ich ja noch verstehen,
aber woher kommt dieses Kryptisch Format
und vor allem, wie/was muss ich alles in FHEM anstellen um das wieder auszuwerten? :(

Ein Beispiel, wo das schon so in FHEM gemacht wird, wäre schön,  :-*
dann kann ich mir abschauen wie ich zu meinen Daten komme. ::)

Gruß Mickbaer

Reinhart

Ich habe mir einfach basierend auf der 3.9.11 Tasmota die "ino" gepatcht und das Legacy Format wieder eingebaut. Es sind zwar nur wenige Zeilen, aber auf Dauer ist das sicher keine Lösung und es kommt einfach alles parallel (keine Umschaltung des Formates). Ich mag auch nicht alle meine Configs ändern.

Ich verstehe aber ohnehin nicht warum alle jetzt die Tasmota haben wollen und sich dann mit dem Format ärgern, die kann wegen dem nicht mehr bis auf die erweiterte Konfiguration im Webif.

17:19:39 MQTT: tele/TestSwitch/STATE = {"Time":"2017-02-07T17:19:39", "Uptime":0, "POWER":"ON", "Wifi":{"AP":2, "SSID":"xxxxx", "RSSI":100}}
17:19:39 MQTT: tele/TestSwitch/DHT/TEMPERATURE = 21.4
17:19:39 MQTT: tele/TestSwitch/DHT/HUMIDITY = 38.0
17:19:39 MQTT: tele/TestSwitch/SENSOR = "DHT":{"Temperature":"21.4", "Humidity":"38.0"}

jetzt kommen die Temperatur und die Luftfeuchte wieder im alten LEGACY Format am Broker an und es sind keine weiteren Änderungen in Fhem durchzuführen. Ich habe das jetzt testweise nur bei dem DHT22 durchgeführt, ist aber für weitere Sensoren sicherlich auch kein Problem.

Im Anhang die beiden gepatchten Dateien, einfach ins Arbeitsverzeichnis kopieren und neu compilieren.

Danke an dev0 für seine Erklärungen zum filtern des JSON Strings.

LG


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

Reinhart

so, habe nun auch den POW erweitert und bin am testen, schaut aber auch schon gut aus!

19:58:04 MQTT: tele/sonoffpow3/STATE = {"Time":"2017-02-07T19:58:04", "Uptime":0, "LIGHT":"ON", "Wifi":{"AP":1, "SSID":"xxxxx", "RSSI":62}}
19:58:04 MQTT: tele/sonoffpow3/YESTERDAY_ENERGY = 0.083
19:58:04 MQTT: tele/sonoffpow3/TODAY_ENERGY = 0.069
19:58:04 MQTT: tele/sonoffpow3/PERIOD_ENERGY = 0
19:58:04 MQTT: tele/sonoffpow3/CURRENT_POWER = 3
19:58:04 MQTT: tele/sonoffpow3/POWER_FACTOR = 0.19
19:58:04 MQTT: tele/sonoffpow3/VOLTAGE = 228
19:58:04 MQTT: tele/sonoffpow3/CURRENT = 0.073
19:58:04 MQTT: tele/sonoffpow3/ENERGY = 0.073"Yesterday":"0.083", "Today":"0.069", "Period":0, "Power":3, "Factor":"0.19", "Voltage":228, "Current":"0.073"}

wie man sieht, wird auch hier zusätzlich zum JSON wie gewohnt auch im LEGACY Format ausgegeben. Hier waren allerdings einige Zeilen mehr betroffen weil die Aufrufe bis zu 4 x verschachtelt sind.

Ich hänge daher nochmals alle geänderten Files an, muss aber noch ausgiebig testen.

LG

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

SamNitro

Cool, danke für die Arbeit.
Kenne mich ja so nicht aus, aber währe es dann nicht wirklich einfacher FHEM das JSON beizubringen?
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Reinhart

ja hat ja dev0 uns schon geschrieben das es auch anders geht, aber das ist auch ein Aufwand und das bei jeder einzelnen Konfiguration. Ich tu mir beim patchen des Sketches leichter, obwohl ich das auch noch nie gemacht habe, aber einlesen muss man sich überall.

Im Augenblick besteht aber auch kein wirklicher Bedarf, denn die Version Sonoff-MQTT-OTA-Arduino  (wie im Wiki beschrieben) funktioniert ja problemlos und ist ja in etwa auf dem selben Entwicklungsstand was Devices und Modelle betrifft. Wer unbedingt Tasmota haben will muss halt patchen oder sich mit JSON Filter näher befassen.

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