Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Hallo @offline

    bingo - jetzt läufts :-)

    Du hast in der Konfiguration noch ein "as_lock_item" drin. Das ist der alte Lock-Mechanismus, von dem zwar nichts mehr in der Doku steht, der aber trotzdem noch funktioniert. Nimm das mal raus.
    Die Funktion mit insert_suspend_time peile ich noch nicht ganz.. So wie ich die Sache verstehe müsste die Restzeit jetzt ins Item State.suspend_end geschrieben werden. Dies bleibt jedoch leer..

    Eg.Kueche.Jalousie.Tuer
    Eg.Kueche.Jalousie.Tuer.AutoBlind
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateId = Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateName = Automatik ausgesetzt
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock = False
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend = True
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell = True
    Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend_en d =
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules = True
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Lock = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Lock.enter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend.en ter_manuell
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend.en ter_stay
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Referenz = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Referenz.e nter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Morgendaem merung = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Morgendaem merung.enter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Tag = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Tag.enter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Abenddaemm erung = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Abenddaemm erung.enter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nacht = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nacht.ente r
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Sonne_ost = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Sonne_ost. enter
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n = None
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_ost
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_sued
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_west
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_todark
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_sun_azimut
    Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_sun_altitude
    Eg.Kueche.Jalousie.Tuer.Auf_ab = False
    Eg.Kueche.Jalousie.Tuer.Lamellenverstellung_stop = False
    Eg.Kueche.Jalousie.Tuer.Position = 41.2
    Eg.Kueche.Jalousie.Tuer.Lamellenposition = 44.7
    Eg.Kueche.Jalousie.Tuer.Position_gueltig = True
    Eg.Kueche.Jalousie.Tuer.ReferenzFahren = False
    Eg.Kueche.Jalousie.Tuer.Automatik_sperren = False
    Code:
    [[[[[AutoBlind]]]]]
                        [[[[[[State]]]]]]
                            #$order = 2
                            [[[[[[[stateId]]]]]]]
                                type = str
                                visu_acl = ro
                                cache = True
                            [[[[[[[stateName]]]]]]]
                                type = str
                                visu_acl = ro
                                cache = True
                            [[[[[[[lock]]]]]]]
                                #�ber dieses Item wird die Automatik gesperrt
                                type = bool
                                visu_acl = rw
                                cache = True
                            [[[[[[[suspend]]]]]]]
                                #Status: Automatik ist deaktiviert
                                type = bool
                                visu_acl = ro
                            [[[[[[[manuell]]]]]]]
                                type = bool
                                name = Manuelle Bedienung
                                eval = not sh.Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell() if sh.autoblind.is_changed_by(caller, source, ['Visu:*']) else sh.Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell()
                                eval_trigger = Eg.Kueche.Jalousie.Tuer.Position | Eg.Kueche.Jalousie.Tuer.Lamellenposition
                            [[[[[[[suspend_end]]]]]]]
                                #Ermitteln der Rest-Zeit
                                type = str
                                visu_acl = ro
                        [[[[[[Rules]]]]]]
                            as_plugin = active
                            name = Raffstore EG K�che T�r
                            #$order = 3
                            type = bool
                            eval_trigger = Eg.Trigger | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock
                            as_repeat_actions = false
                            as_laststate_item_id = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateId
                            as_laststate_item_name = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateName
                            as_item_Position = Eg.Kueche.Jalousie.Tuer.Position
                            as_item_Lamellenposition = Eg.Kueche.Jalousie.Tuer.Lamellenposition
                            as_item_Brightness_ost = Wetterstation.Helligkeit.Ost
                            as_item_Brightness_sued = Wetterstation.Helligkeit.Sued
                            as_item_Brightness_west = Wetterstation.Helligkeit.West
                            as_item_tag = System.Sonne.Tag
                            as_item_Daemmerung = Wetterstation.Daemmerung
                            as_item_lock = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock
                            as_item_suspend = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend
                            as_item_manuell = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell
                            as_item_PositionGueltig = Eg.Kueche.Jalousie.Tuer.Position_gueltig
                            as_item_ReferenzFahren = Eg.Kueche.Jalousie.Tuer.ReferenzFahren
                            as_item_suspend_end = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend_end
                            [[[[[[[Lock]]]]]]]
                                #$order = 1
                                type = foo
                                name = Automatik gesperrt
                                as_set_suspend = False
                                [[[[[[[[enter]]]]]]]]
                                    as_value_lock = True
                            [[[[[[[Suspend]]]]]]]
                                #$order = 2
                                type = foo
                                name = Automatik ausgesetzt
                                as_set_suspend = True
                                as_set_suspend_end = eval: autoblind_eval.insert_suspend_time('State.suspend', suspend_text='Ausgeset bis %X')
                                [[[[[[[[enter_manuell]]]]]]]]
                                    as_value_trigger_source = eval: autoblind_eval.get_item('State.manuell', 1)
                                [[[[[[[[enter_stay]]]]]]]]
                                    as_value_laststate = var:current.state_id
                                    as_agemax_manuell = var:item.suspend_time
                                    as_value_suspend = True

    kann die Rest-Zeit auch ins "as_laststate_item_name" eingefügt werden?


    Gruß Ivan
    Zuletzt geändert von ivande; 04.01.2016, 10:46. Grund: etwas vergessen

    Kommentar


      offline dein Support ist der Wahnsinn! Danke, danke, danke. Ich hab den Code mal entsprechend abgeändert und jetzt ist auch klar, wo das Problem liegt.
      Code:
      2016-01-04 10:32:20,185 ERROR    steckdosen.eg.bad_heizung.automatik.rules-Startup Delay Method steckdosen.eg.bad_heizung.automatik.rules-Startup Delay exception: Can't convert 'TypeError' object to str implicitly -- scheduler.py:_task:362
      Traceback (most recent call last):
        File "/usr/smarthome/plugins/autoblind/AutoBlindEval.py", line 136, in insert_suspend_time
          raise ValueError("Eval-Method 'insert_suspend_time': Suspend should alredy be finished!")
      ValueError: Eval-Method 'insert_suspend_time': Suspend should alredy be finished!
      Das Problem tritt dann auf, wenn ein Zustand, der mit dem Suspend nichts zu tun hat, zwei Mal hintereinander aufgerufen wird (mit repeat_actions). Die Fehlermeldung macht da ja auch Sinn..

      Was ich erzielen wollte: Die Suspend_time sollte in ein Item geschrieben werden, sobald Suspend aktiv wird. Sobald ein anderer Zustand aktiv wird, soll das Item geleert werden. Ich löse das derzeit mit:

      as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend ', suspend_text='')

      in allen anderen Zuständen.

      Habe das Problem jetzt aber auch unabhängig von oben beschriebenem Setting beobachtet - es scheint fast ein bisschen zufällig zu sein, ob der Fehler kommt oder nicht. Kann es sein, dass die Funktion manchmal aufgerufen wird, bevor das suspend-Item geändert wird?
      Code:
                      as_set_suspend = False
                      as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend', suspend_text='')
      Sollte man hier manuell ein Delay einbauen oder kannst du dir das nochmals ansehen? Danke!
      Zuletzt geändert von Onkelandy; 04.01.2016, 13:58.

      Kommentar


        ivande Du musst noch die richtige Hierarchieebene angeben. Dein State.suspend ist ja eine Ebene höher, also müsste deine Zeile wohl so lauten:
        Code:
         
         as_set_suspend_end = eval: autoblind_eval.insert_suspend_time('[COLOR=#FF0000][B]..[/B][/COLOR]State.suspend', suspend_text='Ausgeset bis %X')

        Kommentar


          Was mir noch aufgefallen ist.. Wenn in einem Zustand ein Item geändert wird, das nicht definiert ist, wird es ignoriert. Das ist optimal. Wenn nun aber ein Item definiert wird, das es nicht gibt, gibt es einen massiven Error, der glaub sogar zum Ignorieren des kompletten Autoblind-Items führt.. Hier ein kurzes Beispiel, das insbesondere dann vorkommen kann, wenn man die Items in einem default definiert/ändert.

          Default Definitionen:
          Code:
          [[autoblind]]
                  [[['default']]]
                      type=foo
                      # Items die geaendert werden
                      [COLOR=#FF0000][B]as_item_schalten = ...SA[/B][/COLOR]
          
          [COLOR=#00FF00][B]          ### as_item_XYZ - Diese Angabe gibt es hier nicht.. Ist aber kein Problem[/B][/COLOR]
          
                      [[[['TEST']]]]
                          type = foo
                          name = Gesperrt
                          [COLOR=#00FF00][B]as_set_XYZ = False[/B][/COLOR]
                          [[[[['enter']]]]]
                          type = foo
                              as_value_lock = True
          Zu änderndes Item:
          Code:
          [steckdosen]
              [['og']]  
              type = foo      
                  [[['terrasse']]]
                      type = foo
                      [[[['automatik']]]]
                          type = foo
                          [[[[['rules']]]]]
                              type = bool
                              as_plugin = active
                             [COLOR=#00FF00][B]### as_item_XYZ - Diese Angabe gibt es hier nicht.. Ist aber kein Problem[/B][/COLOR]
                              [[[[[['TEST']]]]]]
                                  type = foo
                                  as_use = steckdosen.autoblind.default.TEST
          [B][COLOR=#FF0000]      ### [[[['SA']]]]
                   ###    Dieses Item gibt es nicht. Ergibt einen Fehler, da es über das default gesucht wird.[/COLOR][/B]
          Soooo, genau das war dann wohl das Problem, dass sich autoblind "aufgehängt" hat (Posting von gestern Nacht). Vor dem allerletzten Commit gab es dieses Abfangen von as_set nämlich nicht.. Hehe.. Gott sei Dank klappt das jetzt wieder
          Zuletzt geändert von Onkelandy; 04.01.2016, 15:21.

          Kommentar


            Hallo offline, hallo @Onkelandy,

            das Problem lag an der Hierarchieebene ,.. Danke - Ihr seit Supper :-)

            Ein Hierarchieebenenverständnisproblem: weshalb brauche ich bei get:item dann die Punkte nicht?

            Code:
            "Suspend": {
                            "$order": 2,
                            "type": "foo",
                            "name": "Automatik ausgesetzt",
                            "as_set_suspend": "True",
                            "as_set_suspend_end": "eval: autoblind_eval.insert_suspend_time([COLOR=#FF0000]'..State.suspend[/COLOR]', suspend_text='Ausgeset bis %X')",
                            "enter_manuell": {
                                "as_value_trigger_source": "eval: autoblind_eval.get_item('[COLOR=#FF0000]State.manuell',[/COLOR] 1)"
                            },
            Gruß Ivan

            Kommentar


              ivande
              Das get_item gibt die Hierarchieebene mit der Zahl hinter dem Komma an. Wenn du dort eine 1 hast, ist das equivalent zu zwei Punkten

              Das get_item solltest du aber eh raus nehmen und ersetzen, da offline hier ja was umgebaut hat. Obiges enter_manuell sollte jetzt also heißen:
              as_value_trigger_source = eval:autoblind_eval.get_relative_itemid('..manuell ')

              Kommentar


                ivande :

                Zitat von ivande Beitrag anzeigen
                Die Funktion mit insert_suspend_time peile ich noch nicht ganz.. So wie ich die Sache verstehe müsste die Restzeit jetzt ins Item State.suspend_end geschrieben werden. Dies bleibt jedoch leer..

                Code:
                [[[[[AutoBlind]]]]]
                (..)
                [[[[[[Rules]]]]]]
                (..)
                [[[[[[[Suspend]]]]]]]
                (..)as_set_suspend_end = eval: autoblind_eval.insert_suspend_time('State.suspend', suspend_text='Ausgeset bis %X')
                Hier verwendest du das Suspend-Item "State.suspend". Dein Suspend-Item heißt aber "Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspe nd ". Du musst das Item daher entweder komplett angeben, oder über relativ über entsprechende vorangestellte Punkte. Das Item "State.suspend" existiert vermutlich garnicht, das sollte auch für Meldungen in den Logs sorgen.

                Zitat von ivande Beitrag anzeigen
                kann die Rest-Zeit auch ins "as_laststate_item_name" eingefügt werden?
                Suche mal in der Doku nach "as_name"


                Onkelandy :
                Zitat von Onkelandy Beitrag anzeigen
                Ich hab den Code mal entsprechend abgeändert und jetzt ist auch klar, wo das Problem liegt.
                Code:
                2016-01-04 10:32:20,185 ERROR steckdosen.eg.bad_heizung.automatik.rules-Startup Delay Method steckdosen.eg.bad_heizung.automatik.rules-Startup Delay exception: Can't convert 'TypeError' object to str implicitly -- scheduler.py:_task:362
                Traceback (most recent call last):
                File "/usr/smarthome/plugins/autoblind/AutoBlindEval.py", line 136, in insert_suspend_time
                raise ValueError("Eval-Method 'insert_suspend_time': Suspend should alredy be finished!")
                ValueError: Eval-Method 'insert_suspend_time': Suspend should alredy be finished!
                Diese Meldung wird ausgelöst, wenn das Age des Suspend Items größer als die Suspend Time selbst ist, also eigentlich kein Suspend mehr vorliegen kann.

                Zitat von Onkelandy Beitrag anzeigen
                Das Problem tritt dann auf, wenn ein Zustand, der mit dem Suspend nichts zu tun hat, zwei Mal hintereinander aufgerufen wird (mit repeat_actions). Die Fehlermeldung macht da ja auch Sinn..

                Was ich erzielen wollte: Die Suspend_time sollte in ein Item geschrieben werden, sobald Suspend aktiv wird. Sobald ein anderer Zustand aktiv wird, soll das Item geleert werden. Ich löse das derzeit mit:

                as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend ', suspend_text='')

                in allen anderen Zuständen.
                Das erklärt den Fehler. In der Methode wird nicht geprüft, ob das Suspend-Item gesetzt ist oder nicht. Sie ist eigentlich nur zum Aufruf im Suspend-Zustand vorgesehen. Wenn das Ende des Suspends noch nicht so lange her ist, wie in der Suspend-Time angegeben, wird auch bei nicht gesetztem Suspend-Item eine Endezeit berechnet und ausgegeben. Ist das Ende des Suspends länger her, löst das diesen Fehler aus.

                Probiere mal in den nicht-suspend Zuständen ein
                Code:
                as_set_suspend_end =
                um den Wert in dem Item zu leeren.

                Zitat von Onkelandy Beitrag anzeigen
                Habe das Problem jetzt aber auch unabhängig von oben beschriebenem Setting beobachtet - es scheint fast ein bisschen zufällig zu sein, ob der Fehler kommt oder nicht. Kann es sein, dass die Funktion manchmal aufgerufen wird, bevor das suspend-Item geändert wird?
                Code:
                as_set_suspend = False
                as_set_suspend_end = eval:autoblind_eval.insert_suspend_time('..suspend', suspend_text='')
                Sollte man hier manuell ein Delay einbauen oder kannst du dir das nochmals ansehen?
                In welcher Reihenfolge die Aktionen ausgelöst werden, sollte im Log erkennbar sein. Es kann durchaus sein, dass hier die Reihenfolge nicht stimmt, in diesem Fall könnte man in der Tat über ein Delay die gewünschte Reihenfolge einstellen. Aber wie oben geschrieben ist "insert_suspend_time" eigentlich nur dafür gedacht, bei aktivem Suspend verwendet zu werden.

                Zitat von Onkelandy Beitrag anzeigen
                Was mir noch aufgefallen ist.. Wenn in einem Zustand ein Item geändert wird, das nicht definiert ist, wird es ignoriert. Das ist optimal. Wenn nun aber ein Item definiert wird, das es nicht gibt, gibt es einen massiven Error, der glaub sogar zum Ignorieren des kompletten Autoblind-Items führt.. Hier ein kurzes Beispiel, das insbesondere dann vorkommen kann, wenn man die Items in einem default definiert/ändert.
                Dieses Verhalten ist im Rahmen des Commits "[Feature] Items can be given as relative item" und der nachfolgenden Ändernungen an der Fehlerbehandlung entstanden. Ich habe mir dazu entschieden einen massiven Fehler auszulösen wenn ein angegebenes Item nicht existiert, da hier eine grobe Fehlkonfiguration eines AutoBlind-Items vorliegt. Ein solcher Fehler sollte (so ist es geplant) dazu führen, dass der gesamte Zustand ignoriert wird.
                Wenn kein Item zu einer Aktion angegeben ist, sehe ich das eigentlich nicht so kritisch, dass gleich der gesamte Zustand ignoriert werden muss. Aber auch in diesem Fall sollte es eine Meldung im Log geben.

                Grüße
                offline

                Kommentar


                  Hallo offline

                  ich versuche gerade wieder die Raffstore-Automatik zu optimieren. Und bin (wie es der Teufel so haben will) wieder auf ein Problem(chen) gestossen:

                  Problem evaluating 'autoblind_eval.get_relative_itemid(Eg.Kueche.Jalo usie.Tuer.AutoBlind.State.manuell_positionen')': EOL while scanning string literal (<string>, line 1).
                  Code:
                  [Eg]
                      [[Kueche]]
                          [[[Jalousie]]]
                              [[[[Tuer]]]]
                                  name = Kueche Tuer
                                  [[[[[AutoBlind]]]]]
                                      [[[[[[State]]]]]]
                                          #$order = 2
                                          [[[[[[[stateId]]]]]]]
                                              type = str
                                              visu_acl = ro
                                              cache = True
                                          [[[[[[[stateName]]]]]]]
                                              type = str
                                              visu_acl = ro
                                              cache = True
                                          [[[[[[[lock]]]]]]]
                                              #�ber dieses Item wird die Automatik eingeschalten
                                              type = bool
                                              visu_acl = rw
                                              cache = True
                                          [[[[[[[suspend]]]]]]]
                                              #Status: Automatik ist deaktiviert
                                              type = bool
                                              visu_acl = ro
                                          [[[[[[[manuell_positionen]]]]]]]
                                              type = bool
                                              name = Manuelle Bedienung Positionen
                                              eval = not sh.Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_positionen() if sh.autoblind.is_changed_by(caller, source, ['Visu:*']) else sh.Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_positionen()
                                              eval_trigger = Eg.Kueche.Jalousie.Tuer.Position | Eg.Kueche.Jalousie.Tuer.Lamellenposition
                                          [[[[[[[manuell]]]]]]]
                                              type = bool
                                              name = Manuelle Bedienung
                                              eval = not sh.Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell()
                                              eval_trigger = Eg.Kueche.Jalousie.Tuer.Auf_ab | Eg.Kueche.Jalousie.Tuer.Lamellenverstellung_stop
                                          [[[[[[[beschatten]]]]]]]
                                              type = bool
                                              name = manuelles Beschatten
                                              visu_acl = rw
                                              cache = True
                                      [[[[[[Rules]]]]]]
                                          as_plugin = active
                                          name = Raffstore EG K�che T�r
                                          #$order = 3
                                          type = bool
                                          eval_trigger = Eg.Trigger | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_positionen | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend | Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock
                                          as_repeat_actions = false
                                          as_laststate_item_id = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateId
                                          as_laststate_item_name = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateName
                                          as_item_Position = Eg.Kueche.Jalousie.Tuer.Position
                                          as_item_lock = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock
                                          as_item_suspend = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend
                                          as_item_manuell = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell
                                          as_item_manuell_positionen = Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_positionen
                                          as_item_PositionGueltig = Eg.Kueche.Jalousie.Tuer.Position_gueltig
                                          as_item_ReferenzFahren = Eg.Kueche.Jalousie.Tuer.ReferenzFahren
                                          [[[[[[[Lock]]]]]]]
                                              #$order = 1
                                              type = foo
                                              name = Automatik AUS
                                              as_set_suspend = False
                                              [[[[[[[[enter]]]]]]]]
                                                  as_value_lock = False
                                          [[[[[[[Suspend]]]]]]]
                                              #$order = 2
                                              type = foo
                                              name = Automatik ausgesetzt
                                              as_set_suspend = True
                                              as_name = eval: autoblind_eval.insert_suspend_time('..State.suspend', suspend_text='Ausgesetzt bis %X')
                                              [[[[[[[[enter_manuell_positionen]]]]]]]]
                                                  as_value_trigger_source = eval: autoblind_eval.get_relative_itemid(Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_positionen')
                                              [[[[[[[[enter_manuell]]]]]]]]
                                                  as_value_trigger_source = eval: autoblind_eval.get_relative_itemid('Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell')
                                              [[[[[[[[enter_stay]]]]]]]]
                                                  as_value_laststate = var:current.state_id
                                                  as_agemax_manuell = var:item.suspend_time
                                                  as_agemax_manuell_positionen = var:item.suspend_time
                                                  as_value_suspend = True
                  enter_manuell:
                  beim Betätigen von Auf_ab und Lamellenverstellung_stop sollte der suspend-Zustand sowohl über KNX auch über die Visu aktiviert werden.
                  (State.manuell wechselt auch jedesmal beim Klicken den Zustand - ok)
                  enter_manuell_positionen:
                  beim Anfahren einer Position und Lamellenposition soll der suspend-Zustand nur über die Visu aktiviert werden
                  (State.manuell_positionen wechselt den Zustand nur über die Visu - ok)

                  Eg.Kueche.Jalousie.Tuer
                  Eg.Kueche.Jalousie.Tuer.AutoBlind
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateId = Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nacht
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.stateName = Nacht
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.lock = True
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.suspend = False
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell_po sitionen = True
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.manuell = False
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.State.beschatten = False
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules = True
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Lock = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Lock.enter
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend.en ter_manuell_positionen
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend.en ter_manuell
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Suspend.en ter_stay
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Morgendaem merung = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Morgendaem merung.enter
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Tag = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Tag.enter
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Abenddaemm erung = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Abenddaemm erung.enter
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nacht = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nacht.ente r
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Sonne_ost = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Sonne_ost. enter
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n = None
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_ost
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_sued
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.enter_sonne_west
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_todark
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_sun_azimut
                  Eg.Kueche.Jalousie.Tuer.AutoBlind.Rules.Nachfuehre n.leave_sun_altitude
                  Eg.Kueche.Jalousie.Tuer.Auf_ab = False
                  Eg.Kueche.Jalousie.Tuer.Lamellenverstellung_stop = False
                  Eg.Kueche.Jalousie.Tuer.Position = 95.3
                  Eg.Kueche.Jalousie.Tuer.Lamellenposition = 69.8
                  Eg.Kueche.Jalousie.Tuer.Position_gueltig = True
                  Eg.Kueche.Jalousie.Tuer.ReferenzFahren = False
                  Eg.Kueche.Jalousie.Tuer.Automatik_sperren = False
                  ​Gruß Ivan

                  Kommentar


                    Hi Ivan,

                    Du bist mit Deinen Hochkommata (') durcheinander gekommen, Du hast ein schließendes, aber kein öffnendes Hochkomma.

                    Ich weiß ja, dass Du meinen Generator verwendest, warum nutzt Du nicht dessen relative Adressierung? Damit hättest Du die meisten der Probleme Deiner letzten Beiträge vermeiden können und hättest gleich von Generator eine Meldung bekommen, welcher Pfad nicht stimmt.
                    Diskussionen hierzu sollten wir aber in dem Generator-Thread führen...

                    Gruß, Waldemar
                    OpenKNX www.openknx.de

                    Kommentar


                      jetzt läufts :-)

                      Danke.. ich glaub ich muß mal zum Optiker :-(



                      Gruß Ivan

                      Kommentar


                        Hallo,

                        ich habe heute das Plugin auf die neueste Develop Version aktualisiert. Ich denke es läuft und ich habe mir jetzt auch einen Schnee-Modus eingebaut, so dass die Raffstoren bei Schnee nur bis 90% runtergefahren werden und somit nicht anfrieren können (Das Frost-Sperr-Objekt im MDT Jal-Aktor kann immer nur hochfahren, aber leider keine Max-Position benutzen...)

                        Vielen Dank für dieses tolle Plugin!
                        ++ Der ultimative ETS Schnellkurs ++
                        KNX und die ETS vom Profi lernen
                        www.ets-schnellkurs.de

                        Kommentar


                          Hi @offline!

                          Da bin ich dann doch nochmals Mit folgendem Phänomen:
                          Der Suspendmode kommt irgendwie komplett durcheinander - soweit ich das nachvollziehen kann dann, wenn das Manuell Item anfangs auf "False" ist (was es ja per se nach nem Neustart ist) und dann das Item, das "manuell" triggert, auch einen "False" Wert liefert. Klingt doof, aber es ist so: fahre ich eine Jalousie nach unten, also Wert 1, klappt alles. Fahre ich sie nach oben, wird der Suspend Mode nicht getriggert und danach läuft alles aus dem Ruder. Es wird plötzlich in den Suspend Mode gewechselt, obwohl das manuell Item von der KNX-Adresse getriggert wird, die ich eigentlich negiert habe - so würde ich das Log zumindest interpretieren. Ich mache den Test gerade über die Visu.

                          Das manuell Item des betroffenen Items sieht so aus.. ist bei allen anderen getesteten Objekten praktisch gleich..
                          Code:
                                      [[[['manuell']]]]
                                          type = bool
                                          name = Manuelle Bedienung
                                          as_manual_invert = True
                                          [COLOR=#FF0000]as_manual_exclude = Init:* | SQLite:* | KNX:1.1.5 | KNX:1.1.26[/COLOR]
                                          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.*
                          Das Item, das den Manuell-Status via Visu triggert, ist screens.sueden_s2.kz und hat auch ein enforce_update dabei. Es ist auch wirklich nur im Manuell Item als eval_trigger und nicht beim "normalen" Autoblind-Item dabei. Die Jalousie fährt ja auch ganz normal, also der Befehl kommt an. So sieht es im Log aus:

                          Code:
                          2016-01-18 00:22:32,812 DEBUG    Main         10.0.0.86:58552 sent '{"cmd":"item","id":"screens.sueden_s2.kz","val":"0"}' -- __init__.py:json_parse:272
                          2016-01-18 00:22:32,815 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: Visu source: 10.0.0.86:58552 dest: None value: {'source': 'screens.sueden_s2.kz', 'valu -- scheduler.py:trigger:164
                          2016-01-18 00:22:32,824 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: KNX source: 0.0.0 dest: 4/1/3 value: {'source': 'screens.sueden_s2.kz', 'valu -- scheduler.py:trigger:164
                          2016-01-18 00:22:33,469 DEBUG    Main         10.0.0.86:58552 sent '{"cmd":"item","id":"screens.sueden_s2.kz","val":"0"}' -- __init__.py:json_parse:272
                          2016-01-18 00:22:33,477 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: Visu source: 10.0.0.86:58552 dest: None value: {'source': 'screens.sueden_s2.kz', 'valu -- scheduler.py:trigger:164
                          2016-01-18 00:22:33,487 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: KNX source: 0.0.0 dest: 4/1/3 value: {'source': 'screens.sueden_s2.kz', 'valu -- scheduler.py:trigger:164
                          2016-01-18 00:22:36,993 DEBUG    Main         Item screens.sueden_s2.hoehe = 92.9 via KNX 1.1.5 4/1/16 -- item.py:__update:373
                          2016-01-18 00:22:37,481 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: KNX source: 1.1.5 dest: 4/1/16 value: {'source': 'screens.sueden_s2.hoehe', 'v -- scheduler.py:trigger:164
                          Im Autoblind Log gibt es keinen Eintrag, da ja nix passiert. Es erfolgt also kein Wechsel in den Suspend Mode, obwohl es sollte.

                          Aber dann beim nächsten automatisierten Evaluieren des Autoblind Plugins (5 Minuten später) passiert Folgendes:
                          Smarthome Log:
                          Code:
                          2016-01-18 00:27:27,387 DEBUG    jalousien.autoblind.screentrigger Triggering screens.sueden_s2.automatik.rules - by: Scheduler source: None dest: None value: {'source': 'jalousien.autoblind.screentr -- scheduler.py:trigger:164
                          2016-01-18 00:27:27,801 DEBUG    screens.sueden_s2.automatik.rules Item screens.sueden_s2.hoehe = 97 via AutoBlind Plugin None None -- item.py:__update:373
                          2016-01-18 00:27:28,279 DEBUG    screens.sueden_s2.automatik.rules Triggering screens.sueden_s2.automatik.manuell - by: AutoBlind Plugin source: None dest: None value: {'source': 'screens.sueden_s2.hoehe', 'v -- scheduler.py:trigger:164
                          2016-01-18 00:27:31,204 DEBUG    screens.sueden_s2.automatik.manuell Item screens.sueden_s2.automatik.manuell = False via Eval screens.sueden_s2.hoehe None -- item.py:__update:373
                          2016-01-18 00:27:31,206 DEBUG    screens.sueden_s2.automatik.manuell Triggering screens.sueden_s2.automatik.rules - by: Eval source: screens.sueden_s2.hoehe dest: None value: {'source': 'screens.sueden_s2.automatik. -- scheduler.py:trigger:164
                          [COLOR=#FF0000]2016-01-18 00:27:32,134 DEBUG    Main         Item screens.sueden_s2.hoehe = 96.9 via KNX 1.1.5 4/1/16 -- item.py:__update:373
                          2016-01-18 00:27:32,347 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: KNX source: 1.1.5 dest: 4/1/16 value: {'source': 'screens.sueden_s2.hoehe', 'v -- scheduler.py:trigger:164[/COLOR]
                          Autoblind Log:
                          Code:
                          2016-01-18 00:27:27.726184 Staying at screens.sueden_s2.automatik.rules.schnee ('Schnee')
                          2016-01-18 00:27:27.800064       Action 'height': Set 'screens.sueden_s2.hoehe' to '97'
                          2016-01-18 00:27:32.211149 Update state of item screens.sueden_s2.automatik.rules =========================
                          2016-01-18 00:27:32.259591 Update triggered by Eval (item=screens.sueden_s2.automatik.rules source=screens.sueden_s2.automatik.manuell dest=None)
                          [COLOR=#FF0000]2016-01-18 00:27:32.299832 Eval initially triggered by KNX (item=screens.sueden_s2.hoehe source=1.1.5)[/COLOR]
                          2016-01-18 00:27:32.308987 Executing method 'get_relative_itemvalue(..settings.suspendduration)'
                          2016-01-18 00:27:32.334741 Last state: screens.sueden_s2.automatik.rules.schnee ('Schnee')
                          2016-01-18 00:27:32.339671 Check if state 'screens.sueden_s2.automatik.rules.schnee' ('Schnee') can be left:
                          2016-01-18 00:27:32.353413       No condition sets defined -> matching
                          2016-01-18 00:27:32.372776 State can be left
                          2016-01-18 00:27:32.535814 Check if state 'screens.sueden_s2.automatik.rules.suspend_night' ('Ausgesetzt') can be entered:
                          2016-01-18 00:27:32.553951       Check condition set 'enter_manuell':
                          2016-01-18 00:27:32.591464               Executing method 'get_relative_itemid(..manuell)'
                          2016-01-18 00:27:32.622290               Condition 'trigger_source': value=screens.sueden_s2.automatik.manuell negate=False current=screens.sueden_s2.automatik.manuell
                          2016-01-18 00:27:32.636914                       OK -> matching
                          2016-01-18 00:27:32.671133 State can be entered
                          2016-01-18 00:27:32.686678 Changing to screens.sueden_s2.automatik.rules.suspend_night ('Ausgesetzt')
                          2016-01-18 00:27:32.881750       Action 'suspend': Set 'screens.sueden_s2.automatik.suspend' to 'True'
                          2016-01-18 00:27:34.165349 Update state of item screens.sueden_s2.automatik.rules =========================
                          2016-01-18 00:27:34.166971 Update triggered by Eval (item=screens.sueden_s2.automatik.rules source=screens.sueden_s2.automatik.suspend dest=None)
                          2016-01-18 00:27:34.168837 Eval initially triggered by AutoBlind Plugin (item=screens.sueden_s2.automatik.suspend source=None)
                          2016-01-18 00:27:34.170192 Ignoring changes from AutoBlind Plugin
                          2016-01-18 00:37:27.042208 Update state of item screens.sueden_s2.automatik.rules =========================
                          2016-01-18 00:37:27.085020 Update triggered by Eval (item=screens.sueden_s2.automatik.rules source=jalousien.autoblind.screentrigger dest=None)
                          2016-01-18 00:37:27.090420 Eval initially triggered by Scheduler (item=jalousien.autoblind.screentrigger source=None)
                          Ich hoffe, das ist irgendwie nachvollzieh- und vielleicht auch reproduzierbar? Oder ist irgendwo ein Konfigurationsfehler erkennbar bzw. in Vermutung?

                          Und noch was anderes..
                          Kurz zurück zum insert_suspend_time. Das Problem dort ist ja, dass der oben beschriebene Fehler kommt, wenn die Funktion aufgerufen wird, wenn das Suspend Item bereits gesetzt ist (und natürlich auch, wenn es nicht gesetzt ist, aber das lässt sich ja durch den Ansatz as_set_suspend_text = '' problemlos beheben.). Wenn man also während einer Suspendphase nochmals ein Suspend Item triggert, wird ja die Zeit letztlich verlängert, da das Manuell Item ja neu gesetzt wird. Das führt dann zum einen zu besagter Fehlermeldung im Log und zum anderen, dass die angezeigte Suspendzeit nicht mehr stimmt. Ist aber natürlich niedrigste Priorität überhaupt

                          Vielen Dank für die Hilfe und gute Nacht!
                          Andy

                          Kommentar


                            Hi hhhc !

                            Nachdem ich jetzt bei meinen Außenscreens gerade auch das Problem habe, dass der Schnee auf dem Fensterbrett ein bisschen unpraktisch wird, wollte ich kurz fragen, wie du deine Schneeerkennung machst.. Hast du einfach nur einen "Schneegefahr" bzw. Frost-Wert, der getriggert wird, sobald die Temperatur unter 0 Grad ist oder was wirklich "Schlaues" am Laufen ?

                            Bin gerade am Überlegen, ob es Sinn machen würde, eine entsprechende Logik oder eine Zustandsshow zu erstellen, die tatsächlich die aktuelle Schneelage erkennt. Also abhängig davon, wann es letztes Mal geregnet hat bei einer Temperatur unter 3 Grad. Und ob es dazwischen mal an der entsprechenden Fassade lange genug Sonneneinstrahlung (also Temperatur > x Grad und Helligkeit > y Lux) gegeben hat. Wenn man jetzt Dauer der Beschneiung mit der Sonnendauer gegenrechnen könnte, hätte man vermutlich eine halbwegs zuverlässige Aussage, ob Schnee liegt oder nicht, hehe.

                            Keine Frage, der erste Ansatz ist sicher ausreichend, zumal es ja nur um ein paar cm geht, die die Jalousie weniger runter fährt und man das wohl gar nicht merkt.. aber...

                            Kommentar


                              Zitat von Onkelandy Beitrag anzeigen
                              Hi hhhc !

                              Hast du einfach nur einen "Schneegefahr" bzw. Frost-Wert, der getriggert wird, sobald die Temperatur unter 0 Grad ist oder was wirklich "Schlaues" am Laufen ?
                              Nix schlaues. Nur 2 zusätzliche Items. Ein bool wert zum Schneestatus setzen und ein zweites, dass per eval einen Wert setzt. Entweder 100 bei kein Schnee oder geringer bei Schnee. Letzteren Wert habe ich dann über ein 3. Item über die visu konfigurierbar gemacht.
                              hatte mal im Internet geschaut, ob es Schneehöhen gibt, da abernix gefunden.
                              ++ Der ultimative ETS Schnellkurs ++
                              KNX und die ETS vom Profi lernen
                              www.ets-schnellkurs.de

                              Kommentar


                                Hi Onkelandy
                                Zitat von Onkelandy Beitrag anzeigen
                                Der Suspendmode kommt irgendwie komplett durcheinander - soweit ich das nachvollziehen kann dann, wenn das Manuell Item anfangs auf "False" ist (was es ja per se nach nem Neustart ist) und dann das Item, das "manuell" triggert, auch einen "False" Wert liefert. Klingt doof, aber es ist so: fahre ich eine Jalousie nach unten, also Wert 1, klappt alles. Fahre ich sie nach oben, wird der Suspend Mode nicht getriggert und danach läuft alles aus dem Ruder. Es wird plötzlich in den Suspend Mode gewechselt, obwohl das manuell Item von der KNX-Adresse getriggert wird, die ich eigentlich negiert habe - so würde ich das Log zumindest interpretieren. Ich mache den Test gerade über die Visu.
                                Grundsätzlich habe ich bei mir eine ähnliche Konfiguration und da habe ich bisher keine Probleme bemerkt.

                                Für mich schaut das so aus als ob die Funktion, die die Ausschluss-Objekte bei manueller Betätigung prüft, nicht richtig funktioniert. Ich habe in diese Funktion mal ein Logging eingebaut. Leider kann ich an dieser Stelle nicht das erweiterte Logging des Plugins nutzen, daher wird mit Loglevel "Debug" in das normale smarthome.py log geschrieben. Push auf Github ist erfolgt. Bitte baue die Änderungen mal bei dir ein und reproduziere das Problem. Es wäre gut wenn du mir jeweils einen Ausschnitt aus dem Debug-Log schicken könntest, bei dem es funktioniert hat und bei dem es nicht funktioniert hat.

                                Grüße
                                offlne

                                Kommentar

                                Lädt...
                                X