ELV Powerline Schaltsteckdose SOP112
ELV Powerline Schaltsteckdose SOP112
Die [ELV Powerline Schaltsteckdose SOP112] gibt es bei [hier bei ELV].
Die Steckdosen werden über einen (im Set enthaltenen) Powerline Adapter an das Lokale Netzwerk angebunden. Jede Steckdose bekommt (über DHCP) eine eigene IP Adresse und kann dann darüber angesprochen werden.
Die Steckdosen können sowohl direkt aus dem LAN gesteuert und abgefragt werden. Zu den Steckdosen gibt es auch eine APP mit der man aus dem Internet die Steckdosen abfragen und steuern kann. Die Steckdosen messen auch die Leistungsaufnahme des angeschlossenen Verbrauchers.
Stromverbrauch
Noch was zur Hardware: Die Dosen selbst (den Powerlan-AP habe ich noch nicht gemessen) benötigen 2 Watt für den Eigenbedarf.
Ansteuerung
Exemplarisch mit curl:
curl --globoff -v 'http://192.168.0.222/?cmd=200&json={"sn":"SWP1040003001149","state":1}
Über den PL501 Adapter wird in meinem Netz per dhcp eine IP-Adresse für jede Steckdose zugewiesen.
Der Power Plug, also der schaltbare Adapter, hat eine Serien Nummer aufgedruckt,
z.B. so etwas wie SW10400100123
Sendet man per Browser
http://192.168.3.82/?cmd=200&json={"sn":"SWP1040001000123","port":0,"state":1}
wird die Steckdose eingeschaltet
Einschalten:
http://192.168.xxx.yyy/?cmd=200&json={"state":0} für aus und state=1 für an.
Abfragen Alles:
http://192.168.xxx.yyy/?cmd=511 {"response":511,"code":200,"data":{"watt":["0.00"],"amp":["0.0"],"switch":[0]}}
Abfragen Limit:
http://192.168.xxx.yyy/?cmd=512 {"response":512,"code":200,"data":{"master":[0],"limit":0}}
Abfrage Status:
http://192.168.xxx.yyy/?cmd=513 {"response":513,"code":200,"data":{"switch":[0]}}
Abfrage Regeln:
http://192.168.xxx.yyy/?cmd=514 {"response":514,"code":200,"data":{"rule":[]}}
Abfrage:
http://192.168.xxx.yyy/?cmd=515 {"response":515,"code":200,"data":{"start":" dann geht es mit Steuerzeichen weiter.
Steuerung aus fhem heraus
Perl Schnipsel
Schalten der Dosen:
sub SOP_set($$) { my ($SOP,$Event) = @_; my $state=0; if ($Event eq "on" || $Event eq "start") {$state=1; $Event = "on"} else {$Event = "off"}; if (Value($SOP) ne $Event) {fhem("set ".$SOP." ".$Event)}; my $waste = GetFileFromURL ("http://192.168.xxx.".AttrVal($SOP,"IP",1)."/?cmd=200&json={%22port%22:0,%22state%22:".$state."}"); (my $SOPDummy = $SOP) =~ s/\.SOP112/.SOP/; SOP_reading(); }
Auslesen der Daten: (Pre)
sub SOP_reading() { use Math::Round qw/round/; #my ($NAME,$state) = @_; my $SOP; my $Muster = '[\[\]"}]+'; foreach $SOP (devspec2array("Type=SOP112")) { (my $SOPDummy = $SOP) =~ s/\.SOP112/.SOP/; my $ret1 = GetFileFromURL ("http://192.168.4.".AttrVal($SOP,"IP",1)."/?cmd=511"); my @Wert = split /[:,]/, "$ret1",6; my @Data = split /[:,]/, $Wert[5]; if ($Wert[1] == 511) { (my $watt = $Data[1]) =~ s/$Muster//g; (my $amp = $Data[3]) =~ s/$Muster//g; (my $switch = $Data[5]) =~ s/$Muster//g; if (ReadingsVal($SOP,"amp",0) != $amp ) {fhem("setreading ".$SOP." amp ".$amp)}; $watt = round($watt); if (ReadingsVal($SOP,"watt",0) != $watt ) {fhem("setreading ".$SOP." watt ".$watt)}; if ($watt < AttrVal($SOP,"Ready",1) && Value($SOPDummy) eq "on") { fhem ("set ".$SOPDummy." ready");SOP_set ($SOP,"off"); } else { if (ReadingsVal($SOP,"switch",0) != $switch ) {fhem("setreading ".$SOP." switch ".$switch)}; $switch = "on"; if (ReadingsVal($SOP,"switch",0) == 0) {$switch = "off"}; if (ReadingsVal($SOP,"state","") ne $switch ) {SOP_set($SOP,$switch)}; } if ($watt > AttrVal($SOP,"Ready",1) && (Value($SOPDummy) eq "start"||Value($SOPDummy) eq "ooo")) { if (Value($SOPDummy) ne "on" ) {fhem ("set ".$SOPDummy." on")}; }; if (Value($SOPDummy) eq "stop") { fhem ("set ".$SOPDummy." off"); }; my $ret2 = GetFileFromURL ("http://192.168.4.".AttrVal($SOP,"IP",1)."/?cmd=512"); @Wert = split /[:,]/, "$ret2",6; @Data = split /[:,]/, $Wert[5]; (my $master = $Data[1]) =~ s/$Muster//g; (my $limit = $Data[3]) =~ s/$Muster//g; if (ReadingsVal($SOP,"master",0) != $master ) {fhem("setreading ".$SOP." master ".$master)}; if (ReadingsVal($SOP,"limit",0) != $limit ) {fhem("setreading ".$SOP." limit ".$limit)}; my $ret3 = GetFileFromURL ("http://192.168.xxx.".AttrVal($SOP,"IP",1)."/?cmd=512"); @Wert = split /[:,]/, "$ret3",6; @Data = split /[:,]/, $Wert[5]; (my $start = $Data[1]) =~ s/$Muster//g; (my $delay = $Data[3]) =~ s/$Muster//g; # if (ReadingsVal($SOP,"start",0) != $start ) {fhem("setreading ".$SOP." start ".$start)}; if (ReadingsVal($SOP,"delay",0) != $delay ) {fhem("setreading ".$SOP." delay ".$delay)}; } else { if (Value($SOPDummy) ne "ooo" ) {fhem ("set ".$SOPDummy." ooo")}; } } }
Das Auslesen von "Start" ergibt eine (mir kryptische) Zeichenkombi, die ich einfach mal nicht abspeichere. Wenn es einen Sinn ergibt, einfach ent-auskommentieren