Seite 1 von 1

Rule Denkfehler

Verfasst: 13. Dez 2019 19:45
von Mario_a_b
Hallo,
mir ist schon klar das ich nen Denkfehler habe...…
Die Lampen brennen jetzt die ganze Zeit.
Sie sollen:
"When" Im Zeit Bereich von 15 Uhr bis 1 Uhr, Licht kleiner 3 Watt/m" und die Temperatur kleiner 5° sollen die Lampen 1-5 an (Dummy_Test Schalter ist zum manuellen testen, später "wenn Rollo auf bzw zu").
Aus "when" entsprendes "oder" passiert.
Aber die Lampen sind jetzt immer an.

Code: Alles auswählen

rule "Terrasse 1 blau"
when
Item Dummy_Test received state ON
Time cron “0 0 15 * * ?”
Item vWeather_SolarRad <= 3
Item vWeather_Temp <= 5

then
{

Terrasse_1_Farbe.sendCommand("240,100,50")
Terrasse_2_Farbe.sendCommand("30,60,60")
Terrasse_3_Farbe.sendCommand("30,60,60")
Terrasse_4_Farbe.sendCommand("30,60,60")
Terrasse_5_Farbe.sendCommand("30,60,60")

}
end 

rule "Terrasse 1 aus"
when
            Item Dummy_Test changed from ON to OFF
      or    Time cron “0 0 1 * * ?”
      or    Item vWeather_SolarRad >= 3
      or    Item vWeather_Temp >= 5
  then
        sendCommand(Terrasse_1_Schalter, OFF)
        sendCommand(Terrasse_2_Schalter, OFF)
        sendCommand(Terrasse_3_Schalter, OFF)
        sendCommand(Terrasse_4_Schalter, OFF)
        sendCommand(Terrasse_5_Schalter, OFF)
       
end

Re: Rule Denkfehler

Verfasst: 13. Dez 2019 20:22
von peter-pan
Probiere mal:
rule "Terrasse 1 aus"
when
Item Dummy_Test changed from ON to OFF
or Time cron “0 0 1 * * ?”
or Item vWeather_SolarRad >= 3
or Item vWeather_Temp >= 5
then
Terrasse_1_Schalter.sendCommand (OFF)
Terrasse_2_Schalter.sendCommand (OFF)
Terrasse_3_Schalter.sendCommand (OFF)
Terrasse_4_Schalter.sendCommand (OFF)
Terrasse_5_Schalter.sendCommand (OFF)
end
und lies dir mal dieses Kapitel durch

Re: Rule Denkfehler

Verfasst: 13. Dez 2019 20:33
von udo1toni
Du hast aber schon verstanden, wie Rules funktionieren?

Rules werden getriggert. Im when-Teil der Rule werden alle Trigger einer Rule aufgeführt. Jeder Trigger ist gleichberechtigt. Ein Trigger wäre "bestimmtes Datum mit Uhrzeit erreicht" oder "Item hat ein Kommando empfangen" oder "Itemwert hat sich geändert"

Ein sinnvoller Trigger für die Rule wäre z.B., auf die Temperaturänderung zu triggern (und nur darauf).

wenn bestimmte Bedingungen erfüllt sein müssen, muss dies innerhalb des then-Teils der Rule geprüft werden (z.B. mit if()). Sinnvolle Prüfungen wären hier natürlich "Zeitraum korrekt", Lichtmenge unterschritten und Temperatur unterschritten.

Code: Alles auswählen

rule "Licht Terrasse"
when
    Item vWeather_Temp received update
then
    if((now.getMinuteOfDay > 15*60 || now.getMinuteOfDay < 1*60) && (vWeather_SolarRad.state as Number).floatValue <= 3 && (vWeather_Temp.state as Number).floatValue <= 5) {
        Terrasse_1_Farbe.sendCommand("240,100,50")
        Terrasse_2_Farbe.sendCommand("30,60,60")
        Terrasse_3_Farbe.sendCommand("30,60,60")
        Terrasse_4_Farbe.sendCommand("30,60,60")
        Terrasse_5_Farbe.sendCommand("30,60,60")
    } else {
        Terrasse_1_Schalter.sendCommand(OFF)
        Terrasse_2_Schalter.sendCommand(OFF)
        Terrasse_3_Schalter.sendCommand(OFF)
        Terrasse_4_Schalter.sendCommand(OFF)
        Terrasse_5_Schalter.sendCommand(OFF)
    }
end
Es wäre allerdings sinnvoll, über ein proxy Item zu arbeiten. Die Rule oben steuert nur das Proxy Item, wenn das Proxy Item sich ändert, wird eine weitere Rule getriggert. Damit werden unnötige Schaltvorgänge vermieden.