Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

  • arnix
    antwortet
    Zitat von mumpf Beitrag anzeigen
    bei mir funktioniert log_maxage. Kann es sein, dass Du nicht die neueste Version vom plugin hast? Und - nur der Vollständigkeit halber - es gehört ins plugin.conf, nicht ans item.
    Hi Waldemar,

    im plugin.conf ist klar.

    Ich habe nun im Autoblind-Verzeichnis ein git update gemacht, es kam aber keinerlei Meldung, so dass ich davon ausgehe, es war schon alles aktuell

    Und git status sagt nun:

    Code:
    On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working directory clean
    Der Fehler im Smarthome-Log lautet:

    Code:
    2015-10-26 19:48:07,467 DEBUG    Main         Python 3.4.2 -- smarthome.py:__init__:232
    2015-10-26 19:48:07,469 INFO     Main         Init Scheduler -- scheduler.py:__init__:86
    2015-10-26 19:48:07,472 DEBUG    Scheduler    creating 5 workers -- scheduler.py:run:93
    2015-10-26 19:48:07,473 INFO     Main         Init Plugins -- smarthome.py:start:274
    2015-10-26 19:48:07,489 DEBUG    Main         Plugin: knx -- plugin.py:__init__:43
    2015-10-26 19:48:07,506 DEBUG    Main         Plugin: autoblind -- plugin.py:__init__:43
    2015-10-26 19:48:07,543 ERROR    Main         Plugin autoblind exception: __init__() got an unexpected keyword argument 'log_maxage' -- plugin.py:__init__:57
    Traceback (most recent call last):
      File "/media/sda2/smarthome/lib/plugin.py", line 53, in __init__
        plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
      File "/media/sda2/smarthome/lib/plugin.py", line 80, in __init__
        exec("self.plugin = {0}.{1}(smarthome{2})".format(classpath, classname, args))
      File "<string>", line 1, in <module>
    TypeError: __init__() got an unexpected keyword argument 'log_maxage'
    2015-10-26 19:48:07,558 DEBUG    Main         Plugin: visu -- plugin.py:__init__:43
    2015-10-26 19:48:07,587 DEBUG    Main         Plugin: cli -- plugin.py:__init__:43
    2015-10-26 19:48:07,593 DEBUG    Main         Plugin: sql -- plugin.py:__init__:43
    Allerdings steht in meinem .git im /plugins/autoblind/ nur

    Code:
    gitdir: ../../.git/modules/plugins/autoblind
    müsste da nicht eine URL drin stehen??

    Grüße, Arne

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Zitat von arnix Beitrag anzeigen
    2) Ich wollte in der Konfiguration "log_maxage = 8" nutzen, damit mir das Verzeichnis nicht zu voll läuft. Dann bekomme ich im Smarthome-Log aber eine Fehlermeldung in der Art "unknown parameter: log_maxage". Funktioniert log_maxage nicht?
    Hi,

    bei mir funktioniert log_maxage. Kann es sein, dass Du nicht die neueste Version vom plugin hast? Und - nur der Vollständigkeit halber - es gehört ins plugin.conf, nicht ans item.

    Zu Deinem Punkt 1 kann ich nichts sagen, habe ich noch nicht benutzt, hätte aber erwartet, dass es geht. Werde es demnächst mal mit unserem Weihnachtsstern testen, der soll von Dezember bis Januar leuchten...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Danke,
    mit as_min_sun_altitude oder as_max_sun_altitude funktioniert die Morgendämmerung:-).. den Rest muss ich erst Testen (am Wochenende)..

    interessiert hätte mich trotzdem, wie ich von sh.sun.rise() (utc! based datetime ) ins as_min_time (datetime) umwandeln kann.. muss ich bei Gelegenheit mal gooogeln..

    Gruß Ivan


    Code:
    [autoblind]
        [[default]]      
            as_item_tag = sh.env.location.day()
            [[[morgendaemmerung]]]
                name = Morgendämmerung
                [[[[enter]]]]
                    as_min_sun_altitude = -6
                    as_max_sun_azimut = 180
            [[[tag]]]
                name = Tag (statisch)
                [[[[enter]]]]
                    as_min_sun_altitude = 0
                    as_value_tag = 1
            [[[abenddaemmerung]]]
                name = Abenddämmerung
                [[[[enter]]]]
                    as_max_sun_altitude = 6
                    as_min_sun_azimut = 180
            [[[nacht]]]    
                name = Nacht
                [[[[enter]]]]
                    as_max_sun_altitude = 0
                    as_value_tag = 0

    Einen Kommentar schreiben:


  • arnix
    antwortet
    Zitat von ivande Beitrag anzeigen
    Hallo allerseits,

    kann ich die Uhrzeit von sunrise bzw. sh.sun.rise() irgendwie "geradebiegen", dass as_min_time oder as_max_time diese als gültige Zeit erkennen?

    Gruß Ivan
    Hi Ivan,

    statt der Uhrzeit musst Du as_min_sun_altitude oder as_max_sun_altitude verwenden,also in deinem Beispiel

    Code:
    as_min_sun_altitude = -6
    Die obere Grenze könnte
    Code:
    as_max_sun_altitude = 0
    sein. Da der Zustand aber abends wieder auftaucht, habe ich stattdessen zusätzliche Uhrzeiten eingesetzt, also z.B
    Code:
    as_min_sun_altitude = -6
    as_min_time = 03:00
    as_max_time = 09:00
    Grüße

    Arne

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Hallo allerseits,

    kann ich die Uhrzeit von sunrise bzw. sh.sun.rise() irgendwie "geradebiegen", dass as_min_time oder as_max_time diese als gültige Zeit erkennen?


    Code:
    [[[morgendaemmerung]]]
                name = Morgendämmerung
                [[[[enter]]]]
                    as_min_time = sunrise(-6)
    Condition Set 'enter', condition 'time': Can not cast 'sunrise(-6)' to data type 'time' due to incorrect format! -- AutoBlindLogger.py:error:172

    Code:
    [[[morgendaemmerung]]]
    name = Morgendämmerung
    [[[[enter]]]]
    as_min_time = sh.sun.rise(-6).astimezone(sh.tzinfo()).strftime("%H:%M")
    error: Can not cast 'sh.sun.rise(-6)' to data type 'time' due to incorrect format!

    Gruß Ivan

    Einen Kommentar schreiben:


  • arnix
    antwortet
    Hallo offline,

    mir sind noch zwei Fragen gekommen:

    1) ich wollte eine etwas veränderte Führung zwischen Oktober und April. Daher habe ich fogendes verwendet:

    Code:
    as_min_month = 3
    as_max_month = 10
    as_negate_month = True
    Dann kommt im Autoblind-Log
    Code:
    2015-10-24 15:54:15.204734             Condition 'month':
    2015-10-24 15:54:15.205537                 error: Condition month: 'min' must not be greater than 'max'!
    2015-10-24 15:54:15.206054                 eval: plugins.autoblind.AutoBlindCurrent.get_month
    2015-10-24 15:54:15.206657                 min: 3
    2015-10-24 15:54:15.207069                 max: 10
    2015-10-24 15:54:15.207432                 negate: True
    Ich schließe daher, dass man bei as_xx_month kein negate machen kann, sondern zwei differenzierte Enter-Bedingungen (10-12, 01-03) machen muss, korrekt?

    2) Ich wollte in der Konfiguration "log_maxage = 8" nutzen, damit mir das Verzeichnis nicht zu voll läuft. Dann bekomme ich im Smarthome-Log aber eine Fehlermeldung in der Art "unknown parameter: log_maxage". Funktioniert log_maxage nicht?

    Viele Grüße

    Arne

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    @offline,

    dann revidiere ich das mal wieder! Mit ein bisschen nachdenken habe ich dann ein
    Code:
    as_set_RGB = eval:[255,255,255]
    gemacht und schon funktioniert das! So kann ich auf weitere Logiken diesbezüglich verzichten! Und ich habe gleich gesehen, dass ich auch bei DPT2 (Zwangsführung) ein List-Type brauche, da kann ich auch gleich das hier nutzen.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi @offline,

    jetzt bin ich wohl auf eine Grenze von Autoblind gestoßen, die Du vielleicht auch noch lösen kannst...

    Ich möchte mein Duschlicht (RGB) steuern und brauche dafür den DPT 232. Dieser muss für sh.py vom Typ list sein. Wenn ich aber über
    Code:
    as_item_RGB = OG.Bad.Duschlicht.RGB
    angebe, wobei
    Code:
    [[[[RGB]]]]
        type = list
        name = Duschlicht
        knx_dpt = 232
        ...
    ist, verabschiedet sich autoblind mit einem error
    Code:
    2015-10-24 15:31:21,537 ERROR    autoblind     -- __init__.py:run:115
    Das entsprechende Autoblind-Log ist sehr kurz:
    Code:
    2015-10-24 15:31:21.515965 Initialize Item OG.Bad.Duschlicht.AutoBlind.Rules ====================================
    2015-10-24 15:31:21.521652 Init state OG.Bad.Duschlicht.AutoBlind.Rules.Hell
    Bei den State Hell steht dann
    Code:
    as_set_RGB = [255,255,255]
    Mir ist klar, dass Du das nie implementiert bzw. dokumentiert hast. Ich hatte einfach nur mal versucht, ob es gehen würde. Auch das setzen von Listen geht in sh.py noch nicht, außer in Logiken. Das blöde ist, ich möchte eigentlich mittels Autoblind möglichst viele Logiken ablösen - ist dann blöd, noch von Logiken abhängig zu sein.

    Falls Du also mal wieder Zeit und Lust hast, könntest Du ja noch erlauben, dass man auch Items von type = list setzen kann. Wenn nicht, ist auch nicht schlimm, dann löse ich das mit einer Logik. Oder Du verrätst mir, wo ich reinschauen müsste, um Listen selber setzen zu können.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Thomas,

    mit cache = true meinte ich speziell laststate_id. Letztendlich hatte ich das drin, weil es von offline so empfohlen ist und ich davon ausging, dass er das drin hat, um nach einem Neustart den letzten Zustand zu haben. Ich habe es aber nie explizit ausprobiert und wundere mich jetzt, wieso meine state engines alle so stabil neu starten... aber vielleicht habe ich wirklich überall passende Bedingungen, so dass immer ein stabiler Start-Zustand gefunden wird. Muss ich nochmal checken.

    Zum Init-Zustand bei Dir: Es gibt einen Default-Zustand, ganz ohne enter-Bedingung, der wird angenommen, wenn kein anderer Zustand gültig ist. Der muss auch als letzter in der Liste stehen. Ich weiß nicht, ob man aber in einem Zustand die laststate_id setzen sollte. Selbst wenn das klappt, weißt Du nicht, ob das Plugin nicht sofort danach noch den Zustand auf "Init" setzt, da dieser ja dann noch gültig ist.

    Folgender Vorschlag: Mach doch ein normales Item "Presence" mit cache=true, das wird vom Zustand "present" auf true und vom "absend" auf false gesetzt. Bei "present" machst Du noch ein "enter_Init" mit as_value_Presence = true, bei "absend" ein "enter_Init" mit as_value_Presence = false und dann sollte Deine Engine auch reentrant sein.

    Gruß, Waldemar

    P.S.: Natürlich brauchst Du noch ein paar Bedingungen bei den "enter_Init", die verhindern, dass das "enter_Init" ausserhalb vom Neustart wahr werden...
    Zuletzt geändert von mumpf; 19.10.2015, 08:38. Grund: PS hinzugefügt

    Einen Kommentar schreiben:


  • firefox
    antwortet
    Hallo Waldemar,

    danke für die Tips.

    as_repeat_actions = false war schon mal ein Erfolg, wenn ich jetzt den absent state ohne die laststate Bedingung stehen lasse, dann läuft alles sauber. Nach einem Neustart muss dann halt sichergestellt werden, dass alle Bedingungen für absent erfüllt sind um Autoblind in einen definierten Zustand zu bekommen.

    Code:
    [EG]
        [[State]]    
            [[[Zentral]]]
                type = bool
                as_plugin = active
                name = Zustandsautomat EG
                as_startup_delay = 10
                as_repeat_actions = false
                as_laststate_item_id = EG.Zentral.Praesenz.auto_laststate_id
                as_laststate_item_name = EG.Zentral.Praesenz.auto_laststate_name
                cycle = 60
                eval_trigger = EG.Zentral.Praesenz.allrooms
    
                as_item_precenceRooms = EG.Zentral.Praesenz.allrooms
                as_item_daynight = EG.Zentral.Beleuchtung.tag_nacht
                as_item_centralOff = EG.Zentral.Beleuchtung.aus
                
                [[[[absent]]]]
                    type = foo
                    name = EG Abwesend
                    as_run_nma = eval:(sh.nma('Präsenz','EG Wohnung Status abwesend durch test'))
                    [[[[[enter]]]]]
                        as_value_precenceRooms = 0
                        as_value_daynight = 1
                        # as_value_laststate = EG.State.Zentral.present
                        
                [[[[present]]]]
                    type = foo
                    name = EG Anwesend
                    as_run_nma = eval:(sh.nma('Präsenz','EG Wohnung Status anwesend durch test'))
                    [[[[[enter]]]]]
                        as_value_precenceRooms = 1
                        as_value_laststate = EG.State.Zentral.absent
    Die Variante mit cache = true hab ich versucht, bei mir führt das allerdings nicht zum Erfolg. Vielleicht ist das aber nur ein Verständnisproblem. Meinst du mit State-Item "absent" oder "present" oder meinst du das laststate_id / name item? Beide hab ich mit cahce = true versehen, nach einem Init kommt aber immer "no matching state found".
    Aber mal angenommen das funktioniert hätte ich ja immer noch ein Problem falls der cache mal abraucht oder beim aller ersten Start.

    Um alles sauber abfangen zu können wäre eine Art "default" Bedingung hilfreich, die eben nur aufgerufen wird, wenn last_state_id leer ist und dann einen sauberen Zustand setzt.

    Ich hab sowas versucht, aber da passiert leider nix :

    Code:
    ....
                as_item_laststateid = EG.Zentral.Praesenz.auto_laststate_id
                as_item_laststatename = EG.Zentral.Praesenz.auto_laststate_name
    ....
    [[[[init]]]]
                    type = foo
                    name = EG Init
                    as_run_nma = eval:(sh.nma('Präsenz','EG Wohnung Status Init durch test'))
                    as_set_laststatename = 'EG Anwesend'
                    as_set_laststateid = EG.State.Zentral.present
                    [[[[[enter]]]]]
                        as_value_laststate = ""

    Gruß Thomas
    Zuletzt geändert von firefox; 18.10.2015, 16:37.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi firefox,

    die eine Sache, die mir sofort einfällt, ist die letzte Änderung von offline, siehe sein Post https://knx-user-forum.de/forum/supp...347#post862347. Mit as_repeat_actions = false solltest Du die Wiederholungen vermeiden können.

    Ansonsten sollte Dein coding oben stimmen, wenn Du das State-Item vom Autoblind mit cache = true versehen hast. Dann bist du nach einem Init in dem letzten Zustand. Zumindest habe ich das immer angenommen, mir fällt gerade auf, dass ich das noch nicht explizit getestet habe. Aber ich habe inzwischen 36 Autoblinds bei mir aktiv, wenn das nicht so wäre, wäre es mir schon aufgefallen, da ich wirklich viel mit sh.py rumspiele und häufiger neustarte. Solltest Du das explizit ausprobieren, wäre ne kurze Bestätigung hier sehr nett...

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • firefox
    antwortet
    Zitat von offline Beitrag anzeigen
    Code:
    as_value_laststate = my.autostate.condition.night
    Hallo zusammen,
    ich bin zwischenzeitlich ein gutes Stück weiter gekommen. Die Abfrage aller *.anwesend items war nach euren Tips einfach zu lösen. Falls es jemanden interessiert hier:

    Code:
    [[[[allrooms]]]]
    type = bool
    visu_acl = r
    enforce_updates = yes
    eval = or
    eval_trigger = *.anwesend
    Ich hab jetzt meine komplette An/Abwesenheits Logik nahezu vollständig durch das Autoblind abgelöst. Jetzt würde ich aber gerne nochmal eine GoodPractise für folgendes Thema nachfragen.

    Ich will keine Leave Bedingungen formulieren aus den hinreichend diskutierten Problemen. Allerdings will ich auch, dass die beiden Zustände nur angesprungen werden, wenn sich tatsächlich der Zustand ändert. (im Moment bekomme ich alle 300s die Meldung 'Präsenz','EG Wohnung Status anwesend durch test', da die laststate Bedingungen wie unten dargestellt nicht aktiviert sind)

    Jetzt könnte ich
    1. die cycle time raus nehmen und nur noch auf ein paar eval_trigger reagieren
    2. folgende Variante verwenden, die aber nach einem Init logischerweise in der Luft hängt und deshalb einen weiteren Zustand "Init" benötigt, der danach über ein Hilfsitem blockiert wird.
    3. eine weitere Möglichkeit verwenden die mir nicht einfällt ... aber euch vielleicht.

    Code:
    [[[[absent]]]]
    type = foo
    name = EG Abwesend
    as_run_nma = eval:(sh.nma('Präsenz','EG Wohnung Status abwesend durch test'))
    [[[[[enter]]]]]
    as_value_precenceRooms = 0
    as_value_daynight = 1
    as_value_laststate = EG.State.Zentral.present
    
    [[[[present]]]]
    type = foo
    name = EG Anwesend
    as_run_nma = eval:(sh.nma('Präsenz','EG Wohnung Status anwesend durch test'))
    [[[[[enter]]]]]
    as_value_precenceRooms = 1
    as_value_laststate = EG.State.Zentral.absent

    Danke und Gruß
    Zuletzt geändert von firefox; 18.10.2015, 10:57.

    Einen Kommentar schreiben:


  • Yfkt5A
    antwortet
    mumpf: hab mir schon sowas gedacht, aber hätte ja auch sein können das das Plugin sowas erkennt und eine Fehlkonfiguration meinerseits nicht ausgeschlossen...
    es steht ja auch im Log "Change of item .... by 'KNX', 'Logic' oder 'Visu'"...
    ausserdem ist hier von einem Dummy-Item die Rede

    Habe jetzt bei mir die eine Jalousie mal umkonfiguriert und es scheint für den Moment auch wie gewünscht zu funktionieren, aber bevor ich jetzt alle umbaue wäre es toll wenn ihr euren geübteren Blick mal draufwerfen könntet:
    Code:
    [EG]
        [[wohnen]]
            [[[raffstore]]]
                [[[[couch]]]]
                    name = Raffstore Wohnen Couch                    
                    type = bool
                    as_plugin = active                            
                    eval_trigger = autoblind.trigger | EG.wohnen.raffstore.couch.height_status | EG.wohnen.raffstore.couch.lamella_status
                    as_laststate_item_id = EG.wohnen.raffstore.couch.auto_laststate_id    
                    as_laststate_item_name = EG.wohnen.raffstore.couch.auto_laststate_name                
                    as_lock_item = EG.wohnen.raffstore.couch.auto_lock                    
                    as_suspend_item = EG.wohnen.raffstore.couch.auto_suspend            
                    as_suspend_time = 7200                                        
                    as_suspend_watch = EG.wohnen.raffstore.couch.updown | EG.wohnen.raffstore.couch.stepstop | EG.wohnen.raffstore.couch.height | EG.wohnen.raffstore.couch.lamella    
                    as_item_height = EG.wohnen.raffstore.couch.height_plugin        
                    as_item_lamella = EG.wohnen.raffstore.couch.lamella_plugin        
                    as_mindelta_lamella = 5                                
                    [[[[[night]]]]]
                        as_use = autoblind.default.night
                    [[[[[dawn]]]]]
                        as_use = autoblind.default.dawn
                    [[[[[dusk]]]]]
                        as_use = autoblind.default.dusk          
                    [[[[[day]]]]]
                        as_use = autoblind.default.day
                        
                    [[[[[auto_laststate_id]]]]]                        
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[[auto_laststate_name]]]]]                
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[[auto_lock]]]]]                    
                        type = bool
                        knx_dpt = 1
                        knx_send = 4/5/61
                        knx_status = 4/5/62
                        knx_listen = 4/5/61 | 4/5/60 | 4/5/59 | 4/5/0
                        visu_acl = rw
                        cache = on
                    [[[[[auto_suspend]]]]]
                        type = bool
                        knx_dpt = 1
                        knx_send = 4/5/63
                        visu_acl = r  
                    [[[[[updown]]]]]
                        type = bool
                        knx_dpt = 1
                        knx_send = 4/0/61
                        visu_acl = rw
                        enforce_updates = on
                    [[[[[stepstop]]]]]
                        type = bool
                        knx_dpt = 1
                        knx_send = 4/1/61
                        visu_acl = rw
                        enforce_updates = on
                    [[[[[height]]]]]            #wird für manuelle Bedienung verwendet von KNX/Visu
                        type = num
                        knx_dpt = 5.001
                        knx_send = 4/2/61
                        knx_init = 4/2/61
                        visu_acl = rw
                    [[[[[height_status]]]]]     #Status der vom Aktor zurück kommt
                        type = num
                        knx_dpt = 5.001
                        knx_init = 4/4/62
                        visu_acl = r
                        cache = on
                    [[[[[height_plugin]]]]]        #wird ausschliesslich vom Plugin verwendet
                        type = num
                        knx_dpt = 5.001
                        knx_send = 4/2/62
                        visu_acl = rw
                    [[[[[lamella]]]]]            #wird für manuelle Bedienung verwendet von KNX/Visu
                        type = num
                        knx_dpt = 5.001
                        knx_send = 4/3/61
                        knx_init = 4/3/61
                        visu_acl = rw
                    [[[[[lamella_status]]]]]    #Status der vom Aktor zurück kommt
                        type = num
                        knx_dpt = 5.001
                        knx_init = 4/4/63
                        visu_acl = r
                        cache = on
                    [[[[[lamella_plugin]]]]]    #wird ausschliesslich vom Plugin verwendet
                        type = num
                        knx_dpt = 5.001
                        knx_send = 4/3/62
                        visu_acl = rw
    Danke
    Zuletzt geändert von Yfkt5A; 16.10.2015, 09:59.

    Einen Kommentar schreiben:


  • offline
    antwortet
    Hi firefox,

    Zitat von firefox Beitrag anzeigen
    Alle meine Präsenzmelder Items heißen "XXX.anwesend". In den Smarthome Logiken kann ich mit "*.anwesend" arbeiten. Das geht nicht zufällig auch mit dem Plugin oder?
    Direkt geht das nicht, denn dann müsste das Plugin auch wissen, wie es aus den Werten der Items den einen Wert ermitteln soll, der mit den Grenzwerten verglichen wird.
    Es sollte aber möglich sein, ein Item anzulegen und über eval und eval_trigger die "*.anwesend" Items "zusammenzufassen". Dieses Item kann dann wiederum für das Plugin verwendet werden.

    Grüße
    offline

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    das ist doch klar, woher soll das Plugin wissen, was manuelle und was automatische Bedienung ist, wenn Du alles auf die gleiche GA bzw. das gleiche Item legst?
    Du musst für die manuelle Bedienung eigene Items mit eigenen GA anlegen, dann funktioniert das.

    Gruß, Waldemar

    Einen Kommentar schreiben:

Lädt...
X