Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - "Szenarien" via crontab und Freigabe

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

    - √ - "Szenarien" via crontab und Freigabe

    Hallo,
    ich versuche mich gerade an einer Logik die verschiedene "Szenarien" abspielen soll.
    Da die "Szenarien" nicht eigentlich jeden Tag abgespilet werden sollen, soll zusätzlich eine Art Freigabeobjekt (1bit) auf der Visu hinterlegt werden.

    Also nur wenn das Freigabe-Item Szenenablauf.Freigabe Wert 1 hat, sollen die "Szenen" via crontab abgespielt werden. (Quasi Szene1 und Szene2 im Wechsel)

    Item Freigabe
    Code:
    [Szenenablauf]
        [[Freigabe]]
        type = bool
        visu_acl = rw
    
        [[VorgabeZeit]]
            [[[Szene1]]]
            type = num
            visu_acl = rw
            enforce_updates = yes
            crontab = 0,20,40 18,19,20,21 * * = 1 
            autotimer = 1m = 0
            [[[Szene2]]]
            type = num
            visu_acl = rw
            enforce_updates = yes
            crontab = 10,30,50 18,19,20,21 * * = 1
            autotimer = 1m = 0
    die Logiken (/usr/smarthome/logics/)
    Code:
    #szenarium1.py
    if sh.Szenenablauf.VorgabeZeit.Szene1 == 1:
        sh.EG.Esszimmer.Deckenspots.dimmen(50)
        sh.EG.Esszimmer.Pendelleuchte.dimmen(100)
        sh.EG.Esszimmer.Essen_Fensterbank(1)
        sh.EG.Esszimmer.blind.pos(30)
    Code:
    #szenarium2.py
    if sh.Szenenablauf.VorgabeZeit.Szene2 == 1:
        sh.EG.Esszimmer.Deckenspots.dimmen(20)
        sh.EG.Esszimmer.Pendelleuchte.dimmen(40)
        sh.EG.Esszimmer.Essen_Fensterbank(0)
        sh.EG.Esszimmer.blind.pos(100)
    der Aufruf der Logiken (/usr/smarthome/etc/logic.conf)
    Code:
    [szenarium1]    
        filename = szenarium1.py
        visu_acl = rw
        watch_item = Szenenablauf.Freigabe
        
    [szenarium2]    
        filename = szenarium2.py
        visu_acl = rw
        watch_item = Szenenablauf.Freigabe
    Leider funktioniert das so nicht. Crotab schaltet zwar wie es soll zu den angegebenen Zeiten auf 1 und via autotimer auch auf 0.
    Aber bei den Lichtern und dem Rollo tut sich trotz Szenenablauf.Freigabe = 1 nichts.
    Im Log sehen ich auch leider keinerlei Fehlerhinweise.
    Erkennt jemand eine mögliche Fehlerursahe im Code?
    (Logfile müsste ich dann ggf. morgen anhängen)
    Die momentanen crontab-Einträge sind momentan nur zu Testzwecken.

    Oder gibt es da vieleicht sogar eine elegantere Lösung?

    Danke

    #2
    Zitat von macflei Beitrag anzeigen
    Hallo,
    ich versuche mich gerade an einer Logik die verschiedene "Szenarien" abspielen soll.
    Da die "Szenarien" nicht eigentlich jeden Tag abgespilet werden sollen, soll zusätzlich eine Art Freigabeobjekt (1bit) auf der Visu hinterlegt werden.

    Also nur wenn das Freigabe-Item Szenenablauf.Freigabe Wert 1 hat, sollen die "Szenen" via crontab abgespielt werden. (Quasi Szene1 und Szene2 im Wechsel)

    Item Freigabe
    Code:
    [Szenenablauf]
        [[Freigabe]]
        type = bool
        visu_acl = rw
    
        [[VorgabeZeit]]
            [[[Szene1]]]
            type = num
            visu_acl = rw
            enforce_updates = yes
            crontab = 0,20,40 18,19,20,21 * * = 1 
            autotimer = 1m = 0
            [[[Szene2]]]
            type = num
            visu_acl = rw
            enforce_updates = yes
            crontab = 10,30,50 18,19,20,21 * * = 1
            autotimer = 1m = 0
    die Logiken (/usr/smarthome/logics/)
    Code:
    #szenarium1.py
    if sh.Szenenablauf.VorgabeZeit.Szene1 == 1:
        sh.EG.Esszimmer.Deckenspots.dimmen(50)
        sh.EG.Esszimmer.Pendelleuchte.dimmen(100)
        sh.EG.Esszimmer.Essen_Fensterbank(1)
        sh.EG.Esszimmer.blind.pos(30)
    Code:
    #szenarium2.py
    if sh.Szenenablauf.VorgabeZeit.Szene2 == 1:
        sh.EG.Esszimmer.Deckenspots.dimmen(20)
        sh.EG.Esszimmer.Pendelleuchte.dimmen(40)
        sh.EG.Esszimmer.Essen_Fensterbank(0)
        sh.EG.Esszimmer.blind.pos(100)
    der Aufruf der Logiken (/usr/smarthome/etc/logic.conf)
    Code:
    [szenarium1]    
        filename = szenarium1.py
        visu_acl = rw
        watch_item = Szenenablauf.Freigabe
        
    [szenarium2]    
        filename = szenarium2.py
        visu_acl = rw
        watch_item = Szenenablauf.Freigabe
    Leider funktioniert das so nicht. Crotab schaltet zwar wie es soll zu den angegebenen Zeiten auf 1 und via autotimer auch auf 0.
    Aber bei den Lichtern und dem Rollo tut sich trotz Szenenablauf.Freigabe = 1 nichts.
    Im Log sehen ich auch leider keinerlei Fehlerhinweise.
    Erkennt jemand eine mögliche Fehlerursahe im Code?
    (Logfile müsste ich dann ggf. morgen anhängen)
    Die momentanen crontab-Einträge sind momentan nur zu Testzwecken.

    Oder gibt es da vieleicht sogar eine elegantere Lösung?

    Danke
    Hallo,

    Ich kenn mich zwar nicht wirklich gut aus, aber bei mir läufts so:

    Logic.conf
    Code:
    [szenarium1]    
        filename = szenarium1.py
        visu_acl = rw
        watch_item = Szenenablauf.Freigabe
        watch_item = Szenenablauf.VorgabeZeit.Szene1
    Code:
    #szenarium1.py
    if sh.Szenenablauf.VorgabeZeit.Szene1 == 1 and sh.Szenenablauf.Freigabe == 1:
        sh.EG.Esszimmer.Deckenspots.dimmen(50)
        sh.EG.Esszimmer.Pendelleuchte.dimmen(100)
        sh.EG.Esszimmer.Essen_Fensterbank(1)
        sh.EG.Esszimmer.blind.pos(30)
    Gruss Wolfi

    Kommentar


      #3
      Zitat von OsLee540i Beitrag anzeigen
      Logic.conf
      Code:
      [szenarium1]    
          filename = szenarium1.py
          visu_acl = rw
          watch_item = Szenenablauf.Freigabe
          watch_item = Szenenablauf.VorgabeZeit.Szene1
      Danke,
      heißt das aber in diesem Fall nicht auch, das die Logik entweder durch Szenenablauf.Freigabe oder durch Szenenablauf.VorgabeZeit.Szene1 getriggert wird?
      Also das die Freigabe nicht wirklich grift?

      Kommentar


        #4
        Das darfst du mich nicht fragen.

        Ich habs bei mir mit meiner Klingel so gelöst und es funktioniert wunderbar.

        Ich bin immer davon ausgegangen das er nur Bedingungen erkennt wenn er auch darauf hört.
        Deswegen dann ja auch if szene.freigabe and scene.zeit, damit nur die Logik greift wenn beide Bedingungen erfüllt sind.

        Gruss Wolfi

        Kommentar


          #5
          Hallo,

          Zitat von macflei Beitrag anzeigen
          Danke,
          heißt das aber in diesem Fall nicht auch, das die Logik entweder durch Szenenablauf.Freigabe oder durch Szenenablauf.VorgabeZeit.Szene1 getriggert wird?
          Also das die Freigabe nicht wirklich grift?
          nein, es wird nur durch Szenenablauf.VorgabeZeit.Szene1 getriggert.

          Bis bald

          Marcus

          Kommentar


            #6
            Danke vielmals.
            Es läuft nun.

            Kommentar


              #7
              Die Logik funktioniert aber nur weil das erste watch_item das zweite überschreibt oder?

              watch_item = Szenenablauf.Freigabe
              watch_item = Szenenablauf.VorgabeZeit.Szene1 (ersetzt erstes watch_item)

              Möchte man das die Logik von beiden getriggert wird müsste man schreiben:

              watch_item = Szenenablauf.Freigabe | Szenenablauf.VorgabeZeit.Szene1

              oder?

              Ich möchte nur verinnerlichen das ich das Problem und die Lösung verstanden habe.

              Kommentar


                #8
                Zitat von mayrjohannes Beitrag anzeigen
                Möchte man das die Logik von beiden getriggert wird müsste man schreiben:

                watch_item = Szenenablauf.Freigabe | Szenenablauf.VorgabeZeit.Szene1

                oder?
                Ja so wird die logic von beiden getriggert

                Kommentar

                Lädt...
                X