98_myStrom.pm - myStrom WLAN Energy Control Switch

Begonnen von arallon, 11 August 2015, 23:46:25

Vorheriges Thema - Nächstes Thema

arallon

Hallo zusammen

ich habe mir vor kurzem erst mein FHEM Server aufgesetzt und mal ganz langsam angefangen ein paar Devices einzubinden. Gestern habe ich mir dann ein WLAN Energy Control Switch von myStrom gekauft. Neben einer Möglichkeit diesen über die Swisscom Internet-Box (besitze ich nicht) gibt es auch die Möglichkeit diesen über eine App von myStrom zu steuern. Zusätzlich gibt es aber ein REST-Interface mit den Funktionen:

- Einschalten
- Ausschalten
- Report abrufen

Der Report kommt im Json Format zurück und sieht beispielsweise so aus:
{
  "power":  9.310672,
  "relay":  true
}



Zuerst wollte ich die Steckdose via HTTPMOD Modul ansprechen und konfigurieren. Obwohl mir Perl und FHEM neu sind habe ich mich aber dazu entschlossen den Versuch zu wagen ein "Modul" zu schreiben.

Ein Device wird folgendermassen definiert. Wobei das Setzen eines Intervals optional ist. Default sind 15 Sekunden.

define <name> myStrom <ip-address> [interval]

Beispiel:
define mySwitch1 myStrom 192.168.0.12 10


Je nach Interval wird der JSON-Report angefordert und in readings geschrieben. Hier gibt es analog der zurück gelieferten Daten die readings: power und relay. relay wird mit on für true und off für false belegt.

Als Set-Funktionen gibt es die Möglichkeit die Steckdose ein- und auszuschalten, sowie ein Update des Reports anzufordern oder die Totaldaten zu reseten :

set mySwitch1 on
set mySwitch1 off
set mySwitch1 update
set mySwitch1 resetTotal


Für Anregungen und Erweiterungen bin ich natürlich offen.

Grüsse

mike

Edit 21.03.2018:
Aktuelle Version angefügt. Readings für total powor Wh und kWh integriert. Fehlerbehandlung nach Feedback im Forum integriert, kleinere BugFixes.


Offen:
- gem. Antworten hier im Forum gibt es Rev2 mit Temperaturdaten, die man noch einbinden kann bzw. die Rev2 führt scheinbar noch zu Problemen. Hier wäre ich auf Unterstützung angewiesen, da ich nur die "alten" Geräte besitze.
- Umbau auf NonBlocking HTTP Requests (nach hinten geschoben, da nicht wirklich ein Problem, analysiert mit Freezemon)
- ggf. Wochen / Monatsverbrauch einfügen.
- neuere Firmware kann anscheinend auch "toggle" - Wäre hier Bedarf? Grundsätzlich wäre das ja auch ohne den Api Aufruf easy umzusetzen. Bzw. ich selbst habe einfach ein generelles toggle in MyUtils

eppi

Hallo Mike
Cool, ich habe mir auch eine bestellt bei Swisscom und erwarte sie morgen. Ich werde berichten...
Gruess Dani

arallon

Hoi Dani

Dann bin ich gespannt. Wenn ich das richtig gesehen habe, gibt es auch noch eine API für das Portal von myStrom, wenn man seine Steckdose dorthin verbunden hat (min, max werte etc. abrufbar).
Ich habe meine Steckdose jedoch nicht mit dem Portal verbunden und auch sichergestellt, dass diese keine Verbindung zum Internet hat.

Falls du deine verknüpft mit dem Portal würde mich mal interessieren, welche Daten dort abgelegt warden und ob ersichtlich ist, ob diese regelmässig abgerufen werden oder ob die Steckdose diese Daten vorhält aber nicht über das REST-Interface zur Verfügung stellt.

Merci und Gruss

mike

eppi

Hoi Mike
Mein Adapter ist heute angekommen. Ich habe ihn über das Webiface angemeldet, da ich wie du auch keine Internet-Box besitze (ich habe die FritzBox7390 in Betrieb). Die Integration ist sehr einfach gegangen als nächstes habe ich dein Modul geladen, jedoch kommt immer die Meldung:
Cannot load module myStrom

Die Berechtigungen des Moduls habe ich überprüft, die sind gleich wie bei den anderen (fhem/dialout).
Hast du eine Idee, ansonsten werde ich versuchen, ihn über HTTPMOD einzubinden.

Viele Grüsse Dani

arallon

Hast du JSON installiert bei dir? Das wäre mal so der erste Anhaltspunkt. Gibt es sonst noch etwas im Log ?

eppi

Zitat von: arallon am 13 August 2015, 20:50:18
Hast du JSON installiert bei dir?
Genau, das war es!!! Danke jetzt hat das define geklappt  :D

Funktioniert einwandfrei - Danke vielmals für deine Hilfe und das tolle Modul, werde mir noch weitere zulegen.

Viele Grüsse Dani

arallon

Hast du dich bei myStrom angemeldet?

Ich hatte heute Kontakt mit íhnen für ein Firmware Upgrade. Zukünftig kann man das auch selber, wenn man einmal die neue hat. Registrieren musste ich mich dafür nicht, nur die Steckdose kurz ins Internet lassen und die Mac Adresse mitteilen.

