EDIMAx EDIPlug 2101 - WiFi Schaltsteckdose mit Verbrauchszähler

Begonnen von ternst, 24 November 2014, 13:23:53

Vorheriges Thema - Nächstes Thema

Wzut

Ich war mal so frei die erste Version etwas zu verändern :
a. der Status wird nun sofort nach einem on oder off aktualisiert
b. SetExtensions eingefügt
c. internen Ping entfernt , ob die Verbindung aufgebaut werden konnte oder nicht ist der Job von HttpUtils :)
d. state kann vier Zustände haben : defined, error , on oder off
e. set und get getrennt

Da ich nur eine 1101 besitze konnte ich die Powerfunktionen der 2101 nicht testen. Im Internet habe ich verschiedene Telegramme zum Thema Powerabfrage gefunden. Bitte mal alle mit get name power, power2 und power3
durchtesten und rückmelden welche der drei Abfragen sinnvolle Werte ergeben und welche sterben können. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

hmmm kein Feedback für die 2101er ... schade ist das Interesse an dem Modul wohl doch nicht so groß.

Ich habe hier nochmal ein Update mit einem neuen get und drei set Befehlen für die interne Zeitschalttabelle.
Obwohl ich meine 1101 erst letzte Woche bei ELV erstanden habe hatte sie eine ältere Firmware  (V1.4) die keine Schaltzeiten unterstütze. Unter Support -> Download bei www.edimax.com findet sich ein Windows Tool um die Firmware der 1101 und 2101 zu aktualisieren. ( aktuell V1.9 bei der 1101 )

der neue get Befehl -> get <name> schedule liest die aktuelle Zeitentabelle in FHEM ein

mit set <name> delete 0-6 kann die Liste eines Wochentages komplett gelöscht werden

set <name> list erlaubt für einen Tag eine neue Liste zu erzeugen , das Format ist
set <name> list DayOfWeek (0-6) Startzeit (h:m) Endzeit (h:m) Kommando (on oder off)
set <name> list 0 0:1 0:2 on  -> Sonntags von 00:01 bis 00:02 einschalten

möchte man eine bestehende Liste erweitern geht das mit:
set <name> addlist DayOfWeek (0-6) Startzeit (h:m) Endzeit (h:m) Kommando (on oder off)
Versuche mehr als einmal den gleichen Zeitblock zu definieren erzeugen eine Fehlermeldung.
Ausnahme man möchte einen bestehenden Block von on nach off bzw von off nach on ändern.

ToDo :
1. einen einzelen Eintrag aus einer Liste löschen , Abhilfe z.Z Liste mit list auf einen Eintrag reduzieren und dann die erforderlichen Einträge mit addlist neu hinzufügen

2. Ich habe es leider nicht geschafft einen Tag komplett an oder auszuschalten ohne die bestehende Liste zu verlieren. Man muss also zuerst einmalig mit der Smartphone App jeden der sieben Wochentage einschalten
und kann dann den Tag mit FHEM nach Belieben verändern.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Herjemine

Hallo Wzut,

hab getestet, bin aber noch nicht zum schreiben gekommen  ;)
die einfache power abfrage ist die richtige, bringt alle Ergebnisse zurück

Power.LastToggleTime 20141206104424 2014-12-08 20:48:16
Power.NowCurrent 0.4719 2014-12-08 20:48:16
Power.NowEnergy.Day 1.928 2014-12-08 20:48:16
Power.NowEnergy.Month  5.612 2014-12-08 20:48:16
Power.NowEnergy.Week  4.020 2014-12-08 20:48:16
Power.NowPower 79.96 2014-12-08 20:48:16


die ping Abfrage habe ich bei mir unter WinXP wieder aktivieren müssen,
immmer wieder wenn er nen http time out bekommt
2014.12.08 17:23:19 3: PowPlug: return error -> connect to http://....:10000 timed out
stürzt Perl ab
Ereignistyp: Fehler
Ereignisquelle: Application Error
Fehlgeschlagene Anwendung perl.exe, Version 5.18.4.1, fehlgeschlagenes Modul ntdll.dll, Version 5.1.2600.6055, Fehleradresse 0x000673be.


