[HowTo] Sonoff POW an Fhem anbinden

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

Vorheriges Thema - Nächstes Thema

Reinhart

Habe heute 2 dieser kostengünstigen  SonoffPOW Module erhalten und bereits einige erfolgreiche Tests durchgeführt.

Die Anbindung an FHEM erfolgt über MQTT und ist sehr einfach zu realisieren. MQTT wurde deshalb ausgewählt, da es hier bereits fertige Sketches (vom Autor Arends) für dieses Modul gibt. Die Schwierigkeit liegt wohl an der Implementierung der Frequenzumrechnung des "Voltage to Frequency Converter" HLW8012, welche in ESPEasy zum derzeitigen Zeitpunkt noch nicht vorhanden ist. Auf diese kleine Module ESPEasy zu flashen ist meiner Meinung auch wie mit Kanonen auf Spatzen schießen. ESPEasy ist sehr mächtig und für diese Zwecke wohl total überladen. Der Autor Arends hat nur die wesentlichen Funktionen implementiert, die auch von den Modulen geliefert werden. Die Software läuft auch auf den Switches seit einigen Wochen äußerst stabil.

Meine komplette Einrichtung habe ich dokumentiert und im Wiki abgelegt ( Punkt 2.6 einrichten ).

hier eine kurze Zusammenfassung:
- Arends Module downloaden, aktuelle Version ist 2.0.9
- in der Datei user_config.ino die IP Adressen einstellen und das Modul "SONOFF_POW" definieren (#define MODULE  SONOFF_POW )!
- Sketch mit Arduino IDE 1.6.12 compilieren und exportieren.
- Sketch auf das Modul flashen oder hier eine fertige Binary
- auf dem Raspberry den Broker einrichten (sofern der noch nicht läuft)
- In Fhem den Broker einrichten und definieren.

Alle die oben angeführten Arbeiten können aus dem Wiki mit Beispielen entnommen werden.

Langzeiterfahrung habe ich noch keine, da die Module erste heute Vormittag eingetroffen sind. Der längere Teil der Anbindung ist wohl die Vorbereitung und das flashen des Moduls, sollte aber auch in 1-2 Stunden erledigt sein.

Achtung: erst ab Version 2.0.9 funktioniert die Leistungsanzeige für das Modul POW korrekt!

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

Reinhart

ich musste nun leider feststellen, dass die gelieferten Messdaten nicht stimmen. Das Ganze hat zwar nichts mit der Anbindung zu tun, sondern wird schon vom Modul (oder der Software) so geliefert.

Die Spannung wir statt 230V mit 14V angezeigt, die Leistung statt 100 W mit 36 W, der Strom ist auch daneben aber jeweils mit unterschiedlichem Faktor. Ob das nun mit dem Modul oder der Software zusammen hängt, werde ich morgen an dem 2.Modul mit der Originalsoftware testen. Ich schätze aber, dass im Sketch noch ein Fehler ist, denn durch ändern der Referenz Frequenzen kann ich keine anderen Endergebnisse erzielen.

Wenn jemand auch schon ein Sonoff Pow hat, würde mich seine angezeigten Ergebnisse brennend interessieren!

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

Reinhart

so, ich habe die Fehlanzeige nun einmal temporär gefixt und andere Referenz Frequenzen gesetzt. Die Impulsreferenz zeigte ursprünglich keine Wirkung an der Anzeige.

Ob das aber im Sinne des Entwicklers ist bezweifle ich stark. Ich muss nun mehre Leistungsstufen mit dazwischengeschalteten Energiemesser testen und schauen ob das linear bleibt.

Bei mir hat sich nun folgende Referenz ergeben:

#define HLW_PREF            28570    // 1000.0W
#define HLW_UREF            36507    // 230.0V
#define HLW_IREF              6872    // 4.545A


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

Reinhart

Ich habe noch die Leistungsanzeige bei meiner Konstellation näher verifiziert.

Zunächst habe ich den 2. POW ausgepackt und in der App hinzugefügt. Getestet habe ich dann mit einer 3W Led, 11 W Led Lampe und einer 100 Watt Lampe, die Anzeigen (siehe Snapshot) stimmen ziemlich genau mit dem Energiemesser überein. Dann habe ich die Originalfirmware des POW mit Python gesichert und anschließend mit dem Arends Sketch mit meinen modifizierten Referenzfrequenzen bespielt.

Die Anzeigen war diesmal wieder um einiges zu tief, so habe ich den neuen Faktor umgerechnet und neu compiliert. Das Ergebnis war nun exakt. Die Anzeige der Leistung ist auch linear, nur kleine Leistungen mit 3W kann ich nicht erfassen, was aber mit der Itead Software funktionierte.

Ich bin nach folgender Formel vorgegangen:

HLW_PREF_new= Psoll/Pist x HLW_PREF

Psoll = Leistung des Verbrauchers (bei einer 100Watt Lampe also 100Watt, oder besser mit Energiemesser nachgemessen)
Pist = die angezeigte Leistung im MQTT String.
HLW_PREF = Referenzfrequenz für 1000 Watt.

Indem nun die Leistung schön linear angezeigt wird, kann ich damit leben. Die Spannung und der Strom verhalten sich NICHT linear, wird die Leistung kleiner, wird auch die angezeigte Spannung wieder kleiner. Sieht irgendwie so aus, als sei der angezeigte Wert nur der Spannungsabfall des Shunt. Spannung und Strom sind auch uninteressant (die Spannung bleibt ja immer mit 230V unverändert und der Strom wäre auch nur zur Info, weil ja die Leistung im Baustein HLW8012 selbst berechnet und ausgegeben wird.

Das würde also für alle POW Bastler bedeuten, sie müssen sich jedes Sonoff POW selbst kalibrieren damit die Leistungsanzeige stimmt. Bin schon gespannt, was andere Anwender darüber berichten.

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

Reinhart

so, der Autor hat das Problem erkannt und hat vor 2 Stunden eine gefixte Version veröffentlicht!

/* 2.0.9 20161108
* clarify MODULE in user_config.h
* Fix hlw false values
*
* 2.0.8 20161108
* Add initial status after power on
* Seperate driver files
* Fix hlw code and calibrate Pow
* Move user config defines to user_config.h


Die im HLW falsch berechneten Daten wurden nun gefixt.
Nach ersten Tests schaut es nun gut aus. Statt tatsächlichen 100 Watt werden zwar nur 87 angezeigt, aber die geringfügige Abweichung  habe ich durch leichte Erhöhung der Referenzfrequenz von 10000 auf 11200 kompensiert.

Wer also testen will. unbedingt die >=2.0.9 verwenden!

Bitte unbedingt beachten, in der Library "pubsubclient/src/PubSubClient.h" die Packet_Size anpassen!
#define MQTT_MAX_PACKET_SIZE 360

Ich bleibe aber dran und teste die nächsten Tage/Wochen weiter. Sobald die Module wieder verfügbar sind, werde ich mir noch ein paar besorgen.

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

JoWiemann

Zitat von: Reinhart am 08 November 2016, 13:10:15
Dann habe ich die Originalfirmware des POW mit Python gesichert und ...

Vielen Dank für die bisherigen Analysen. Könntest Du noch eine Kurzanleitung für das sichern der Firmware geben. Danke Dir



Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Billy

#6
Hallo Reinhart,
für alle wie mich, die wenig Ahnung haben
Damit man das kann:
ZitatSketch mit Arduino IDE 1.6.12 compilieren und exportieren.
Muß man noch Vorbereitungen treffen.
ZitatIn der Arduino IDE im Menü Datei die Voreinstellungen öffnen.
Dort http://arduino.esp8266.com/stable/package_esp8266com_index.json in das Feld Additional Board Manager URLs eintragen.
Jetzt im Menü Werkzeuge -> Platine den Eintrag Boardsmanager wählen.
Hier die ESP8266 Erweiterung installieren (tyischerweise ganz unten).

Installation prüfen:
Nach der Installation kann man dann im Menü Platine weiter unten das Board ,,Generic ESP8266 module" auswählen. Es erscheinen jetzt auch die Beispiele für das ESP Board. Ich habe mit Beispiele->ESP8266WiFi->WiFiWebServer gestartet.

Vielleicht für Anfänger noch ins Wiki.  ;)

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*

Reinhart

#7
@JoWiemann

da habe ich auch etwas gesucht und folgende einfache Art gefunden. Natürlich habe ich das mit protokolliert.

Phython am PC installieren, Version 2.7 (C:\Program Files (x86\Phython)
serielle Bibliothek hinzufügen (als Admin installieren)
ESPTool herunterladen, ich habe es einfach ins Verzeichnis zu Phython kopiert (C:\Program Files (x86\Phython)


Ich habe dann noch "alle Rechte" (Vollzugriff) auf das Verzeichnis "Phython" für den angemeldeten User frei gegeben, damit auch das Backup geschrieben werden kann.
Das Modul sonoffPOW auf KEINEN Fall mit der Netzspannung verbinden, sondern nur mit USB-Konverter (siehe Bild im Wiki).
Während dem Einstecken des USB Steckers am PC die Taste am sonoffPOW gedrückt halten, dann geht das Modul automatisch in den Flashmode.


Dann öffnest du eine Kommandoshell (cmd), stellst dich ins Verzeichnis der Phytoninstallation und gibst folgendes Kommando ein. Bei mir war es com3, musst halt auf deine anpassen.


Ich habe mir hier noch eine Hardcopy gemacht, wie das Backup bei mir durchgelaufen ist.



python esptool.py --port COM3 --baud 115200 read_flash 0x000 524288 backup.bin



Das Ganze geht RuckZuck und auch die Installation von Phyton sollte innerhalb von 10 Minuten zu schaffen sein.


Ich hoffe du hast schnell Erfolg damit, auch ich wollte unbedingt eine Sicherung haben, damit ich wieder zurück kann wenn ich will!


LG
Reinhart

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

Reinhart

@Billy

Danke für deinen Vorschlag, ich werde mir den Teil noch genauer anschauen und zumindest noch einige Links einpflegen. Wer nicht selber compilieren will, kann aber auch die fertige Binary aus dem Packet von Arends nehmen (im Verzeichnis Api/Arduino).

Allerdings kann man dann auch nichts ändern/anpassen, bzw. kann man das Modul SONOFF_POW nicht einstellen und bekommt dann auch keine Messdaten der Leistung.

Ich muss ohnehin noch einige Änderungen im Wiki durchführen, da der Autor Arends seine Files geändert hat (zB: power.ino)

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

Reinhart

habe im Wiki einiges nachgebessert und erweitert. Mit der neuen Software 2.0.9 funktionieren die POWs nun gut!

Ich habe hier 2 Plots angehängt, am ersten hängt ein Gefrierschrank der offensichtlich nicht sehr wirtschaftlich arbeitet, da der Kompressor fast die ganze Zeit läuft. Weit entfernt von A+, ist auch ein älteres Modell mit 12 Jahren! Im 2. Plot sind 2 Gefrierschränke am POW angeschlossen, ebenfalls ältere Modelle aber diese Thermostate arbeiten noch gut mit längeren Ausschaltphasen.

Bei beiden Plots ist mit der POW Leistungsmessung schön zu sehen, dass bei Anlauf des Kompressors dieser mehr Leistung aufnimmt und nach etwa 1 Stunde die Stromaufnahme verringert.

Für Bastler sind die POW Module die ideale(und kostengünstige)  Ergänzung und nun ganz leicht in Fhem zu integrieren. Bin schon gespannt, wann ESPEasy die POW unterstützt, doch es funktioniert auch MQTT unter Fhem sehr gut und ist ein ausgereiftes und stabiles Protokoll.

LG
Reinhart

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

Reinhart

ich hänge hier einmal eine compilierte Binary für das sonoff_POW an, sofern jemand mit der Arduino IDE nichts machen möchte.

Die Einstellungen sind wie folgt: (POW ist aktiviert, Broker und URL sind auf DNS Namen "raspberry".
// Enable only one out of three MODULE defines below
//#define MODULE                 SONOFF            // Sonoff, Sonoff SV, Sonoff Dual, Sonoff TH 10A/16A, S20 Smart Socket, 4 Channel
#define MODULE                 SONOFF_POW        // Sonoff Pow
//#define MODULE                 ELECTRO_DRAGON    // Electro Dragon Wifi IoT Relay Board Based on ESP8266 

#define PROJECT                "sonoffpow"     // PROJECT is used as the default topic delimiter and OTA file name
                                            // As an IDE restriction it needs to be the same as the main .ino file
                                           
#define CFG_HOLDER             0x20160520   // Change this value to load default configuration parameters
#define SAVE_DATA              1            // Save changed parameters to Flash (0 = disable, 1 - 3600 seconds)
#define SAVE_STATE             1            // Save changed power state to Flash (0 = disable, 1 = enable)

// Wifi
#define STA_SSID               "SSID"      // Wifi SSID
#define STA_PASS               "password"  // Wifi password
#define WIFI_HOSTNAME          "%s-%04d"         // Expands to <MQTT_TOPIC>-<last 4 decimal chars of MAC address>
#define WIFI_CONFIG_TOOL       WIFI_WPSCONFIG    // Default tool if wifi fails to connect (WIFI_SMARTCONFIG, WIFI_MANAGER or WIFI_WPSCONFIG)

// Syslog
#define SYS_LOG_HOST           "raspberry"
#define SYS_LOG_PORT           514
#define SYS_LOG_LEVEL          LOG_LEVEL_NONE
#define SERIAL_LOG_LEVEL       LOG_LEVEL_INFO
#define WEB_LOG_LEVEL          LOG_LEVEL_INFO

// Ota
#if (ARDUINO >= 168)
  #define OTA_URL              "http://raspberry:80/api/arduino/" PROJECT ".ino.bin"
#else
  #define OTA_URL              "http://raspberry:80/api/arduino/" PROJECT ".cpp.bin"
#endif

// MQTT
#define MQTT_HOST              "raspberry"
#define MQTT_PORT              1883


Die WIFI Accounts sind dann 3 x Taste kurz drücken und eine Smartconfig wird gestartet und die SSID und das Passwort kann über eine Android App eingegeben werden. https://play.google.com/store/apps/details?id=com.cmmakerclub.iot.esptouch

4 x Taste kurz drücken und man bringt den Device in den Access Point Mode mit der IP-Adresse 192.168.4.1.

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

AxelSchweiss

Kann man den POW auch nur als Leistungsmesser verwenden?
Sprich ... das Relais auslöten und die Kontakte überbrücken.

Liefert der POW dann immer noch die Messdaten ? Oder nur wenn das Relais geschaltet ist ?

Ich würde den nämlich gerne als Leistungsmesser an meinem Server einsetzten und da wäre es schlecht wenn das Relais zufällig ausschaltet  ;D

JoWiemann

Zitat von: Reinhart am 08 November 2016, 20:28:16

Ich hoffe du hast schnell Erfolg damit, auch ich wollte unbedingt eine Sicherung haben, damit ich wieder zurück kann wenn ich will!

Hallo Reinhart,

Python hatte ich schon drauf. Der Rest ging dann ganz easy. Danke noch mal für die Anleitung.

Herzliche Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Reinhart

Zitat von: AxelSchweiss am 09 November 2016, 12:47:05
Kann man den POW auch nur als Leistungsmesser verwenden?
Sprich ... das Relais auslöten und die Kontakte überbrücken.

Liefert der POW dann immer noch die Messdaten ? Oder nur wenn das Relais geschaltet ist ?

Ich würde den nämlich gerne als Leistungsmesser an meinem Server einsetzten und da wäre es schlecht wenn das Relais zufällig ausschaltet  ;D

kann ich dir so nicht beantworten, hat wohl noch keiner probiert. Aber die Kontakte überbrücken kannst du immer und wenn ich mir den Schaltplan so ansehe, dann hat das Relais keine weitere Rückmeldung auf interne Software.
Bei einem Server wäre das eine dumme Sache den abzuwürgen, habe eh schon Bedenken wegen meiner Gefrierschränke und werde die Sendebefehle in Fhem einfach blockieren, aber der lokale Taster bleibt mir trotzdem.

Das einzige was ich beobachtet habe, unabhängig ob das Relaise angezogen hat, kommen die MQTT Strings an den Broker, aber eben dann mit 0 Wert.

mosquitto_pub -q 2 -t cmnd/sonoffpow/1/TelePeriod/set -m "60" = Timer setzen, alle 60 Sekunden Daten senden
dieses Kommando setzt den Abfragezyklus auf 60 Sekunden, egal ob ein oder ausgeschaltet. Der Autor Anders nennt das Telemetriedaten (tele) die unabhängig vom Status gesendet werden. Wird der Taster gedrückt, kommen auch Statusmeldungen (stat)

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

AxelSchweiss

Na dann werde ich es einfach mal ausprobieren  ... wenn ich den POW endlich habe.
Aktuell scheint ITEAD Lieferprobleme zu haben ...  seit einer Woche ist der Bestellstatus "in Progress"  :(