Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

  • Onkelandy
    antwortet
    Hi @offline!

    Danke für das Update. Hier ist mal das Log nach dem vorhin beschriebenen Prozedere. Nach dem Init fahre ich die Jalousie nach oben und es passiert nix. Laut Log meint Autoblind/Smarthome, dass die Aktion von Init getriggert wurde. Wohl, weil das Manuell-Item eben nicht evaluiert wird. Das erklärt dann, dass der Suspend Mode nicht aktiviert wird.
    Code:
    2016-01-19 20:13:02,227 DEBUG    Main         10.0.0.86:56636 sent '{"cmd":"item","id":"screens.sueden_s2.kz","val":"0"}' -- __init__.py:json_parse:272
    2016-01-19 20:13:02,237 DEBUG    Main         Triggering screens.sueden_s2.automatik.manuell - by: Visu source: 10.0.0.86:56636 dest: None value: {'source': 'screens.sueden_s2.kz', 'valu -- scheduler.py:trigger:164
    2016-01-19 20:13:02,241 DEBUG    Main         knx: 0.0.0 set 4/1/3 to False -- __init__.py:parse_telegram:198
    2016-01-19 20:13:02,247 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-19 20:13:02,244 DEBUG    screens.sueden_s2.automatik.manuell running manual_item_update_eval for item 'screens.sueden_s2.automatik.manuell' source 'Eval caller 'screens.sueden_s2.kz' -- AutoBlindFunctions.py:manual_item_update_eval:41
    2016-01-19 20:13:02,255 DEBUG    screens.sueden_s2.automatik.manuell original trigger by caller 'Init' source 'None' -- AutoBlindFunctions.py:manual_item_update_eval:47
    2016-01-19 20:13:02,260 DEBUG    screens.sueden_s2.automatik.manuell Current value of item screens.sueden_s2.automatik.manuell is False -- AutoBlindFunctions.py:manual_item_update_eval:49
    2016-01-19 20:13:02,263 DEBUG    screens.sueden_s2.automatik.manuell checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26'] -- AutoBlindFunctions.py:manual_item_update_eval:63
    2016-01-19 20:13:02,259 DEBUG    screens.sueden_s2.automatik.manuell running manual_item_update_eval for item 'screens.sueden_s2.automatik.manuell' source 'Eval caller 'screens.sueden_s2.kz' -- AutoBlindFunctions.py:manual_item_update_eval:41
    2016-01-19 20:13:02,265 DEBUG    screens.sueden_s2.automatik.manuell Init:*: matching. Writing value False -- AutoBlindFunctions.py:manual_item_update_eval:70
    2016-01-19 20:13:02,271 DEBUG    screens.sueden_s2.automatik.manuell original trigger by caller 'Init' source 'None' -- AutoBlindFunctions.py:manual_item_update_eval:47
    2016-01-19 20:13:02,276 DEBUG    screens.sueden_s2.automatik.manuell Current value of item screens.sueden_s2.automatik.manuell is False -- AutoBlindFunctions.py:manual_item_update_eval:49
    2016-01-19 20:13:02,279 DEBUG    screens.sueden_s2.automatik.manuell checking exclude values: ['Init:*', 'SQLite:*', 'KNX:1.1.5', 'KNX:1.1.26'] -- AutoBlindFunctions.py:manual_item_update_eval:63
    2016-01-19 20:13:02,281 DEBUG    screens.sueden_s2.automatik.manuell Init:*: matching. Writing value False -- AutoBlindFunctions.py:manual_item_update_eval:70

    Habe das nun mit anderen Jalousien getestet. Wenn ich rauf fahre, kein Suspend. Wenn ich runter fahre, funktioniert es. Und dann auch immer. Aber wenn ich nie manuell runter fahre, komm ich auch nie in den Suspend Mode.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    ivande
    Das mit dem verzögerten Schalten funktioniert so:
    Code:
    as_set_sequencer_sperren = item:..settings.sperren.party
    as_delay_sequencer_sperren = value:15
    Die Sache mit dem Suspend_Ende für ein anderes Items hätte ich mir auch gewünscht.. funzt aber momentan wohl nicht.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Hallo @offline,

    Laut Deiner recht ausführlichen Anleitung kann ich eine Aktion verzögert ausführen. Kann ich damit auch verzögert ein Item auf einen bestimmten Wert setzen? Ich scheitere noch an der Umsetzung..

    Code:
     
     as_item_Referenzfahrt = eg.kueche.jalousie.tuer.referenzfahrt  [[[[[Referenzfahrt]]]]]   <...>   as_delay_Referenzfahrt  <<< um 60Sekunden Verzögert auf 0 Setzen..   <...>


    kann ich ähnlich dem "Suspend-Ende in einen Text einsetzen" dies auch mit einer Anderen Aktion machen? Ich habe einen Status manuelles Beschatten, dieser soll für z.B. 1h aktiv bleiben und dann wieder in den normalen auto-Modus wechseln.. funktioniert soweit, nur über die Anzeige der Rest-Zeit bin ich mir nicht sicher?

    Code:
      
     [[[[[[[Beschatten_manuell]]]]]]]   type = foo   name = Beschatten manuell   as_set_Position = 100   as_set_Lamellenposition = eval:int((sh.System.Sonne.Hoehe())*90/45)   as_name = eval: autoblind_eval.insert_suspend_time('..State.beschatten', suspend_text='Beschatten bis %X')   [[[[[[[[enter]]]]]]]]     as_value_beschatten = True     as_agemax_beschatten = 3600   [[[[[[[Beschatten_manuell_end]]]]]]]     #$order = 21     type = foo     name = Beschatten manuell Ende     as_set_beschatten = False   [[[[[[[[enter]]]]]]]]   as_value_beschatten = True   as_agemin_beschatten = 3600
    Gruß Ivan

    Einen Kommentar schreiben:


  • offline
    antwortet
    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

    Einen Kommentar schreiben:


  • hhhc
    antwortet
    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.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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...

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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

    Einen Kommentar schreiben:


  • hhhc
    antwortet
    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!

    Einen Kommentar schreiben:


  • ivande
    antwortet
    jetzt läufts :-)

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



    Gruß Ivan

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    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

    Einen Kommentar schreiben:


  • ivande
    antwortet
    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

    Einen Kommentar schreiben:


  • offline
    antwortet
    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

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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 ')

    Einen Kommentar schreiben:


  • ivande
    antwortet
    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

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X