Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Anfänger: 1. Logik (Alle Fenster EG)

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

    - √ - Anfänger: 1. Logik (Alle Fenster EG)

    Hallo Zusammen,
    bin seit 1 Woche stolzer Besitzer eines RPi. Smarthome läuft und die Visu ist der Oberhammer. Ich wollte mich jetzt mal dran machen, eine kleine Logik zu implementieren.
    Wie beschrieben geht es im Beispiel um alle Fenster im EG. In der Visu möchte ich auf der Navigation schon beim List EG zeigen, das Fenster oder Türen offen sind. Ich muss also über eine Oder Verknüpfung alle Fenster EG abfragen und eine Variable (GA oder nicht) auf True oder False setzen, wenn die Fenster im EG verändert werden.

    items.conf
    Code:
    [Fenster_EG]
     Type = bool
     visu = yes
    logic.conf
    Code:
    [Fenst_EG]
      filename = AlleFensterEG.py
      watch_item = EG.WC.Fenster | EG.Kueche.Fenster ???
    Kann ich die watch_items beliebig aneinander hängen, oder gibt es hier Grenzen?

    Meine Erwartungshaltung ist, dass bei Änderung eines der Fenster meine Logik aufgerufen wird. Dort werde ich alle Fenster EG über Oder verknüpft abfragen. und dann eben Fenster_EG auf True oder False setzen. In der Endausbaustufe soll das Ganze dann evtl. auf das iphone gepushed werden, wenn Zentral_Aus gedrückt wird. Dann muss die Visu gar nicht aufgerufen werden und man kann das Haus verlassen und sicher sein, dass Türen und Fenster zu sind.

    Ich habe auch einige Einträge hier gefunden, in denen mit eval und eval_trigger in der item.conf gearbeitet wird. Die Logik hier erschließt sich mir überhaupt nicht. Da werde ich auch aus der Doku nicht schlau.

    Hoffe Ihr könnt mir kurz über den 1. Berg helfen. Evtl. hat jemand auch einfach ein paar kommentierte Beispiele, dann kann ich mich da auch reinfuchsen.

    Blöd ist nur, das ich immer die smartvisu neu starten muß. Sie läuft ja jetzt schon produktiv :-) Wie macht ihr das?

    Viele Grüße und vielen Dank für die Hilfe
    Marco

    #2
    Hi Marco,

    dazu brauchst Du keine Logik. Und Du kannst beliebig viele Items verwenden.

    Wenn alle Fenster bei Dir im EG folgende Struktur haben

    EG.Wohnzimmer.Fenster
    EG.Kueche.Fenster
    EG.Buero.Fenster

    dann kannst Du folgendes machen:

    Code:
    [EG]
    [[Fenster]]
       type = bool
       eval = or
       eval_trigger = EG.*.Fenster
    Siehe auch: Configuration ? SmartHome.py 1.0 documentation

    Bis bald

    Marcus

    Kommentar


      #3
      Hallo Marcus,
      das ist ja total genial. Traurig nur, dass ich jetzt meine 1. Logik nicht brauche. Aber das läßt sich bestimmt nachholen. Die Doku zu eval hab ich übrigens gelesen. Aber erst jetzt mit Deiner Erklärung verstanden.
      Die Doku verstehe ich an der Stelle immer noch nicht...
      Code:
       [[dew]]
              type = num
              eval = sh.tools.dewpoint(sh.room.temp(), sh.room.hum())
              eval_trigger = room.temp | room.hum  # every change of temp or hum would trigger the evaluation of dew.
      Was passiert hier bei eval?

      Viele Grüße
      Marco

      Kommentar


        #4
        Code:
        [[dew]] // name des items (nicht logik)
                type = num // Wert wird gespeichter als Zahl oder binär oder
                eval = sh.tools.dewpoint(sh.room.temp(), sh.room.hum()) // Was ausgeführt wird, wenn der Trigger auslöst
                eval_trigger = room.temp | room.hum  // wie dokumentiert, die zu überwachenden Objekte
        Der eval_trigger schaut also immer nach ob sich was an den triggers ändert. Wenn sich was ändert, wird eval aufgerufen. In deinem Fall wird ein smarthome-Tool namens dewpoint (Taupunkt) aufgerufen. Dem übergeben werden 2 Variaben: Temperatur und Luftfeuchtigkeit. Daraus liefert dewpoint dann den Taupunkt und speichert ihn als dew. Das kannst Du dann z.B. in der Visu abrufen (sh.room.dew beim Beispiel in der Doku).

        Soviel zumindest mein Halbwissen.

        Kommentar


          #5
          Dann können also neben den festen keywords
          • sum: compute the sum of all specified eval_trigger items.
          • avg: compute the average of all specified eval_trigger items.
          • and: set the item to True if all of the specified eval_trigger items are True.
          • or: set the item to True if one of the specified eval_trigger items is True.


          auch Funktionen oder Logiken bei eval_trigger verwendet werden. Wenn sh.tools.dewpoint auf eine Python Funktion aus dem Tools-Verzeichnis verweist.
          Klappt das dann auch mit sh.logics.logic? Und kann ich auch bei Logik-Funktionen Parameter mitgeben?

          Kommentar


            #6
            Code:
            [EG]
            [[Fenster]]
            type = bool
            eval = or
            eval_trigger = EG.*.Fenster
            Siehe auch: Configuration ? SmartHome.py 1.0 documentation
            Das ist eine elegante Möglichkeit alle Fenster abzufragen, aber würde bzw. wie würde es funktionieren, wenn meine Fenster einen Wert (0= geschlossen, 1= gekippt, 2 = drehgeöffnet) zurück melden, also benötige ich immer den höchste Wert in der Rückmeldung (also ein Fenster offen =2 oder wenn nur eines auf gekippt ist = 1, bei einem auf kipp und eines offen =2)?

            Kommentar


              #7
              Hi,

              probier es doch einfach aus.

              Bis bald

              Marcus

              Kommentar


                #8
                Hi.
                Naja. Mit Bool und or wird es nicht funktionieren, da er die Werte 0, 1 und 2 hat. Vielleicht über eval ne Logik triggern?

                Gruss
                Marco

                Kommentar


                  #9
                  Probier es einfach aus! Das funktioniert schon.

                  Kommentar


                    #10
                    So - da bin ich wieder. Das mit eval und eval_trigger funktioniert 1a. Jetzt kämpfe ich mit der Logik. Und es will einfach nicht.

                    Soll auch nix großes sein.
                    Hier die Logic.conf
                    Code:
                    [develop]
                    	filename = logic_test.py
                    	visu_acl = true
                    	watch_item = Zentral.develop
                    logic_test
                    Code:
                    #!/usr/bin/env python
                    #
                    	logger.info("logic.test läuft")
                    	logger.info(trigger['by'])
                    	logger.info(trigger['source'])
                    	logger.info(trigger['dest'])
                    	logger.info(trigger['value'])
                    items (smartvisu.conf)
                    Code:
                    [Zentral]
                        [[develop]]
                            type = bool
                            viu_acl = rw
                        [[Beleuchtung]]
                            [[[Zentral_Licht]]]
                                type = bool
                                visu_acl = rw
                                knx_dpt = 1
                    Die Buttons:
                    Code:
                    {{ basic.button('Zentral.develop', 'Zentral.develop','', icon0~'edit_collapse.png', '', '') }}
                    {{ basic.button('Zentral.develop1', 'develop','', icon0~'edit_collapse.png', '', '') }}
                    {{ basic.trigger('Zentral.develop2', 'develop', 'item.name', '', 'item') }}
                    Laut log.file ist Zentral.develop read only? Bzw. läßt sich die Logik develop auch nicht direkt aufrufen?
                    Code:
                    2014-01-20 22:29:10,654 WARNING  Main         Client 192.168.1.138:49761 requested invalid item: develop -- __init__.py:json_parse:293
                    2014-01-20 22:29:49,634 WARNING  Main         Client 192.168.1.138:49761 want to update invalid item: develop -- __init__.py:json_parse:285
                    2014-01-20 22:30:07,000 WARNING  Main         Client 192.168.1.138:49761 want to update read only item: Zentral.develop -- __init__.py:json_parse:283
                    Hat jemand einen kleinen Tip für mich..
                    Danke und Gruss
                    Marco
                    Angehängte Dateien

                    Kommentar


                      #11
                      viu_acl?


                      Gesendet von unterwegs

                      Kommentar


                        #12
                        es geht - Hölle ist das cool
                        Vielen Dank.

                        Kommentar

                        Lädt...
                        X