Seite 1 von 1

Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 19:19
von christian1312
Moin zusammen!

Ich hatte zuvor eine schaltbare Steckdose von AVM in Betrieb und hatte folgende Regel definiert:

Code: Alles auswählen

Subwoofer AN und AUS

rule "Subwoofer AN"
when
    Item eg_wohnzimmer_avr changed from OFF to ON or // AVR AN
    Item eg_wohnzimmer_tv changed from OFF to ON // TV AN
then

    //eg_wohnzimmer_subwoofer.sendCommand(ON) // Subwoofer An
end

rule "Subwoofer AUS"
when
    Item eg_wohnzimmer_avr changed from ON to OFF or // AVR AUS
    Item eg_wohnzimmer_tv changed from ON to OFF // TV AUS
then
    eg_wohnzimmer_subwoofer.sendCommand(OFF) // Subwoofer AUS
end
Nun habe ich die Steckdose gegen eine Osram Smart+ getauscht. Nun funktioniert die Regel allerdings nicht mehr.
Kann mir jemand helfen? Sorry ... bin Neuling. :)

Re: Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 20:39
von udo1toni
Du musst halt ein Iem für die Smart+ anlegen und entsprechend einbinden.

Deine Rules sind übrigens... suboptimal... ;)

Re: Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 21:01
von christian1312
Das Item habe ich angelegt ... nun läuft es. :)

Ja das weiß ich. Fuchse mich gerade erst rein. Habe lange nicht programmiert. :-P

Code: Alles auswählen

rule "Test1"
when
    Item eg_wohnzimmer_licht_fenster received command ON
then
    eg_wohnzimmer_subwoofer.sendCommand(ON)
end

rule "Test2"
when
    Item eg_wohnzimmer_licht_fenster received command OFF
then
    eg_wohnzimmer_subwoofer.sendCommand(OFF)
end

Re: Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 21:36
von christian1312
udo1toni hat geschrieben: 15. Jan 2020 20:39 Du musst halt ein Iem für die Smart+ anlegen und entsprechend einbinden.

Deine Rules sind übrigens... suboptimal... ;)
Wie wäre denn einer sauberere Lösung? :)

Re: Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 22:56
von udo1toni
Die beiden Testrules lassen sich bequem als eine Rule definieren:

Code: Alles auswählen

rule "Test1"
when
    Item eg_wohnzimmer_licht_fenster received command
then
    eg_wohnzimmer_subwoofer.sendCommand(receivedCommand)
end
Was die erste Version betrifft, so gibt es mindestens eine Schwachstelle, nämlich, wenn beide Geräte (tv und avr) eingschaltet sind, und nun eines der Geräte ausgeschaltet wird. Der Subwoofer wird abgeschaltet, obwohl noch eines der beiden Geräte eingeschaltet ist. Wenn ohnehin immer beide Geräte eingeschaltet sein sollen oder keines, braucht es keinen 2. Trigger, ansonsten muss man sicherstellen, dass nur abgeschaltet wird, wenn beide Items OFF sind:

Code: Alles auswählen

//Subwoofer AN und AUS

rule "Subwoofer an und aus"
when
    Item eg_wohnzimmer_avr changed or // AVR AN
    Item eg_wohnzimmer_tv changed  // TV AN
then
    eg_wohnzimmer_subwoofer.sendCommand(if(eg_wohnzimmer_avr.state == ON || eg_wohnzimmer_tv.state == ON) ON else OFF)
end
Die Rule triggert auf beide Items, in beide Richtungen. Falls eines der beiden Items den Status ON aufweist, sendet es ON an das subwoofer Item, sonst OFF. In diesem Fall bietet sich der ternäre Operator als nette Abkürzung an, statt

Code: Alles auswählen

if(eg_wohnzimmer_avr.state == ON || eg_wohnzimmer_tv.state == ON) 
    eg_wohnzimmer_subwoofer.sendCommand(ON) 
else 
    eg_wohnzimmer_subwoofer.sendCommand(OFF)

Re: Osram Smart+ Plug Regel

Verfasst: 15. Jan 2020 23:02
von udo1toni
Streng genommen sollte man den Subwoofer nur dann schalten, wenn es nötig ist, also noch eine kleine Optimierung.

Code: Alles auswählen

//Subwoofer AN und AUS

rule "Subwoofer an und aus"
when
    Item eg_wohnzimmer_avr changed or // AVR AN
    Item eg_wohnzimmer_tv changed  // TV AN
then
    var myState = if(eg_wohnzimmer_avr.state == ON || eg_wohnzimmer_tv == ON) ON else OFF
    if(eg_wohnzimmer_subwoofer.state != myState)
        eg_wohnzimmer_subwoofer.sendCommand(myState)
end


rule "Test1"
when
    Item eg_wohnzimmer_licht_fenster received command
then
    if(eg_wohnzimmer_subwoofer.state != receivedCommand)
        eg_wohnzimmer_subwoofer.sendCommand(receivedCommand)
end

Re: Osram Smart+ Plug Regel

Verfasst: 16. Jan 2020 08:54
von christian1312
udo1toni hat geschrieben: 15. Jan 2020 23:02 Streng genommen sollte man den Subwoofer nur dann schalten, wenn es nötig ist, also noch eine kleine Optimierung.

Code: Alles auswählen

//Subwoofer AN und AUS

rule "Subwoofer an und aus"
when
    Item eg_wohnzimmer_avr changed or // AVR AN
    Item eg_wohnzimmer_tv changed  // TV AN
then
    var myState = if(eg_wohnzimmer_avr.state == ON || eg_wohnzimmer_tv == ON) ON else OFF
    if(eg_wohnzimmer_subwoofer.state != myState)
        eg_wohnzimmer_subwoofer.sendCommand(myState)
end


rule "Test1"
when
    Item eg_wohnzimmer_licht_fenster received command
then
    if(eg_wohnzimmer_subwoofer.state != receivedCommand)
        eg_wohnzimmer_subwoofer.sendCommand(receivedCommand)
end
Top vielen Dank für die schneller Hilfe!

Verstanden habe ich den Quellcode ... allerdings wäre ich da selbst nicht drauf gekommen mit einer Variable zu arbeiten.
Learning by Doing! :)

Re: Osram Smart+ Plug Regel

Verfasst: 16. Jan 2020 19:34
von udo1toni
Ja, man muss nicht mit einer Variablen arbeiten, in diesem Fall ist es aber eine elegante Methode.