Perlcode

FHEM: Dynamische Geräteschaltung

Folgende Anforderung galt es umzusetzen: Abschalten eines von 3 Geräten welchen den geringsten Messwert aufweist.

Hab ein bisschen hin und herüberlegen müssen. Im Grunde ist es aber ganz einfach, wenn man Perl zu Hilfe nimmt und eine entsprechende Funktion in der 99_myUtils.pm der FHEM Installation unterbringt.

Der Code baut sich wie folgt auf:

sub Powermin() {
my $pw1=ReadingsVal("Power1","power","0");
my $pw2=ReadingsVal("Power2","power","0");
my $pw3=ReadingsVal("Power3","power","0");
my $pw1name=ReadingsVal("Power1","NAME","Power1");
my $pw2name=ReadingsVal("Power2","NAME","Power2");
my $pw3name=ReadingsVal("Power3","NAME","PowerP3");
my $max = $pw1;
my $mydevice = $pw1name;
fhem("setreading Stromzaehler PW_Min_Device $mydevice");
if ($pw2 < $max) {
$max = $pw2;
$mydevice = $pw2name;
fhem("setreading Stromzaehler PW_Min_Device $mydevice");
}
if ($pw3 < $max) {
$max = $pw3;
$mydevice = $pw3name;
fhem("setreading Stromzaehler PW_Min_Device $mydevice");
}

}

Was passiert. Die 3 Device (Power1 bis Power3) werden im Reading power verglichen und dynamisch in die Variable $max geschrieben. Nach Durchlauf und Vergleich aller Devices steht in der Variable $max der geringste Wert und in der Variable $mydevice der Name des entsprechenden Devices.

Über ein define AT lassen wir nun diese Funktion alle x Sekunden laufen. Der Wert ändert sich natürlich dann immer entsprechend. Weil wir den Namen in ein UserReading des Devices Stromzaehler geschrieben haben, können wir hier durch weiter ATs, DOIFs oder was auch immer reagieren. Der Aufruf zum Schalten dieses „dynamischen“ Devices sieht dann wie folgt aus:

(set [Stromzaehler:PW_Min_Device] off)

Erscheint auf den ersten Blick vielleicht etwas umständlich, habe aber auf die Schnelle keinen anderen Weg gesehen, um an an den Namen, nicht den Messwert, des Devices zu kommen.

Ginge es „nur“ um die Werte, ließe sich dieses beispielsweise direkt über ein minnum erreichen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert