Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Zitat von Bonze Beitrag anzeigen
    irgendwie bin ich wohl doch zu blöde... hab mal das Beispiel kopiert und angepasst:
    um einfach den rolladen auf zeit abzufahren(erstmal)


    [...]

    geht das überhaupt so ? oder hab ich etwas vergessen?
    Da sind einige Fehler in deiner Konfiguration. Aktiviere mal die erweiterte Protokollierung (https://github.com/i-am-offline/smar...rotokollierung) und starte smarthome.py neu. In den Logs stehen dann die Fehler, außerdem kannst du da genau sehen wie das Plugin mit deiner Konfiguration arbeitet.

    Prüfe bitte sicherheitshalber, dass du die Plugin-Version aus dem develop-Zweig aus GitHub verwendest. Auf diese Version bezieht sich die Doku im Wiki auf GitHub. Sie weicht mittlerweile erheblich von der Version im master-Zweig ab.

    Zitat von Bonze Beitrag anzeigen

    mir kommt vor, als wäre das ziemlich viel code....
    In deiner Konfiguration hast du viele Items definiert, die nicht in Bedingungen/Aktionen verwendet werden. Die kannst du rauswerfen, dann wird es weniger ...

    Bei deinen Default-Bedingungen verwendest du z. B.
    Code:
                        as_min_time = 08:00
                        as_max_time = 16:00
                        as_value_time = 19:30
                        as_negate_time = True
    Das macht so nicht wirklich Sinn. Die Prüfungen auf den Wert ("value") und auf einen Bereich ("min"/"max") schließen sich gegenseitig aus. Wenn beides angegeben ist prüft das Plugin nur den Wert, der Bereich wird ignoriert. Für die "time"-Bedingung ist eine Prüfung auf den Wert jedoch nicht wirklich sinnvoll, denn diese Bedingung ist dann nur exakt zu dem angegebenen Zeitpunkt erfüllt bzw. in deinem Fall nicht erfüllt, da du noch ein "negate" gesetzt hast. Mit dieser Bedingung wirst du IMMER in diesem Zustand landen, es sei denn, die Zustandsermittlung läuft zufälligerweise exakt um 19:30 Uhr ...

    Grüße
    offline

    Kommentar


      jetzt funktioniert es,
      was mir aufgefallen ist:
      falls smarthome gestartet wird, geht das Autoblind plugin in den state modus, egal ob eine Bedingung zutrifft, erst bei einer nochmaligen Änderungen des Zustands wechselt es in den richtigen Modus.
      z.B. wird um 3 uhr gestaretet, dann geht es in den state modus,
      4Uhr ist eine andere Funktion definiert -> dann wechselt es in diese Funktion

      Kommentar


        Was genau ist der "State Modus"?
        @offline: Cool, dass du das Problem reproduzieren konntest.. freu mich schon auf den Fix

        Kommentar


          Hi Onkelandy

          meine Änderung hat nun zwei Tage lang funktioniert. Ich habe sie daher eben in den Develop-Zweig auf GitHub gepusht. Es wird nun eine Sperre gesetzt, während die Eval-Funktion eines Manuell-Items ausgewertet wird. Dadurch wird eine parallele Auswertung verhindert.

          Es gibt auch noch eine Änderung am Logging für die eval-Funktion. Diese passiert nicht mehr automatisch ins normale smarthome.py log. Man kann nun beim Manuell-Item über das Attribut "as_manual_logitem" eine Item-Id angeben. Diese Item-Id wird dann als Basis für die Logdatei im erweiterten Logging des AutoBlind-Plugins verwendet. Wenn das Attribut nicht angegeben ist, findet kein Logging statt.

          Grüße
          offline

          Kommentar


            Hi offline
            Hmmm, kapiere das mit der Item ID nicht.. was muss hier angegeben werden? Ich bekomme im Log die Fehlermeldung:
            Code:
            problem evaluating sh.autoblind_plugin_functions.manual_item_update_eval('screens.sueden_s2.automatik.manuell', caller, source): 'NoneType' object has no attribute 'id'
            Das Verhalten ist bei mir leider nach wie vor dasselbe.. Jalousie nach unten fahren -> Suspend. Jalousie nach oben (0) -> nix

            Kommentar


              Hi Onkelandy

              in "as_manual_logitem" muss die Id eines (existierenden) Items rein. Hintergrund ist, das das erweiterte Log so arbeitet, dass die Logs immer einem Item zugeordnet sind. Über "as_manual_logitem" wird angegeben, in das Log welches Items die Einträge beim Auswerten der eval-Funktion geschrieben werden. Du kannst hier z. B. das manuell-Item angeben, dann wird ein separates Log geschrieben. Du kannst aber z. B. auch das zugehörige AutoBlind-Objektitem angeben, dann landen die Logeinträge zur eval-Funktion mit in diesem Log.

              Der Fehler, den du in deinen letzten Post kopiert hast, kommt daher, weil ich nicht geprüft habe, ob das als as_manual_logitem angegebene Item auch existiert. Ich habe das korrigiert.

              Wenn die letzten Änderungen bei dir drin sind, stelle die Situation bitte nochmal nach und schicke mir wieder die Logs.

              Grüße
              offline

              Kommentar


                welche funktion hat das Suspend item ?
                wird dies direkt bei den Items definiert ? oder gibts eine möglichkeit dies in der default allgemein zu definieren?

                ich hab versucht mal in der eval
                as_name = eval:autoblind_eval.insert_suspend_time("beispiel. raffstore.automatik.suspend")
                mit variablen zu arbeiten, das wollte aber nicht wirklich funktionieren
                Zuletzt geändert von Bonze; 11.02.2016, 18:11.

                Kommentar


                  Hallo zusammen,

                  muss auch mal wieder euren Rat konsultieren.
                  Ich versuche mich gerade an der realtiven Item Referenzierung mit get_item.

                  Default Items:
                  Code:
                  [EG]
                      [[Autoblind]]
                          [[[Default]]]
                              as_item_autoshade = EG.Zentral.Rollo.Auto_shade
                              as_item_daynight = EG.Zentral.Status.Nacht_Tag
                              as_item_precenceBad = EG.Bad.Praesenz.Anwesend
                              as_item_precence = EG.Zentral.Praesenz.Anwesenheit
                              [[[[lock]]]]
                                  type = foo
                                  name = Automatik manuell gesperrt
                                  #suspend-Item manuell zurueck setzen
                                  as_set_suspend = False
                                  [[[[[enter]]]]]
                                      as_value_lock = True
                              [[[[suspend]]]]
                                  type = foo
                                  name = Ausgesetzt
                                  as_set_suspend = True
                                  #verbleib in suspend wenn
                                  [[[[[enter_manuell]]]]]
                                      #Zustandsermittlung ueber das Manuell-Item ausgeloest
                                      [COLOR=#FF0000]as_value_trigger_source = eval: autoblind_eval.get_item('State.manuell',1)[/COLOR]
                                  [[[[[enter_stay]]]]]
                                      #suspend bereits aktiviert wurde
                                      as_value_laststate = var: current.state_id
                                      as_agemax_manuell = 3600
                                      as_value_suspend = True
                  Autoblind Item:
                  Code:
                  [EG]
                      [[Bad]]
                          [[[Rollo]]]
                             ...
                  
                              [[[[AutoBlind]]]]
                                  [[[[[State]]]]]
                                      #$order = 2
                                      [[[[[[suspended]]]]]]
                                          #Status: Automatik ist deaktiviert
                                          type = bool
                                          name = Suspend-Item
                                          value = False
                                          visu_acl = rw
                                      [[[[[[lock]]]]]]
                                          #Über dieses Item wird die Automatik gesperrt
                                          type = bool
                                          name = Sperr-Item
                                          value = False
                                          visu_acl = rw
                                      [[[[[[stateId]]]]]]
                                          type = str
                                          name = Id des aktuellen Zustands
                                          cache = True
                                          visu_acl = ro
                                      [[[[[[stateName]]]]]]
                                          type = str
                                          name = Name des aktuellen Zustands
                                          cache = True
                                          visu_acl = ro
                                      [COLOR=#FF0000][[[[[[manuell]]]]]][/COLOR]
                                          type = bool
                                          name = Manuelle Bedienung
                                          eval_trigger = EG.Bad.Rollo.Move | EG.Bad.Rollo.Stop | EG.Bad.Rollo.Pos
                                          as_manuel_exclude = KNX:y.y.y | Init:*
                                  [[[[[Rules]]]]]
                                      type = bool
                                      name = Rolladenautomatik
                                      as_plugin = active
                                      as_startup_delay = 60
                                      eval_trigger = EG.Zentral.Rollo.Trigger | EG.Bad.Rollo.AutoBlind.State.lock | EG.Bad.Rollo.AutoBlind.State.suspended | EG.Bad.Rollo.AutoBlind.State.manuell
                                      as_laststate_item_id = EG.Bad.Rollo.AutoBlind.State.stateId
                                      as_laststate_item_name = EG.Bad.Rollo.AutoBlind.State.stateName
                                      as_item_hoehe = EG.Bad.Rollo.Pos
                                      as_mindelta_hoehe = 10
                                      as_item_manuell = EG.Bad.Rollo.AutoBlind.State.manuell
                                      as_item_lock = EG.Bad.Rollo.AutoBlind.State.lock
                                      as_item_suspend = EG.Bad.Rollo.AutoBlind.State.suspended
                                      [[[[[[lock]]]]]]
                                          as_use = EG.Autoblind.Default.lock
                                      [[[[[[suspend]]]]]]
                                          as_use = EG.Autoblind.Default.suspend
                                      [[[[[[night]]]]]]
                                          as_use = EG.Autoblind.Default.night
                                      [[[[[[morning]]]]]]
                                          as_use = EG.Autoblind.Default.morning
                                      [[[[[[evening]]]]]]
                                          as_use = EG.Autoblind.Default.evening
                                      [[[[[[day]]]]]]
                                          as_use = EG.Autoblind.Default.day
                  Führt leider ständig zum Fehler:
                  Code:
                  State EG.Bad.Rollo.AutoBlind.Rules.suspend:
                  2016-02-11 21:45:09.254630       Name: Ausgesetzt
                  2016-02-11 21:45:09.254654       Condition sets to enter state:
                  2016-02-11 21:45:09.254678               Condition Set 'enter_manuell':
                  2016-02-11 21:45:09.254701                       Condition 'trigger_source':
                  2016-02-11 21:45:09.254725                               error: Condition trigger_source: Neither 'item' nor 'eval' given!
                  2016-02-11 21:45:09.254750                               value from eval: autoblind_eval.get_item('State.manuell',1)
                  2016-02-11 21:45:09.254775                               negate: False
                  2016-02-11 21:45:09.254800               Condition Set 'enter_stay':
                  2016-02-11 21:45:09.254824                       Condition 'suspend':
                  2016-02-11 21:45:09.254847                               item: EG.Bad.Rollo.AutoBlind.State.suspended
                  2016-02-11 21:45:09.254871                               value: True
                  2016-02-11 21:45:09.254896                               negate: False
                  2016-02-11 21:45:09.254920                       Condition 'manuell':
                  2016-02-11 21:45:09.254962                               item: EG.Bad.Rollo.AutoBlind.State.manuell
                  2016-02-11 21:45:09.254989                               negate: False
                  2016-02-11 21:45:09.255013                               agemax: 3600
                  2016-02-11 21:45:09.255039       Actions to perform if state becomes active:
                  2016-02-11 21:45:09.255063               Action 'suspend':
                  2016-02-11 21:45:09.255087                       item: EG.Bad.Rollo.AutoBlind.State.suspended
                  2016-02-11 21:45:09.255110                       value: True
                  get_item("State.manuell",1) müsste doch so aufgelöst werden, dass er aus ...Autoblind.Rules welches das plugin_active Attribut führt nach Autoblind.State.manuell macht.


                  Kommentar


                    Hi @offline!
                    Hier der Debugcode vom Manuell-Item, das nicht in den Suspend Modus will, wenn ich eine "0" sende nach einem Neustart:
                    Code:
                    2016-02-11 21:31:10.291797 manual_item_update_eval ========================================================
                    2016-02-11 21:31:10.292831 running for item 'screens.sueden_s2.automatik.manuell' source 'Init' caller 'None'
                    2016-02-11 21:31:10.293358 Current value of item screens.sueden_s2.automatik.manuell is False
                    2016-02-11 21:31:10.293793 get_original_caller: returning Init, None
                    2016-02-11 21:31:10.294205 original trigger by caller 'Init' source 'None'
                    2016-02-11 21:31:10.294664 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:31:10.295533       Init:*: matching. Writing value False
                    2016-02-11 21:31:38.483832 manual_item_update_eval ========================================================
                    2016-02-11 21:31:38.484741 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.hoehe'
                    2016-02-11 21:31:38.485735 Current value of item screens.sueden_s2.automatik.manuell is False
                    2016-02-11 21:31:38.486938 get_original_caller(Eval, screens.sueden_s2.hoehe): changed by KNX, 1.1.5
                    2016-02-11 21:31:38.487964 get_original_caller: returning KNX, 1.1.5
                    2016-02-11 21:31:38.488677 original trigger by caller 'KNX' source '1.1.5'
                    2016-02-11 21:31:38.489368 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:31:38.489967       Init:*: not matching
                    2016-02-11 21:31:38.490524       SQLite:*: not matching
                    2016-02-11 21:31:38.491087       KNX:1.1.5: matching. Writing value False
                    2016-02-11 21:32:43.211114 manual_item_update_eval ========================================================
                    2016-02-11 21:32:43.216044 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.hoehe'
                    2016-02-11 21:32:43.217779 Current value of item screens.sueden_s2.automatik.manuell is False
                    2016-02-11 21:32:43.220149 get_original_caller(Eval, screens.sueden_s2.hoehe): changed by AutoBlind Plugin, None
                    2016-02-11 21:32:43.221162 get_original_caller: returning AutoBlind Plugin, None
                    2016-02-11 21:32:43.222535 original trigger by caller 'AutoBlind Plugin' source 'None'
                    2016-02-11 21:32:43.223804 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:32:43.278078       Init:*: not matching
                    2016-02-11 21:32:43.279730       SQLite:*: not matching
                    2016-02-11 21:32:43.280952       KNX:1.1.5: not matching
                    2016-02-11 21:32:43.282284       KNX:1.1.26: not matching
                    2016-02-11 21:32:43.299202 No include limitation. Writing value True
                    2016-02-11 21:54:04.396726 manual_item_update_eval ========================================================
                    2016-02-11 21:54:04.401073 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.lz'
                    2016-02-11 21:54:04.405795 Current value of item screens.sueden_s2.automatik.manuell is True
                    2016-02-11 21:54:04.407168 get_original_caller(Eval, screens.sueden_s2.lz): changed by Init, None
                    2016-02-11 21:54:04.408053 get_original_caller: returning Init, None
                    2016-02-11 21:54:04.408860 original trigger by caller 'Init' source 'None'
                    2016-02-11 21:54:04.409703 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:54:04.410499       Init:*: matching. Writing value True
                    2016-02-11 21:54:04.412747 manual_item_update_eval ========================================================
                    2016-02-11 21:54:04.413511 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.lz'
                    2016-02-11 21:54:04.414275 Current value of item screens.sueden_s2.automatik.manuell is True
                    2016-02-11 21:54:04.415500 get_original_caller(Eval, screens.sueden_s2.lz): changed by Init, None
                    2016-02-11 21:54:04.416336 get_original_caller: returning Init, None
                    2016-02-11 21:54:04.417020 original trigger by caller 'Init' source 'None'
                    2016-02-11 21:54:04.417776 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:54:04.418468       Init:*: matching. Writing value True
                    2016-02-11 21:54:05.879845 manual_item_update_eval ========================================================
                    2016-02-11 21:54:05.881097 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.kz'
                    2016-02-11 21:54:05.882073 Current value of item screens.sueden_s2.automatik.manuell is True
                    2016-02-11 21:54:05.883478 get_original_caller(Eval, screens.sueden_s2.kz): changed by Init, None
                    2016-02-11 21:54:05.884384 get_original_caller: returning Init, None
                    2016-02-11 21:54:05.885260 original trigger by caller 'Init' source 'None'
                    2016-02-11 21:54:05.886394 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:54:05.890013       Init:*: matching. Writing value True
                    2016-02-11 21:54:05.892085 manual_item_update_eval ========================================================
                    2016-02-11 21:54:05.892730 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.kz'
                    2016-02-11 21:54:05.893335 Current value of item screens.sueden_s2.automatik.manuell is True
                    2016-02-11 21:54:05.894239 get_original_caller(Eval, screens.sueden_s2.kz): changed by Init, None
                    2016-02-11 21:54:05.894889 get_original_caller: returning Init, None
                    2016-02-11 21:54:05.895453 original trigger by caller 'Init' source 'None'
                    2016-02-11 21:54:05.896082 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:54:05.896662       Init:*: matching. Writing value True
                    2016-02-11 21:54:12.814058 manual_item_update_eval ========================================================
                    2016-02-11 21:54:12.815326 running for item 'screens.sueden_s2.automatik.manuell' source 'Eval' caller 'screens.sueden_s2.hoehe'
                    2016-02-11 21:54:12.816149 Current value of item screens.sueden_s2.automatik.manuell is True
                    2016-02-11 21:54:12.817335 get_original_caller(Eval, screens.sueden_s2.hoehe): changed by KNX, 1.1.5
                    2016-02-11 21:54:12.818052 get_original_caller: returning KNX, 1.1.5
                    2016-02-11 21:54:12.818724 original trigger by caller 'KNX' source '1.1.5'
                    2016-02-11 21:54:12.819484 checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26']
                    2016-02-11 21:54:12.820175       Init:*: not matching
                    2016-02-11 21:54:12.820837       SQLite:*: not matching
                    2016-02-11 21:54:12.821495       KNX:1.1.5: matching. Writing value True

                    Kommentar


                      Bonze

                      Das Supsend Item bewirkt, dass das Autoblind-Plugin für die angegebene Suspendzeit keine weiteren Evaluierungen bzw. Änderungen mehr macht. Hat den Sinn, dass man zB über einen Taster einen "Overrule" zur Automatik machen möchte, irgendwann sollte die Automatik aber natürlich wieder greifen - eben sobald, suspend_time abgelaufen und autoblind getriggert wird.

                      Hier mal ein volles Beispiel-Item, das auch die neue Funktionsweise des suspend/manuell-Items berücksichtigt. Vorteil gegenüber der alten Herangehensweise: das Suspend ist nun ein eigener Zustand, somit ist man hier deutlich flexibler. Das Beispiel zeigt einen Sonnenschutzbehang:
                      Code:
                          [['sueden_s2']]
                          type = foo
                              [[['automatik']]]
                              type = foo
                                  [[[['autostate_id']]]]
                                      type = str
                                      visu_acl = r
                                      cache = on
                                  [[[['autostate_name']]]]
                                      type = str
                                      visu_acl = r 
                                      cache = on
                                  [[[['autostate_suspend_end']]]]
                                      type = str
                                      visu_acl = ro 
                                      cache = on
                                  [[[['lock']]]]
                                      type = bool
                                      knx_dpt = 1
                                      knx_listen = 4/5/1
                                      visu_acl = rw
                                      cache = on
                                  [[[['suspend']]]]
                                      type = bool  
                                      knx_dpt = 1                                     
                                      visu_acl = rw
                                  [[[['manuell']]]]
                                      type = bool
                                      name = Manuelle Bedienung
                                      as_manual_logitem = screens.sueden_s2.automatik.manuell
                                      as_manual_invert = True
                                      as_manual_exclude = Init:* | SQLite:* | KNX:1.1.5 | KNX:1.1.26
                                      eval_trigger = screens.sueden_s2.lz | screens.sueden_s2.kz | screens.sueden_s2.hoehe | screens.sueden_s2.lamellen | screen.alle.lz | screens.terrasse.* | screens.westen.*                 
                                  [[[['settings']]]]
                                      type = foo
                                      [[[[['suspendduration']]]]]
                                          type = num
                                          visu_acl = rw
                                          cache = True
                                          enforce_updates  = no
                                  [[[['rules']]]]
                                      type = bool
                                      as_plugin = active
                                      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
                      
                                      as_item_height = screens.sueden_s2.hoehe
                                      as_item_wind = screens.sicherheit.windlock
                                                          
                                      eval_trigger = screens.automatik_lock | jalousien.autoblind.screentrigger | screens.sueden_s2.automatik.lock | screens.sueden_s2.automatik.suspend | screens.sueden_s2.automatik.manuell | screens.sicherheit | Wetterstation.Schnee
                                      [[[[['wind']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.wind_screens
                                      [[[[['lock']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.lock
                                      [[[[['suspend_night']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.suspend_night
                                      [[[[['schnee']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.schnee
                                       [[[[['night']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.night
                                      [[[[['evening']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.evening    
                                      [[[[['suspend']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.suspend
                                       [[[[['suntrack']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.suntrack_screens  
                                      [[[[['day']]]]]
                                          type = foo
                                          as_use = jalousien.autoblind.default.day
                      Meine Herangehensweise mit den 2 Suspend-Items ist vermutlich unnötig kompliziert, veranschaulicht aber das Prinzip recht gut. Wenn ein Taster oder die Visu den Behang ändert, geht die Jalousie vom Suntrack bzw. Hochgefahren (day) Modus in den "Aussetzen"-Modus. Am Abend aber wird Suspend immer aufgehoben, weil der Zustand höherrangig definiert ist. Möchte ich jetzt aber doch mal bei Dunkelheit wieder manuell den Behang ändern und soll dieser manuelle Zustand x Minuten dauern, greift dort dann der suspend_night Zustand.

                      Die Zustände sind im default wie folgt definiert:
                      Code:
                                  [[[['suspend']]]]
                                      type = foo
                                      name = Ausgesetzt
                                      as_set_suspend = True
                                      enforce_updates  = yes
                                      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
                      
                                  [[[['suspend_night']]]]
                                      type = foo
                                      name = Ausgesetzt
                                      enforce_updates  = yes
                                      as_set_suspend = True
                                      as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend', suspend_text='%X')
                                      [[[[['enter_manuell']]]]]
                                          type = foo
                                          as_min_time = item:jalousien.autoblind.settings.night.min_time
                                          as_max_time = item:jalousien.autoblind.settings.night.max_time                   
                                          as_negate_time = True 
                                          as_max_brightness = item:jalousien.autoblind.settings.night.max_brightness
                                          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

                      Kommentar


                        firefox
                        Zieh dir mal die neueste Version runter und mach das so wie im vorigen Beitrag beschrieben mit dem
                        as_value_trigger_source = eval:autoblind_eval.get_relative_itemid('..manuell ')

                        Bin mir nicht sicher, ob du wirklich 2 Item-Ebenen angeben kannst, das weiß offline besser. Notfalls probierst du's mal so, dass du die "States" raus wirfst und das "manuell"-Item auf die gleiche Hierarchieebene stellst wie "rules".

                        Kommentar


                          Hi firefox und Onkelandy

                          in der Tat scheint bei firefox das Plugin nicht aktuell zu sein, die "besondere" Bedingung "trigger_source" scheint in seiner Version noch nicht vorhanden zu sein.

                          Bei "get_relative_itemid" kann man beliebig viele Ebenen nach oben gehen, in dem man einfach mehr Punkte voranstellt. Mit einem Punkt beginnt man auf der Ebene des Autoblind Objekt-Items, im Falle von firefox also bei "EG.Bad.Rollo.AutoBlind.Rules". Jeder weitere Punkt bringt einen eine Ebene nach oben, bevor der hinter den Punkte angegebene Item-Pfad angehängt wird. Für "EG.Bad.Rollo.AutoBlind.State.manuell" braucht man also
                          Code:
                          as_value_trigger_source = eval: autoblind_eval.get_relative_itemid("..State.manuell")
                          Grüße
                          offline

                          Kommentar


                            Hi Onkelandy
                            Zitat von Onkelandy Beitrag anzeigen
                            Hier der Debugcode vom Manuell-Item, das nicht in den Suspend Modus will, wenn ich eine "0" sende nach einem Neustart:
                            So, ich glaube ich habe das Problem erkannt. Das Problem ist folgendes: Smarthome.py setzt den Wert von "changed_by" eines Items nur, wenn sich der Wert tatsächlich geändert hat. Bei den betroffenen Items ("...kz" und "...lz") handelt es sich vermutlich um die Items für kurzen/langen Tastendruck. Sie haben nach dem Start von smarthome.py den Wert 0 und das Flag "enforce_updates = yes" gesetzt. Wenn du auf diese Items wieder eine "0" sendest, wird durch "enforce_updates" zwar der "eval" getriggert, "changed_by" wird aber nicht geändert. Es steht dort weiterhin "Init" drin und dieser Wert ist in der Ausschlussliste.

                            Wenn du nun einfach die nur Ausschlussbedingung "Init:*" rausnimmst, sollte es funktionieren.

                            Grundsätzlich ist es aber sinnvoll, während der Initialisierungsphase von smarthome.py das Autoblind-Plugin nicht zutriggern. Die erste Statusermittlung läuft ja automatisch, nachdem nach der vollständigen Initialisierung das eingestellte Startup Delay abgelaufen ist. Solange das nicht der Fall ist werden auch Trigger auf das Plugin vom Plugin abgeblockt. Die in der Doku aufgeführte Ausschlussbedingung "Init:*" hat im wesentlichen den Zweck, dass mögliche Trigger auf das Plugin so früh wie möglich aussortiert werden, um bei der Initialisierung so wenig unnötiges wie möglich zu tun und keine grundlosen Verzögerungen zu schaffen.

                            Ich habe daher die manual_item_update_eval-Funktion so modifiziert, dass sie überhaupt nichts prüft, loggt, etc. solange das AutoBlind-Plugin nich vollständig läuft. Die Änderung ist auf GitHub gepusht.

                            Grüße
                            offline

                            Kommentar


                              Hmmm, offline, kann es sein, dass das Manuell-Item nun gar nicht mehr funktioniert? Bekomme keinerlei Reaktion bezüglich suspend mehr

                              Kommentar


                                Hi Onkelandy
                                Zitat von Onkelandy Beitrag anzeigen
                                Hmmm, offline, kann es sein, dass das Manuell-Item nun gar nicht mehr funktioniert? Bekomme keinerlei Reaktion bezüglich suspend mehr
                                Da hatte sich in der Tat noch ein Fehler eingeschlichen. Fix habe ich auf GitHub gepusht.

                                Grüße
                                offline

                                Kommentar

                                Lädt...
                                X