Gruß Hermann

Wzut

Danke für die Rückmeldung die LastToggleTime könnte man noch etwas schöner darstellen bzw. die Zeitangaben FHEM like darstellen.

Mit FHEM unter XP bzw Windoof habe ich leider keine Erfahrung, allerdings verwundert mich das Verhalten doch schon etwas - demnach müssten ja alle Module von dem Fehler betroffen sein die die HttpUtils verwenden ???
Vllt kann ja einer der Gurus bzw. Rudi selbst etwas genaueres dazu sagen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

rudolfkoenig

Ich habe auf einem XP Rechner laufenden FHEM folgendes getestet:

{ GetFileFromURL("http://fhem.de/fhemdoc.js") } -> Ausgabe kommt sofort

{ GetFileFromURL("http://fhexm.de/fhemdoc.js") } -> dauert, dann keine Ausgabe, keine Fehlermeldung

{ GetFileFromURL("http://fhexm.de/fhemdoc.js", 2, undef, undef, 2) } -> dauert, keine Ausgabe, Fehler im FHEM-Log: 2014.12.09 19:18:14 2: CustomGetFileFromURL http://fhexm.de/fhemdoc.js: Can't connect(1) to http://fhexm.de:80: IO::Socket::INET: Bad hostname 'fhexm.de:80'

{ GetFileFromURL("http://192.168.178.211/fhemdoc.js", 2, undef, undef, 2) } -> dauert, keine Ausgabe, Fehler im FHEM-Log: 2014.12.09 19:19:49 2: CustomGetFileFromURL http://192.168.178.211/fhemdoc.js: Can't connect(1) to http://192.168.178.211:80: IO::Socket::INET: connect: timeout

{ GetNBURL("http://192.168.178.211/fhemdoc.js") }
GetNBURL ist mein Mini-Wrapper um den Nonblocking-Get, schreibt folgendes ins Log:
2014.12.09 19:22:12 1: ERR:connect: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.

Also bis auf den letzten Versuch ist alles wie geplant. Die letzte Variante ist zwar ein Fehler, allerdings stuerzt FHEM dabei keineswegs ab. Und bevor ich nonblocking unter Windows implementiere, wollte ich geklaert haben, ob das ueberhaupt in diesem Fall die Ursache ist, fuer mich schaut es nicht so aus.

Herjemine

hatte es auch noch etwas weiter verfolgt.
Perl Absturz mit Popup kommt unregelmäßig auf keinem Fall bei jedem Conncet timed out
fhem läuft weiter, bis man den Popup weg klickt (dass keine Meldung an MS gesendet wird) , dann bricht Perl ab

Der Eintrag im Eventlog stimmt immer mit dem timeout im fhem.log überein.

Ein Verdacht war noch, dass der xmlin Abstürtz
my $xmlres = XMLin($buffer);
da hatte ich beim testen auch mal nen Perlabsturz als es den utf8 nicht erkannte

Gruß Hermann

Wzut

OK, danke für die Infos. Ich hatte inzwischen Kontakt mit dem Autor von HTTPMOD (welches auch das NonblockingGet aus den HttpUtils verwendet), ihm ist der Fehler unter Windows auch unbekannt.
Ich habe inzwischen noch eine Funktion zum löschen einzelner Zeiteinträge fertig sowie eine engl/deutsche Beschreibung für die commandref, würde dann gerne diese neue Version am WE ins  svn einchecken.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Herjemine

ich muss erst mal noch die FW meiner Plugs updaten, sind bei mir auch 1.04 bei den 11ern und 1.03 bei den 21ern

Herjemine

#23
Hallo wzut,