Habe auch nachgefragt, wie das mit dem Portal so funktioniert. Die Steckdose meldet ca alle 30 Sekunden die Daten an die Cloud. Wenn hohe Stromschwankungen sind im Verbrauch, dann auch öfter.
Das bedeutet für mich, dass die Daten dort eigentlich auch mehr Durchschnittsberechnungen sind, als wirklich effektive Verbrauchsdaten. Wenn ich alle 10 Sekunden abrufe, bin ich da nicht schlechter in der Datenerhebung ohne Cloud.

Auf die toDo Liste für nächste Woche kommt auf jeden Fall mal readings einfügen für Maximum Wert, TagesMax, und evtl Durchschnitt und Gesamtverbrauch. Nur mal überlegen wie man hier die Daten so ablegen und wieder verwerten kann ohne dauernd das Log auswerten zu müssen.

eppi

Nein, ich habe mich bei myStrom über meinen Facebook angemeldet.
Kannst du mir sagen, wie du den Firmware Update gemacht hast?

Auf die neuen Features freue ich mich, dann muss ich keine Perl berechnungen schreiben :)
Gruess Dani

arallon

Ich habe den Support kontaktiert. Wenn du dich allerdings angemeldet hast, könnte es evtl. auch über das Webinterface gehen?
Ansonsten Support anschreiben, Mac Adresse der Steckdose mitteilen und die Dose muss Zugang zum Internet haben. Dann machen die das und schicken dir eine Mail wenn erledigt.
Support hat sehr schnell geantwortet und mir um 19:20 noch die Dose aktualisiert. Also echt nett.

Wie hättest du vor gehabt die Berechnungen zu machen? Bin gerade etwas am überlegen wie man das am schlausten und "Ressourcenschonend" umsetzen könnte. Bin absoluter FHEM Neuling :)

eppi

Hoi Mike
Ich hätte bei meinem EW nachgeschaut, wann Niedertarif und Hochtarifzeiten sind und die ensprechenden Kosten pro kwh.
Dann du den Zeiten pro Tag einen at definiert, der mir den aktuellen Stand in der Steckdose holt, den Wert vom alten subtrahiert und das ganze wieder in ein Reading eines Dummy geschrieben.
Am Ende des Tages (23:59:59) alle werte (hochtarif, niedertarif) multipliziert mit den Tarifen und Summe / Vebrauch in ein Log geschrieben...

In der Theorie sollte das irgendwie funktionieren, aber es wäre sicherlich ein Aufwand (für mich) von ein paar Stunden..

Viele Grüsse Dani

arallon

Entweder ich stehe auf dem Schlauch gerade oder das funktioniert so nicht ganz, oder wie oft willst du das aufrufen? Die Steckdose liefert dir ja den aktuellen Verbrauch nicht den Gesamtverbrauch.


eppi

Stimmt! Ich habe mir das noch zuwenig angeschaut, deshalb voll hineingefallen. Du hast recht, das ist nicht so einfach wenn nur der aktuelle Verbrauch angezeit wird....
Ich werde mir das mal noch überlegen...

eppi

Hätte noch einen kleinen Verbesserungsvorschlag:
Könntest du bei den Set Befehlen on und off klein schreiben, anstelle von On und Off?

Danke!

arallon

#13
Das ist natürlich kein Problem. Habe es mal konsequenterweise überall klein geschrieben.

Zusätzlich liest diese Version nun noch ein paar Infos mehr raus z.B softwareversion, ssid, Network mode, macaddress. Diese Infos werden alle 5 Minuten geholt und nur bei Änderung aktualisiert. Hier denke ich aber noch darüber nach, dass nur ein bei einem Abbruch der Verbindung wieder geprüft wird und zusätzlich 1 mal pro Tag oder so. Ein set update löst immer aus.

Es wird neu nun auch ein 5 Minuten Timer statt dem normalen Interval gesetzt, falls die Dose nicht erreichbar ist. So wird nicht dauern ein Error ins Log geschrieben. Ich denke der Log Eintrag ist wohl auch hinfällig, da ich einen Connection Status hinzugefügt habe.

Einfach mal testen. Feedback ist natürlich super. Danke dir.


Edit: Direkt noch einmal nachgebessert. Ich nehme an du wolltest das gerne, damit man direkt das Birnchen sieht und on / off schalten kann im Interface. Der Status wurde aber nicht direkt gesetzt, da ich den erst nach erneutem Aufruf der API gesetzt habe. Das habe ich nun geändert und setzte bei Klick auf "on" einfach mal STATE = on. Sollte die Dose nicht erreichbar sein, korrigiert sich der Status ein paar Sekunden später direkt wieder auf off.

eppi

Hoi Mike
Danke für die neue Version. Ich habe sie getestet funktioniert einwandfrei!
Auch die Infos (SW Version, SSID, ect) in den Internals sichtbar.

Mit dem mystrom Support bin ich immer noch daran, diesen in mein mystrom-konto zu verschieben, da der facebook Login über den PC nicht funktioniert!
Ich bin gespannt auf deine weiteren Features  ;)
Viele Grüsse Dani