Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatische Beschattung

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

    Hi,

    stell doch mal das gesamte autoblind hier rein, dann kann man vielleicht mehr sehen. Ich glaube, wir reden aneinander vorbei. Ich sagte schon, das Problem liegt nicht am manuell-Item, sondern dass autoblind Dein manuell-Item nicht kennt. Du musst dazu das rules-Item vom autoblind untersuchen, nicht das manuell-Item.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      Ok, also hier die zentrale Beschattung - ohne einzelne Zustände (die funktionieren ja).


      Code:
      [HOME]  
              [[shutter]]
                      name = Beschattungsautomatik
                      [[[reference_run]]]
                              name = Referenzfahrt triggern
                              type = bool
                              knx_dpt = 1
                              knx_send = 6/6/10
                              knx_listen = 6/6/10
                              enforce_updates = yes
                      [[[trigger]]]
                              name = Gemeinsamer 300s Trigger für alle Raffstores und Rolladen
                              type = bool
                              enforce_updates = yes
                              cycle = 300 = 1
                      [[[default]]]
                              # OBSERVER Items
                              as_item_brightness = AUSSEN.brightness
                              as_item_temperature = AUSSEN.temperature
                              as_item_presence = ..presence
                              as_item_roomtemp = ..roomtemp
                              as_item_bedtime = ..bedtime
      
                              # ACTION Items
                              as_item_pos = ...pos
                              as_item_angle = ...angle
      
                              # CONTROL Items
                              # as_item_manuell = ..manuell
                              as_item_lock = ..lock
                              as_item_suspend = ..suspend
      
      
                              [[[[LOCK]]]]
                                      name = Automatik gesperrt
                                      type = foo
      
                                      # Aktionen
                                      as_set_suspend = False
      
                                      [[[[[enter]]]]]
                                              as_value_lock = True
      
                              [[[[SUSPEND]]]]
                                      # Automatik nach Handbetrieb                                 name = Ausgesetzt nach Handbetrieb
                                      type = foo
      
                                      as_name = eval:autoblind_eval.insert_suspend_time("..suspend", "Automatik ausgesetzt bis %X")
      
                                      [[[[[on_enter_or_stay]]]]]
                                              # Suspend Item setzen
                                              as_action_suspend = function: special | value: suspend:..suspend,..manuell | repeat: True | order: 1
                                              as_action_name = function: set | to: eval:autoblind_eval.insert_suspend_time('..suspend', suspend_text='Ausgesetzt bis %X') | repeat: True | order: 2
                                              # Automatischen Retrigger nach Ablauf der Suspend-Zeit einplanen
                                              as_action_retrigger = function: set | to: true | delay: var:item.suspend_remaining | repeat: True | order: 3
                                      [[[[[on_leave]]]]]
                                              # Suspend-Item zurücksetzen
                                              as_action_suspend = function: set | to: False
                                              # as_action_suspend_end = function: set | to:
      
                                      [[[[[enter_manuell]]]]]
                                              type = foo
                                              as_value_trigger_source = eval: autoblind_eval.get_relative_itemid('..manuell')
      
                                      [[[[[enter_debug]]]]]
                                              type = foo
                                              as_value_trigger_source = eval: autoblind_eval.get_relative_itemid('..suspend')
                                              as_value_suspend = True
      
                                      [[[[[enter_stay]]]]]
                                              type = foo
                                              as_value_laststate = var:current.state_id
                                              as_agemax_suspend = eval:autoblind_eval.get_relative_itemvalue('..suspend_duration') * 60
                                              as_value_suspend = True
      Dann einfachen Ansteuerungen des Aktuators:

      Code:
      [EG]    
      
              [[office]]
      
                      [[[window]]]
      
                              [[[[shutter]]]]
                                      name = Rolladen
                                      [[[[[move]]]]]
                                              name = Rolladen fahren
                                              type = bool
                                              visu_acl = rw
                                              knx_dpt = 1
                                              knx_send = 3/1/0
                                              knx_listen = 3/1/0 # listen for manual action -> supend shutter automatic
                                              enforce_updates = true
                                      [[[[[stop]]]]]
                                              name = Rolladen stoppen
                                              type = bool
                                              visu_acl = rw
                                              knx_dpt = 1
                                              knx_send = 3/1/1
                                              knx_listen = 3/1/1 # listen for manual action -> supend shutter automatic
                                              enforce_updates = true
                                      [[[[[pos]]]]]
                                              name = Rolladen position anfahren
                                              type = num
                                              visu_acl = rw
                                              knx_dpt = 5001
                                              knx_send = 3/1/2
                                              knx_listen = 3/1/3
                                              knx_init = 3/1/3
                                              enforce_updates = true
      und noch die vererbte Autoblind Konfig für den speziellen Fall:

      Code:
      #   ___   __  __ _
      #  / _ \ / _|/ _(_)__ ___
      # | (_) |  _|  _| / _/ -_)
      #  \___/|_| |_| |_\__\___|
      #
      
      [EG]
              [[office]]
                      [[[window]]]
                              [[[[shutter]]]]
                                      [[[[[auto]]]]]
                                              [[[[[[lock]]]]]]
                                                      name = Automatik Sperre
                                                      type = bool
                                                      visu_acl = rw
                                                      knx_dpt = 1
                                                      knx_listen = 3/1/6
                                                      knx_send = 3/1/6
                                                      cache = yes
                                              [[[[[[suspend]]]]]]
                                                      name = Aussetzen
                                                      type = bool
                                                      visu_acl = rw
                                                      cache = true
                                                      # NIEMALS enforce_updates=yes setzen
                                              [[[[[[manuell]]]]]]
                                                      name = Manuelle Bedienung
                                                      type = bool
                                                      # check if items move,stop listen on knx
                                                      eval_trigger = EG.office.window.shutter.move | EG.office.window.shutter.stop | EG.office.window.shutter.pos
                                                      # pos Rückmeldung vom Aktor sperren!
                                                      as_manual_exclude = KNX:1.0.8 | Init:*
                                                      # as_manual_invert = true
                                                      as_manual_logitem = EG.office.window.shutter.auto.manuell
                                              [[[[[[bedtime]]]]]]
                                                      name = Schlafenszeit
                                                      type = bool
                                                      visu_acl = rw
                                                      value = False
                                                      cache = True
                                                      eval = sh.EG.office.bedtime()
                                                      eval_trigger = EG.office.bedtime
                                              [[[[[[presence]]]]]]
                                                      name = Anwesend
                                                      type = bool
                                                      visu_acl = rw
                                                      value = True
                                                      eval = True if sh.EG.office.presence() > 0 else False
                                                      eval_trigger = EG.office.presence
                                              [[[[[[roomtemp]]]]]]
                                                      name = Raumtemperatur
                                                      type = num
                                                      value = 21.0
                                                      eval = sh.EG.office.temperature()
                                                      eval_trigger = EG.office.temperature
                                              [[[[[[suspend_duration]]]]]]
                                                      name = Dauer der Unterbrechung in Minuten
                                                      type = num
                                                      value = 60
                                                      cache = true
                                              [[[[[[state_id]]]]]]
                                                      name = ID des aktuellen Zustands
                                                      type = str
                                                      visu_acl = r
                                                      cache = on
                                              [[[[[[state_name]]]]]]
                                                      name = Name des aktuellen Zustands
                                                      type = str
                                                      visu_acl = r
                                                      knx_dpt = 16 # ASCII, 14 bytes
                                                      knx_send = 3/1/7
                                                      knx_reply = 3/1/7
                                                      cache = on
                                                      telegram_message = "Shutter State OFFICE: [VALUE]"
                                              [[[[[[fsm]]]]]]
                                                      name = Shutter FSM
                                                      as_plugin = active
                                                      as_startup_delay = 90
                                                      # NO fast changing values, e.g. temperature
                                                      eval_trigger = HOME.shutter.trigger | EG.office.window.shutter.auto.lock | EG.office.window.shutter.auto.suspend | EG.office.window.shutter.auto.manuell | EG.office.window.shutter.auto.bedtime | EG.office.window.shutter.auto.presence
                                                      as_laststate_item_id = ..state_id
                                                      as_laststate_item_name = ..state_name
                                                      # as_item_suspend_end = ..state_suspend_end
                                                      as_suspend_time = eval:autoblind_eval.get_relative_itemvalue('..suspend_duration') * 60
                                                      as_item_retrigger = .
      
                                                      as_item_manual = EG.office.window.shutter.auto.manuell
      
                                                      [[[[[[[LOCK]]]]]]]
                                                              as_use = HOME.shutter.default.LOCK
                                                      [[[[[[[SUSPEND]]]]]]]
                                                              as_use = HOME.shutter.default.SUSPEND
                                                      [[[[[[[ASLEEP]]]]]]]
                                                              as_use = HOME.shutter.default.ASLEEP
                                                      [[[[[[[PRIVACY]]]]]]]
                                                              as_use = HOME.shutter.default.PRIVACY
                                                      [[[[[[[COOLING]]]]]]]
                                                              as_use = HOME.shutter.default.COOLING
                                                      [[[[[[[OPEN]]]]]]]
                                                              as_use = HOME.shutter.default.OPEN

      Kommentar


        Hi,

        das einzige, was ich bisher gesehen habe, ist unter den fsm-Item: Du hast da
        Zitat von gama Beitrag anzeigen
        as_item_manual = EG.office.window.shutter.auto.manuell
        Wenn ich das Beispiel in der Doku anschaue, dann heißt es wohl wirklich
        Code:
        as_item_manu[COLOR=#FF0000]ell[/COLOR] = EG.office.window.shutter.auto.manuell
        Versuch es nochmal damit, wenn dann Dein manuell-Item nicht getriggert wird, weiß ich auch nicht mehr weiter.

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          Hallo,

          das hat leider auch keinen Erfolg gebracht. Ich verstehe es nicht, da es ja schon einmal (mit der alten Version) funktioniert hat...

          Kommentar


            Hi,

            sorry, aber dann müssen hier Leute drauf schauen, die sich tiefer in der Materie auskennen. Ich kann Dir leider nicht mehr helfen, ich dachte es liegt genau an diesem Eintrag...

            Gruß, Waldemar
            OpenKNX www.openknx.de

            Kommentar


              Trotzdem vielen Dank! Irgendwie kommt man immer ans Ziel....

              Kommentar


                gama konntest du das Problem inzwischen lösen?

                Ich bin bei mir von SmarthomeNG 1.3 auf 1.4.1 umgestiegen und da hat das mit dem manuellen Item plötzlich nicht mehr geklappt. Grund war, dass das Registrieren der CLI Commands einen Fehler brachte und dadurch das "alive" für die spezielle eval-Funktion nicht gesetzt wurde. Ich habe jetzt im File CLICommands das except noch mit einem except Exception: erweitert, damit die 2 Befehle in der run-Funktion in __init__.py ausgeführt werden.

                Ansonsten schau doch einfach mal in die Datei Functions. Dort notfalls mal alive auf True setzen, ein paar log.error Einträge machen und gucken, was passiert,,?

                Kommentar


                  Hi,

                  zunächst ein gutes Neues Jahr in die Runde (bin gerade mit der Familie im Winterurlaub und habe soeben das Prinzip der "KNX-Ruhe" aufgrund des Regenwetters gebrochen
                  Nein, ich habe es vor Weihnachten nicht mehr weiter getrieben - aber Deine Erklärung scheint sehr plausibel.
                  Hast Du schon ein issue für i-am-offline aufgemacht, bzw. hast Du eine konkrete patch Idee? Ich kann es gerne (in ein paar Tagen) testen...

                  Grüße
                  Markus

                  Kommentar


                    Issue hab ich erstellt.. Wie der Fehler so behoben wird, dass die CLI Befehle angelegt werden, ist mir leider unklar. Es wird ja gemotzt, dass das "usage" Attribut fehlt. Fügt man ein Attribut hinzu, wird gemotzt, dass man zu viele Attribute übermittelt. Blick da nicht ganz durch

                    Kommentar


                      Kurz zur Info: mit dem branch 1.4.0 von autoblind und ein paar patches läuft es wieder. Danke.

                      Kommentar


                        Hi,

                        tolle Zusammenfassung!

                        Vielleicht ergänzt Du gegen Ende noch ein paar "Tipps und Tricks"?
                        Ich finde Deinen Ansatz z.B. mittels Prüfung
                        Code:
                        as_value_suspend_active: 'True'
                        den jeweiligen Status zu de-/aktivieren. So könnte auch von der Visu aus die Statemachine grob konfiguriert werden.

                        Weiterhin habe ich beispielsweise die Variable suspend_duration auf Sekunden umgestellt, sodass ich mit smartvisu die Dauer zwischen 1 Minute und einem Tag graphisch einstellen kann.
                        Code:
                        {{ basic.input('', gad_suspend_duration, 'duration', 60, 86400) }}
                        Zudem setze ich pro (Schlaf-)Raum eine "sleeping" Variable, welche mittels eine USZU steuern kann und die den Status "Nacht" zwangsführt. Die USZU hat den Vorteil, dass die Zeiten ebenfalls elegant per Visu durch jeden im Haus geändert werden können und auch das Wochenende Berücksichtigung findet (z.B. ausschlafen).

                        Ebenso habe ich die "Raumpräsenz" vorbereitet. Im Fall von Abwesenheit, ist der Hitzeschutz sehr konservativ und dunkelt den Raum noch stärker ab.

                        usw.

                        Nur so eine Idee

                        Grüße
                        Markus

                        Kommentar


                          Ja, ein Tipps+Tricks wäre sicher noch eine gute Idee. Das ist dann aber halt schon für die advanced user und die Anleitung sollte eher für Neueinsteiger dienen. Ich denke auch, dass offline eh schon viele Sachen in seinem Wiki zusammengetragen hat. Aber ist sicher ausbaufähig.

                          Wie meinst du das mit den Sekunden bei suspend_duration? Das sind ja ohnehin Sekunden, oder? Ich habs bei mir jedenfalls so gemacht, dass ich's in der Visu in Minuten angeben kann. Und dann wird in Sekunden umgewandelt:
                          Code:
                          as_agemax_suspend: eval:autoblind_eval.get_relative_itemvalue('..settings.suspendduration') * 60
                          Die Kombo mit der UZSU wäre sicher auch noch einen Hinweis wert, ja. Wenn du bezüglich Raumpräsenz was hast, kannst gerne hier posten Gehst du einfach auf die Bewegung im Raum? Ich evaluiere bei mir zB auch mittels Hilfsitems, ob innerhalb der letzten 5, 15 oder 30 Minuten Bewegung im Raum/Stock war. Das ist vermutlich das was du meinst? Fahren dann aber deine Jalousien/Lamellen tatsächlich auf heller, sobald du den Raum betrittst? Wär eigentlich gar keine blöde Idee.. der nächste Sommer kommt bestimmt

                          Kommentar


                            Schon richtig mit den Sekunden - und da das Visa-Widget auch mit Sekunden funktioniert, habe ich die Umrechnung (* 60) weggelassen.

                            Wie die Präsenz ermittelt wird, ist der Beschattung erst einmal egal. Primär geht es darum, dass es zwei Strategien gibt "Optimiert auf Lichteinlass" oder "Optimiert auf Hitzeschutz".

                            Off-Topic: die Präsenz kann am einfachsten über Präsenzmelder erfolgen. Ich dachte aber auch an eine Verknüpfung mit einer zentralen Haus-Sate-Machine die z.B. die eingebuchten Handys, Urlaub, etc. erkennt. Testweise habe ich das iPhone über HomeKit ein Bit setzen lassen, wenn ich mich annähere oder entferne (Radius 250m) - funktioniert schon ganz gut... aber wird in Summe nicht einfach zuverlässig UNS komfortabel den Präsenzzustand zu ermitteln - daher die Trennung in mehrere Statemachines...

                            Grüße
                            Markus

                            Kommentar


                              Angenommen ich möchte folgendes Verhalten forcieren, wie gehe ich da am besten vor?
                              Folgende Zustände sind in rules definiert:
                              Code:
                                              wind:
                                                  type: foo
                                                  as_use: jalousien.autoblind.default.wind_screens
                              
                                              lock:
                                                  type: foo
                                                  as_use: jalousien.autoblind.default.lock
                              
                                              eine Reihe weiterer Zustände
                              Wenn nun das Item im lock-Zustand ist und dann der Wind daher kommt, soll es natürlich in den Windzustand. Allerdings soll es NACH dem Wind wieder in den Lock-Zustand wechseln.

                              Beim Verlassen des Lock-Zustands wird ja lock auf False gesetzt. Ich habe daher mal einen Hilfszustand eingebaut, der nur dann eingenommen wird, wenn das Item zuvor im lock-Modus war. Dieser Zustand setzt dann beim Verlassen das lock wieder auf True. Problem ist allerdings, dass dieses Setzen von lock erst nach dem Einnehmen eines neuen Zustands passiert und nicht sofort beim Verlassen.

                              Wie ist das am saubersten und einfachsten umzusetzen?

                              Kommentar


                                Zur Info: Ich musste bei mir seit Master 1.5 in den rules-Abschnitt von allen Items "eval: true" hinzufügen.

                                Kommentar

                                Lädt...
                                X