24_TPLinkHS110.pm: Support für TPLink HS100/HS110 v1/2/3 Steckdosen

Begonnen von Volker Kettenbach, 25 August 2016, 18:03:57

Vorheriges Thema - Nächstes Thema

panameranet

In meinem letzten Beitrag habe ich mich leider vertippt.
Es erscheint weiterhin die Fehlermeldung "Cannot load Modul TPLinkHS110".
FHEM ist up to date. Auch die benötigten Perl-Module wurden über capnm installiert geben die Rückmeldung up to date zu sein.
Was mache ich falsch??

Volker Kettenbach

Bitte aus dem Log File mal eine ausführlichere Fehlermeldung kopieren, da sich mit diesen Informationen nichts sagen lässt.
Dafür ggf. den Loglevel erhöhen.

atmelfreak

Hallo Volker,
erstmal vielen Dank für dein tolles Modul. Es läuft bei mir soweit sehr gut und stabil.

Einen kleinen Verbesserungsvorschlag hätte ich noch:
Mir fehlt ein Reading mit dem kWh Verbrauch für den aktuellen Tag (vielleicht habe ich es auch nur übersehen). daily_average liefert ja nur einen Durchschnittswert der letzten Tage oder Monate? Ich habe den gewünschten Wert mal provisorisch in deinen Code eingefügt:

                        foreach my $key (sort keys @{$json->{'emeter'}->{'get_daystat'}->{'day_list'}}) {
                                foreach my $key2 ($json->{'emeter'}->{'get_daystat'}->{'day_list'}[$key]) {
                                        $total = $total+ $key2->{'energy'};
                                        # added for "daily_total" reading
                                        if ($key2->{'day'} == $mday) {
                                                readingsBulkUpdate($hash, "daily_total", sprintf("%.3f", $key2->{'energy'}));
                                        }
                                        # end added
                                }
                        }


Es wäre schön, wenn du das als Standard in Deinen Code mit aufnehmen könntest.
Außerdem wäre es schön, wenn du die Readings wie power, daily_average, current, voltage... etwas runden könntest (z.B. 2 Nachkommastellen). Dann würde die event-on-change-reading Option die Daten etwas effektiver reduzieren können.

Viele Grüße
Frank 

Volker Kettenbach

Hallo Frank,

