Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule für Nachtschaltung erfordert 1-Tages Durchlauf zur Aktivierung

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

    Rule für Nachtschaltung erfordert 1-Tages Durchlauf zur Aktivierung

    Hallo zusammen,

    Ich kämpfe derzeit mit einer Rule, mit der ich noch einmal alles ausschalte und sicher stelle, dass die Rollladen unten sind, sobald wir ins Bett gehen.

    Hierzu habe ich folgende Logik/Rule
    Code:
    rule Sleepy
    when
        Item Lampe_OG_Schlafz_Bett_links received command or
        Item Lampe_OG_Schlafz_Bett_rechts received command
    then
     if (receivedCommand==OFF && (now.getHourOfDay >= 21 || now.getHourOfDay <= 4) &&
      (Lampe_OG_Schlafz_Decke.state == OFF && Lampe_OG_Schlafz_Bett_links.state == OFF &&
      Lampe_OG_Schlafz_Bett_rechts.state == OFF) && SleepMode.state == (0))  {
      SleepMode.postUpdate(1)
      Radio_Bad.sendCommand(OFF)
    
      Bad_Rollo.sendCommand(DOWN)
      Terrasse_links_Fenster_Rollo.sendCommand(DOWN)
      Terrasse_links_Tuere_Rollo.sendCommand(DOWN)
    
      Steckd_Garage_Dach.sendCommand(OFF)
      Steckd_Terrasse_LED.sendCommand(OFF)
    
     }
    end
    Leider funktioniert diese nach einem Restart von OpenHAB erst wieder am nächsten Tag?!

    Ich habe schon probiert, in meiner startup.rule folgendes einzubauen
    Code:
    rule Initialisierung
    when
        System started
    then
        pushNotification("Initializing", "System is starting: " + now)
        SleepMode.postUpdate(0)
        Ventilator.postUpdate(0)
    end
    Leider ohne Erfolg.

    Wenn es einmal läuft, funktioniert die rule stabil, aber eben erst mit einem Tag Verzögerung.

    Evtl. habt ihr einen Schubs in die richtige Richtung??

    Viele Grüße,
    Jörg

    #2
    Es kann ja nur sein, dass ein oder mehrere beteiligte Items nicht den erwarteten Zustand haben, also kannst Du (vor der if() Clause)
    Code:
    logInfo("sleepy","Lampe_OG_Schlafz_Decke ist {}",Lampe_OG_Schlafz_Decke.state)
    logInfo("sleepy","Lampe_OG_Schlafz_Bett_links ist {}",Lampe_OG_Schlafz_Bett_links.state)
    logInfo("sleepy","Lampe_OG_Schlafz_Bett_rechts ist {}",Lampe_OG_Schlafz_Bett_rechts.state)
    logInfo("sleepy","SleepMode ist {}",SleepMode.state)
    mal nachschauen, welcher der Übeltäter ist. Oder (die pragmatische Variante) Du kehrst die Logik korrekt um:
    Code:
      
    if ((now.getHourOfDay >= 21 || now.getHourOfDay <= 4) &&
        receivedCommand==OFF &&
        Lampe_OG_Schlafz_Decke.state != ON &&
        Lampe_OG_Schlafz_Bett_links.state != ON &&
        Lampe_OG_Schlafz_Bett_rechts.state != ON &&
        SleepMode.state != 1)
    wobei SleepMode natürlich immer noch ein Problem darstellen könnte, falls dort keine Zahl drin steht (aber das fängst Du ja schon ab)

    Kommentar


      #3
      Zitat von udo1toni Beitrag anzeigen
      Es kann ja nur sein, dass ein oder mehrere beteiligte Items nicht den erwarteten Zustand haben,
      Dies war der richtige Tipp!

      Der Fehler tritt u.a. auch, wenn ich die rule bzw. Items ändere und diese neu eingelesen wird

      Offensichtlich gibt es einen Fehler bei der Initialisierung und ich muss die Werte noch einlesen.
      Code:
      2017-04-03 18:45:36.217 [INFO ] [rg.openhab.model.script.sleepy] - Lampe_OG_Schlafz_Decke ist Uninitialized
      2017-04-03 18:45:36.303 [INFO ] [rg.openhab.model.script.sleepy] - Lampe_OG_Schlafz_Bett_links ist ON
      2017-04-03 18:45:36.393 [INFO ] [rg.openhab.model.script.sleepy] - Lampe_OG_Schlafz_Bett_rechts ist Uninitialized
      2017-04-03 18:45:36.495 [INFO ] [rg.openhab.model.script.sleepy] - SleepMode ist Uninitialized
      Aber: An welcher Stelle sollte ich dies machen?? In jeder Rule, wo das entsprechende Item benötigt wird?? Oder kann dies zentral erfolgen?


      Viele Grüße,

      Jörg

      Kommentar


        #4
        Dann wird es wohl auf "persistieren" hinauslaufen
        => https://knx-user-forum.de/forum/supp...44#post1020344
        Mal sehen, ob ich das mit der Datenbank hinbekomme. Bin da kein Spezi

        Kommentar


          #5
          Kommt halt darauf an, welches Binding dahinter hängt. Wenn das Binding z.B. knx ist, kannst Du den Status beim Start von openHAB aktiv auslesen lassen (korrekte Konfiguration mal vorausgesetzt).

          Ansonsten kannst Du für ein Restore on Startup einfach mapDB nehmen.

          Kommentar


            #6
            Hallo Udo,

            das Item/Binding ist leider nicht immer knx, daher habe ich mir mal das mapdb "installiert"
            In der cfg habe ich keine Änderung vorgenommen, damit die default Werte gelten.

            mapdb.persist habe ich wie folgt angelegt
            Code:
            Strategies {
             everyHour  : "0 0 * * * ?"
             everyDay  : "0 0 0 * * ?"
            }
            
            Items {
                Scene_General : strategy = everyChange,restoreOnStartup
                SleepMode : strategy = everyChange,restoreOnStartup
                Ventilator : strategy = everyChange,restoreOnStartup
                Lampe_OG_Schlafz_Decke : strategy = everyChange,restoreOnStartup
             Lampe_OG_Schlafz_Bett_links : strategy = everyChange,restoreOnStartup
             Lampe_OG_Schlafz_Bett_rechts : strategy = everyChange,restoreOnStartup
            }
            Die knx-Werte werfe ich raus, sobald ich den Status auslese. Hierzu möchte ich aber zuvor noch etwas in der knx-Konfiguration ändern.
            Ein erster Test - Änderung an der rule - haben die Werte "restored"
            Super einfach => und schnell gemacht

            Danke für den Schubs.

            Gruß,
            Jörg

            Kommentar


              #7
              Zu früh gefreut

              Ich vermute, ich habe durch den Umstieg von OH 1.7.1 auf 1.8.3 einige Fehler in meinen Rules?!

              Bei der Zeile "if (receivedCommand==OFF && (now.getHourOfDay >= 21 || now.getHourOfDay <= 4) &&" bekomme ich folgenden Fehler angezeigt
              Code:
              [SIZE=1]Multiple markers at this line[/SIZE]
              
              [SIZE=1]- Couldn't resolve reference to JvmIdentifiableElement 'now'.[/SIZE]
              
              [SIZE=1]- Couldn't resolve reference to JvmIdentifiableElement '<='.[/SIZE]
              
              [SIZE=1]- Couldn't resolve reference to JvmIdentifiableElement 'getHourOfDay'.[/SIZE]
              
              [SIZE=1]- Couldn't resolve reference to JvmIdentifiableElement '>='.[/SIZE]
              
              [SIZE=1]- Couldn't resolve reference to JvmIdentifiableElement '||'.[/SIZE]
              Diesen oder einen solchen sehe ich bei fast allen Aufrufen, wo ich mit now. etwas abfrage.

              Gruß,
              Jörg

              Kommentar


                #8
                Das würde darauf hindeuten, dass joda nicht korrekt registriert ist. Hast Du import org.joda.time.DateTime zu Beginn der rules-Datei stehen (eigentlich sollte das nicht mehr benötigt werden)?

                Kommentar


                  #9
                  Zitat von udo1toni Beitrag anzeigen
                  Das würde darauf hindeuten, dass joda nicht korrekt registriert ist. Hast Du import org.joda.time.DateTime zu Beginn der rules-Datei stehen (eigentlich sollte das nicht mehr benötigt werden)?
                  Hmm, hatte ich nicht, da ich auch mal i-wo gelesen hatte, dass dies nicht mehr benötigt würde.
                  Habe ich nun eingefügt, gespeichert aber ohne Änderung :-(

                  Kommentar

                  Lädt...
                  X