From 16445aa777abdc2f15c39c74f05bc5d4a3d4d701 Mon Sep 17 00:00:00 2001 From: wzut <> Date: Sat, 7 Mar 2015 17:15:43 +0000 Subject: [PATCH] 98_EDIPLUG : fix schedule table git-svn-id: https://svn.fhem.de/fhem/trunk@8167 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_EDIPLUG.pm | 63 +++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/fhem/FHEM/98_EDIPLUG.pm b/fhem/FHEM/98_EDIPLUG.pm index 57c6771a0..db60500a9 100644 --- a/fhem/FHEM/98_EDIPLUG.pm +++ b/fhem/FHEM/98_EDIPLUG.pm @@ -25,9 +25,9 @@ # 2014-12-05 edit (Wzut) # 2014-12-08 add schedule and list (Wzut) # 2014-12-09 add dellist (Wzut) -# 2015-02-21 first svn version (Wzut) -# 2015-02-22 add attr read-only, fix attr interval, update command.ref -# +# 2015-02-21 V1.00 first svn version (Wzut) +# 2015-02-22 V1.01 add attr read-only, fix attr interval, update command.ref +# 2015-03-07 V1.02 fix schedule ################################################################ package main; @@ -109,7 +109,7 @@ sub EDIPLUG_Define($$) { $hash->{INTERVAL} = $attr{$a[0]}{interval}; if( !defined( $attr{$a[0]}{user} ) ) { $attr{$a[0]}{user} = "admin"} - $hash->{user} = $attr{$a[0]}{user}; + $hash->{user} = $attr{$a[0]}{user}; if( !defined( $attr{$a[0]}{password} ) ) { $attr{$a[0]}{password} = "1234"} $hash->{pwd} = $attr{$a[0]}{password}; @@ -173,7 +173,7 @@ sub EDIPLUG_Read($$$) if ($err) { my $error = "error"; - $error .= " ".$hash->{code} if (defined($hash->{code})); + $error .= " ".$hash->{code} if (defined($hash->{code}) ne "200"); $hash->{ERROR} = $err; $hash->{ERRORTIME} = TimeNow(); Log3 $name, 3, "$name: return $error -> $err"; @@ -211,7 +211,7 @@ sub EDIPLUG_Read($$$) if ($hash->{MODEL} eq "SP2101W") { $hash->{POWER} = uc($xmlres->{CMD}->{'Device.System.Power.State'}); - $state = $hash->{POWER}." / ".$hash->{helper}{power}. " W / ".$hash->{helper}{current}." A"; + $state = ($hash->{POWER} ne "OFF") ? $hash->{POWER}." / ".$hash->{helper}{power}. " W / ".$hash->{helper}{current}." A" : $hash->{POWER}; } else { @@ -274,6 +274,7 @@ sub EDIPLUG_Read($$$) ($hash->{STATE} eq "defined")) { $hash->{LASTCMD} = ""; + select(undef, undef, undef, 1); # TODO , sehr hässlich - aber irgend eine Wartezeit muss sein EDIPLUG_Get($hash,$name,"status"); } # und nach dem Status noch fuer die 2101 die aktuellen Power Werte @@ -378,16 +379,16 @@ sub EDIPLUG_Set($@) { if($cmd eq "clear_error") { - $hash->{ERROR} = undef; + $hash->{ERROR} = undef; $hash->{ERRORCOUNT} = 0; - $hash->{LASTCMD} = $cmd; + $hash->{LASTCMD} = $cmd; return undef; } if(($cmd eq "on") || ($cmd eq "off")) { $hash->{LASTCMD} = $cmd; - $hash->{data} = $datas{$cmd}; + $hash->{data} = $datas{$cmd}; } elsif(($cmd eq "list") || ($cmd eq "addlist") || ($cmd eq "dellist")) { @@ -397,19 +398,19 @@ sub EDIPLUG_Set($@) { my $day = $a[0]; shift @a; - return "set $name $cmd : wrong day $day, use 0-6" if (($day >6) || ($day <0)); - return "set $name $cmd : wrong start time !" if (index($a[0],":") < 0); - return "set $name $cmd : wrong end time !" if (index($a[1],":") < 0); - return "set $name $cmd : don't use exact the same start and end time !" if ($a[0] eq $a[1]); - return "set $name $cmd : wrong on/off command , use on or off" if (($a[2] ne "on") && ($a[2] ne "off") && ($cmd ne "dellist")) ; + return "set $name $cmd : wrong day $day, please use 0-6" if (($day >6) || ($day <0)); + return "set $name $cmd : wrong start time,missing : !" if (index($a[0],":") < 0); + return "set $name $cmd : wrong end time, missing : !" if (index($a[1],":") < 0); + return "set $name $cmd : don't use the same start and end time !" if ($a[0] eq $a[1]); + return "set $name $cmd : wrong on/off command, use on or off" if (($a[2] ne "on") && ($a[2] ne "off") && ($cmd ne "dellist")) ; my $ret = encode_list(@a); - return "set $name $cmd : ".$ret if (length($ret) != 5); + return "set $name $cmd is to short ($ret)" if (length($ret) != 5); if ($cmd eq "addlist") { - return "set $name $cmd : schedule list is empty , please use 'get $name schedule' first" if($hash->{helper}{"list"}[7] eq ""); - return "set $name $cmd : this start and end time block already exist" if (index($hash->{helper}{"list"}[$day],$ret) > -1) ; + return "set $name $cmd : internal schedule list is empty, please use 'get $name schedule' first" if($hash->{helper}{"list"}[7] eq ""); + return "set $name $cmd : start and end time block already exist !" if (index($hash->{helper}{"list"}[$day],$ret) > -1) ; # Time Block schon vorhanden , aber jetzt on/off Umschaltung ? my $reverse_cmd = substr($ret,0,4); @@ -432,10 +433,10 @@ sub EDIPLUG_Set($@) { $pos = index($hash->{helper}{"list"}[$day],$ret); } - return "set $name $cmd : day $day ,this start and end time block do not exist" if ($pos<0); + return "set $name $cmd : day $day, start and end time block do not exist" if ($pos<0); $hash->{helper}{"list"}[$day] =~ s/$ret//g; # raus aus der Liste - $hash->{helper}{"list"}[$day] =~ s/\--/\-/g; # eventuelle jetzt noch doppelte Minuszeichen bereinigen + $hash->{helper}{"list"}[$day] =~ s/\--/\-/g; # eventuelle jetzt noch vorhandene doppelte Minuszeichen bereinigen # war das erste von mehr als einem ? if (index($hash->{helper}{"list"}[$day], "-") == 0) { $hash->{helper}{"list"}[$day] = substr($hash->{helper}{"list"}[$day],1); } # oder der letzte von mehr als einem ? @@ -456,8 +457,8 @@ sub EDIPLUG_Set($@) { my $day = $a[0]; my $oocmd = $a[1]; return "set $name $cmd : wrong day $day, use 0-6" if (($day >6) || ($day <0)); - return "set $name $cmd : wrong on/off command , use on or off" if (($oocmd ne "on") && ($oocmd ne "off")); - return "set $name $cmd : schedule list is empty , please use 'get $name schedule' first" if($hash->{helper}{"list"}[7] eq ""); + return "set $name $cmd : wrong on/off command, please use on or off" if (($oocmd ne "on") && ($oocmd ne "off")); + return "set $name $cmd : schedule list is empty, please use 'get $name schedule' first" if($hash->{helper}{"list"}[7] eq ""); $hash->{LASTCMD} = $cmd; $hash->{data} = $data_s."setup\">6) || ($day <0)); + return "set $name $cmd : wrong day $day, please use 0-6" if (($day >6) || ($day <0)); $hash->{LASTCMD} = $cmd; $hash->{data} = $data_s."setup\"> 23); return "wrong end minute !" if ($em > 59); return "starttime is after endtime !" if ($sh > $eh); + return "starttime is after endtime !" if (($sh == $eh) && ($sm > $em)); + $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)); + + return "don't use the same start and end time !" if (substr($ret,0,2) eq substr($ret,2,2)) && (($eh != 0) && ($em != 0)); $ret .= ($cmd eq "on") ? "1" : "0"; return $ret; @@ -610,7 +617,8 @@ requires XML:Simple -> sudo apt-get install libxml-simple-perl
  • 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
  • +
  • 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
    + use (DayOfWeek) 00:00 24:00 on to switch the complete day 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)
  • @@ -677,7 +685,8 @@ ben&oml;ntigt XML:Simple -> sudo apt-get install libxml-simple-perl
    • 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
    • +
    • 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
      + mit Wochentag 00:00 24:00 on kann man den kompletten Tag einschalten
    • 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)