Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik: Status Mehrere Objekte

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

    Logik: Status Mehrere Objekte

    Hallo zusammen!
    ich würde gerne über eine Logik abfragen, ob alles aus ist. Ziel ist eine LED die blinkt wenn noch irgendwo Licht brennt.
    deshalb denke ich mir das so:
    die einzelnen Objekte bekommen ja ihren Status über eine Gruppenadresse.
    dieses Objekt z.b. EG.wohnzimmer.led bekommt noch einen Eintrag, z.b Logik = A

    jetzt würde ich alle Objekte Abfragen die Logik =A enthalten und Summe >= 1 ist -> LED an.

    soweit so gut (hoffe ich zumindest vom Ansatz)
    wer kann mir bei der Logik weiterhelfen?

    Herzliche Grüße
    Johannes
    Zuletzt geändert von Pizza; 04.09.2015, 20:20.
    Einsteiger - trotzdem Installation abgeschlossen.
    MDT:
    Aktoren: Schaltaktor 40 Kanäle, Schaltaktor mit Strommessung 12 Kanäle, Dimmaktor 4 Kanäle, Jalousieaktor 8 Kanäle Glastaster 8fach / 4fach Plus mit Temperatursensor RGBW-LED Steuerung
    Merten: Argus 220 Jung: 3x Automatik-Schalter 180° Universal auf 1,10m

    #2
    Hi Johannes,


    mit sh.find_items('Logik') kannst du alle Items finden, die das Attribut "Logik" haben. Über diese Items loopst du mit einer for-Schleife
    Innerhalb der Schleife kannst du dann prüfen, ob "Logik" auch "A" ist. Wenn nicht, ignorierst du das Item über ein "continue"
    Für die nun nicht rausgecheckten Items kannst du den Wert prüfen. Ich würde vorher eine Variable auf 0 setzen (= LED aus), sobald in der Schleife ein Item eingeschaltet ist, setzt du die Variable auf 1 und kannst die Schleife mit break verlassen. Dann brauchst du nichts aufzusummieren.
    Nach der Schleife setzt du das Item, dass du mit der LED verknüpft hast, auf den Wert der Variable.

    Ungetestet aus dem Handgelenk also in etwa so:
    Code:
    led = false
    for item in sh.find_items('Logik'):    
        if item.conf['Logik'] != 'A' continue
        if item():
            led = true
            break
    my.led.item(led)
    Grüße
    offline

    Kommentar


      #3
      Hi Johannes,

      es gibt dazu einen Wiki Eintrag: https://github.com/mknx/smarthome/wi...mpen-ermitteln
      Es wird genau das gemacht, was offline vorgeschlagen hat. Aber im Wiki sieht man dann auch sofort die mögliche Anwendung!

      Hier findest Du schon fertigen Code. Es wird dort eine Liste der Objekte generiert, die man dann auch direkt in der Oberfläche ausschalten kann. (Die Anzahl der Objekte findest du hier natürlich auch.)

      Gruss Andreas

      Kommentar


        #4
        Dafür brauch man keine extra logik. Das bekommt man mit eval und eval_trigger hin

        Bsp.:
        [[presence]]
        type = bool
        name = movement in on the rooms
        eval = or
        eval_trigger = room_a.presence | room_b.presence

        Einfach alle items oder verknüfen und mit damit machen was man will

        http://mknx.github.io/smarthome/config
        Zuletzt geändert von Hochpass; 01.09.2015, 08:39.
        Zapft ihr Narren der König hat Durst

        Kommentar


          #5
          Hab ich bei mir auch mit eval / eval_trigger gelöst. Funktioniert.

          [[Beleuchtung]]
          [[[Status]]]
          type = bool
          enforce_updates = true
          eval = or
          eval_trigger = Beleuchtung.KG.* | Beleuchtung.EG.* | Beleuchtung.OG.* | Beleuchtung.DG.*
          Gruss Tom

          Kommentar


            #6
            Super! Vielen Dank.
            Ich habe es jetzt mit eval_trigger umgesetzt. Funktioniert ohne Probleme!
            Einsteiger - trotzdem Installation abgeschlossen.
            MDT:
            Aktoren: Schaltaktor 40 Kanäle, Schaltaktor mit Strommessung 12 Kanäle, Dimmaktor 4 Kanäle, Jalousieaktor 8 Kanäle Glastaster 8fach / 4fach Plus mit Temperatursensor RGBW-LED Steuerung
            Merten: Argus 220 Jung: 3x Automatik-Schalter 180° Universal auf 1,10m

            Kommentar


              #7
              Hallo zusammen.
              Ich habe den Ansatz mit find items jetzt für die Fensterkontakte verwendet.
              Funktioniert ebenfalls.
              Problem: Ich habe mich jetzt an meine erste Logik getastet. Diese soll eine Mail senden, wenn die Tür abgeschlossen ist und Fenster aufgeht.

              Code:
              #logic.conf
              [alarmkontakte] # Meldung an Geraete
                  filename = alarmkontakte.py
                  visu_acl = yes
                  watch_item = *.fensterauf.*
              #alarmkontakte.py
              Code:
              #!/usr/bin/env python
              #
              #if sh.kontakte.tuer.eg.riegelauf() ==1:
              sh.mail('johannes@xxx.de', 'STATUS HAUS', 'Fensterkontakt hat sich geaendert.')
                       #logger.debug("Fensterkontakt hat sich geändert")
              Ich hatte es auch schon soweit, dass er Mails versendet hat - allerdings nicht mit "if".
              Wo habe ich den Fehler?
              In meinem Log steht:
              Code:
              2015-09-16 22:48:45 INFO     Main         Start SmartHome.py 1.0-45-g02cf972
              2015-09-16 22:48:45 INFO     Main         Init Scheduler
              2015-09-16 22:48:45 INFO     Main         Init Plugins
              2015-09-16 22:48:59 INFO     Main         Init UZSU
              2015-09-16 22:48:59 INFO     Main         Init Items
              2015-09-16 22:48:59 ERROR    Main         Problem reading ._smartvisu.conf: 'utf-8' codec can't decode byte 0xb0 in position 37: invalid start byte
              Traceback (most recent call last):
                File "/usr/smarthome/bin/smarthome.py", line 291, in start
                  item_conf = lib.config.parse(self._items_dir + item_file, item_conf)
                File "/usr/smarthome/lib/config.py", line 46, in parse
                  for raw in f.readlines():
                File "/usr/lib/python3.2/codecs.py", line 300, in decode
                  (result, consumed) = self._buffer_decode(data, self.errors, final)
              UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 37: invalid start byte
              2015-09-16 22:49:04 INFO     Main         Start Plugins
              2015-09-16 22:49:04 INFO     Main         Start Logics
              Ich stehe gerade ziemlich auf dem Schlauch.
              Freue mich über einen TIPP.

              Herzliche Grüße!
              Johannes
              Einsteiger - trotzdem Installation abgeschlossen.
              MDT:
              Aktoren: Schaltaktor 40 Kanäle, Schaltaktor mit Strommessung 12 Kanäle, Dimmaktor 4 Kanäle, Jalousieaktor 8 Kanäle Glastaster 8fach / 4fach Plus mit Temperatursensor RGBW-LED Steuerung
              Merten: Argus 220 Jung: 3x Automatik-Schalter 180° Universal auf 1,10m

              Kommentar


                #8
                Hi,

                das Problem ist das ä in der letzten Zeile. Du hast somit ein codepage Problem. Du solltest das File als utf-8 speichern. Als ersten Versuch, ob es wirklich daran liegt, solltest Du das ä gegen ae ersetzen.

                Gruß, Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #9
                  Das alles sollte doch direkt mit der ets funktionieren. Ich habe es zumindest bei meinen Fenster/Türkontakten so gemacht. Wenn ein Fenster/Tür offen ist, blinkt eine LED. Logik direkt in der ETS erstellt.

                  Kommentar

                  Lädt...
                  X