Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Guten Morgen an alle autoblind-Experten :-),

    ich öffne (bzw. autoblind erledigt dies ganz wunderbar für mich) meine Raffstoren im Schlafzimmer frühestens um 08:00Uhr.

    Code:
    [[[enter]]]
        as_min_time = 08:00
        as_min_Daemmerung = 20
    ich hätte diese Uhrzeit gerne (über die Visu) einstellbar:
    Problem 1:
    Welchen Datentype muss ich für das Item Zeit verwenden?

    Code:
    as_min_time = item: ...Parameter.Morgendaemmerung.Uhrzeit
    ...
    
    ...
    [[[[[Parameter]]]]]
        [[[[[[Morgendaemmerung]]]]]]
            [[[[[[[Uhrzeit]]]]]]]
                type = datetime ??
    Problem 2: (Smartvisu-Problem)
    Wie kann ich dieses Item "Uhrzeit" Dastellen und Ändern?

    Alternative:
    ich bastel was mit UZSU.. da hätt ich Wochenprogramm usw auch noch..

    Gruß Ivan

    Kommentar


      Hi ivande ich mach das über das Textwidget: https://github.com/herrmannj/smartvi...ster/textinput
      Ist nicht übermäßig schön, aber eigentlich recht schnell, da man halt einfach die Uhrzeit direkt eintippt.Type war dann glaub ich str und Eingabeformat HH:MM
      Bin aber auf die Schnelle nicht 100% sicher und kann auch nicht nachgucken.

      UZSU wäre definitiv eine Alternative

      Kommentar


        Hallo zusammen,

        ich stehe gerade auf dem Schlauch. Ich will meine Autoblind-Rollladen gloabl mit einem Taster sperren. Der Taster ist mit der GAD 14/1/6 verknüpft. Weiterhin habe ich folgendes Item erstellt

        Code:
        [Global]
             [[Rollladen_manuell]]
                type = bool
                knx_dpt = 1
                value = false
                visu_acl = rw
                knx_send = 14/1/6
                knx_cache = 14/1/6
        Nachdem ich es irgendwie nicht geschafft habe, die GAD 14/1/6 auch in die lock-Items meiner Autoblinds zu integrieren, werte ich in den lock-Items nun per Eval das oben genannte Item aus. Das sieht dann so aus:

        Code:
        [Autoblind_Rollladen]
            [[Erdgeschoss]]
                [[[Flur]]]
                    [[[[Nebenausgang]]]]
                        [[[[[lock]]]]]
                            type = bool
                            name = Sperr-Item
                            eval = sh.Global.Rollladen_manuell()
                            eval_trigger = Global.Rollladen_manuell
                        [[[[[rules]]]]]
                            type = bool
                            name = Automatik Rollladen Flur Nebenausgang
                            as_plugin = active
                            eval_trigger = Autoblind_Trigger.Trigger_1 | Autoblind_Rollladen.Erdgeschoss.Flur.Nebenausgang.manuell | Autoblind_Rollladen.Erdgeschoss.Flur.Nebenausgang.lock | Autoblind_Rollladen.Erdgeschoss.Flur.Nebenausgang.suspend
                            as_laststate_item_id = ..state_id
                            as_laststate_item_name = ..state_name
                            as_item_height = Rollladen.Erdgeschoss.Flur.Nebenausgang.Position
                            [[[[[[Lock]]]]]]
                                as_use = Autoblind_allgemein.Vorgaben.Lock
        Der allgemeine Teil der Autoblind-Config sieht gemäß Anleitung folgendermaßen aus

        Code:
        [Autoblind_allgemein]
            [[Vorgaben]]
                as_item_temperature = thz.outsideTemp
                #as_item_aufstehenEG = Praesenz.FlurEG.erste_Erfassung_morgens
                as_item_anwesend = Hausmodi.Anwesenheit
                as_item_automatik_aus = Global.Rollladen_manuell
                as_item_party = Hausmodi.Party
                as_item_urlaub = Hausmodi.Urlaub
                as_item_Daemmerung1 = Sonnenstand.normaleDaemmerung
                as_item_Daemmerung2 = Sonnenstand.starkeDaemmerung
                as_item_Daemmerung3 = Sonnenstand.Finsternis
                as_item_Helligkeit_morgens_wolkenlos = Sonnenstand.morgens_wolkenlos
                as_item_Helligkeit_gr43k = Sonnenstand.Helligkeit.gt43k
                as_item_Helligkeit_kl1k = Sonnenstand.Helligkeit.sm1k
                as_item_nachfuehren = Global.Rollladen_Hitzeschutz
                #gemeint ist das Item "manuell" im jeweiligen Objekt-Item
                as_item_manuell = ..manuell
                #gemeint ist das Item "lock" im jeweiligen Objekt-Item
                as_item_lock = ..lock
                #gemeint ist das Item "suspend" im jeweiligen Objekt-Item
                as_item_suspend = ..suspend
        
                [[[Lock]]]                   
                    type = foo
                    name = Automatik ausgeschaltet
                    #Aktionen:
                    #Suspend-Item zurücksetzen
                    as_set_suspend = False
                    #sonst nichts tun
                    [[[[enter]]]]
                        #Einstieg in Lock, wenn das Lock-Item gesetzt war
                        as_value_lock = True
        Auch wenn ich nicht so hundertprozentig verstehe, wie die Zusammenhänge zwischen allgemeinem Teil und den konkreten Items sind, funktioniert alles.

        Jetzt aber mein Problem: Ich will zusätzlich über Logiken einzelne lock-Items auf true setzen können. Das bekomme ich aber nicht hin. In einer Logik habe ich z.B.
        Code:
        sh.Autoblind_Rollladen.Dachgeschoss.Badezimmer.alle.lock(True)
        eingebaut. Das funktioniert nicht, das Item bleibt auf False.

        Daher meine Frage: Wie kann ich das Lock-Item sinnvoll umsetzten, so dass es sowohl auf eine Gruppenadresse reagiert, als auch per Logik oder Visu gesetzt werden kann?

        Vielen Dank vorab, Grüße

        Arne

        Kommentar


          Hi Arne,

          hier gibt es mehrere Punkte, die Du überlegen solltest...
          1. Im lock-Item steht ein eval = sh.Global.Rolladen_manuell(), der eval wird bei jedem Trigger ausgeführt. Das setzen eines Wertes ist auch nur ein Trigger, also wird Dein Wert immer durch sh.Global.Rolladen_manuell() überschrieben.
          2. Wenn Du schon ein globales lock-Item hast, warum replizierst Du das so umständlich, anstatt es direkt zu verwenden? Also statt
            Code:
            as_item_lock = ..lock
            nimmst Du
            Code:
            as_item_lock = Global.Rolladen_manuell
          3. Du hast eine State-Engine für die Verschattung, warum versuchst Du umständlich über Logiken irgendwelche locks zu setzen/zurückzusetzen anstatt Dir dafür weitere Zustände zu bauen? Das wäre wahrscheinlich einfacher, übersichtlicher und seiteneffektfrei...
          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            Hallo Waldemar,

            vielen Dank. Mir ist die Konstruktion in der Anleitung für die Zustände Lock (und auch Suspend) irgendwie unklar. Wenn ich es richtig verstehe, übernehmen die einzelnen Objekt-Items den allgemein deklarierten Zustand für Lock aus den Vorgaben. Der allgemein deklarierte Zustand verweist aber über
            Code:
            as_item_lock = ..lock
            wieder auf die Werte der lock-Items der einzelnen Objekt-Items. Wieso wird also nicht gleich im Objekt-Item auf das eigene lock-Item verwiesen?

            Da mir die Konstruktion unklar ist, wusste ich auch nicht, an welcher Stelle ich meinen Global.Rollladen_manuell einbauen muss.

            Ich werde es jetzt, wie Du vorgeschlagen hast, mit verschiedenen Zuständen lösen. Also einen für eine globale Sperre und einen für eine individuelle Sperre.

            Danke und Grüße

            Arne

            Kommentar


              Hi Arne,

              ich versuch das mal zu motivieren, es geht eigentlich um 2 Sachen:
              1. die Objekt- bzw. Item-Spezifische StateEngine
              2. die allgemeinen vorgaben (früher hieß das defaults)
              Wenn Du jetzt mal die allgemeinen Vorgaben vergisst, dann würdest Du für jedes Verschattungs-Item eine vollständige State-Engine definieren, mit einem eigenen lock-Item und einem eigenen Lock-Zustand. Entsprechend auch mit suspend, urlaub, party, abwesend etc.

              Wenn Du das alles gemacht hast, wirst Du feststellen, dass die StateEngines in vielen Teilen gleich aussehen und nur wenige Zustände pro Engine unterschiedlich sind. Die Idee der defaults ist, solche Gleichheiten "auszuklammern" und gemeinsam zu nutzen. Da steckt keine "Magie" hinter, es ist einfach nur eine Schreibhilfe - man muss weniger definieren. Und man kann später auch im allgemeinen Teil ändern und es wirkt sich auf alle StateEngines aus. Du kannst somit jeden referenzierten default genau so betrachten, als wenn dieser an der Stelle stehen würde, statt der Referenz. Somit ist es faktisch so, dass gleich im Objekt-Item auf das eigene lock-Item verwiesen wird, Du musst es nur einmal hinschreiben, statt 17 mal. Der allgemeine Teil ist aber kein "muss", immer nur ein "kann".

              Unabhängig davon ist, wie Du Deine Lock-Zustände schneidest. Lock ist erstmal ein Zustand, der nichts tut. Dadurch das Lock als Zustand realisiert ist, kannst Du den in der Priorität so setzen, dass z.B. bei globalem Lock die Rolläden bei einem Rauchalarm trotzdem hochfahren.

              Du kannst somit z.B. ein lokales lock-Item definieren, das 3 Werte kennt: 0=Global, 1=Lock, 2=Unlock. Dein Lock-State sähe dann so aus:
              Code:
              as_item_lock_lokal = ..lock
              as_item_lock_global = Global.Rolladen_manuell
              [Lock]
                  [enter_global]
                      as_value_lock_lokal = 0
                      as_value_lock_global = 1
                  [enter_lokal]
                      as_value_lock_lokal = 1
              Der würde nur betreten werden, wenn Du lokal einen lock hast oder global einen und lokal auf die globale Einstellung verweist. Du könntest aber lokal auf unlock stellen und die globale Einstellung wirkt sich dann nicht aus.

              Es gibt natürlich auch noch viele andere Möglichkeiten, so was zu realisieren...

              Gruß, Waldemar

              OpenKNX www.openknx.de

              Kommentar


                Hi Waldemar,

                vielen Dank für deine ausführliche Erklärung und das Beispiel. Der Sinn der allgemeinen Definition war mir klar. Ich hatte mir das Plugin mal recht am Anfang der Entwicklung installiert und in meiner Erinnerung waren die Zustände Lock und Suspend da mehr oder weniger Plugin-interne Prozesse. Ich war daher etwas verwirrt, als ich jetzt Zustände hierfür definieren konnte, die genau wie die Zustände "Dämmerung" usw. funktionieren. Letztendlich ist ja insbesondere für Suspend die einzige Prüfung, ob ein Rollladen manuell bedient wurde und die einzige Aktion besteht dann im zeitweisen Aussetzen der Automatik.
                Aber Du hast schon recht, man hat damit, falls man das will, mehr Möglichkeiten und insbesondere an deinem Beispiel zu dem Lock-Zustand wird das auch deutlich.

                Grüße

                Arne

                Kommentar


                  Hallo,

                  ich hab wieder einmal mit dem autoblind-Plugin zu kämpfen: (obwohl es zu 99% wunderbar den Dienst verrichtet..)

                  manchmal (jedoch nicht immer) nachdem autoblind getriggert wird, wird die Zustandsermittlung nicht durchgeführt. Die letzten beideb Einträge im Log sind dann folgende:

                  Code:
                  2016-11-12 23:00:30.109261 Update state of item Dg.Flur.Beleuchtung.AutoLight.Rules =======================
                  2016-11-12 23:00:30.109367 Update triggered by Eval (item=Dg.Flur.Beleuchtung.AutoLight.Rules source=Dg.Flur.Status.Nachlauf2 dest=None)
                  im smarthome.log gibt es keine Fehlermeldungen vom Plugin,..

                  Code:
                  2016-11-12  23:00:30 DEBUG    Dg.Flur.Status.Nachlauf2 Triggering Dg.Flur.Beleuchtung.AutoLight.Rules - by: Eval source: Dg.Flur.Status.Nachlauf dest: None value: {'value': False, 'source': 'Dg.Flur.Stat
                  2016-11-12  23:00:30 DEBUG    Dg.Flur.Status.End Item Dg.Flur.Status.End = False via Eval Dg.Flur.Status.Count None
                  2016-11-12  23:00:30 DEBUG    Dg.Flur.Status.End Triggering Dg.Flur.Status.Nachlauf - by: Eval source: Dg.Flur.Status.Count dest: None value: {'value': False, 'source': 'Dg.Flur.Stat
                  2016-11-12  23:00:30 DEBUG    Dg.Flur.Status.End Triggering Dg.Flur.Status.Count - by: Eval source: Dg.Flur.Status.Count dest: None value: {'value': False, 'source': 'Dg.Flur.Stat
                  2016-11-12  23:00:30 INFO     Dg.Flur.Status.Nachlauf Item Dg.Flur.Status.Nachlauf: evaluating 1 if int(value) > 12 else (0 if sh.Dg.Flur.Status.End() else None) returns None
                  Code:
                      [[Flur]]
                          [[[Beleuchtung]]]
                              type = str
                              visu_acl = ro
                              eval = str(sh.Dg.Flur.Beleuchtung.AutoLight.Rules)
                              eval_trigger = Dg.Flur.Beleuchtung
                              [[[[AutoLight]]]]
                                  #$order = 10
                                  [[[[[Rules]]]]]
                                      #$order = 3
                                      type = bool
                                      as_plugin = active
                                      as_startup_delay = 120
                                      eval_trigger = Dg.Flur.Status.PM_Schalten | Dg.Flur.Status.PM_Schalten2  | Dg.Flur.Status.Nachlauf2 | Dg.Flur.Status.Nacht | Dg.Flur.ClickControl.State.Key_S3_um | Dg.Flur.ClickControl.State.Key_S3L_um | Dg.Flur.ClickControl.State.Key_S4_um | Dg.Flur.ClickControl.State.Key_S4L_um
                                      as_laststate_item_id = ..state_id
                                      as_laststate_item_name = ..state_name
                                      [[[[[[S3_Aus_Manuell]]]]]]
                                          #$order = 0
                                          as_use = Beleuchtung_default.S3_Aus_Manuell
                  wenn ich autoblind, nach dem "Hängen bleiben" mehrmals triggere, kann es vorkommen, dass die Zustandsermittlung dann nach einigen malen triggern ausgeführt wird, es kann aber auch sein dass ich dann smarthome.py neu starten muss damin das plugin wieder einer Zeit lang läuft.

                  hier hat autoblind nach erneuten triggern (nach 2 Minuten) dann den Zustand neu ermittelt ()


                  beim ersten triggern um 23:00:30 wurde die Zustandsermittlung laut Beleuchtung und laut Log nicht durchgeführt.
                  erst beim erneuten triggern um 23:02:30 schaltete die Bleuchtung dann:

                  Code:
                  2016-11-12 23:00:30.109261 Update state of item Dg.Flur.Beleuchtung.AutoLight.Rules =======================
                  2016-11-12 23:00:30.109367 Update triggered by Eval (item=Dg.Flur.Beleuchtung.AutoLight.Rules source=Dg.Flur.Status.Nachlauf2 dest=None)
                  2016-11-12 23:02:30.349384 Eval initially triggered by Autotimer (item=Dg.Flur.Status.Count source=None)
                  2016-11-12 23:02:30.349580 Last state: Dg.Flur.Beleuchtung.AutoLight.Rules.PM1_Nacht ('Grundbel. Nacht')
                  ...
                  ...


                  hier sind evtl. die conf und Log-Dateien:

                  https://drive.google.com/drive/folde...nc?usp=sharing

                  Gruß Ivan

                  Kommentar


                    Das Plugin läuft jetzt seit Monaten einwandfrei, jetzt wollte ich noch etwas Feintuning betreiben aber vorher noch "kurz" auf die "neuen" [Lock] und [Suspend] Regeln umstellen, damit ich auf aktuellen Stand bin.

                    Natürlich möchte ich das mit Defautl-Vorgaben und relativen Items so einfach wie möglich halten, aber da habe ich so meine Probleme damit...

                    Irgendwie wird durch Manuelle Bedienung und/oder Lock/Suspend das Plugin nicht getriggert... ich denke es liegt an den relativen Items...

                    Meine Fragen:
                    Wo darf ich relative Items verwenden?
                    Welche Items kann/darf man unter autoblind.default.raffstore definieren und welche muss ich zwingend unter DG.schlafen.raffstore.garten.automatik.rules angeben?
                    Default-Einstellungen:
                    Code:
                    [autoblind]
                        [[trigger]]
                            [[[raffstore]]]
                                type = bool
                                name = Gemeinsamer Trigger für alle Raffstores
                                enforce_updates = yes
                                cycle = 300 = 1
                    
                        [[default]]    
                            [[[raffstore]]]            
                                # Item für Helligkeit
                                as_item_brightness_ost = wetter.wetterstation.helligkeit.ost
                                #.
                                #. gekürzt
                                #.
                                as_item_brightness_daemmerung = wetter.wetterstation.helligkeit.daemmerung
                                # Item für Temperatur außen
                                as_item_temperature = wetter.wetterstation.temperatur
                                # Item für kodi
                                as_item_kodi = xbmc.video
                                # Item um einzelne Einstiegsbedingungen zu deaktivieren
                                as_item_enter_deactivate = autoblind.default.raffstore.deactivate
                                # Item für Behanghöhe
                                as_item_hoehe = ...hoehe
                                # Keine Änderung der Behanghöhe wenn Abweichung kleiner 10
                                as_mindelta_hoehe = 10
                                # Item für Lamellenwinkel          
                                as_item_lamelle = ...lamelle
                                # Keine Änderung des Lamellenwinkels wenn Abweichung kleiner 5
                                as_mindelta_lamelle = 5
                                # Über diese Items soll die Statusermittlung ausgelöst werden
                                eval_trigger = autoblind.trigger.raffstore | ..manuell | ..lock | ..suspend
                                # "Manuell" Item
                                as_item_manuell = ..manuell
                                # "Lock" Item
                                as_item_lock = ..lock
                                # "Suspend" Item
                                as_item_suspend = ..suspend        
                                # In dieses Item soll die Id des aktuellen Zustands geschrieben werden
                                as_laststate_item_id = ..state_id
                                # In dieses Item soll der Name des aktuellen Zustands geschrieben werden
                                as_laststate_item_name = ..state_name
                    
                    
                                # Item um Enter-Bedingungen zu deaktivieren
                                [[[[deactivate]]]]
                                    type = bool
                                    name = Item um Enter-Bedingungen zu deaktivieren
                                    # Wert ist immer False, so können Bedingungen durch
                                    # as_value_enter_deactivate = True deaktiviert werden
                                    # z.B. bei Nachführen sind alle Einstiegsbedingungen per default deaktiviert,
                                    # so kann bei den einzelnen Raffstores dann die richtige Himmelsrichtung
                                    # einfach aktiviert werden.
                                    value = False
                                    cache = on
                    
                                # Zustand "Sperre über Sperr-Item"
                                [[[[Lock]]]]
                                    type = foo
                                    name = Automatik manuell gesperrt
                                    # Aktionen:
                                    # - "Suspend"-Item ggf. zurücksetzen              
                                    as_set_suspend = False
                                    # sonst nichts tun
                                    [[[[[enter]]]]]
                                        # Einstieg in "Lock": Wenn
                                        # - das "Lock"-Item gesetzt ist
                                        as_value_lock = True
                    
                                # Zustand "Zeitweises Deaktivieren bei manuellen Aktionen"
                                [[[[Suspend]]]]
                                    type = foo
                                    name = Ausgesetzt
                                    # Namensermittlung über eval-Funktion
                                    as_name = eval:autoblind_eval.insert_suspend_time("..suspend", "Automatik ausgesetzt bis %X")
                                    # Aktionen:
                                    # - "Suspend"-Item setzen
                                    as_set_suspend = True
                                    # sonst nichts tun
                    
                                    # Einstieg in "Suspend": Wenn
                                    [[[[[enter_manuell]]]]]                        
                                        # - die Zustandsermittlung über das "Manuell"-Item ausgelöst wurde
                                        as_value_trigger_source = eval: autoblind_eval.get_relative_itemid("..manuell")
                    
                                    # Verbleib in "Suspend": Wenn
                                    [[[[[enter_stay]]]]]
                                        # - wir bereits in "Suspend" sind
                                        as_value_laststate = var:current.state_id
                                        # - die letzte Änderung des "Manuell"-Items höchstens 3600 Sekunden her ist
                                        as_agemax_manuell = 3600
                                        # - das "Suspend"-Item nicht von irgendwo anders auf "False" gesetzt wurde
                                        as_value_suspend = True
                    Raffstore Schlafen:
                    Code:
                    [DG]
                        [[schlafen]]
                            [[[raffstore]]]
                                [[[[garten]]]]
                                    name = Raffstore Schlafen
                    
                                    [[[[[aufab]]]]]
                                        type = bool
                                        name = Raffstore auf/ab fahren
                                        knx_dpt = 1
                                        knx_send = x/0/x4
                                        visu_acl = rw
                                        enforce_updates = on
                    
                                    [[[[[stepstop]]]]]
                                        type = bool
                                        name = Raffstore Schritt fahren/stoppen
                                        knx_dpt = 1
                                        knx_send = x/1/x4
                                        visu_acl = rw
                                        enforce_updates = on
                    
                                    [[[[[hoehe]]]]]
                                        type = num
                                        name = Behanghöhe des Raffstores
                                        knx_dpt = 5.001
                                        knx_send = 4/2/144
                                        visu_acl = rw
                    
                                    [[[[[hoehe_status]]]]]
                                        type = num
                                        name = Behanghöhe des Raffstores
                                        knx_dpt = 5.001
                                        knx_send = x/4/x5
                                        visu_acl = r
                    
                                    [[[[[lamelle]]]]]
                                        type = num
                                        name = Lamellenwinkel des Raffstores
                                        knx_dpt = 5.001
                                        knx_send = x/3/x4
                                        visu_acl = rw
                    
                                    [[[[[lamelle_status]]]]]
                                        type = num
                                        name = Lamellenwinkel des Raffstores
                                        knx_dpt = 5.001
                                        knx_send = x/4/x6
                                        visu_acl = r
                    
                                    [[[[[automatik]]]]]
                                        [[[[[[lock]]]]]]
                                            type = bool
                                            name = Sperr-Item
                                            #knx_dpt = 1
                                            #knx_send = x/5/x4
                                            #knx_status = x/5/x5
                                            #knx_listen = x/5/x4 | x/5/x0 | x/5/x9 | x/5/x
                                            visu_acl = rw
                                            cache = on
                    
                                        [[[[[[suspend]]]]]]
                                            type = bool
                                            name = Suspend-Item
                                            #knx_dpt = 1
                                            #knx_send = x/5/x6
                                            visu_acl = rw
                                            # Achtung: Beim "Suspend"-Item niemals "enforce_updates = yes" setzen! Das führt dazu dass das Setzen des
                                            # Suspend-Items bei der Initialisierung zu einem endlosen sofortigen Wiederaufruf der Statusermittlung führt!
                    
                                        [[[[[[state_id]]]]]]
                                            type = str
                                            name = Id des aktuellen Zustands
                                            visu_acl = r
                                            cache = on
                    
                                        [[[[[[state_name]]]]]]
                                            type = str
                                            name = Name des aktuellen Zustands
                                            visu_acl = r
                                            cache = on
                    
                                        [[[[[[manuell]]]]]]
                                            type = bool
                                            name = Manuelle Bedienung
                                            # Änderungen dieser Items sollen als manuelle Bedienung gewertet werden
                                            eval_trigger = DG.schlafen.raffstore.garten.aufab | DG.schlafen.raffstore.garten.stepstop | DG.schlafen.raffstore.garten.hoehe | DG.schlafen.raffstore.garten.lamelle
                                            # Änderungen, die ursprünglich von diesen Triggern (<caller>:<source>) ausgelöst wurden, sollen nicht als manuelle Bedienung gewertet werden
                                            as_manual_exclude = Init:* #KNX:y.y.y | Init:*
                    
                                        [[[[[[rules]]]]]]
                                            type = bool
                                            name = Raffstore Schlafen
                                            as_plugin = active
                                            #as_use = autoblind.default.raffstore
                                            # # Über diese Items soll die Statusermittlung ausgelöst werden
                                            # eval_trigger = autoblind.trigger.raffstore | DG.schlafen.raffstore.garten.automatik.manuell | DG.schlafen.raffstore.garten.automatik.lock | DG.schlafen.raffstore.garten.automatik.suspend
                                            # # "Manuell" Item
                                            # as_item_manuell = DG.schlafen.raffstore.garten.automatik.manuell
                                            # # "Lock" Item
                                            # as_item_lock = DG.schlafen.raffstore.garten.automatik.lock
                                            # # "Suspend" Item
                                            # as_item_suspend = DG.schlafen.raffstore.garten.automatik.suspend        
                                            # # In dieses Item soll die Id des aktuellen Zustands geschrieben werden
                                            # as_laststate_item_id = DG.schlafen.raffstore.garten.automatik.state_id
                                            # # In dieses Item soll der Name des aktuellen Zustands geschrieben werden
                                            # as_laststate_item_name = DG.schlafen.raffstore.garten.automatik.state_name
                    
                                            [[[[[[[Lock]]]]]]]
                                                # Zustand "Lock": Nur die Vorgabeeinstellungen übernehmen
                                                as_use = autoblind.default.raffstore.Lock
                    
                                            [[[[[[[Suspend]]]]]]]
                                                # Zustand "Suspend": Nur die Vorgabeeinstellungen übernehmen
                                                as_use = autoblind.default.raffstore.Suspend
                    Wäre toll wenn mir jemand hier weiterhelfen kann, ich seh jetzt jedenfalls nach 5 Stunden kein Land...
                    Zuletzt geändert von Yfkt5A; 13.11.2016, 00:26. Grund: unwichtige Items gekürzt
                    cu Yfkt5A
                    DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
                    microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

                    Kommentar


                      Yfkt5A Möglichkeiten gibt es mehrere.. Aus meiner Sicht vernünftig ist es, im Standard Autoblind Item die verschiedenen Stati zu definieren. Und da natürlich auch die Items, auf die die ENTER-Definitionen zurück greifen.

                      Wenn alle deine Items, die du mittels "use=.." verknüpfst, ein bestimmtes Unteritem haben, kannst du auch die AUSZUFÜHRENDE AKTION (oder wie wir das nennen wollen..) im default als relatives Item definieren. Stell dir das wie einen Platzhalter oder eine Referenz vor. Anstatt du "use=autoblind.default.nacht" nutzt, kopier den kompletten Inhalt von autoblind.default.nacht in das entsprechende Item. Dann weißt du nun, wie autoblind "denkt" und die relativen Angaben erwartet. Wenn das nun klar ist, nutzt du natürlich wieder den "use.." Verweis, damit du nicht bei jedem Item die Stati Bedingunen, etc. neu rein kopieren musst.

                      Hier ein Beispiel:
                      Code:
                      ['steckdosen']
                      type=foo
                          [['autoblind']]
                              type=foo
                              [[['steckdosentrigger']]]
                              type = bool
                              cycle = 600 = 1
                              visu_acl = rw
                              enforce_updates = true
                              [[['default']]]
                                  type=foo
                                  # Items, die geprueft werden
                                  as_item_duschen = logik.duschen
                                  as_item_taster = logik.taster
                      
                                  # Items die geaendert werden sollen. Sind hier Items gelistet, die es dann beim aufrufenden Item nicht gibt, wird der Eintrag hier ignoriert. Also halb so wild.
                                  as_item_schalten = ...SA
                      
                                  # Suspend und Lock Items
                                  as_item_manuell = ..manuell
                                  as_item_lock = ..lock
                                  as_item_suspend = ..suspend
                      
                                  [[[['lock']]]]
                                      type = foo
                                      name = Gesperrt
                                      as_set_suspend = False
                                      as_set_suspend_end = ''
                                      [[[[['enter']]]]]
                                      type = foo
                                          as_value_lock = True
                      
                                  [[[['suspend']]]]
                                      type = foo
                                      name = Ausgesetzt
                                      as_set_suspend = True
                                      as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend', suspend_text='%X')
                                      [[[[['enter_manuell']]]]]
                                          type = foo
                                          as_value_trigger_source = eval:autoblind_eval.get_relative_itemid('..manuell')
                                      [[[[['enter_stay']]]]]
                                          type = foo
                                          as_value_laststate = var:current.state_id                            
                                          as_agemax_manuell = var:item.suspend_time
                                          as_value_suspend = True
                      
                                   [[[['taster']]]]
                                      type = foo
                                      as_set_schalten = value:1
                                      as_set_suspend = False
                                      name = Timer
                                      as_set_suspend_end = ''
                                      [[[[['enter']]]]]
                                          type = foo
                                          as_value_taster = True
                                          as_agemax_taster = eval:autoblind_eval.get_relative_itemvalue('...SA.ausschalttimer.minutes') * 60
                      # Bei den Items, die den Taster-Status mittels "use=autoblind.default.taster" einbinden, muss nun auch das Unteritem SA. etc. vorhanden sein!
                                  [[[['duschen']]]]
                                      type = foo
                                      name = Duschen
                                      enforce_updates = true
                                      as_set_schalten = item:..settings.schalten.duschen #geht bei dem Item, das diese "Vorlage" implementiert, 2 Ebenen höher und dann in das Unteritem settings, etc. Auch hier nutzt du ein relatives Item nur, wenn es wirklich bei allen Items vorhanden ist, das hierauf referenziert.
                                      as_set_suspend = False
                                      as_set_suspend_end = ''
                                      [[[[['enter']]]]]
                                          type = foo
                                          as_value_duschen = true

                      In einem der Steckdosen-Items heißt es dann..

                      Code:
                      ['steckdosen']
                      type = foo
                          [['automatik_lock']]
                          type = bool
                          visu_acl = rw
                          enforce_updates = no
                          knx_dpt = 1
                          cache = True
                          knx_send = 4/5/2
                              [[['zeitschalter']]]
                                  type = dict
                                  uzsu_item = steckdosen.automatik_lock
                                  cache = True
                                  visu_acl = rw                      
                      
                          [['kg']]    
                          type = foo  
                              [[['technik_server']]]
                                  type=foo
                                  [[[['automatik']]]]
                                      type = foo
                                      [[[[['autostate_id']]]]]
                                          type = str
                                          visu_acl = ro
                                          cache = on
                                      [[[[['autostate_name']]]]]
                                          type = str
                                          visu_acl = ro
                                          cache = on
                                      [[[[['autostate_suspend_end']]]]]
                                          type = str
                                          visu_acl = ro
                                          cache = on
                                      [[[[['lock']]]]]
                                          type = bool
                                          knx_dpt = 1
                                          knx_listen = 4/5/2
                                          visu_acl = rw
                                          cache = on
                                      [[[[['suspend']]]]]
                                          type = bool  
                                          knx_dpt = 1                                    
                                          visu_acl = rw
                                      [[[[['manuell']]]]]
                                          type = bool
                                          name = Manuelle Bedienung
                                          eval_trigger = steckdosen.kg.technik_server.SA  
                                          as_manual_invert = True
                                          as_manual_exclude = Init:* | Database:* | KNX:1.1.1
                                      [[[[['settings']]]]]
                                          type = foo
                                          [[[[[['suspendduration']]]]]]
                                              type = num
                                              visu_acl = rw
                                              cache = True
                                              enforce_updates  = no
                                              # value = 6
                                          [[[[[['schalten']]]]]]
                                              type = foo
                                              [[[[[[['duschen']]]]]]] # hierauf wird vom Default referenziert, da ALLE Items, die use=autoblind.default.duschen nutzen, auch dieses Item besitzen. Ich nutze es, um dann über die Visu festlegen zu können, ob eine Steckdose im Dusch-Status ein- oder ausgeschaltet werden soll. De facto habe ich für alle Stati solle Settings, um größtmögliche Flexibilität zu gewährleisten.
                                                  type = bool
                                                  visu_acl = rw
                                                  cache = True
                                                  enforce_updates  = no
                                      [[[[['rules']]]]]
                                          type = bool
                                          as_plugin = active
                                          as_repeat_actions = False
                      
                                          # Das habe ich explizit nur bei dieser Steckdose drin und nicht bei default, da es nur hier relevant ist.
                                          as_item_aufnahme = heimkino.dvblink.aufnahme
                      
                                          as_laststate_item_id = ..autostate_id
                                          as_laststate_item_name = ..autostate_name
                                          as_item_suspend_end = ..autostate_suspend_end                                        
                                          as_suspend_time = eval:autoblind_eval.get_relative_itemvalue('..settings.suspendduration') * 60
                                          eval_trigger = steckdosen.autoblind.steckdosentrigger  | steckdosen.autoblind.settings.*
                      
                                          [[[[[['lock']]]]]]
                                              type = foo
                                              as_use = steckdosen.autoblind.default.lock                        
                                          [[[[[['taster']]]]]]
                                              type = foo
                                              as_use = steckdosen.autoblind.default.taster                      
                                          [[[[[['suspend']]]]]]
                                              type = foo
                                              as_use = steckdosen.autoblind.default.suspend                        
                                          [[[[[['aufnahme']]]]]] # Das ist ein Status, der nur bei diesem Item relevant ist. Daher habe ich ihn nicht bei default definiert, sondern füge ihn direkt hier ein.
                                              type = foo
                                              name = TV-Aufnahme
                                              enforce_updates = true
                                              as_set_schalten = value:true
                                              as_set_suspend = False
                                              as_set_suspend_end = ''
                                              [[[[[[['enter']]]]]]]
                                                  type = foo
                                                  as_value_aufnahme = value:True
                                          [[[[[['duschen']]]]]]
                                              type = foo
                                              as_use = steckdosen.autoblind.default.duschen
                                              [[[[[[['enter_zusatz']]]]]]]
                                                  type = foo
                                                  #Hier könnte ich weitere Enter-Bedingungen einfügen, die in der Vorlage nicht drin sein sollten, weil sie zB nur exakt dieses aktuelle Item betreffen.
                      
                                  [[[['SA']]]]      
                                      knx_send = 1/0/1
                                      knx_cache = 1/0/2
                                      type = bool
                                      visu_acl = rw
                                      knx_dpt = 1
                                     [[[[['ausschalttimer']]]]]    
                                         [[[[[['minutes']]]]]]

                      Ich gehe davon aus, man könnte das auch anders lösen - aber so funktioniert es
                      Zuletzt geändert von Onkelandy; 13.11.2016, 14:41.

                      Kommentar


                        Onkelandy Erstmal danke für deine Antwort, aber ich glaube wir reden etwas aneinander vorbei...
                        das mit dem as_use hab ich grundsätzlich verstanden, aber wie es scheint gibt es Items bei mir unter [autoblind|default|raffstore] die man nicht allgemein definieren kann/darf.

                        z.B. scheint jetzt folgende Konfi einwandfrei zu funktionieren...
                        Code:
                        [autoblind]
                            [[default]]    
                                [[[raffstore]]]            
                                    # Item für Helligkeit
                                    as_item_brightness_ost = wetter.wetterstation.helligkeit.ost
                                    #.
                                    #. gekürzt
                                    #.
                                    as_item_brightness_daemmerung = wetter.wetterstation.helligkeit.daemmerung
                                    # Item für Temperatur außen
                                    as_item_temperature = wetter.wetterstation.temperatur
                                    # Item für kodi
                                    as_item_kodi = xbmc.video
                                    # Item um einzelne Einstiegsbedingungen zu deaktivieren
                                    as_item_enter_deactivate = autoblind.default.raffstore.deactivate
                                    # Item für Behanghöhe
                                    as_item_hoehe = ...hoehe
                                    # Keine Änderung der Behanghöhe wenn Abweichung kleiner 10
                                    as_mindelta_hoehe = 10
                                    # Item für Lamellenwinkel          
                                    as_item_lamelle = ...lamelle
                                    # Keine Änderung des Lamellenwinkels wenn Abweichung kleiner 5
                                    as_mindelta_lamelle = 5
                                    # "Manuell" Item
                                    as_item_manuell = ..manuell
                                    # "Lock" Item
                                    as_item_lock = ..lock
                                    # "Suspend" Item
                                    as_item_suspend = ..suspend
                        Code:
                        [DG]
                            [[schlafen]]
                                [[[raffstore]]]
                                    [[[[garten]]]]
                                        [[[[[automatik]]]]]
                                            [[[[[[rules]]]]]]
                                                type = bool
                                                name = Raffstore Schlafen
                                                as_plugin = active
                        
                                                # In dieses Item soll die Id des aktuellen Zustands geschrieben werden
                                                as_laststate_item_id = ..state_id
                                                # In dieses Item soll der Name des aktuellen Zustands geschrieben werden
                                                as_laststate_item_name = ..state_name
                                                # Über diese Items soll die Statusermittlung ausgelöst werden
                                                eval_trigger = autoblind.trigger.raffstore | DG.schlafen.raffstore.garten.automatik.manuell | DG.schlafen.raffstore.garten.automatik.lock | DG.schlafen.raffstore.garten.automatik.suspend
                        wenn ich jetzt aber as_laststate_item_name = ..state_name zur Default-Konfi unter [autoblind|default|raffstore] schreibe wird der State-Name nicht mehr aktualisiert.

                        Auch die as_laststate_item_id = ..state_id und den # Über diese Items soll die Statusermittlung ausgelöst werden
                        eval_trigger = autoblind.trigger.raffstore | ..manuell | ..lock | ..suspend würde ich gerne bei [autoblind|default|raffstore] definieren, jedoch klappt das anscheinend nicht
                        cu Yfkt5A
                        DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
                        microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

                        Kommentar


                          Hallo zusammen,

                          ich werde vermutlich erst am Wochenende dazu kommen, mir eure Probleme anzuschauen...

                          Grüße
                          offline

                          Kommentar


                            Schon mal 3. punkt probiert? Wo liegen die Items? Poste bitte mal was Komplettes

                            Kommentar


                              Hi zusammen!

                              Ist das schon mal jemandem passiert.. bei mir ist jetzt, mit der aktuellsten SmarthomeNG Develop Version, gerade passiert, dass die suspend_time NEGATIV wurde und somit die Zeit gar nicht abgelaufen ist. Siehe Log:
                              Code:
                              2016-11-27 17:23:57.678510 Staying at licht.treppe.regal_rechts.automatik.rules.suspend ('Ausgesetzt')
                              2016-11-27 17:23:57.679200       Action 'suspend': Set 'licht.treppe.regal_rechts.automatik.suspend' to 'True'
                              2016-11-27 17:23:57.681756       Executing method 'insert_suspend_time(..suspend, %X)'
                              2016-11-27 17:23:57.686401               Suspend time is 3060
                              2016-11-27 17:23:57.688602               Suspend item is licht.treppe.regal_rechts.automatik.suspend
                              2016-11-27 17:23:57.689902               Current suspend age: 3012.0655449999999
                              2016-11-27 17:23:57.694732               Remaining suspend time: 47.934455000000071
                              2016-11-27 17:23:57.696470               Suspend finished at 2016-11-27 17:24:45.630391+01:00
                              2016-11-27 17:23:57.700251       Action 'suspend_end': Set 'licht.treppe.regal_rechts.automatik.autostate_suspend_end' to '05:24:45 PM'
                              2016-11-27 17:24:58.289140 Update state of item licht.treppe.regal_rechts.automatik.rules =================
                              2016-11-27 17:24:58.289590 Update triggered by Eval (item=licht.treppe.regal_rechts.automatik.rules source=licht.autoblind.lichttrigger dest=None)
                              2016-11-27 17:24:58.290189 Eval initially triggered by Scheduler (item=licht.autoblind.lichttrigger source=None)
                              2016-11-27 17:24:58.290778 Executing method 'get_relative_itemvalue(..settings.suspendduration)'
                              2016-11-27 17:24:58.291377 Last state: licht.treppe.regal_rechts.automatik.rules.suspend ('Ausgesetzt')
                              2016-11-27 17:24:58.292731 Check if state 'licht.treppe.regal_rechts.automatik.rules.suspend' ('Ausgesetzt') can be left:
                              2016-11-27 17:24:58.293057       No condition sets defined -> matching
                              2016-11-27 17:24:58.293380 State can be left
                              2016-11-27 17:24:58.293713 Check if state 'licht.treppe.regal_rechts.automatik.rules.lock' ('Gesperrt') can be entered:
                              2016-11-27 17:24:58.294063       Check condition set 'enter':
                              2016-11-27 17:24:58.294443               Condition 'lock': value=True negate=False current=False
                              2016-11-27 17:24:58.294807                       not OK -> not matching
                              2016-11-27 17:24:58.295145 State can not be entered
                              2016-11-27 17:24:58.295493 Check if state 'licht.treppe.regal_rechts.automatik.rules.night' ('Nacht') can be entered:
                              2016-11-27 17:24:58.295846       Check condition set 'enter':
                              2016-11-27 17:24:58.296220               Condition 'night_active': value=True negate=False current=True
                              2016-11-27 17:24:58.296561                       OK -> matching
                              2016-11-27 17:24:58.296919               Age of 'night_active': No limits given
                              2016-11-27 17:24:58.297281               Condition 'lichtmodus': value=[4, 4.0] negate=False current=0
                              2016-11-27 17:24:58.297679                       0 not in list -> not matching
                              2016-11-27 17:24:58.298038 State can not be entered
                              2016-11-27 17:24:58.298465 Check if state 'licht.treppe.regal_rechts.automatik.rules.suspend' ('Ausgesetzt') can be entered:
                              2016-11-27 17:24:58.298986       Check condition set 'enter_stay':
                              2016-11-27 17:24:58.299737               Condition 'suspend_active': value=True negate=False current=True
                              2016-11-27 17:24:58.300098                       OK -> matching
                              2016-11-27 17:24:58.300484               Age of 'suspend_active': No limits given
                              2016-11-27 17:24:58.300857               Condition 'laststate': value=licht.treppe.regal_rechts.automatik.rules.suspend negate=False current=licht.treppe.regal_rechts.automatik.rules.suspend
                              2016-11-27 17:24:58.301162                       OK -> matching
                              2016-11-27 17:24:58.301553               Age of 'laststate': No limits given
                              2016-11-27 17:24:58.302017               Condition 'manuell': min=None max=None negate=False current=True
                              2016-11-27 17:24:58.302596                       no limit given -> matching
                              2016-11-27 17:24:58.305743               Age of 'manuell': min=None max=3060 negate=None current=1871.503719
                              2016-11-27 17:24:58.307371                       given age limits ok -> matching
                              2016-11-27 17:24:58.307797               Condition 'suspend': value=True negate=False current=True
                              2016-11-27 17:24:58.308126                       OK -> matching
                              2016-11-27 17:24:58.309114               Age of 'suspend': No limits given
                              2016-11-27 17:24:58.310052 State can be entered
                              2016-11-27 17:24:58.310456 Staying at licht.treppe.regal_rechts.automatik.rules.suspend ('Ausgesetzt')
                              2016-11-27 17:24:58.310887       Action 'suspend': Set 'licht.treppe.regal_rechts.automatik.suspend' to 'True'
                              2016-11-27 17:24:58.311456       Executing method 'insert_suspend_time(..suspend, %X)'
                              2016-11-27 17:24:58.312069               Suspend time is 3060
                              2016-11-27 17:24:58.312965               Suspend item is licht.treppe.regal_rechts.automatik.suspend
                              2016-11-27 17:24:58.313966               Current suspend age: 3072.689672
                              2016-11-27 17:24:58.314479               Remaining suspend time: -12.689671999999973
                              2016-11-27 17:24:58.315038       Problem evaluating 'autoblind_eval.insert_suspend_time('..suspend', suspend_text='%X')': Can't convert 'ValueError' object to str implicitly.
                              2016-11-27 17:25:42.018748 Update state of item licht.treppe.regal_rechts.automatik.rules =================
                              Nach einem Neustart scheint auf die Schnelle auch alles in Ordnung zu sein, aber vielleicht hat ja wer irgendeine Ahnung, woran das liegen könnte? Evtl. durchaus ein Prob beim smarthome, schwer einzuschätzen

                              Kommentar


                                Hallo Yfkt5A

                                Zitat von nEiMi Beitrag anzeigen
                                Meine Fragen:
                                Wo darf ich relative Items verwenden?
                                Bei allen AutoBlind spezifischen Attributen ("as_[...]"), bei denen Items angegeben werden müssen (https://github.com/i-am-offline/smar...e-item-angaben). Hinweis im Wiki zu relativen Items bei Vorgabezuständen beachten!
                                Zitat von nEiMi Beitrag anzeigen
                                Welche Items kann/darf man unter autoblind.default.raffstore definieren
                                Eigentlich darfst du dort definieren, was du willst. Es handelt sich eigentlich nur um eine logisch zusammengehörende Gruppe von Items. Wenn du da andere Items, die nichts mit dem AutoBlind-Plugin zu tun hast reinstellst, macht das dem AutoBlind-Plugin nichts.
                                Von der Logik her sollten da aber die Defaultzustände für die Raffstoreautomatik liegen ...

                                Zitat von nEiMi Beitrag anzeigen
                                und welche muss ich zwingend unter DG.schlafen.raffstore.garten.automatik.rules angeben?
                                Hier musst du zwingend alle Zustandsitems angebeben, die du für die Automatik der Raffstores in deinem Schlafzimmer im DG auf der Gartenseite brauchst.
                                Die Zustandsitems musst du jedoch nicht zwingend vollständig angeben, du kannst auch mit "as_use" die Konfiguration eines anderen Zustandsitems (z. B. aus einem Item unter autoblind.default.raffstore) "importieren".


                                Zitat von nEiMi Beitrag anzeigen
                                wenn ich jetzt aber as_laststate_item_name = ..state_name zur Default-Konfi unter [autoblind|default|raffstore] schreibe wird der State-Name nicht mehr aktualisiert.

                                Auch die as_laststate_item_id = ..state_id und den # Über diese Items soll die Statusermittlung ausgelöst werden
                                eval_trigger = autoblind.trigger.raffstore | ..manuell | ..lock | ..suspend würde ich gerne bei [autoblind|default|raffstore] definieren, jedoch klappt das anscheinend nicht
                                Aktiviere mal die erweiterte Protokollierung (https://github.com/i-am-offline/smar...rotokollierung) des AutoBlind Plugins und schaue mal in die Logs. Beim Restart von Smarthome.py wird die komplette Konfiguration des AUtoBlind Plugins initialisiert und in das jeweilige Log geschrieben. Dabei werden auch die relativen Items aufgelöst und eventuelle Fehler dabei im Protokoll vermerkt.

                                Grüße
                                offline

                                Kommentar

                                Lädt...
                                X