Ankündigung

Einklappen
Keine Ankündigung bisher.

Kleines (Verständnis?)-Problem (oder Bug) bei einer simplen Rule

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

    Kleines (Verständnis?)-Problem (oder Bug) bei einer simplen Rule

    Hi zusammen,

    habe mir folgende Rule erstellt, die mein Handy-Ladegerät steuern soll:

    Code:
    rule "Smartphone im WiFi - Ladegerät anschalten"
    when
            Item Smartphone_WiFi received update ON
    then
            if (Steckdose1.state == OFF) {
                    sendCommand(Steckdose1, ON)
                    
            }
            
    end
    
    
    rule "Smartphone nicht im WiFi - Ladegerät ausschalten"        
    when
            Item Smartphone_WiFi received update OFF
            
    then    
            if (Steckdose1.state == ON) {
                    sendCommand(Steckdose1, OFF)
            }
            
            
    end
    Allerdings funktioniert das ganze nicht wie gewünscht, irgendwo muss ich was vergessen/ einen Denkfehler haben.

    Wenn das Ladegerät aus ist und das Handy im WLAN, erhalte ich im Log zwar regelmäßig die Meldung
    "Smartphone_WiFi state updated to ON"
    Allerdings schaltet er dann das Ladegerät garnicht an.

    Wenn ich hingegen das Ladegerät manuell anschalte und dann mal das Wlan meines Handys ausschalte, geht kurze Zeit später auch das Ladegerät aus. Witzigerweise funktioniert dann ab diesem Zeitpunkt alles so wie es soll.

    Ich muss also nach jedem Neustart von Openhab ein paar mal manuell den Schalter zum Item "Steckdose1" (Ladegerät) an- und ausmachen, danach funktioniert dann auch die Rule wie gewünscht.

    Wo liegt hier mein Fehler? Muss ich in der Rule noch irgendwelche Werte initialisieren?

    #2
    Im ersten Teil fragst du 2x auf received update ab, sollte das nicht auch heissen: "if (Steckdose1.state == OFF) {" ?
    also so ?
    Code:
    rule "Smartphone im WiFi - Ladegerät anschalten"
    when
            Item Smartphone_WiFi received update ON
    then
            if (Steckdose1.state == OFF) {
                    sendCommand(Steckdose1, ON)
                    
            }
            
    end
    
    
    rule "Smartphone nicht im WiFi - Ladegerät ausschalten"        
    when
            Item Smartphone_WiFi received update OFF
            
    then    
            if (Steckdose1.state == ON) {
                    sendCommand(Steckdose1, OFF)
            }        
            
    end
    Holger

    Kommentar


      #3
      @Holger: Sorry, hatte oben einen Schreibfehler drin. Habs nun ausgebessert

      Kommentar


        #4
        und gehts nun ?
        Holger

        edit: da ist ein "Item" zuviel:
        if (Item Steckdose1.state == OFF) {

        edit2: werden denn die Items initialisiert beim Start ? entweder gezielt setzen oder persistence ?

        Kommentar


          #5
          Zitat von HolgerW Beitrag anzeigen
          und gehts nun ?
          Der Schreibfehler war nur hier im Forum, in der Rule in Openhab wars richtig.


          edit: da ist ein "Item" zuviel:
          if (Item Steckdose1.state == OFF) {
          ...das war jetzt schon wieder ein Schreibfehler nur hier im Forum
          Heute ist wohl nicht mein Tag. Habs erneut oben ausgebessert.



          edit2: werden denn die Items initialisiert beim Start ? entweder gezielt setzen oder persistence ?
          Nein, initialisiert werden die Items nicht. Ich nehme an das ist dann wohl die Ursache des Problems? Wie initialisiere ich die Items denn gezielt in der rule?

          Kommentar


            #6
            Im einfachsten Fall so:
            Code:
            rule Startup
            when System started then
            
              sendCommand(Steckdose1,OFF)
            
            end
            oder über die persistence den letzten Status merken und der wird automatisch wieder hergestellt.

            Holger

            Kommentar


              #7
              Du könntest auch folgendes probieren, hab ich jetzt aber nicht getestet:
              Code:
              if (Steckdose1.state == ON || Steckdose1.state == Uninitialized) {
              ..
              }
              
              if (Steckdose1.state == OFF || Steckdose1.state == Uninitialized) {
              ..
              }
              Holger

              Kommentar


                #8
                Zitat von HolgerW Beitrag anzeigen
                Du könntest auch folgendes probieren, hab ich jetzt aber nicht getestet:
                Code:
                if (Steckdose1.state == ON || Steckdose1.state == Uninitialized) {
                ..
                }
                
                if (Steckdose1.state == OFF || Steckdose1.state == Uninitialized) {
                ..
                }
                Holger

                Funktioniert bestens.

                Vielen Dank!

                Kommentar

                Lädt...
                X