Ankündigung

Einklappen
Keine Ankündigung bisher.

light rule

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    light rule

    Ich habe im Kinderzimmer eine Philibs HUE Led die in der Nacht automatisch einschaltet. Zusätzlich habe ich noch ein Schutzregel die verhindert das versehentlich die Licht Stimmung verändert wird.

    Dazu folgender rule

    Code:
    rule "ligth protector triger"
    when
    	Item  Color_KR_TV_Ambient changed 
    	
    then
    
    
    	
    	if ((PresenceJen_Phone.state == ON) || (PresenceMarcus_Phone.state == ON) && (Color_KR_TV_Ambient.state != 30) && (ligth_protect.state == ON) && (kr_light_fallback.state == OFF) )
    	
    	{sendCommand(Color_KR_TV_Ambient,"360,100,30")}
    end
    In der If Klammer müssen einige Bedingungen erfüllt sein. Die Regel an sich funktioniert wie gewünscht.
    Bis auf folgendes Problem. Trotz das die Bedingung ligth_protect.state == ON nicht erfüllt wird, löst der send Command aus.

    Falls nötig kann ich die Bedingungen noch detailliert erklären.

    #2
    Ohne die HIntergründe für Bedingungen zu verstehen tippe ich auf ein Problem mit der Schachtelung Deiner Bedingungen. Du mischt hier eine oder- mit einer Reihe von und-Verknüpfungen ohne diese zu klammern. Damit greifen die Vorrangregeln von Xtend.

    Zudem ist bei der Oder-Verknüpfung zu bedenken dass wenn die linke Seite wahr ist die rechte gar nicht ausgewertet wird. Wenn also PresenceJen_Phone.state == ON wahr ist wird das Statement dahinter IMMER ausgeführt. Ob das so beabsichtigt ist kann ich nicht nachvollziehen.

    Ich würde die logischen Ausdruck noch einmal auseinander nehmen und auf Sinnhaftigkeit prüfen. Eventuell lässt sich der auch noch vereinfachen.

    Kommentar


      #3
      Das habe ich mir fast gedacht das bestimmte Bedingungen aufgrund Vorrang Regeln ignoriert werden. Ich habe allerdings in der Dokumentation nichts gefunden.

      Ich beschriebe kurz was die Regel tut.

      Das Command soll nur ausgeführt werden wenn Jen oder Marcus Anwesend sind(PresenceJen und PresenceMarcus) also ON, nur eins von beiden muss zutreffen. Zusätzlich müssen die anderen Bedingungen aber in jeden Fall zutreffen

      Kommentar


        #4
        So sollte es funktionieren. Habe lediglich den Presence-Teil seperat geklammert, sodass zuerst das dortige ODER ausgewertet wird, und dann im zweiten Schritt das Ergebnis UND-verknpüft wird.
        Code:
        rule "ligth protector triger"
        when
            Item  Color_KR_TV_Ambient changed 
            
        then
        
        
            
            if (((PresenceJen_Phone.state == ON) || (PresenceMarcus_Phone.state == ON)) && (Color_KR_TV_Ambient.state != 30) && (ligth_protect.state == ON) && (kr_light_fallback.state == OFF) )
            
            {sendCommand(Color_KR_TV_Ambient,"360,100,30")}
        end

        Kommentar


          #5
          Super Danke, das war's. Ich meinte das habe ich schon probiert.

          Kommentar


            #6
            Wenn du die doppelten && und || verwendest brauchst du nicht jede Abfrage einzeln in Klammern setzen, ich finde es liesst sich dann besser, also das sollte auch funktionieren:
            Code:
            if ((PresenceJen_Phone.state == ON || PresenceMarcus_Phone.state == ON) && Color_KR_TV_Ambient.state != 30 && ligth_protect.state == ON && kr_light_fallback.state == OFF )
            Holger

            Kommentar

            Lädt...
            X