die FW der 2101 ist mit der 1.03 aktuell.
Ich hab mal am Fr. von 14:00-15:00 über das Smartfon auf on geschaltet, der Schedule bringt dann auch

HTTP/1.0 200 OK Content-Type: application/xml; charset=utf-8 Cache-Control: no-cache Pragma: no-cache Content-Length: 3697 Connection: close Date: Fri, 12 Dec 2014 13:57:30 GMT Server: lighttpd/1.4.31 <?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><SCHEDULE><Device.System.Power.Schedule.0.List></Device.System.Power.Schedule.0.List><Device.System.Power.Schedule.1.List></Device.System.Power.Schedule.1.List><Device.System.Power.Schedule.2.List></Device.System.Power.Schedule.2.List><Device.System.Power.Schedule.3.List></Device.System.Power.Schedule.3.List><Device.System.Power.Schedule.4.List></Device.System.Power.Schedule.4.List><Device.System.Power.Schedule.5.List>dTe01</Device.System.Power.Schedule.5.List><Device.System.Power.Schedule.6.List></Device.System.Power.Schedule.6.List><Device.System.Power.Schedule.0 value="ON">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.0><Device.System.Power.Schedule.1 value="OFF">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.1><Device.System.Power.Schedule.2 value="ON">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.2><Device.System.Power.Schedule.3 value="OFF">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.3><Device.System.Power.Schedule.4 value="ON">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.4><Device.System.Power.Schedule.5 value="ON">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.5><Device.System.Power.Schedule.6 value="ON">000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Device.System.Power.Schedule.6></SCHEDULE></CMD></SMARTPLUG>


aber alle Einträge die ich mit attlist mache erscheinen nicht im Buffer oder Smartfon

Wzut

hmmmm , was passier wenn du mit list versuchst eine Liste anzulegen ?
Um zu sehen was bei addlist ( nicht attlist ! ) schief läuft würde ich zuerst im EDIPLUG_Read eine Zeile auskommentieren :

elsif (($hash->{LASTCMD} eq "addlist") ||
            ($hash->{LASTCMD} eq "list")    ||
            ($hash->{LASTCMD} eq "delete"))
       {
         sleep(2); # TODO , sehr hässlich - aber irgend eine Wartezeit muss sein
         EDIPLUG_Get($hash,$name,"schedule"); # geaenderte Liste holen
       }   


die Zeile EDIPLUG_Get($hash,$name,"schedule");  erst mal unscghädlich machen , dann siehst du im Webinterface die Antwort des Ediplug auf das Kommando.
Wenn das nichts bringt kannst du unter EDIPLUG_Set den folegden Abschnitt suchen :


if ($hash->{LASTCMD})
   {
      #return $hash->{data}; # Debug nur anzeigem
      HttpUtils_NonblockingGet($hash);
      return undef;
   }


entferne dort das # vor return $hash->{data};
Danach wird das zusammengebaute XML zwar nicht mehr zum EdiPlug geschickt , dafür sieht man aber seinen Inhalt im Webinterface.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

Zitat von: Wzut am 08 Dezember 2014, 19:11:13
ToDo :
1. einen einzelen Eintrag aus einer Liste löschen , Abhilfe z.Z Liste mit list auf einen Eintrag reduzieren und dann die erforderlichen Einträge mit addlist neu hinzufügen

2. Ich habe es leider nicht geschafft einen Tag komplett an oder auszuschalten ohne die bestehende Liste zu verlieren.

die heutige Version hat zwei neue Set Befehle :
Set <name> dellist 0-6 Startzeit(hh:mm) Endzeit(hh:mm) löscht den dazugehörigen Eintrag aus der Liste
Set <name> day 0-6 on/off  schaltet die Zeitentabelle für einen Wochentag an oder aus (wie die App)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Lehmi54

