Für alle, die es interessiert und auch sowas bauen wollen, habe ich eine Lösung erarbeitet.
Kurze Beschreibung:
1. Steckdose mit Lastmessung mit FHEM pairen
2. Zu schaltende Steckdose mit FHEM pairen
3. Virtuellen Aktor mit einem Kanal anlegen
4. Steckdose mit Lastmessung channel_03 (= Lastmessung in Watt) mit dem virtuellen Aktor Kanal 1 peeren
5. Schwellwerte für das Ein- und Ausschalten im virtuellen Aktor festlegen
6. Notify erstellen, dass auf Änderung des virtuellen Aktors reagiert und eine Funktion aufruft
7. Funktion in die myUtils Datei schreiben
Eingesetzte Geräte:
Steckdose mit Lastmessung
Name: Wz.Steckdose.PC
channel_03 Name: Wz.Steckdose.PC.Power
Zu schaltende Steckdose
Name: Wz.Steckdose.Monitore
Mein Vorgehen:
1. Pairen der Steckdosen und benennen wie oben beschrieben
2. Erstellen eines virtuellen Aktors mit einem Kanal
define Virtuell.Aktor.Wz.Steckdose.PC.Power CUL_HM 111156;
set Virtuell.Aktor.Wz.Steckdose.PC.Power virtual 1
Die Zahl am Ende "111156" ist ein ausgedachte hmID. Diese darf NICHT existieren. In der Regel hat man einen Homematic Adapter (z.B. die HM LAN Bride oder einen CUL Stick). Diese haben eine bestimmte ID mit "1F...", wenn man die nicht anders gesetzt hat. Also einfach eine freie ID ausdenken.
Hat das geklappt, existiert jetzt ein virtueller Aktor mit dem Namen "Virtuell.Aktor.Wz.Steckdose.PC.Power"
3. Steckdose mit Lastmessung channel_03 mit dem virtuellen Aktor peeren (NICHT "pairen"!!! Das ist etwas anderes.)
set Wz.Steckdose.PC.Power peerChan 0 Virtuell.Aktor.Wz.Steckdose.PC.Power_Btn1 single set
4. Die Konfiguration der Steckdose mit Lastmessung updaten
set Wz.Steckdose.PC getConfig
Die LED an der Steckdose blinkt jetzt ein paar Mal schnell orange. Wenn das ganze fertig ist, ist das Peering beendet. Ggf. muss getConfig nochmal ausgeführt werden.
5. Minimum- und Maximum-Werte festlegen
In den Readings von "Wz.Steckdose.PC.Power" sind folgende Werte zu finden:
R-cndTxDecAbove
R-cndTxDecBelow
R-txThrHiPwr
R-txThrLoPwr
txThrHiPwr und txThrLoPwr legen den unteren und oberen Schwellwert fest, also den Wert, ab dem später die andere Steckdose ein bzw. aus geschaltet werden soll.
cndTxDecAbove und cndTxDecBelow sind die Werte, die bei überschreiten von "txThrHiPwr" bzw. unterschreiten von "txThrLoPwr" an den virtuellen Aktor übergeben werden sollen.
Ich habe das ganze mit einer Schreibtischlampe getestet, die nur 5 Watt braucht. Demnach habe ich die Werte auch gering gesetzt. Für größere Verbraucher müssen die Werte natürlich angepasst werden.
set Wz.Steckdose.PC.Power regSet txThrHiPwr 4;
set Wz.Steckdose.PC.Power regSet txThrLoPwr 1;
set Wz.Steckdose.PC.Power regSet cndTxDecAbove 200;
set Wz.Steckdose.PC.Power regSet cndTxDecBelow 0
ACHTUNG: Für regSet die Readings ohne vorangestelltes "R-" angeben!!!
6. Prüfen, ob das Peering funktioniert hat und Werte übergeben werden.
Es sollte nun in dem Device "Virtuell.Aktor.Wz.Steckdose.PC.Power_Btn1", welches wir gepeert haben, unter Readings der Punkt "trigLast" erscheinen. Dort wird jedes mal, wenn sich der gemessene Power-Wert (also Leistung in Watt) ändert so etwas wie "Wz.Steckdose.PC.Power:200" stehen.
7. Notify definieren
define Wz.Steckdose.PC.notify notify Virtuell.Aktor.Wz.Steckdose.PC.Power_Btn1:trigLast:.* {WzSteckdosePC()}
Damit wird bei einer Änderung des trigLast Readings des virtuellen Aktors die Funktion "WzSteckdosePC()" ausgeführt
8. Funktion in die Datei "99_myUtils.pm" schreiben
sub WzSteckdosePC(){
if(ReadingsVal("Virtuell.Aktor.Wz.Steckdose.PC.Power_Btn1","trigLast","Wz.Steckdose.PC.Power:200") eq "Wz.Steckdose.PC.Power:200"){
fhem("set Wz.Steckdose.Monitore on")
}else{
fhem("set Wz.Steckdose.Monitore off")
}
}
Es wird geprüft, ob der Schwellwert für das Einschalten der zweiten Steckdose erreicht ist und dann geschaltet. Wenn der Schwellwert nicht erreicht ist, wird die Steckdose ausgeschaltet. Diese Prüfung zieht dazu das trigLast Reading des virtuellen Aktors heran.
9. FERTIG
Nun schaltet sich die zweite Steckdose ein, sobald ein Verbraucher an der Steckdose mit Lastmessung eingeschaltet wird.