das Reading habe ich eingebaut.
Das Modul ist in git (https://github.com/kettenbach-it/FHEM-TPLink-HS110) und SVN - also ab morgen über die Update Funktion von FHEM zu bekommen.

Vielen Dank für den Tip!

Was das Runden angeht: ich hatte auch schon darüber nachgedacht. Aber wenn ich das jetzt einbaue, ruft ein anderer, dass er das nicht will sondern die exakten Werte.
Daher lasse ich es und verweise auf die Bordmittel von FHEM - Stichwort userReadings.

Gruß
Volker

atmelfreak

Hallo Volker,

wow, das ging ja schnell, vielen Dank dafür!

Das Runden werde ich dann selbst in userReadings machen.

Viele Grüße
Frank

Ralf777

Hallo zusammen,

mein FHEM läuft auf einer Diskstation und ich bekomme immer den Fehler der hier auch schon beschrieben wurde.

Can't locate IO/Socket/Timeout.pm

Bei IO::Socket::Timeout bekomme ich immer folgenden Fehler:

ZitatRunning install for module 'IO::Socket::Timeout'
Running Build for D/DA/DAMS/IO-Socket-Timeout-0.32.tar.gz
  Has already been unwrapped into directory /root/.cpan/build/IO-Socket-Timeout-0.32-0n6Ecy
  '/opt/bin/perl Build.PL ' returned status 512, won't make
Running Build test
  Make had some problems, won't test
Running Build install
  Make had some problems, won't install

Hat jemand eine Idee was ich falsch mache?

Grüße Ralf

Volker Kettenbach

Da heb ich schon mal was dazu geschrieben:

https://forum.fhem.de/index.php/topic,52124.msg544426.html#msg544426

Wenn Du nicht die nächsten Wochen damit verbringen willst, auf das Nas ein vollwertiges Linux zu installieren, würde ich empfehlen, einen Raspberry Pi zu kaufen.
Ansonsten bitte an ein Synology Forum wenden, dann das ganze ist kein Thema für FHEM.

Lippi

Ahoi!

Ich bin grade auf des Rätsels Lösung gestoßen, das mich seit Wochen plagt (bzw seit ich die Funksteckdose durch ne HS110 ersetzt habe): mein FHEM-Prozess auf dem Raspberry 1 B stürzt komplett ab. Log sieht direkt nach dem Absturz immer so aus:


2017.01.26 17:26:07 3: TPLinkHS110: Steckdose Set <on> called
2017.01.26 17:26:07 3: TPLinkHS110: Steckdose Get called. Relay state: 1, RSSI: -64
2017.01.26 17:26:07 3: TPLinkHS110: Steckdose Device is an HS110. Got extra realtime data: 0 Watt, 233.998885 Volt, 0.019419 Ampere
2017.01.26 17:26:07 3: TPLinkHS110: Steckdose Get end
2017.01.26 17:26:16 3: TPLinkHS110: Steckdose Set <dim> called
2017.01.26 17:26:16 1: PERL WARNING: Use of uninitialized value $_[0] in split at ./FHEM/24_TPLinkHS110.pm line 317.
2017.01.26 17:26:20 1: PERL WARNING: substr outside of string at ./FHEM/24_TPLinkHS110.pm line 328.
2017.01.26 17:26:20 1: PERL WARNING: Use of uninitialized value $_[0] in split at ./FHEM/24_TPLinkHS110.pm line 328.
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/24_TPLinkHS110.pm line 223.


Jetzt gerade so:

2017.01.30 16:52:13 3: TPLinkHS110: Steckdose Set <on> called
2017.01.30 16:52:13 3: TPLinkHS110: Steckdose Get called. Relay state: 1, RSSI: -63
2017.01.30 16:52:13 3: TPLinkHS110: Steckdose Device is an HS110. Got extra realtime data: 0 Watt, 234.236638 Volt, 0.019231 Ampere
2017.01.30 16:52:13 2: TPLinkHS110: Steckdose json-decoding failed. Problem decoding getting statistical data
2017.01.30 16:52:13 3: TPLinkHS110: Steckdose Get end
2017.01.30 16:55:57 3: TPLinkHS110: Steckdose Set <discoSpeedDown> called
2017.01.30 16:55:57 1: PERL WARNING: Use of uninitialized value $_[0] in split at ./FHEM/24_TPLinkHS110.pm line 317.
2017.01.30 16:56:01 1: PERL WARNING: substr outside of string at ./FHEM/24_TPLinkHS110.pm line 328.
2017.01.30 16:56:01 1: PERL WARNING: Use of uninitialized value $_[0] in split at ./FHEM/24_TPLinkHS110.pm line 328.
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/24_TPLinkHS110.pm line 223.


Ich habe ne Funksteckdose, 3 Milights und die HS110 in einer Structure, also Gruppe. Den Funksteckdose waren unbekannte Befehle bisher wurscht, aber dein Script steigt aus wenn nach "Set" was Unbekanntes kommt (wie hier <dim> oder <discoSpeedDown>).

Kannst Du Dir dafür bitte was überlegen? Ich mag das Modul und die Steckdose inzwischen nämlich schon gern...

Danke Dir!

Sebastian


Volker Kettenbach

Hallo Sebastian,

danke für den Bugreport. In der Tat fehlte da die Abfrage für ungültige Kommandos.
Ich kann es zwar mangels Gruppe nicht testen, denke aber, dass die neueste Version des Moduls bei Dir stabil laufen sollte.
Probier es einfach aus!

Das neue Modul ist ab sofort im github (https://github.com/kettenbach-it/FHEM-TPLink-HS110) und ab morgen im SVN.

Gruß
Volker

Lippi

Sieht gut aus, die Milight Kommandos machen dem Modul jetzt nichts mehr aus. Im Log steht auch nichts bedenkliches. Danke dir!

Groej

Hallo,

erstmal Danke für das Modul und damit die Einbindung der HS110 in FHEM.
Eine Frage habe ich. Kann ich den Status der Dose direkt bei der Dose abfragen? Hintergrund ist der weil ich die Dose auch über den Amazon Echo schalte und wenn ich die Zeit ungünstig war erst nach 5 Minuten im FHEM sehen das sie geschaltet ist. Würde es z.B. über einen at Befehl alle 5 Sekunden oder so dann machen.

Danke

Gruß

Jörg
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

redlav

Das Device hat Standardmäßig einen Intervall von 300s, wenn du es einrichtest:

Attribute
    interval: Das Intervall in Sekunden, nach dem FHEM die Messwerte aktualisiert. Default: 300s
    Eine Aktualisierung der Messwerte findet auch bei jedem Schaltvorgang statt.

Wenn du die Steckdose jetzt manuell oder per Echo schaltest dauert es im ungünstigsten Fall 300s
bis der Status in FHEM akualisiert wird. Wenn du es schneller haben willst, musst du den Intervall
verkleinern, wobei das permanente pollen vermutlich bei vielen Steckdosen auch nicht optimal ist.
So ist das halt, wenn man von unterschiedlichen Systemen ein Gerät schaltet.

http://fhem.de/commandref_DE.html#TPLinkHS110


Volker Kettenbach

Wie redlav schreibt: Intervall verkürzen.

Oder Amazon Echo ein FHEM Kommando absetzen lassen und FHEM den Schaltvorgang vornehmen lassen.
Wobei ich nicht weiss, ob es bereits für dieses Gerät Schnittstellen gibt.

atmelfreak

Hallo Volker,

könntest Du bitte alle Aufrufe von
my $json = decode_json($data);
durch ein eval absichern? Mir ist jetzt der FHEM Server z.B beim Schalten der Steckdose abgestürzt.
Wie kommt es eigentlich, dass der FHEM Server durch einen Fehler durch korrupte Daten beim decode_json
komplett abstürzt. Könnte man sowas nicht im Server durch einen "die" Handler abfangen?

Generell bin ich aber nicht sehr zufrieden mit der TPLink-Steckdose, da diese mit meinem Speedport-Router
nicht sauber zusammen arbeitet. Irgendwann kann der Router den Namen der Steckdose nicht mehr auflösen
und FHEM kann diese nicht mehr erreichen. Ich kann im Speedport leider auch keine feste IP-Adresse für die
Steckdose vergeben. Also muss ich die Adresse des Devices ständig im FHEM anpassen...
 
Viele Grüße
Frank

Volker Kettenbach

Ist erledigt!
Danke für den Vorschlag!

Modul list up-to-date im github und ab morgen im SVN.