{LASTCMD})
+ {
+ #return $hash->{data}; # Debug nur anzeigem
+ HttpUtils_NonblockingGet($hash);
+ return undef;
+ }
+
+
+ # Hier sollten wir eigentlich nie hinkommen ..
+ $hash->{LASTCMD} = $oldcmd;
+
+ return "$name set with unknown argument $cmd, choose one of " . join(" ", sort keys %sets);
+
+}
+
+
+################################################################################
+
+sub EDIPLUG_Get($@) {
+ my ($hash, @a) = @_;
+ my $name= $hash->{NAME};
+
+ return "get $name needs at least one argument" if(int(@a) < 2);
+
+ my $cmd = $a[1];
+
+ return "$name get power is not supported by this model !" if (($cmd eq "power") && ($hash->{MODEL} ne "SP2101W"));
+
+ $hash->{data} = $datas{$cmd};
+
+ if($hash->{data})
+ {
+ $hash->{LASTCMD} = $cmd;
+ $hash->{timeout} = AttrVal($name, "timeout", 2);
+ HttpUtils_NonblockingGet($hash);
+ return ;
+ }
+
+ return "$name get with unknown argument $cmd, choose one of " . join(" ", sort keys %gets);
+
+}
+
+################################################################################
+sub decode_list($)
+{
+ # Bsp : 10111-01020-nX001
+ my ($string) = @_ ;
+ return "" if (length($string)<5); # zu kurz
+
+ my @a = split("-",$string);
+ my @sorted = sort @a;
+ my $s="";
+
+ my $timetab = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"; # 0 - 59
+
+ foreach(@sorted)
+ {
+ my $cmd = $_;
+
+ return "" if (index($timetab, substr($cmd,0,1)) > 23); #TODO den HASH besser erkennen
+
+ $s .= (length($s)) ? " / " : "";
+
+ # Begin Stunde
+ $s .= sprintf("%02d:",index($timetab, substr($cmd,0,1)));
+ # Begin Minute
+ $s .= sprintf("%02d-",index($timetab, substr($cmd,1,1)));
+ # Ende Stunde
+ $s .= sprintf("%02d:", index($timetab, substr($cmd,2,1)));
+ # Ende Minute
+ $s .= sprintf("%02d", index($timetab, substr($cmd,3,1)));
+ # ON or OFF ?
+ $s .= (substr($cmd,4,1) eq "0") ? " off" : " on";
+ }
+ return $s;
+}
+################################################################################
+sub encode_list(@)
+{
+ my ($start,$end,$cmd) = @_;
+ my $ret;
+
+ my $timetab = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"; # 0 - 59
+
+ my ($sh,$sm) = split(":",$start);
+ $sh++; $sh--; $sm++; $sm--; # fuuehrende Nullen weg
+ return "wrong start hour !" if ($sh > 23);
+ return "wrong start minute !" if ($sm > 59);
+ $ret = substr($timetab,$sh,1);
+ $ret .= substr($timetab,$sm,1);
+
+ my ($eh, $em) = split(":",$end);
+ $eh++; $eh--; $em++; $em--;
+ return "wrong end hour !" if ($eh > 23);
+ return "wrong end minute !" if ($em > 59);
+ return "starttime is after endtime !" if ($sh > $eh);
+ $ret .= substr($timetab,$eh,1);
+ $ret .= substr($timetab,$em,1);
+
+ return "don't use the same start and end time !" if (substr($ret,0,2) eq substr($ret,2,2));
+
+ $ret .= ($cmd eq "on") ? "1" : "0";
+ return $ret;
+
+}
+################################################################################
+
+1;
+
+=pod
+
+=begin html
+
+
+EDIPLUG
+FHEM module to control the Edimax Smart Plug Switches SP-2101W and SP-1101W (http://www.edimax.com)
+FHEM Forum : http://forum.fhem.de/index.php/topic,29541.0.html
+SP-2101W - Edimax Smart Plug Switch with Power Meter
+SP-1101W - Edimax Smart Plug Switch
+requires XML:Simple -> sudo apt-get install libxml-simple-perl
+
+
+
+ Define
+
+ define <name> EDIPLUG < IP_EDIMAX_Device (or FQDN) >
+ Example:
+
+ define myediplug EDIPLUG 192.168.0.99
+ define myediplug EDIPLUG ediplug.myhome.net
+
+
+
+ Set
+ Currently, the following commands are defined
+ on => switch power on
+ off => switch power off
+ list => set a new list for one day with one entry : DayOfWeek(0-6) Starttime(hh:mm) Endtime(hh:mm) Command(on/off) e.g. 1 10:00 11:30 on
+ addlist => add a new on/off time : DayOfWeek(0-6) Starttime(hh:mm) Endtime(hh:mm) Command(on/off) e.g. 1 10:00 11:30 on
+ dellist => remove a existing on/off time : DayOfWeek(0-6) Starttime(hh:mm) Endtime(hh:mm) e.g. 1 10:00 11:30
+ delete => delete timelist of one day : DayOfWeek(0-6)
+ day => enable/disable timeschedule for one day : DayOfWeek(0-6) on/off
+
+
+
+ Get
+ Currently, the following commands are defined
+ info => shows MAC , Firmware Version , Model , Name
+ power => shows all Power informations ( model SP-2101W only)
+ schedule => show all internal on/off timetables
+ status => show on/off state
+
+
+
+ Attributes
+
+ - interval , polling interval (default 60)
+
+
+ Readings
+
+ - 0.So -> switching times Sunday
+ - 0.So.state -> Sunday switching on/off
+ - .
+ - .
+ - .
+ - 6.Sa -> switching times Saturday
+ - 6.Sa.state -> Saturday switching on/off ( model SP-2101W only )
+ - last_Toggle_Time ( model SP-2101W only )
+ - current ( model SP-2101W only )
+ - power_now ( model SP-2101W only )
+ - power_day ( model SP-2101W only )
+ - power_week ( model SP-2101W only )
+ - power_month ( model SP-2101W only )
+
+
+=end html
+
+=begin html_DE
+
+
+EDIPLUG
+FHEM Module für die Edimax Smart Plug Switches SP-2101W und SP-1101W (http://www.edimax.com)
+FHEM Forum : http://forum.fhem.de/index.php/topic,29541.0.html
+SP-2101W - Edimax Smart Plug Switch mit Strom Verbrauchsmessung
+SP-1101W - Edimax Smart Plug Switch
+ben&oml;ntigt XML:Simple -> sudo apt-get install libxml-simple-perl
+
+
+
+ Define
+
+ define <name> EDIPLUG < IP_des_EDIMAX (oder Name im Netz) INTERVAL (default 60) Device user (default admin) password (default 1234) >
+ Beispiel:
+
+ define myediplug EDIPLUG 192.168.0.99
+ define myediplug EDIPLUG ediplug.meinnetz.net
+
+
+
+
+ Set
+ zur Zeit werden folgende Kommandos unterstützt
+ on => schalte an
+ off => schalte aus
+ list => erzeugt eine neue Zeitplan Liste mit einem Eintrag : Wochentag(0-6) Startzeit(hh:mm) Endezeit(hh:mm) Kommando(on/off) Bsp. 1 10:00 11:30 on
+ addlist => fügt eine neue Schaltzeit einer bestehenden Zeitplan Liste hinzu : Wochentag(0-6) Startzeit(hh:mm) Endtezeit(hh:mm) Kommando(on/off) Bsp. 1 10:00 11:30 on
+ dellist => löscht eine bestimmte Schaltzeit eines Tages : Wochentag(0-6) Startzeit(hh:mm) Endezeit(hh:mm) Bsp. 1 10:00 11:30
+ delete => löscht die Liste eines ganzen Tages : Wochentag(0-6)
+ day => schaltet die Zeitplanung eines Tages ein oder aus : Wochentag(0-6) on/off Bsp. 5 on
+
+
+
+
+ Get
+ zur Zeit werden folgende Kommandos unterstützt
+ info => Anzeige von MAC , Firmware Version , Modell , Name
+ power => zeigt alle Stromverbrauchswerte ( nur Modell SP-2101W )
+ schedule => zeigt alle internen Schaltzeiten
+ status => zeigt an/aus Status der Schaltdose
+
+
+
+
+ Attributes
+
+ - interval , polling interval (default 60)
+ - timeout ,
+ - user , Username (default admin)
+ - password , Passwort (default 1234)
+
+
+ Readings
+
+ - 0.So -> Schaltzeiten Sonntag
+ - 0.So.state -> Sonntag an/aus
+ - .
+ - .
+ - .
+ - 6.Sa -> Schaltzeiten Samstag
+ - 6.Sa.state -> Samstag an/aus
+ - last_Toggle_Time ( nur Modell SP-2101W)
+ - current (nur Modell SP-2101W)
+ - power_now (nur Modell SP-2101W)
+ - power_day (nur Modell SP-2101W)
+ - power_week (nur Modell SP-2101W)
+ - power_month (nur Modell SP-2101W)
+
+
+
+=end html_DE
+
+=cut