Ankündigung

Einklappen
Keine Ankündigung bisher.

Szenen mit Smarthome.py

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

    Szenen mit Smarthome.py

    Hi zusammen!

    Zur Verwaltung von KNX-Szenen habe ich im sh.py Mikrokosmos bisher nichts finden können. Daher ist bei mir etwas Code entstanden; in Anlehnung an den Szenencontroller von fry. Diesen möchte ich hier gern teilen. Da ich mit Python zuvor noch nie was gemacht habe, bitte ich um Nachsicht und freue mich auf evtl. Hinweise...

    scene.py ist eine Logik, die Szenen innerhalb von sh.py sowohl speichern als auch abrufen kann -- basierend auf den im sh.py verfügbaren items. Die Konfiguration bzw. der Zentralspeicher der Szenen ist in sich selbst wieder ein String item, bspw. wie folgt:

    Code:
    [home]
    	# zentraler Szenenspeicher
    	[[scenes]]
    		type = str
    		cache = on
    Eine Szene lässt sich dann innerhalb der logic.conf wie folgt definieren:

    Code:
    [bedroom_scene]
    	filename = scene.py
    	watch_item = bedroom.scene
    	scene_items = bedroom.light.ceiling, bedroom.light.bed, bedroom.light.wardrobe
    watch_item nimmt den Namen eines (zuvor definierten) Szenen Items auf, bspw. wie folgt:

    Code:
    [bedroom]
    	[[scene]]
    		type = num
    		enforce_updates = on
    		knx_dpt = 5
    		knx_listen = 7/0/58
    Und scene_items definieren die Elemente der Szene. Man kann also im Anschluss durch setzen des bedroom.scene items auf 0, 1, 2, usw. die entspr. KNX Szene abrufen bzw. mit 128, 129, 123, usw. speichern.

    Viel Spaß damit und besten Gruß,
    Timo

    scene.py Code:
    Code:
    #!/usr/bin/env python
    
    import json
    
    # Szenenkonfiguration laden
    scenesData = sh.home.scenes()
    scenes = {}
    if (len(scenesData) > 0): scenes = json.loads(scenesData) 
    
    # Triggerparameter auslesen
    sceneNo = str(trigger['value'] & 127)
    loadOperation = ((trigger['value'] & 128) == 0)
    watchItemName = trigger['source'] 
    
    # Szenenkonfiguration initialisieren, falls erforderlich
    if not watchItemName in scenes: 
    	scenes[watchItemName] = {}
    if not sceneNo in scenes[watchItemName]:
    	scenes[watchItemName][sceneNo] = {}
    
    # Szene aus Konfiguration auslesen
    scene = scenes[watchItemName][sceneNo]
    
    # Elemente der Szene behandeln
    for sceneItem in logic.scene_items:
    	if (loadOperation):
    		if sceneItem in scene:
    			exec('sh.' + sceneItem + '(\'' + str(scene[sceneItem]) + '\')')
    	else:
    		# save operation
    		scene[sceneItem] = eval('sh.' + sceneItem + '()')
    
    # Szenenkonfiguration speichern
    sh.home.scenes(json.dumps(scenes))

    #2
    Coole Sache Timo. Wollte ich auch schon länger mal angehen, aber irgendwie hat immer die Zeit gefehlt. Was mir noch nicht ganz gefällt, ist der zentrale Szenenspeicher. Es wäre schöner, wenn man den nicht konfigurieren müsste, sondern wenn der einfach da wäre

    Über solche und ähnliche Sachen wollte ich am Frankenstammtisch mal mit Marcus reden, wie man das am schönsten lösen kann, denn das "Problem" tritt häufiger auf. Ich bin da auch noch nicht so drin in Python mit den ganzen Möglichkeiten, daher bin ich gespannt, was Marcus meint, wo man noch Hand anlegen kann... ich sehe jetzt sonst auf Anhieb mal nichts.
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #3
      Hallo Timo,

      sauber gemacht.

      Ich denke Szenen fehlen wirklich noch. Auf dem Stammtisch habe ich mich mit Niko dazu ausgetauscht. Der Aufwand dafür sollte nicht so groß sein.
      Mal sehen...

      Bis bald

      Marcus

      Kommentar


        #4
        Hallo Timo,

        ich habe im github mal den Support für Szenen hinzugefügt.

        In dem Ordner 'scenes' müssen die einzelnen Dateien für die Szenen abgelegt werden.

        Code:
         # items/beispiel.conf
        [beispielszene]
            type = scene
        Code:
        # scenes/beispielszene
        0 test.eins 0
        0 test.zwei 0
        1 test.eins 1
        1 test.zwei 2
        1 LogicName Blub
        Bedeutung wenn das Item 'beispielszene' den Wert 0 erhält, dann werden die Items test.eins und test.zwei auch auf 0 gesetzt.
        Wenn es auf 1 gesetzt wird, dann wird test.eins mit 1 und test.zwei mit 2 belegt. Weiterhin wird die Logic mit dem Name 'LogicName' mit dem Wert Blub aufgerufen.

        Verständlich?

        Bis bald

        Marcus

        Kommentar


          #5
          Hi Marcus!

          Wenn ich hier die KNX-Brille aufsetze: Wie würde ich dann Szenen über den Bus mit einem passenden Telegramm speichern können?

          Ich denke hier steckt eine grundlegende Designentscheidung dahinter: Sollen Szenen in sh.py funktionieren wie in KNX oder "anders" (um bspw. Logiken in Szenenaufrufen zu unterstützen, womit aber ggf. KNX-Verhalten verloren geht)?

          Weitere Aspekte:
          • Beinhalten die unterschiedlichen Szenen eines Item immer symmetrische Items/Logiken?
          • Soll das Szenenitem auslesbar sein? Im KNX ist das bisher AFAIK eher "fire and forget". Das passt auch dazu, dass man ja schon mal einzelne Leuchten nachdimmt. Strenggenommen ist das dann nicht mehr die zuletzt eingestellte Szene.
          • Auch der im anderen Thread gewünschte hierarchische Szenenaufbau wäre hier bzgl. KNX-artigkeit zu hinterfragen.
          • Braucht man ggf. zwei Arten von Szenen? Eine, die strikt einen KNX-Szenenbaustein/-Controller emuliert (so wie auch in Hardware verfügbar) und eine mächtige inkl. Logiken, Asymmetrien, Hierarchien, etc.


          Was denkst du?

          Besten Gruß,
          Timo

          Kommentar


            #6
            Hi Timo,

            Zitat von timov Beitrag anzeigen
            Ich denke hier steckt eine grundlegende Designentscheidung dahinter: Sollen Szenen in sh.py funktionieren wie in KNX oder "anders" (um bspw. Logiken in Szenenaufrufen zu unterstützen, womit aber ggf. KNX-Verhalten verloren geht)?
            ich denke es sind wirklich zwei komplett unterschiedliche Ansätze. Bzw. es ist auch ein dritter Weg denkbar der beides miteinander verbindet. Ich hadere aber mit dem dynamischen Anpassen der Szenen.

            Zitat von timov Beitrag anzeigen
            Wie würde ich dann Szenen über den Bus mit einem passenden Telegramm speichern können?
            Bei meiner jetzigen Implementierung gar nicht.

            Ketzerisch, wieso KNX Szenen nach implementieren? Das sollte doch am besten in den KNX-Aktoren ablaufen.
            Die Antwort: Es ist einfacher Anpassungen an bestehenden Szenen zu machen.
            Wie oft kommen solche Änderungen vor?

            Bei der Lösung die momentan in github ist kann man asymmetrische Szenen aufbauen die auch noch verschachtelt sein dürfen und Logiken aufrufen können. Auslesen kann man lediglich die momentan eingestellte Szene, wobei Abweichungen nicht beachtet werden.

            Die Frage, die ich mir stelle, ob es notwendig ist. Szenen über KNX 'nachjustieren' zu können. Das ist wahrscheinlich etwas mehr Aufwand.

            Und ich habe noch zwei spannende Plugins im Kopf die raus wollen ;-)

            Bis bald

            Marcus

            Kommentar


              #7
              Man sollte die dann ggf. nicht "Szenen" nennen, auch wenns im git jetzt so dateht
              Sonst ist die Assoziation zu KNX Szenen immer da.
              Derzeit zwischen Kistenauspacken und Garten anlegen.
              Baublog im Profil.

              Kommentar


                #8
                Ich finde es schon praktisch, Szenen über einen Taster speichern zu können und wir verwenden das auch immer wieder mal. Dabei kann nicht jeder Busteilnehmer alle KO die er anbietet auch in Szenen einbinden und auch nicht jeder Aktor kann Szenen verarbeiten. Daher verwende ich diese dann in den Szenen eines TS3 um auch nicht szenenfähige Aktoren in Szenen verwenden zu können.

                Daher plädiere ich für das Speichern von Szenen
                Mit freundlichen Grüßen
                Niko Will

                Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                Kommentar


                  #9
                  Hi zusammen!

                  Den Anwendungsfall, Szenen per KNX umzuparametrisieren, habe ich aktuell immer mal wieder; und künftig wohl auch immer wieder dann, wenn mal wieder irgendwo eine Leuchte dazukommt (danke DALI...) -- und da sind noch einige Wünsche im Bereich RGBW LED offen

                  Gruß,
                  Timo

                  Kommentar


                    #10
                    Zitat von timov Beitrag anzeigen
                    und künftig wohl auch immer wieder dann, wenn mal wieder irgendwo eine Leuchte dazukommt (danke DALI...) -- und da sind noch einige Wünsche im Bereich RGBW LED offen
                    und genau dann musst Du immer den Texteditor anwerfen.

                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      ... muss ich das nicht in allen Varianten? In der "KNX-Variante" bzw. in meiner bisher implementierten Logik muss ich nur das neue Leuchte-Item dem Szenen-"Item" (bei mir aktuell eine Logik) namentlich hinzufügen. Danach gehe ich den betreffenden Raum und parametrisiere die Szenen mit der neuen Leuchte vor Ort durch.

                      P. S.: Und den Texteditor werfe ich eh an, um das Leuchtenitem an sich erst mal anzulegen...

                      Kommentar


                        #12
                        Hallo,

                        ich nutze SmartHome.py noch nicht, aber ich wollte es gerade installieren, da mein Dali-GW nur 16 Szenen kann, wobei 16 Szenen für 64 Lampen und 9 Räume sehr wenig sind. Daher habe ich überlegt SH.py dafür zu nutzen.

                        Allerdings bräuchte ich dafür die Implementierung von timov. Ich habe jetzt aber nicht verstanden, ob diese jetzt in SH.py verfügbar ist, oder nicht?
                        Spricht etwas dagegen, diese zu integrieren, wenn auch zusätzlich zu der von Markus?

                        Gruß,
                        Hendrik

                        Kommentar


                          #13
                          Hi Hendrik,

                          die Lösung von Timo ist eine Logik und somit verfügbar. Die kann jeder verwenden und muss nicht 'weiter' integriert werden.

                          Verständlich?

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Szenen mit Smarthome.py

                            Ahh, ok.

                            Überleben die Szenen auch nen Neustart?


                            Gesendet von unterwegs

                            Kommentar


                              #15
                              Zitat von henfri Beitrag anzeigen
                              Überleben die Szenen auch nen Neustart?
                              ja.

                              Bis bald

                              Marcus

                              Kommentar

                              Lädt...
                              X