Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Guten Morgen Onkelandy,

    Zitat von Onkelandy Beitrag anzeigen
    Was mir noch nicht ganz klar ist.. warum lässt sich die suspend_time nicht durch ein item:autoblind.settings.suspendXYZ setzen? das mit dem get_variable scheint mir etwas inkonsequent..?
    Ich habe gerade eine neue Änderung in den develop-Zweig gepust, mit der as_suspend_time, as_startup_delay und as_repeat_actions auch den plugineigenen Datentyp "AbValue" unterstützen und man die Werte damit auch über items bzw. ein eval setzen kann.
    Für die weitere Verwendung beispielsweise in den Bedingungen (siehe unten) ist meiner Meinung nach der Zugriff über die Variable (unabhängig ob über "var:suspend_time" der "eval:autoblind_eval.get_variabe("suspend_time ")") geschickter. Das hat zwei Gründe:
    • Wenn bei einem Item keine separate "suspend_time" angegeben hat, so enthält die Variable den Wert der in der Plugin-Konfiguration definierten suspend_time_default.
    • Der Wert des Items könnte sich in der Zwischenzeit geändert haben. Die Variable enthält den Wert, mit der das Plugin aktuell arbeitet. Dieser Wert wird zwar auch bei Bedarf aktualisiert, aber sicher ist sicher ...

    Zitat von Onkelandy Beitrag anzeigen
    Konnte es nicht lassen. Mit dem Suspend funktioniert es, sofern man auch wirklich für jedes zu schaltende Objekt eigene Autoblind Einträge hat. Zumindest bei mir kam es sonst, dass sich das Manuell Item und Autoblind einen Kampf um Off/On gegeben haben. Ansonsten funzt das soweit..
    (...)

    Sehe ich das richtig, dass das Suspend_item sowie die suspend_watch Ansätze prinzipiell obsolet sind, wenn man's so macht wie oben, ja?
    Ja, wenn man das über eigene Zustände macht, braucht man keine as_suspend_item und as_suspend_watch Attribute.

    Zitat von Onkelandy Beitrag anzeigen
    Ausgebrochen aus dem Suspend-Modus wird dann auch einfach, indem das Manuell Item auf False gesetzt wird?
    Wenn du das "Manuell"-Item so aufbaust, wie mumpf es beschrieben hat, dann wechselt dieses Item bei jeder manuellen Aktion seinen Wert. Daher ist es ungeschickt, in der Suspend-Bedingung auf den Wert des Manuell-Items abzuprüfen. Sonst deaktiviert sich der Suspend-Zustand ggf. bei der zweiten Manuellen Aktion wieder. Ich habe das bei mir so gemacht, dass ich auch die Sperre über einen Zustand realisiert habe, der vor dem Suspend definiert ist. Dadurch wird der Suspend-Zustand beim Setzen der Sperre aufgehoben. Man kann es aber auch so machen, dass man weiterhin ein suspend-item hat, das den Suspend-Zustand anzeigt. Dieses Item setzt mal im Zustand "Suspend" auf 1, in allen anderen Zuständen auf 0. Im Bedingungsset "enter_stay" des Suspend-Zustands kann man nun prüfen, ob dieses Item noch auf "1" ist. So kann man den Suspend-Zustand durch setzten des Suspend-Items auf 0 wieder verlassen.

    Die Steuerung für meinen Test-Raffstore ist im Moment wie folgt aufgebaut:
    Default-Konfiguration:
    Code:
        [[default]]
            [[[Lock]]]
                type = foo
                name = Gesperrt
                as_set_suspend = False
                [[[[enter]]]]
                    as_value_lock = True
            [[[Suspend]]]
                type = foo
                name = Suspend
                as_set_suspend = True
                [[[[enter_manuell]]]]
                    as_value_trigger_source = eval: autoblind_eval.get_item("manuell",1)
                [[[[enter_stay]]]]
                    as_value_laststate = var:current.state_id                            
                    as_agemax_manuell = var:item.suspend_time
                    as_value_suspend = True
    AutoBlind-Konfiguration für den Raffstore:
    Code:
    [room]
    [[raffstore]]
    [[[seite]]]
    [[[[automatik]]]]
        [[[[[lock]]]]]
            type = bool
            knx_dpt = 1
            knx_send = x/x/x
            knx_listen = x/x/x
            visu_acl = rw
            cache = on
        [[[[[suspend]]]]]
            type = bool  
            knx_dpt = 1                                     
            knx_send = x/x/x
            knx_reply = x/x/x
            knx_listen = x/x/x
            visu_acl = rw
        [[[[[manuell]]]]]
            type = bool
            name = Manuelle Bedienung
            eval = not sh.room.raffstore.seite.automatik.manuell() if sh.return_plugin("AutoBlind").not_changed_by(caller, source, ["Init:*", "KNX:x.x.x"]) else sh.room.raffstore.seite.automatik.manuell()
            eval_trigger = room.raffstore.seite.aufab | room.raffstore.seite.step | room.raffstore.seite.hoehe | room.raffstore.seite.lamelle                    
        [[[[[autoblind]]]]]
            type = bool
            as_plugin = active
            eval_trigger = autoblind.trigger | room.raffstore.seite.automatik.manuell | room.raffstore.seite.automatik.lock | room.raffstore.seite.automatik.suspend
            as_item_manuell = room.raffstore.seite.automatik.manuell
            as_item_lock = room.raffstore.seite.automatik.lock
            as_item_suspend = room.raffstore.seite.automatik.suspend
            [[[[[[Lock]]]]]]
                as_use = autoblind.default.Lock
            [[[[[[Suspend]]]]]]
                as_use = autoblind.default.Suspend
            (...)


    Grüße
    offline

    Kommentar


      Hallo Offline,

      die Funktion "as_suspend_watch_VisuOnly = xy.Jalousie.Position:Visu" wird somit nicht weiter eingebaut?
      wie benütze ich stattdessen die Prüfung via "trigger_caller"?

      Gruß Ivan

      Kommentar


        Hallo Ivan,

        die Implementierung der Attribute "as_suspend_watch_*" ist wesentlich komplexer als das Aufbauen eines separaten Suspend-Zustands zumal man mit dem separaten Suspend bzw. Lock-Zustand noch flexibler ist, als mit zusätzlichen "as_suspend_watch_*" Attributen. Ich habe mich daher entschieden, dass diese Attribute nicht in den Develop-Zweig aufgenommen werden. Ich bin ehrlich gesagt auch am überlegen, die Lock- und Suspend-Funktionalität komplett aus dem Plugin rauszunehmen, so dass diese Funktionen grundsätzlich über entsprechende Zustände gebaut werden müssen. In den nächsten Tagen werde ich die Doku mal auf den aktuellsten Stand bringen und das Vorgehen zum Aufbau von eingenen Lock/Suspend-Zuständen dort einbauen. Es gibt da auch noch einige weitere "Zustandskonstruktionen" die ich in den letzten Tagen gebaut habe und die allgemein Interessant sein könnten.

        Für deine eigene Bedingung kannst du dich eigentlich recht eng an mein Beispiel halten.
        • Das Item "Manuell" musst du anpassen, bei eval_trigger müssen alle Items aufgeführt werden, die den Suspend Auslösen sollen.
        • Statt "not_changed_by" verwendest du "is_changed_by" und gibst nach caller und source noch
          Code:
          ["Visu:*"]
          mit


        Damit wird das Suspend nur ausgelöst, wenn ein Item über die Visu geändert wird.

        Grüße
        offline

        Kommentar


          Hallo offline,

          ich hab versucht das Manuel Item umzusetzen.

          "WARNING Eg.Kueche.Jalousie.Tuer.Manuell_Position Item Eg.Kueche.Jalousie.Tuer.Manuell_Position: problem evaluating not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("AutoBlind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position(): 'SmartHome' object has no attribute 'return_plugin' -- item.py:__run_eval:341
          "

          ​[[[[[Manuell_Position]]]]]
          type = bool
          name = Manuell Positionen angefahren
          eval = not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("autoblind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()
          eval_trigger = Eg.Kueche.Jalousie.Tuer.Position | Eg.Kueche.Jalousie.Tuer.Lamellenposition

          Gruß Ivan

          Ps. Leider fehlten bei mir heute im Forum die Button um den Text übersichtlicher zu formatieren..

          Kommentar


            Hi nochmals!
            Danke, offline für die Infos und va. das Setup. Ich habe noch ein kleines Problem mit dem Suspend Item...
            Problem 1: suspend_time über ein item scheint irgendwie doch nicht zu gehen. Hab den aktuellen develop Zweig gezogen, aber habe folgendes Verhalten...
            agemax from variable: item.suspend_time müsste doch bewirken, dass der Wert, der beim Item als "as_suspend_time" hinterlegt ist, genommen wird, ja? Theoretisch müsste ich dort ja auch ein Item statt eines Wertes definieren können, ja?
            Also as_suspend_time = item:autoblind.settings.suspend.bad

            Ich setze jetzt das Item in der CLI, der Wert wird auch so gespeichter (also ls funzt) up autoblind.settings.suspend.bad = 60
            Im Log steht aber als Max Wert immer 0 dort. Der Wert, der wohl beim Start von Smarthome.py im Item eingetragen war. Sollte der Wert nicht aktualisiert werden?
            Code:
            Age of 'manuell': min=None max=0 negate=None current=0.949329
            2015-12-30 02:18:01.866784                       to old -> not matching
            Problem 2: Kann es sein, dass man beim Manuell Objekt auf jeden Fall auch noch KNX:0.0.0 blockieren muss, bzw. die Adresse, über die Smarthome.py kommuniziert? Bei mir ist es nämlich so, dass wohl beim Triggern des Jalousieobjekt-Triggers offenbar auch Lamelle und Höhe geändert werden: knx: 0.0.0 set 2/0/35 to 100

            Und dann heißt es im Log: jalousien.eg.bad.automatik.manuell Item jalousien.eg.bad.automatik.manuell = True via Eval jalousien.eg.bad.hoehe None

            Danke für die Unterstützung.. langsam wird's bei mir

            ivande :
            Du musst noch folgende Zeilen in lib/smarthome.py ab Zeile 440 einfügen:
            Code:
                 def return_plugin(self, name):
                    for plugin in self._plugins:
                        if plugin.__class__.__name__ == name:
                            return plugin
                    return None

            Kommentar


              Hallo Ivan,

              Zitat von ivande Beitrag anzeigen
              "WARNING Eg.Kueche.Jalousie.Tuer.Manuell_Position Item Eg.Kueche.Jalousie.Tuer.Manuell_Position: problem evaluating not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.return_plugin("AutoBlind").is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position(): 'SmartHome' object has no attribute 'return_plugin' -- item.py:__run_eval:341
              "
              Die Methode "return_plugin" ist noch nicht standardmäßig in smarthome.py enthalten. Ich habe diesbezüglich den Pull-Request 181 eröffnet. Wenn du "return_plugin" nutzen willst, musst du die Änderungen aus dem Pull-Request noch in deine Version von smarthome.py übernehmen. Mir ist leider keine bessere Variante bekannt, um auf eine Funktion eines Plugins zuzugreifen.

              Grüße
              offline

              EDIT: gerade gesehen, dass Onkelandy das auch schon geantwortet hat. Kleine Korrektur dazu aber: Die zu ändernde Datei ist bin/smarthome.py (nicht lib/smarthome.py)
              Zuletzt geändert von offline; 30.12.2015, 04:23.

              Kommentar


                Hi @onkelandy,

                Zitat von Onkelandy Beitrag anzeigen
                Problem 1: suspend_time über ein item scheint irgendwie doch nicht zu gehen. Hab den aktuellen develop Zweig gezogen, aber habe folgendes Verhalten...
                agemax from variable: item.suspend_time müsste doch bewirken, dass der Wert, der beim Item als "as_suspend_time" hinterlegt ist, genommen wird, ja? Theoretisch müsste ich dort ja auch ein Item statt eines Wertes definieren können, ja?
                Also as_suspend_time = item:autoblind.settings.suspend.bad
                Das liegt daran, dass ich nach dem Umstellen von as_suspend_time auf den Datentyp AbValue (mit dem "item: ..." funktioniert) nicht daran gedacht habe, dass die Variable dann ja nicht nur beim Initialisieren, sondern auch vor jedem Update aktualisiert werden muss.

                Zitat von Onkelandy Beitrag anzeigen
                Problem 2: Kann es sein, dass man beim Manuell Objekt auf jeden Fall auch noch KNX:0.0.0 blockieren muss, bzw. die Adresse, über die Smarthome.py kommuniziert? Bei mir ist es nämlich so, dass wohl beim Triggern des Jalousieobjekt-Triggers offenbar auch Lamelle und Höhe geändert werden: knx: 0.0.0 set 2/0/35 to 100

                Und dann heißt es im Log: jalousien.eg.bad.automatik.manuell Item jalousien.eg.bad.automatik.manuell = True via Eval jalousien.eg.bad.hoehe None
                Das liegt vermutlich daran, dass nach einer Änderung in der update-Routine Aktionen, die vom Plugin ausgelöst wurden, nicht mehr ignoriert wurden.

                Ich habe gerade meine letzten Korrekturen auf GitHub gepusht, damit könnten deine Probleme beide behoben sein.

                Grüße
                offline

                P.S. Ich kämpfe mich gerade durch die Aktualisierung der Doku. Die deutsche Doku wird vermutlich noch dieses Jahr fertig

                Kommentar


                  Hallo zusammen,

                  ich habe herausgefunden, dass es eine Möglichkeit gibt, die Funktionen "is_changed_by" bzw. "not_changed_by" zu verwenden, ohne die Methode "return_plugin" in smarthome.py zu ergänzen.

                  Voraussetzung: Man hat kein Item "[autoblind]".

                  In diesem Fall ist sh.autoblind die Instanz des Autoblind-Plugins. Man kann dann statt
                  Code:
                  sh.return_plugin("AutoBlind")
                  einfach
                  Code:
                   sh.autoblind
                  verwenden.

                  ivande kann beispielsweise dann schreiben:
                  Code:
                  eval = not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.autoblind.is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()
                  Grüße
                  offline

                  Kommentar


                    Hallo zusammen,

                    eine Rohfassung der neuen deutschen Doku steht im Wiki auf GitHub

                    Grüße
                    offline
                    smarthome.plugin.autoblind - Automatic Object Control Plugin for smarthome.py (finite state machine)

                    Kommentar


                      Möchte gerade das neueste Update aus Github testen.. jetzt geht's aber grad ziemlich rund. Es wird fast kein Autoblind Item mehr erkannt, nach dem Initialisieren ist aus....
                      Code:
                      2015-12-30 10:46:21,495 ERROR    autoblind    Item jalousien.eg.bad.automatik.autoblind not found! -- __init__.py:run:98
                      Das betrifft einige "äleteren" Items, die nicht exakt so aufgebaut sind wie dein obiges Beispiel, aber vor dem letzten Update noch problemlos funktioniert haben.. Die angesprochenen Items gibt es auch effektiv. Komischerweise habe ich nach mehreren Restarts nur noch vereinzelt das Problem.. z.B. bei diesem Item:
                      Code:
                      2015-12-30 12:32:24,817 ERROR    autoblind    Item jalousien.suspendoff not found! -- __init__.py:run:98
                      Und das ist das Item, das bisher eigtl. funktioniert hat:
                      Code:
                      ['jalousien']
                      type = foo    
                          [['automatik_lock']]
                          type = bool
                          visu_acl = rw
                          enforce_updates = no
                          knx_dpt = 1
                          cache = True
                          knx_send = 4/5/0
                              [[['zeitschalter']]]
                                  type = dict
                                  uzsu_item = jalousien.automatik_lock
                                  cache = True
                                  visu_acl = rw
                      
                          [['suspendoff']]
                          type = foo
                          visu_acl = r
                          enforce_updates = true
                          cache = True
                      
                          as_plugin = active
                          name='Nachtmodus Jalousie'
                          as_lock_item =  jalousien.suspendoff.autostate_lock
                          as_laststate_item_id = jalousien.suspendoff.autostate_id
                          as_laststate_item_name = jalousien.suspendoff.autostate_name
                          as_item_autolock = jalousien.automatik_lock
                          as_item_j1 = eltern.j01.autostate_lock                
                          as_item_j2 = kind.j02.autostate_lock
                          as_item_j3 = buero.j03.autostate_lock
                          as_item_j4 = eg.bad.autostate_lock
                          as_item_j5 = osten.j5_wohnen.autostate_lock
                          as_item_j6 = osten.j6_stiegenhaus.autostate_lock
                          as_item_j7 = sueden.j7_stiegenhaus.autostate_lock
                          as_item_j8 = sueden.j8_schiebetuere.autostate_lock
                          as_item_j9 = sueden.j9_schiebefixteil.autostate_lock
                          as_item_j10 = westen.j10_fluegel.autostate_lock
                          as_item_j11 = westen.j11_essen.autostate_lock
                          as_item_j12 = westen.j12_kueche.autostate_lock
                          as_item_suspendoff = autoblind.jalousie_suspendoff
                          #as_repeat_actions = False
                          eval_trigger=jalousien.automatik_lock | autoblind.jalousietrigger | autoblind.jalousie_suspendoff
                                  [[[manuell]]]
                                      type = foo
                                      enforce_updates = true
                                      as_set_j1 = item:eltern.j01.autostate_lock                
                                      as_set_j2 = item:kind.j02.autostate_lock
                                      as_set_j3 = item:buero.j03.autostate_lock
                                      as_set_j4 = item:eg.bad.autostate_lock
                                      as_set_j5 = item:osten.j5_wohnen.autostate_lock
                                      as_set_j6 = item:osten.j6_stiegenhaus.autostate_lock
                                      as_set_j7 = item:sueden.j7_stiegenhaus.autostate_lock
                                      as_set_j8 = item:sueden.j8_schiebetuere.autostate_lock
                                      as_set_j9 = item:sueden.j9_schiebefixteil.autostate_lock
                                      as_set_j10 = item:westen.j10_fluegel.autostate_lock
                                      as_set_j11 = item:westen.j11_essen.autostate_lock
                                      as_set_j12 = item:westen.j12_kueche.autostate_lock
                                      [[[[enter]]]]
                                          type = foo
                                          as_value_suspendoff = 1
                                  [[[night]]]
                                      type = foo
                                      as_use = autoblind.default.night
                                      enforce_updates = true
                                      #as_set_autolock = value:0
                                      #as_set_suspendoff = byattr:jalousie_lock_off
                                      as_set_j1 = item:eltern.j01.autostate_lock                
                                      as_set_j2 = item:kind.j02.autostate_lock
                                      as_set_j3 = item:buero.j03.autostate_lock
                                      as_set_j4 = item:eg.bad.autostate_lock
                                      as_set_j5 = item:osten.j5_wohnen.autostate_lock
                                      as_set_j6 = item:osten.j6_stiegenhaus.autostate_lock
                                      as_set_j7 = item:sueden.j7_stiegenhaus.autostate_lock
                                      as_set_j8 = item:sueden.j8_schiebetuere.autostate_lock
                                      as_set_j9 = item:sueden.j9_schiebefixteil.autostate_lock
                                      as_set_j10 = item:westen.j10_fluegel.autostate_lock
                                      as_set_j11 = item:westen.j11_essen.autostate_lock
                                      as_set_j12 = item:westen.j12_kueche.autostate_lock
                                  [[[day]]]
                                      type = foo
                                      as_use = autoblind.default.day
                                      enforce_updates = true
                                  [[[autostate_lock]]]
                                      type = bool
                                      visu_acl = rw
                                      cache = on
                                      knx_dpt = 1
                                      knx_cache = 4/5/0
                                      enforce_updates = true
                                  [[[autostate_id]]]
                                      type = str
                                      visu_acl = r
                                      cache = on
                                  [[[autostate_name]]]
                                      type = str
                                      visu_acl = r
                      Ich würde tendenziell auch das lock_item und suspend_item ganz aufgeben und dein obiges Beispiel mit dem Manuell ins Wiki nehmen, damit Lock und Suspend als Stati abgebildet sind. Was mir auch noch nicht klar ist: das last_state_name und id Item wurden früher wohl ausgefiltert. Aktuell werden sie als Stati heran gezogen, wenn sie sich im autoblind-Item befinden. War das Absicht? Kannst du vielleicht mal ein aktuelles komplettes Item mit allen Angaben posten?
                      Zuletzt geändert von Onkelandy; 30.12.2015, 12:34.

                      Kommentar


                        Hi Onkelandy

                        die Fehlermeldung ist leider an ganz zentraler Stelle, so das man nicht erkennen kann, wo sie herkommt. Ich habe die Fehler-Routinen mal etwas "gesprächiger" gemacht. Die Änderung ist in den Develop-Zweig gepusht. Mit dieser Änderung sollte das Plugin genauer sagen, wo das Problem herkommt.

                        Das last_state_name und .._id nun als Status ausgewertet werden, liegt an einer der Änderungen, die ich gemacht habe. Früher lagen alle Items unterhalb des Objekt-Items und hatten statische Namen. Nachdem die Items über entsprechende Attribute beliebig angegeben werden konnten hatte ich zur Kompatibilität mit den alten Einstellungen diese Items bei den Zuständen herausgefiltert. Dieses Kompatibilitäts-Coding ist mir bei den Änderungen der letzten Tage in die Finger gefallen und ich habe es ersatzlos gelöscht, weil ich nicht damit gerechnet habe, das noch jemand so eine Konstruktion nutzt.

                        Hier mal der aktuelle Stand des Beispiels, das ich für die Überarbeitung der Doku vorbereite, das sollte so ziemlich komplett sein:

                        Defaults:
                        Code:
                        [abplugin]
                            [[trigger]]
                                [[[raffstore]]]
                                    type = bool
                                    enforce_updates = yes
                                    cycle = 300 = 1
                                    
                            [[default]]    
                                [[[raffstore]]]
                                    as_item_brightness = beispiel.wetterstation.helligkeit
                                    as_item_temperature = beispiel.wetterstation.temperatur
                                    as_mindelta_hoehe = 10
                                    as_mindelta_lamelle = 5
                        
                                    [[[[Lock]]]]
                                        type = foo
                                        name = Manuell gesperrt
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_value_lock = True
                                    [[[[Suspend]]]]
                                        type = foo
                                        name = Ausgesetzt
                                        as_set_suspend = True
                                        [[[[[enter_manuell]]]]]
                                            as_value_trigger_source = eval:    autoblind_eval.get_item("manuell",1)
                                        [[[[[enter_stay]]]]]
                                            as_value_laststate = var:current.state_id
                                            as_agemax_manuell = var:item.suspend_time
                                            as_value_suspend = True
                                    [[[[Nacht]]]]
                                        type = foo
                                        name = Nacht
                                        as_set_hoehe = value:100
                                        as_set_lamelle = value:0
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_min_time = 08:00
                                            as_max_time = 16:00
                                            as_negate_time = True
                                            as_max_brightness = 90
                        
                                    [[[[Morgens]]]]
                                        type = foo
                                        name = Dämmerung Morgens
                                        as_set_hoehe = value:100
                                        as_set_lamelle = value:25
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_min_brightness = 90
                                            as_max_brightness = 330
                                            as_min_time = 00:00
                                            as_max_time = 12:00
                        
                                    [[[[Abends]]]]
                                        type = foo
                                        name = Dämmerung Abends
                                        as_set_hoehe = value:100
                                        as_set_lamelle = value:75
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_min_brightness = 90
                                            as_max_brightness = 330
                                            as_min_time = 12:00
                                            as_max_time = 23:59
                        
                                    [[[[Nachfuehren_Seite_Eins]]]]
                                        type = foo
                                        name = Tag (nachführen)
                                        as_set_hoehe = value:100
                                        as_set_lamelle = eval:autoblind_eval.sun_tracking()
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_min_brightness = 43000
                                            as_min_sun_altitude = 18
                                            as_min_sun_azimut = 130
                                            as_max_sun_azimut = 270
                                            as_min_temperature = 22
                                        [[[[[leave_todark]]]]]
                                            as_max_brightness = 30000
                                            as_min_delay = 1200
                                        [[[[[leave_sun_azimut]]]]]
                                            as_min_sun_azimut = 130
                                            as_max_sun_azimut = 270
                                            as_negate_sun_azimut = True
                                        [[[[[leave_sun_altitude]]]]]
                                            as_max_sun_altitude = 17
                                            
                                    [[[[Tag]]]]
                                        type = foo
                                        name = Tag (statisch)
                                        as_set_hoehe = value:0
                                        as_set_lamelle = value:100
                                        as_set_suspend = False
                                        [[[[[enter]]]]]
                                            as_min_time = 06:30
                                            as_max_time = 21:30
                                            as_min_brightness = 220
                        Item:
                        Code:
                        [beispiel]
                            [[raffstore]]
                                [[[eins]]]
                                    name = Raffstore Beispiel Eins
                                    [[[[aufab]]]]
                                        type = bool
                                        visu_acl = rw
                                        enforce_updates = on
                                    [[[[step]]]]
                                        type = bool
                                        visu_acl = rw
                                        enforce_updates = on
                                    [[[[hoehe]]]]
                                        type = num
                                        cache = on
                                        visu_acl = rw
                                    [[[[lamelle]]]]
                                        type = num
                                        cache = on
                                        visu_acl = rw
                                    [[[[komfortsperren]]]]
                                        type = bool
                                        cache = on
                                        visu_acl = rw
                                        enforce_updates = on
                                    [[[[automatik]]]]
                                        [[[[[lock]]]]]
                                            type = bool
                                            visu_acl = rw
                                            cache = on
                                            enforce_updates = yes
                                        [[[[[suspend]]]]]
                                            type = bool
                                            visu_acl = r
                                        [[[[[state_id]]]]]
                                            type = str
                                            visu_acl = r
                                            cache = on
                                        [[[[[state_name]]]]]
                                            type = str
                                            visu_acl = r
                                            cache = on
                                        [[[[[manuell]]]]]
                                            type = bool
                                            name = Manuelle Bedienung
                                            eval = not sh.beispiel.raffstore.eins.automatik.manuell() if sh.autoblind.not_changed_by(caller, source, ["Init:*", "KNX:y.y.y"]) else sh.beispiel.raffstore.eins.automatik.manuell()
                                            eval_trigger = beispiel.raffstore.gesamt.aufab | beispiel.raffstore.gesamt.step | beispiel.raffstore.eins.aufab | beispiel.raffstore.eins.step | beispiel.raffstore.eins.hoehe | beispiel.raffstore.eins.lamelle
                                        [[[[[rules]]]]]
                                            type = bool
                                            as_plugin = active
                                            eval_trigger = abplugin.trigger.raffstore | beispiel.steckdosen | beispiel.licht.decke | beispiel.raffstore.eins.automatik.manuell | beispiel.raffstore.eins.automatik.lock | beispiel.raffstore.eins.automatik.suspend
                                            as_laststate_item_id = beispiel.raffstore.eins.automatik.state_id
                                            as_laststate_item_name = beispiel.raffstore.eins.automatik.state_name
                                            as_item_anwesend = beispiel.steckdosen
                                            as_item_hoehe = beispiel.raffstore.eins.hoehe
                                            as_item_lamelle = beispiel.raffstore.eins.lamelle
                                            as_item_manuell = beispiel.raffstore.eins.automatik.manuell
                                            as_item_lock = beispiel.raffstore.eins.automatik.lock
                                            as_item_suspend = beispiel.raffstore.eins.automatik.suspend
                                            [[[[[[Lock]]]]]]
                                                as_use = abplugin.default.raffstore.Lock
                                            [[[[[[Suspend]]]]]]
                                                as_name = eval:autoblind_eval.get_suspend_text("beispiel.raffstore.eins.automatik.suspend")
                                                as_use = abplugin.default.raffstore.Suspend
                                            [[[[[[Nacht]]]]]]
                                                as_use = abplugin.default.raffstore.Nacht
                                            [[[[[[Morgens]]]]]]
                                                as_use = abplugin.default.raffstore.Morgens
                                            [[[[[[Abends]]]]]]
                                                as_use = abplugin.default.raffstore.Abends
                                            [[[[[[Nachfuehren]]]]]]
                                                as_use = abplugin.default.raffstore.Nachfuehren_Seite_Eins
                                                [[[[[[[enter_anwesend]]]]]]]
                                                    as_min_sun_altitude = 20
                                                    as_min_sun_azimut = 130
                                                    as_max_sun_azimut = 240
                                                    as_min_brightness = 30000
                                                    as_value_anwesend = True
                                                [[[[[[[leave_anwesend]]]]]]]
                                                    as_max_brightness = 15000
                                                    as_value_anwesend = True
                                                    as_min_delay = 1200
                                                [[[[[[[leave_todark]]]]]]]
                                                    as_value_anwesend = False
                                                [[[[[[[leave_sun_azimut]]]]]]]
                                                    as_min_sun_azimut = 130
                                                    as_max_sun_azimut = 240
                                                    as_negate_sun_azimit = True
                                            [[[[[[Tag]]]]]]
                                                as_use = abplugin.default.raffstore.Tag

                        Grüße
                        offline

                        Kommentar




                          Hi Offline!

                          Vielen Dank für das Posting und das Update. Die Fehlermeldungen sind jetzt ein bisschen extrem, aber zumindest ein bisschen aussagekräftiger as_set_schalten = item:steckdosen.autoblind.settings.statusA.Steckdo seX Sobald ein Item, das für eine Condition gebraucht wird, fehlt, geht die Post ab - gerade, wenn mehrere Items auf den Status verweisen

                          Ich hatte wohl zum Debuggen ein paar Items zu viel deaktiviert.. jetzt klappt alles.

                          Die Funktionsweise mit den Lock und Suspend Stati ist absolut genial, danke hier va. an mumpf . Der Umbau nimmt ein bisschen Zeit in Anspruch, erfüllt aber nun alle Wünsche.

                          Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.

                          Ich habe das ziemlich kompliziert gelöst, und zwar mit einem zusätzlichen entsperren-Item und Zustand. Wird das Item gesetzt, wird Autoblind für das Licht nochmals durchlaufen, damit ein neuer Zustand gesucht werden kann. Irgendwie scheint mir mein Ansatz komisch, gäbe es da nicht ne andere Variante? Cool wäre, wenn man beim Leave noch Items ändern könnte, hehe Aber vielleicht gibt es ja auch so schon einen besseren Ansatz.
                          Code:
                                      [[autoblind]]
                                      [[[Taster]]]
                                          type = foo
                                          name = Manuell
                                          enforce_updates = false  
                                          as_set_sollwert = value:240
                                          as_set_sperren = value:1            
                                          [[[[enter]]]]    
                                              type = foo
                                              as_value_Taster = 1
                                              as_agemax_Taster = item:autoblind.settings.light.suspend.bad_spiegel                    
                                      [[[entsperren]]]
                                          type = foo
                                          name = Manuell entsperren
                                          enforce_updates = false  
                                          as_set_sperren = value:0                  
                                          as_set_Taster = value:0
                                          as_set_entsperren = value:1
                                          as_delay_entsperren = 1
                                          [[[[enter]]]]    
                                              type = foo
                                              as_value_laststate = bad.spiegel.manuell
                          Eine weitere Frage/Idee... wie konfiguriert man das Ganze eigtl. am besten, wenn man den Wert, der gesetzt werden soll, über ein entsprechendes Item definieren möchte? Also konkret z.B. folgende Autoblindkonfiguration:

                          Code:
                          [steckdosen]
                              [[autoblind]]
                                  [[[settings]]]
                                      [[[[ status A ]]]]
                                          [[[[[Steckdose X]]]]]
                                              type = num
                                              visu_acl = rw
                                          [[[[[Steckdose Y]]]]]
                                              type = num
                                              visu_acl = rw
                          
                                      [[[[ status B ]]]]
                                          [[[[[Steckdose X]]]]]
                                              type = num
                                              visu_acl = rw
                                          [[[[[Steckdose Y]]]]]
                                              type = num
                                              visu_acl = rw
                          
                                  [[[default]]]
                                      [[[[ status A ]]]]
                                          name = Status A
                          [COLOR=#FF0000][B]                as_set_schalten = eval:steckdosen.autoblind.settings.status A.{ITEM} [/B][/COLOR]
                                          [[[[['enter']]]]]
                                              type = foo
                                              .....
                          Und hier die Items, die auf den entsprechend in settings definierten Wert geschalten werden soll:
                          Code:
                          [steckdosen]
                              [[Steckdose X]]
                                  as_plugin = active
                                  as_item_schalten = steckdosen.Steckdose X.SA
                                  .....
                                  [[[rules]]]
                                     [[[[Status A]]]]
                                     as_use = steckdosen.autoblind.default.status A
                                     [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusA.SteckdoseX[/B][/COLOR]
                                     [[[[Status B]]]]
                                     as_use = steckdosen.autoblind.default.status B
                                     [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusB.SteckdoseX[/B][/COLOR]
                                  [[[SA]]]
                                     knx_send blabla....
                          
                              [[Steckdose Y]]
                                  as_plugin = active
                                  as_item_schalten = steckdosen.Steckdose Y.SA
                                  .....
                                  [[[rules]]]
                                     [[[[Status A]]]]
                                     as_use = steckdosen.autoblind.default.status A
                                     [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusA.SteckdoseY[/B][/COLOR]
                                     [[[[Status B]]]]
                                     as_use = steckdosen.autoblind.default.status B
                                     [COLOR=#0000FF][B]as_set_schalten = item:steckdosen.autoblind.settings.statusB.SteckdoseY[/B][/COLOR]
                                  [[[SA]]]
                                     knx_send blabla....
                          Es geht um die rote Zeile.. ist das derzeit schon irgendwie möglich? Aktuell löse ich das durch die blau eingezeichneten Einträge.. Das ist aber halt bei vielen Items bezüglich Copy/Paste nicht wirklich so angenehm, da es immer wieder angepasst werden muss.


                          Und noch eine letzte Frage.. hat nie jemand Probleme mit dem Stellen der Lamellen nach dem Anfahren einer Jalousieposition? Ich habe meinen Aktor so eingestellt, dass nach dem Anfahren einer Position die Lamellen verstellt werden. Das scheint mit generell auch sinnvoll. Aber ab und an passiert es doch, dass Autoblind zwar die Lamellen auf 100 stellen sollte, komischerweise die Lamellen aber aufgeklappt, also auf Wert 0 gestellt werden.
                          Zuletzt geändert von Onkelandy; 01.01.2016, 13:32.

                          Kommentar


                            Hi und ein frohes neues Jahr!

                            Zitat von Onkelandy Beitrag anzeigen
                            Die Funktionsweise mit den Lock und Suspend Stati ist absolut genial, danke hier va. an mumpf. Der Umbau nimmt ein bisschen Zeit in Anspruch, erfüllt aber nun alle Wünsche.
                            Vielen Dank für die namentliche Erwähnung, aber der Dank gebührt ganz klar offline, der eine Idee ganz toll umgesetzt hat. Ich habe ja sowieso schon vorher versucht, lock und suspend über Zustände abzubilden (allerdings mit einigen Hilfsitems), jetzt geht es wahrscheinlich wesentlich komfortabler - leider kann ich nicht testen, bin im Urlaub...

                            Zitat von Onkelandy Beitrag anzeigen
                            Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.
                            Ich habe das ziemlich kompliziert gelöst, und zwar mit einem zusätzlichen entsperren-Item und Zustand. Wird das Item gesetzt, wird Autoblind für das Licht nochmals durchlaufen, damit ein neuer Zustand gesucht werden kann.
                            Vielleicht übersehe ich ja etwas, aber Dein "Taster"-Zustand hängt doch nur vom Taster und vom Alter des Zustandes ab. Warum dann ein entsperren? Sobald der Taster aus ist bzw. das Alter abläuft, wird doch sowieso ein neuer Zustand gesucht. Oder ist es nur, um den Status des Tasters zu aktualisieren? Das passiert doch wahrscheinlich direkt über den Aktorstatus, oder? Aber wahrscheinlich sehe ich irgendwas nicht...

                            Zitat von Onkelandy Beitrag anzeigen
                            Cool wäre, wenn man beim Leave noch Items ändern könnte...
                            Ich mach mich vielleicht unbeliebt, aber "leave" finde ich ähnlich "schlimm" wie das alte suspend und lock: Man wird auf einem Zustand festgehalten und kommt nicht raus, selbst wenn ein "wichtigerer" Zustand eigentlich was tun sollte. Kann man nur lösen, wenn man dann in alle untergeordneten "leave" weitere "leave"-Bedingungen zufügt. Insofern bin ich nicht dafür, dass noch mehr Funktionalität ins leave gesteckt wird. Du kannst ein leave auch durch ein enter mit der negativen leave-Bedingung und as_value_laststate = "aktueller Zustand" abbilden... oder als Folgezustand, bei dem Du mit as_set wieder alles setzen kannst. Das ist ungefähr Dein "entsperren" Ansatz, der meiner Meinung nach flexibler als ein leave ist!

                            Zitat von Onkelandy Beitrag anzeigen
                            Es geht um die rote Zeile.. ist das derzeit schon irgendwie möglich? Aktuell löse ich das durch die blau eingezeichneten Einträge.. Das ist aber halt bei vielen Items bezüglich Copy/Paste nicht wirklich so angenehm, da es immer wieder angepasst werden muss.
                            Ich hab mir für solche Sachen einen Generator gebastelt, der relative Adressierung unterstützt und somit (bei geeigneter Item-Struktur) solche Sachen komfortabel abdeckt... Ist aber Windows only.
                            Ich weiß nicht, ob es autoblind gut tut, noch eine weitere Metasprache da reinzubringen, ist jetzt schon recht komplex, aber offline hat da immer gute ideen...

                            Gruß, Waldemar

                            OpenKNX www.openknx.de

                            Kommentar


                              Hallo zusammen und auch von mir ein frohes neues Jahr,

                              Zitat von Onkelandy Beitrag anzeigen
                              Die Fehlermeldungen sind jetzt ein bisschen extrem, aber zumindest ein bisschen aussagekräftiger as_set_schalten = item:steckdosen.autoblind.settings.statusA.Steckdo seX Sobald ein Item, das für eine Condition gebraucht wird, fehlt, geht die Post ab - gerade, wenn mehrere Items auf den Status verweisen

                              Ich hatte wohl zum Debuggen ein paar Items zu viel deaktiviert.. jetzt klappt alles.
                              ich habe im letzten Jahr am Logging noch etwas gebaut und auch den Aufbau eines "Manuell"-Items noch weiter vereinfacht. Push auf GitHub ist gerade erfolgt. Das Logging sollte nun nicht mehr ganz so extrem sein, wie von Onkelandy beschrieben, aber es kann durchaus vorkommen dass ein einzelnes fehlendes Item mehrfach gemeldet wird, wenn es z. B. von mehreren Zustände/Aktionen verwendet wird.

                              Für das Manuell-Item muss man nun nicht mehr von Hand ein eval-Bedingung bauen, das Plugin prüft, ob Items bestimmte Attribute haben und fügt dann solchen Items automatisch eine passende Eval-Bedingung ein.
                              Bei
                              Code:
                              as_manual_invert = <Beliebiger Wert>
                              überschreibt das Plugin eine eventuell vorhandene Eval-Bedingung mit "not sh.<Item-Id>()". Gut, das könnte man auch problemlos noch von Hand machen. Interessant wird es, wenn bestimmte Caller/Sources ignoriert werden sollen bzw. nur auf bestimmte Caller/Sources gehört werden soll. Für diesen Fall können die Attribute
                              Code:
                              as_manuell_exclude = <caller1>:<source1> | <caller2>:<source2> | ... | <callerN>:<sourceN>
                              bzw.
                              Code:
                              as_manuell_include = <caller1>:<source1> | <caller2>:<source2> | ... | <callerN>:<sourceN>
                              verwendet werden. Auch hier wird im wesentlichen die eval-Bedingung des Items mit einem Funktionsaufruf auf eine Prüfunktion des AutoBlind-Plugins überschrieben. Die Prüffunktion prüft dann wie die Funktionen "is_called_by" bzw. "not_called_by" den ursprünglichen Caller/die ursprüngliche Source. Man spart sich hier, selbst eine komplexe eval-Bedingung bauen zu müssen.

                              Zitat von Onkelandy Beitrag anzeigen
                              Ich hab jetzt noch ne Frage.. und zwar möchte ich zB einen Zustand definieren, der konkret von einem Taster abhängt. Ist der Taster aktiv, soll ein Licht in einer bestimmten Stärke für eine bestimmte Maximalzeit eingeschaltet werden. Wird der Taster vor Ablauf der Zeit wieder deaktiviert, soll sich das Licht den nächstbesten Zustand suchen.
                              Ich denke, so komplex brauchst du das garnicht. Du baust einen Zustand, der als Enter-Bedingung folgendes enthält:
                              Code:
                              as_value_Taster = True
                              as_maxage_Taster = (Zeit, die das Licht eingeschaltet sein soll)
                              Den Zustand baust du weit oben bei den Zuständen ein, als Aktion schaltest du das Licht ein, gibt die Helligkeit mit, etc.
                              Bei den anderen Zuständen ergänzt du
                              Code:
                              as_set_Taster = False
                              und ergänzt eine Aktion, die das Licht ausschaltet. Das dürfte es dann auch schon gewesen sein.

                              Zitat von Onkelandy Beitrag anzeigen
                              Eine weitere Frage/Idee... wie konfiguriert man das Ganze eigtl. am besten, wenn man den Wert, der gesetzt werden soll, über ein entsprechendes Item definieren möchte? Also konkret z.B. folgende Autoblindkonfiguration: (...)
                              Ich glaube, das ist ein Fall für as_byattr_<Name>. Du ergänzt bei allen Steckdosen für jeden Zustand den du hast jeweils ein Attribut z. B. "Steckdosen_StatusA", ""Steckdosen_StatusB", ""Steckdosen_StatusC", .... Der Wert dieses Attribut ist der Wert, den das Item im jeweiligen Zustand haben soll.

                              z. B.
                              Code:
                              [steckdosen]
                                  [[eins]]
                                      type = bool
                                      Steckdose_StatusA = True
                                      Steckdose_StatusB = False
                                      Steckdose StatusC = True
                                  [[zwei]]
                                      type = bool
                                      Steckdose_StatusA = False
                                      Steckdose_StatusB = False
                                      Steckdose StatusC = True
                                  [[drei]]
                                      type = bool
                                      Steckdose_StatusA = True
                                      Steckdose_StatusB = True
                                      Steckdose StatusC = False
                                  
                              
                                  [[rules]]
                                      as_plugin = active        
                                      .....
                                  [[[[Status A]]]]
                                      ...
                                      as_byattr_steckdosen = Steckdose_StatusA
                                  [[[[Status B]]]]
                                      ...
                                      as_byattr_steckdosen = Steckdose_StatusB
                                  [[[[Status C]]]]
                                      ...
                                      as_byattr_steckdosen = Steckdose_StatusC
                              Wenn nun z. B. der Zustand B aktiv wird, werden alle Items, die das Attribut "Steckdose_StatusB" haben, auf den Wert gesetzt, den dieses Attribut beim jeweiligen Item hat.

                              Zitat von Onkelandy Beitrag anzeigen
                              Und noch eine letzte Frage.. hat nie jemand Probleme mit dem Stellen der Lamellen nach dem Anfahren einer Jalousieposition? Ich habe meinen Aktor so eingestellt, dass nach dem Anfahren einer Position die Lamellen verstellt werden. Das scheint mit generell auch sinnvoll. Aber ab und an passiert es doch, dass Autoblind zwar die Lamellen auf 100 stellen sollte, komischerweise die Lamellen aber aufgeklappt, also auf Wert 0 gestellt werden.
                              Das habe ich auch manchmal. Im Log habe ich gesehen, dass die tatsächliche Lamellenposition in diesem Fall nicht mit dem Wert des Lamellenpositionsitem übereinstimmt. Die Lamellenposition ist beispielsweise 0, das Item hat aber immer noch den Wert 100. Wenn dann ein "Mindelta" angegeben ist, dann führt das dazu, dass das Plugin keinen neuen Lamellenwert sendet, da er ja lt. dem Item bereits stimmt. DIe Ursache des Problems liegt daher (zumindest bei mir) daran, dass die Rückmeldung der Lamellenposition nicht in smarthome.py angekommt. Die Ursache kenne ich allerdings (noch) nicht.

                              Zitat von mumpf Beitrag anzeigen
                              Ich mach mich vielleicht unbeliebt, aber "leave" finde ich ähnlich "schlimm" wie das alte suspend und lock: Man wird auf einem Zustand festgehalten und kommt nicht raus, selbst wenn ein "wichtigerer" Zustand eigentlich was tun sollte. Kann man nur lösen, wenn man dann in alle untergeordneten "leave" weitere "leave"-Bedingungen zufügt. Insofern bin ich nicht dafür, dass noch mehr Funktionalität ins leave gesteckt wird. Du kannst ein leave auch durch ein enter mit der negativen leave-Bedingung und as_value_laststate = "aktueller Zustand" abbilden... oder als Folgezustand, bei dem Du mit as_set wieder alles setzen kannst. Das ist ungefähr Dein "entsperren" Ansatz, der meiner Meinung nach flexibler als ein leave ist!
                              Auf jeden Fall muss man sich ganz genau überlegen, inwieweit man Leave-Bedingungsgruppen noch nutzt, wenn man Lock bzw. Suspend über Items nutzt, denn solange keine der Leave-Bedingungsgruppen eines Items erfüllt ist, kommt man auch in kein Lock bzw. Suspend rein. Ich bin wie gesagt dabei, die Beispiele in der Doku zu überarbeiten. Dort werde ich das auch entsprechend umbauen.

                              Grüße
                              offline

                              Kommentar


                                Hallo zusammen!

                                Danke für die Rückmeldungen und natürlich euch auch noch ein gutes Neues!!!!

                                Das mit dem Taster-Status weiß ich jetzt auch nicht mehr, warum ich das so angegangen bin Die Lösung wäre ja eigtl. simpel. Wobei ich das bei anderen Tastern auch schon anders gelöst hatte. Nämlich mit einer Ausschaltlogik, die die Sekunden/Minuten aus einem Item ausliest und va. bei Ablauf der Zeit wieder das autoblind-Item triggert. Das hat also den Vorteil, dass man unabhängig vom Cycle ist.

                                Was das by_attr anlangt.... Wenn ich das Attribut mit einem item festlegen will, gibt es die Fehlermeldung, dass das Item kein bool sei. Ich schätze also, dass dieses Attribut noch nicht über item, eval, etc. gesetzt werden kann? Wollte gerade auch mal probieren, ob man nicht die ganzen Attribute im Autoblind-Item nicht doch auch per eval setzen kann. Also zB: as_item_suspend = eval:autoblind_eval.get_item("suspend", 1)
                                Das würde die Sache gerade für Neulinge bzw. bei einem größeren Update Das Copy/Paste extrem erleichtern... Oder spricht da was konkret dagegen? Irgendwie gibt es die Funktionalität ja schon..

                                Aber eine generelle Verständnisfrage zu dem by_attr... Ist es nicht so, dass dann immer ALLE Steckdosen, die eben das gleiche Attribut teilen, auf den Wert gesetzt werden, unabhängig davon, in welchem Zustand sich diese befinden? Das könnte ja dazu führen, dass Items geändert werden, ohne dass sie im entsprechend passenden Zustand sind, oder nicht? Also angenommen, zwei Items sollen mit unterschiedlichen Bedingungen in einen konkreten Zustand (zB ein Licht geht bei Helligkeit <300 Lux in den "Abendmodus", wohingegen ein anderes erst bei 100 Lux in den gleichen Zustand wechselt), wird doch die Schaltaktion für die 2. Lampe schon ausgeführt, sobald die 1. Lampe im entsprechenden Zustand ist. Oder bringe ich da was durcheinander?

                                Die neue Möglichkeit, das Manuell Item zu definieren, ist sehr schön. Evtl. die Attribute noch einheitlich englisch oder deutsch benennen Konnte das soeben mit etlichen Items erfolgreich testen, schön!

                                Wegen der Jalousie / Lamellenproblematik: Heißt das, wenn man das min_delta weg lässt, dürfte das Problem weniger vorkommen? Ich werde das die nächsten Tage mal testen und berichten...

                                Gibt es eigtl. eine Möglichkeit, die Endzeit des Suspends auszulesen? In der Doku steht was, aber mit ist nicht ganz klar, wie das mit der neuen Zustands-Lösung des Suspend-Items umgesetzt werden kann. Kann die Funktion insert_suspend_time irgendwie so eingesetzt werden, dass der Text in ein Item geschrieben wird (am liebsten in ein eigenes, unabhängig vom eigtl. Suspend-Item, um bezügl. der Bezeichnung flexibel zu bleiben..)? Hätte vermutet, ich kann zB im Suspend-Zustand einfach die Funktion per eval aufrufen, hab ich aber nicht hinbekommen. Ist jetzt nicht sonderlich wichtig, aber vielleicht gibt's da eh schon eine Lösung und ich versteh sie nur nicht.. hehe.

                                Merci und gute Nacht!

                                Kommentar

                                Lädt...
                                X