Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Hi zusammen,

    Das Suspend-Item zu cachen ist überflüssig. Das Item wird vom Plugin nur geschrieben, damit man es für Anzeige/Auswertungszwecke zur Verfügung hat. Das Item wird an keiner Stelle gelesen und beim der Initialisierung des Plugins immer zurückgesetzt.

    Das Lock-Item hingegen kann man schon cachen. Dann überlebt die Sperre auch einen Restart von smarthome.py. Gleiches gilt für das Status-Id Item.

    Das Status-Name Item hingegen wird wieder nur geschrieben, hier macht ein Caching wieder keinen Sinn.

    Grüße
    offline

    Kommentar


      Jonah, Danke für die Info.. hab's mal eingebettet.. und scheint zu funzen.
      Zuletzt geändert von Onkelandy; 21.07.2015, 11:45.

      Kommentar


        Es leben die ersten Zuckungen der Verschattung!! Danke für die Lösung!

        Ich habe wohl noch ein kleine Verständnisproblem. Ich hoffe auf eine Hilfe.

        Anbei ein Debug.

        Vorbedingung: > 38 Gad Sonne an der Scheibe, brennende Sonne

        Logfile
        Code:
        2015-07-22 12:51:34.407707 Update state of item EG_Ess_Fenster ============================================
        2015-07-22 12:51:34.411421 Update triggered by Timer (source=None dest=None)
        2015-07-22 12:51:34.417864 Check if state 'jalegessfenster.night' ('Night') can be entered:
        2015-07-22 12:51:34.419617     Check condition set 'enter':
        2015-07-22 12:51:34.421508         Condition 'brightness': min=None max=500 negate=False current=33382.4
        2015-07-22 12:51:34.423103             to high -> not matching
        2015-07-22 12:51:34.424438     Check condition set 'enter_presence':
        2015-07-22 12:51:34.425959         condition'presence': Ignoring because of error: Condition presence: Neither 'item' nor 'eval' given!
        2015-07-22 12:51:34.427676         Condition 'brightness': min=None max=750 negate=False current=33382.4
        2015-07-22 12:51:34.429179             to high -> not matching
        2015-07-22 12:51:34.430640 State can not be entered
        2015-07-22 12:51:34.431933 Check if state 'jalegessfenster.dawn' ('Twilight in the morning') can be entered:
        2015-07-22 12:51:34.433408     Check condition set 'enter':
        2015-07-22 12:51:34.435031         Condition 'brightness': min=500 max=1000 negate=False current=33382.4
        2015-07-22 12:51:34.436536             to high -> not matching
        2015-07-22 12:51:34.437796 State can not be entered
        2015-07-22 12:51:34.439273 Check if state 'jalegessfenster.dusk' ('Twilight in the evening') can be entered:
        2015-07-22 12:51:34.440724     Check condition set 'enter':
        2015-07-22 12:51:34.442359         Condition 'brightness': min=500 max=1000 negate=False current=33382.4
        2015-07-22 12:51:34.443636             to high -> not matching
        2015-07-22 12:51:34.445099 State can not be entered
        2015-07-22 12:51:34.446528 Check if state 'jalegessfenster.suntracking' ('Tag (suntracking)') can be entered:
        2015-07-22 12:51:34.447776     Check condition set 'enter':
        2015-07-22 12:51:34.449428         Condition 'temperature': min=20 max=None negate=False current=38.56
        2015-07-22 12:51:34.450902             given limits ok -> matching
        2015-07-22 12:51:34.452333         Age of 'temperature': No limits given
        2015-07-22 12:51:34.453757         Condition 'sun_azimut': min=120 max=240 negate=False current=166.02072513658294
        2015-07-22 12:51:34.455257             given limits ok -> matching
        2015-07-22 12:51:34.456716         Age of 'sun_azimut': No limits given
        2015-07-22 12:51:34.458314         Condition 'sun_altitude': min=20 max=None negate=False current=61.10812473040581
        2015-07-22 12:51:34.459561             given limits ok -> matching
        2015-07-22 12:51:34.461022         Age of 'sun_altitude': No limits given
        2015-07-22 12:51:34.462629         Condition 'brightness': min=20000 max=None negate=False current=33382.4
        2015-07-22 12:51:34.464056             given limits ok -> matching
        2015-07-22 12:51:34.465267         Age of 'brightness': No limits given
        2015-07-22 12:51:34.466685 State can be entered
        2015-07-22 12:51:34.468129 Changing to jalegessfenster.suntracking ('Tag (suntracking)')
        Unter suntracking hatte ich eine variable Verschattung vorgestellt, also Anpassung der Höhe des Behangs und Änderung des Winkels
        Leider fährt nach der suspend_time die Jalusie jeweils auf den Tageswert, also volle Sonne im Zimmer.
        Habe ich irgenwo noch einen Fehler oder etwas falsch verstanden?

        Changing to jal_eg_ess_fenster.suntracking ('Tag (suntracking)') was passiert hier. Syntax per _ erläutert.

        Code:
        #/usr/local/smarthome/items/eg.conf
        [autoblind]
            [[default]]            
                as_item_temperature = aussen.mdt.tempsun
                [[[night]]]
                    name = Night
                    as_set_height = value:100
                    as_set_lamella = 80
                    [[[[enter]]]]
                        as_max_brightness = 500
                        as_min_time = 07:00
                        as_max_time = 19:00
                        as_negate_time = True
                [[[dawn]]]
                    name = "Twilight in the morning"
                    as_set_height = value:100
                    as_set_lamella = 25          
                    [[[[enter]]]]
                        as_min_brightness = 500
                        as_max_brightness = 1000      
                [[[dusk]]]
                    name = "Twilight in the evening"
                    as_set_height = value:100
                    as_set_lamella = 75
                    [[[[enter]]]]
                        as_min_brightness = 500
                        as_max_brightness = 1000
                [[[suntracking]]]
                    name =  "Tag (suntracking)"
                    [[[[enter]]]]
                        as_min_brightness = 20000
                        as_min_sun_azimut = 120
                        as_max_sun_azimut = 240
                        as_min_sun_altitude = 20
                        as_min_temperature = 20
                     [[[[leave_todark]]]]
                        as_max_brightness = 20000
                        as_min_delay = 1200
                     [[[[leave_azimut]]]]
                        as_min_sun_azimut = 120
                        as_max_sun_azimut = 240
                        as_negate_sun_azimut = True                
                [[[day]]]
                    name = "Day (static)"
                    as_set_height = value:0
                    as_set_lamella = 100
        
        [jalegessfenster]
                type = bool
                name = EG_Ess_Fenster
                as_plugin = active
                as_lock_item = eg.ess.schatt.auto_lock
                as_suspend_item = eg.ess.schatt.auto_suspend
        #        as_suspend_time = 7200
                as_suspend_time = 1800
                as_suspend_watch = eg.ess.schatt.move | eg.ess.schatt.stop
                as_laststate_item_id = eg.ess.schatt.auto_laststate_id
                as_laststate_item_name = eg.ess.schatt.auto_laststate_name        
                as_item_height = eg.ess.schatt.pos
                as_item_lamella = eg.ess.schatt.lamelle
                as_item_presence = True
                as_item_brightness = aussen.mdt.luxsued
                [[night]]
                    as_use = autoblind.default.night
                    [[[enter_presence]]]
                        as_max_brightness = 750
                        as_min_time = 07:00
                        as_max_time = 19:00
                        as_negate_time = True
                        as_value_presence = True
                    [[[[enter]]]]
                        as_value_presence = False
                                                
                [[dawn]]
                    as_use = autoblind.default.dawn
                [[dusk]]
                    as_use = autoblind.default.dusk            
                [[suntracking]]
                    as_use = autoblind.default.suntracking
                [[day]]
                    as_use = autoblind.default.day
        
        
        [eg]
            [[ess]]
        
                 [[[schatt]]]
                    name = Esszimmer Fenster
                    [[[[auto_lock]]]]
                        type = bool
                        knx_dpt = 1
                        knx_send = 3/4/18
                        knx_status = 3/4/18
                        knx_listen = 3/4/18 | 3/0/20
                        visu_acl = rw
                        cache = on
                    [[[[auto_suspend]]]]
                        type = bool
                        knx_dpt = 1
                        knx_send = 3/0/12
                        visu_acl = r  
                    [[[[auto_laststate_id]]]]
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[auto_laststate_name]]]]
                        type = str
                        visu_acl = r
                        cache = on
                    [[[[move]]]]
                        type = bool
                        enforce_updates = true
                        visu_acl = rw
                        knx_dpt = 1
                        knx_send = 3/4/0
                        knx_listen =  3/4/0
                        knx_init = 3/4/0
        
                    [[[[stop]]]]
                        type = bool
                        visu_acl = rw
                        enforce_updates = true #<<- damit der Stop-Befehl auch greift
                        knx_dpt = 1
                        knx_send = 3/4/1
                    [[[[pos]]]]
                        type = num
                        enforce_updates = true
                        visu_acl = rw
                        knx_dpt = 5.001
                        knx_cache = 3/4/6
                        knx_send = 3/4/4
                    [[[[lamelle]]]]
                        type = num
                        enforce_updates = true
                        visu_acl = rw
                        knx_dpt = 5.001
                        knx_cache = 3/4/7
                        knx_send = 3/4/5
                    [[[[winkel]]]]
                        type = num
                        enforce_updates = yes
                        visu_acl = rw
                        knx_dpt = 5
                        knx_cache = 3/4/7
                        knx_send = 3/4/5
                    [[[[winkelplus]]]]
                        type = num
                        visu_acl=rw
                        visu_acl = rw
                        enforce_updates = yes
                        eval = sh.eg.ess.schatt.lamelle(sh.eg.ess.schatt.lamelle()+5.0)
                    [[[[winkelminus]]]]
                        type = num
                        visu_acl = rw
                        enforce_updates = yes
                        eval = sh.eg.ess.schatt.lamelle(sh.eg.ess.schatt.lamelle()-5.0)
        Bis jetzt hatte ich immer Sonnenaufgang +/- AnzahlMinitenUp und Sonnenuntergang +/- AnzahlMinitenDown zur Steuerung benutzt.
        Durch eine Änderung der Minutenxy über die Visuoberfläche konnte ich up/downzeiten leicht verändern (Eibstudio).
        Eine sinnvolle Lösung, um die Zeiten den wechselnden Gegenheiten anzupassen.Regen , also Jal zu bei sundown,
        Sommernacht = sundown + 2:30 Std (oder Minuten)

        Für eine solche Lösung fehlt mir jeglicher Ansatz( py =Neuland).

        Gibt es da irgendwo ein Ansatz:
        z.B: as_max_time = 19:00 -> as_max_time =Sonnenuntergang + 2:40 (oder Minuten)

        Ich muss dringend die Parameter über die Visu anpassen, der WAV leidet, bei ständig wechselnden Testbedingungen

        Frohes Schwitzen

        Wolfgang
        Zuletzt geändert von schloessl; 22.07.2015, 15:13.

        Kommentar


          Hi,

          nach einem ersten Blick kann ich nur sagen, dass mir beim Zustand "suntracking" die Aktion fehlt, die in dem Zustand ausgeführt werden soll. Machst Du ja bei den anderen Zuständen auch (z.B. bei Day setzt Du height = 0 und lamella = 100).
          Ausserdem muss as_item_presence eine Item-Referenz sein, keine Konstante (daher dieser Fehler im Log).

          Ich glaube, Du hast das Plugin noch nicht ganz verstanden: Es ist ein Zustandsautomat, der eine Liste von vorgegebenen Bedingungen überprüft und den Zustand einnimmt, der den jeweiligen Bedingungen entspricht. Immer wenn ein Zustand eingenommen werden kann, werden Aktionen ausgelöst. Was gemacht werden soll, musst Du sagen. Definiere mal ein passendes height und lamella, dann wird das was.

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            Danke Waldemar,

            ich hatte es befürchtet.

            Also, wenn der Einfallwinkel der Sonne sich ändert, kann ich nur konstante " height und lamella" übertragen, eine Winkelberechnung und Höhenkorrektur erfolgt nicht?
            Kann ich hier mehrere Bedingung einbringen, Sonnenwinkel1, -- Sonnenwinkel n mit den entsprechenden " height und lamella"
            Ich kämpfe ja erst 2 Tage mit den Möglichkeiten im Schweiße meine Angesichts

            Gruß Wolfgang

            Kommentar


              Du kannst bei allen as_set_* auch ein eval: als Wert nehmen und im eval Deine Formel hinterlegen.
              Ich habe bei mir an einer Stelle zum Beispiel:
              Code:
              as_set_pos = eval:min(int((-(sh.Aussen.Wetter.Sonne.Altitude())+100)/5)*5,65)
              Das passt, um meinen Rolladen in der Küche nachzuführen.

              Was für Deine Jalousie zu machen ist, kann ich natürlich nicht sagen.

              Gruß, Waldemar
              Zuletzt geändert von mumpf; 22.07.2015, 17:33.
              OpenKNX www.openknx.de

              Kommentar


                Zitat von offline Beitrag anzeigen

                "2) Abschaltung der gesamten Logik mittels eines neuen Items, so dass ich nicht alle 18 Items deaktivieren muss (bei Besuch oder so)"

                Das habe ich bei mir so gelöst, dass ich eine GA habe, auf die alle "Aktiv"-Items zusätzlich hören.
                Hallo offline,

                könntest Du hier bitte mal ein kleines Bsp bringen? Brauche ich dazu ein 2. Aktiv-Item pro Raffstore?
                ++ Der ultimative ETS Schnellkurs ++
                KNX und die ETS vom Profi lernen
                www.ets-schnellkurs.de

                Kommentar


                  Hi,

                  sorry, aber das ist wirklich Elementarwissen zu sh.py!
                  Code:
                  knx_listen = 1/1/1 | 2/2/2
                  Dabei ist 1/1/1 eine GA, über die man das inaktiv schalten kann (z.B. lokal für diesen Raum) und 2/2/2 die globale, die an allen Items hängt.

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    Das mit dem Ausschalten der Automatik habe ich über ein zusätzliches Item gelöst. Dieses kann ich dann sowohl per Schalter als auch per Visu aktivieren. Ist es aktiv, wird die Automatik gelockt (in älteren Versionen des Plugins war es anders rum!!)

                    Code:
                    [[jalousien]]
                        [['automatik_lock']]
                        type = bool
                        visu_acl = rw
                        enforce_updates = yes
                        knx_dpt = 1
                        cache = True
                        knx_send = 4/5/0
                        knx_status = 4/5/100
                        knx_init = 4/5/0
                        [[['zeitschalter']]]
                                type = dict
                                uzsu_item = jalousien.automatik_lock
                                cache = True
                                visu_acl = rw
                    Und dann für jede Jalousie:
                    Code:
                    [[bad]]
                        as_lock_item =  bad.autostate_lock
                        eval_trigger=jalousien.automatik_lock    # Damit die Abfrage sofort durchgeführt wird, sobald der Lock aktiviert wurde
                                [[[autostate_lock]]]
                                    type = bool
                                    visu_acl = rw
                                    cache = on
                                    knx_dpt = 1
                                    knx_send = 4/5/1
                                    knx_status = 4/5/2
                                    knx_init = 4/5/1
                                    knx_listen = 4/5/0 # hört also auf die Gruppenadresse des "General-Versperrers", ginge aber auch mit nur mit Items mittels eval und eval_trigger
                                    enforce_updates = true
                    Was mir deinem Beispiel noch aufgefallen ist.. von 38 Grad steht nix in deiner Config, nur von 20 Grad. Wie misst du denn überhaupt die Temperatur direkt an der Scheibe!??

                    Kommentar


                      Zitat von mumpf Beitrag anzeigen
                      Hi,

                      sorry, aber das ist wirklich Elementarwissen zu sh.py!
                      Code:
                      knx_listen = 1/1/1 | 2/2/2
                      Dabei ist 1/1/1 eine GA, über die man das inaktiv schalten kann (z.B. lokal für diesen Raum) und 2/2/2 die globale, die an allen Items hängt.

                      Gruß, Waldemar
                      Waldemar, ich gebe Dir recht. Das was Du schreibst IST Elementarwissen. Nur leider löst das nicht mein Problem.

                      Ich möchte die gesamte Logik nachts ausschalten, aber den Status einzelner Items nicht überschreiben. Hintergrund: Wir haben einen Tag-Nacht-Modus für unser Haus, mit dem auch die RaffstoreAutomatik geschaltet werden soll. Somit kann ich am WE mal länger schlafen und es ist einfach ein bisschen individueller und passt besser für uns. Wenn jetzt aber Besuch da ist, möchte ich die beiden Raffstoren im Gästezimmer ausschalten (unsere Eltern sind eher traditionell und lieben Taster drücken :-). Auch bei einer Aktivierung der Automatik durch den Tag-Modus sollen also die beiden dann nicht aktiviert werden.
                      In offline's Logik (der Vorgänger) hatte ich da was separat zu eingebaut, würde aber den Code des Plugin ungern modifizieren.

                      hhhc
                      ++ Der ultimative ETS Schnellkurs ++
                      KNX und die ETS vom Profi lernen
                      www.ets-schnellkurs.de

                      Kommentar


                        Zitat von hhhc Beitrag anzeigen
                        Waldemar, ich gebe Dir recht. Das was Du schreibst IST Elementarwissen. Nur leider löst das nicht mein Problem.
                        Hi,

                        diesbezüglich sind wir uns wohl einig . Und Du musst zugeben, dass Du Dein Problem nicht so geschildert hast, dass man konkrete Lösungsvorschläge machen konnte...

                        Der Punkt ist, dass das as_lock_item (welches auch immer das bei Dir ist) ein ganz normales Item ist. Damit kannst Du dann alles machen, was sh.py erlaubt. In Deinem Beispiel würdest Du dort
                        Code:
                        eval = or
                        eval_trigger = <tag-nacht-lock-item> | <gästezimmer-lock-item>
                        eingeben und so die lokale Sperre die globale überschreiben lassen. Alternativ würde mir noch einfallen, dass Du für das Gästezimmer einen Zustand (als erstes in der Liste) definierst, der keine as_set_* action hat und auf <gästezimmer-lock-item> reagiert. Dann würde die Automatik zwar technisch laufen, aber solange <gästezimmer-lock-item> gesetzt ist, immer in dem Zusand landen, der nichts verändert.

                        Auf jeden Fall kann man das Lösen, ohne am Plugin was ändern zu müssen.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          Hi zusammen,

                          da das Plugin soweit gut läuft habe ich die aktuelle Version als Version 0.9.0 getaggt und in den master-Zweig gemerged.

                          Grüße
                          offline

                          Kommentar


                            Zitat von mumpf Beitrag anzeigen
                            In Deinem Beispiel würdest Du dort
                            Code:
                            eval = or
                            eval_trigger = <tag-nacht-lock-item> | <gästezimmer-lock-item>
                            eingeben und so die lokale Sperre die globale überschreiben lassen.
                            Ich habe das jetzt über 1 zusätzliches Item pro Raffstore sowie das Zentral-Item gelöst. Also eben über die 18 zusätzlichen...

                            Code:
                                            [[[[[auto_lock]]]]]
                                                type = bool
                                                visu_acl = rw
                                                cache = on
                                                eval = or
                                                eval_trigger = EG.gaestebad.raffstore.fenster.manual_lock | Raffstore.automatik
                                            [[[[[manual_lock]]]]]
                                                type = bool
                                                visu_acl = rw
                                                cache = on
                            Somit habe ich maximale Flexibilität ohne Änderung am Plugin.

                            EDIT: Wobei ich bei auto_lock wohl kein visu_acl = rw mehr bräuchte...
                            ++ Der ultimative ETS Schnellkurs ++
                            KNX und die ETS vom Profi lernen
                            www.ets-schnellkurs.de

                            Kommentar


                              Schloessl, ich vermute, du hast inzwischen die Möglichkeit, bei den lamella als Wert "auto" anzugeben, selbst entdeckt..? Das macht nämlich die Sonnenstandsberechnung und winkelt die Lamellen so ab, wie es eben Sinn macht.

                              Kommentar


                                Onkelandy: Kann es sein, dass Du eine alte Version von dem Plugin verwendest? "auto" gibt es schon länger nicht mehr, das ist jetzt mit eval (flexibler) gelöst. Das Äquivalent für das frühere "auto" ist jetzt eval:autoblind_eval.SunTracking().

                                Gruß, Waldemar
                                OpenKNX www.openknx.de

                                Kommentar

                                Lädt...
                                X