Hallo ternst und wzut,
vielen Dank für Euer Perl-Script. Es funktioniert für meine Anwendungsgedanken prima.
Stehe mit Ubuntu, FHEM und Perl ganz, ganz am Anfang und bin so was von beeindruckt von Euren Skript, aber sicher dauert es noch seine Zeit bis zum Diskussionspartner für Euch.
Nun aber zu meinen Vorschlägen bzw. Ideen,
Der eine Smartplug steuert über  ein Relais und einen Parallelwiderstand zum Außenfühler zeitgesteuert (mittels des internen Schedulers) unsere Heizung. Den Timer werde ich auch intern wegen der Systemstabilität belassen. Ziel ist hier ist die mittelfristige Ablösung der App- und Cloudgesteuerten Lösung zum Ein- und Ausschalten der Heizung von überall durch fhem.
Der Zweite ist für die Waschmaschine im Keller gemeinsam mit einem z-Wave Wassersensor. Hier benötige ich den akt. Stromverbrauch und Ausschalten. Eventuell wird der Smartplug auch durch einen AEO_SES3_EU Zwischenstecker ersetzt.
Nun aber meine Frage: Mein Problem ist Speedport W921V und damit keine feste IP-Zuweisung nach MAC-Adresse. Nach 3 Wochen werden die IP's neu vergeben. Besteht die Möglichkeit, statt der IP beim Skript auch die MAC-Adresse zu verwenden und daraus dann die dazugehörige IP z.B. über einen IP-Bereich z.B. 192.168.2.100 bis 192.168.2.120 und dem "Info-Befehl" programmmäßig zu ermitteln? :-\
Danke Euch und noch einen angenehmen zweiten Feiertag
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

Lehmi54

Hallo,
ich bin's nochmal. Erhalte zu unterschiedlichen Zeiten von beiden Plugs timeout Meldungen, fhem läuft aber weiter

2014.12.26 14:33:34 3: bo_heizung: return error -> read from http://192.168.3.104:10000 timed out
2014.12.26 15:11:34 3: Plug001: return error -> connect to http://192.168.3.102:10000 timed out
2014.12.26 15:11:34 3: bo_heizung: return error -> connect to http://192.168.3.104:10000 timed out
2014.12.26 16:11:35 3: Plug001: return error -> connect to http://192.168.3.102:10000 timed out
2014.12.26 16:47:35 3: bo_heizung: return error -> connect to http://192.168.3.104:10000 timed out
2014.12.26 16:48:35 3: bo_heizung: return error -> connect to http://192.168.3.104:10000 timed out
2014.12.26 18:11:36 3: Plug001: return error -> connect to http://192.168.3.102:10000 timed out
2014.12.26 19:11:35 3: bo_heizung: return error -> connect to http://192.168.3.104:10000 timed out
2014.12.26 21:11:36 3: bo_heizung: return error -> connect to http://192.168.3.104:10000 timed out
2014.12.26 22:10:39 3: Plug001: return error -> connect to http://192.168.3.102:10000 timed out

Viele Grüße
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

Wzut

Zitat von: Lehmi54 am 25 Dezember 2014, 19:57:02
Mein Problem ist Speedport W921V und damit keine feste IP-Zuweisung nach MAC-Adresse
Ich habe zwar keine Ahnung vom Speedport aber vergibt er keine Namen für die angeschlossenen Geräte ?
Bei mir z.B. benutze ich in FHEM nicht die IP des EDIPLUG sondern dessen Namen im Netzwerk.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Lehmi54

Hallo Wzut,
habe heute vergeblich versucht, den W921V zu überzeugen, mit Namensauflösung zu arbeiten. Macht er nicht. Ich kann zwar Namen für die Plugs vergeben, kann diese dann aber weder über einen "ping" und auch nicht in fhem erreichen. Mein Fazit: Es geht's also mit dem Speedport nicht... :(
Ist denn meine Idee mit der MAC-Adresse programmtechnisch überhaupt realisierbar?
Danke und einen guten Start für 2015
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino