Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik nachtriggern Abend

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

    Logik nachtriggern Abend

    Hallo,

    hat einer schon die Logik geschrieben, um zw. 22 und 6 Uhr die Badbeleuchtung nur 30% zu dimmen, statt 100%?
    Also ein Dimwert nachzusenden, sobald die Leuchte angehen soll...
    Derzeit zwischen Kistenauspacken und Garten anlegen.
    Baublog im Profil.

    #2
    Einfach unten den auskommentierten Teil wieder einkommentieren. Das nachträgliche Dimmen beim Aktivieren bzw. Wiederaufdimmen beim Ausschalten würde dann aber noch extra müssen. Evtl. "rekursiv" erst mal Nachtmodus() umschalten.

    PHP-Code:
    #!/usr/bin/env python

    #logger.debug('############################################')
    #logger.debug('{}: trigger={}'.format(logic.name, trigger))

    if trigger['source'].endswith('Nachtmodus'):
        
    # if Nachtmodus triggered logic
        
    if not hasattr(logic'light_items'):
            
    logic.light_items = []
            for 
    item_expression in logic.watch_item:
                
    logic.light_items += [item.return_parent() for item in sh.match_items(item_expression) if not str(item).endswith('Nachtmodus')]
            
    logger.info('{}: light_items={}'.format(logic.namelogic.light_items))
        for 
    light_item in logic.light_items:
            if 
    light_item():
                
    logger.info('{}: light_item={}'.format(logic.namelight_item))
                
    # select only light_items which are on
                
    if trigger['value']:
                    
    # if Nachtmodus is switched on, set night brightness
                    
    light_item.Helligkeitswert(light_item.Automatikschalter.conf['nacht_helligkeitswert'], logic.name)
                else:
                    
    # if off, send off/on sequence to normal brightness (which might be less than 100%)
                    
    light_item.Automatikschalter(0logic.name)
                    
    light_item.Automatikschalter(1logic.name)

    elif (sh.Nachtmodus() and trigger['value']):
        
    # if active and switching on
    #    now = sh.now()
    #    if ((((now.today().weekday() in range(0, 5)) and (now <= now.replace(hour=7, minute=0, second=0, microsecond=0))) or
    #          ((now.today().weekday() in range(5, 7)) and (now <= now.replace(hour=9, minute=0, second=0, microsecond=0))))
    #          or (now > now.replace(hour=21, minute=0, second=0, microsecond=0))
        
    source_item sh.return_item(trigger['source'])
        
    source_item.return_parent().Helligkeitswert(source_item.conf['nacht_helligkeitswert'], logic.name

    Kommentar


      #3
      Hallo,

      ich habe gestern geschmunzelt, als ich den Thread gelesen habe.
      Wir haben unter anderem genau das in der Schulung gestern besprochen.

      Die spontane Lösung sah so aus:

      Code:
      # items/nachtlicht.conf
      [licht]
          type = bool
          [[dimmen]]
              type = num
      Code:
      # logics/nachtlicht.py
      zeit = sh.now()
      
      if zeit.hour > 22 or zeit.hour < 6:
          itemname = trigger['source']
          item = sh.return_item(itemname)
          item.dimmen(60)
      Ich habe gerade noch in der Dusche nachgedacht, und dabei kam die Lösung raus:

      Code:
      # items/nachtlicht.conf
      
      [nachtlicht]
          type = bool
          cache = yes
          crontab = 22:00<sunset-12 = 1 | 06:00<sunrise-6 = 0
      
      [eg]
          [[gang]]
              [[[licht]]]
                  type = bool
                  nachtlicht = 60
      
                  [[[[helligkeit]]]]
                      type = num
      Code:
      # etc/logic.conf
      
      [Nachtlicht]
          filename = nachtlicht.py
          watch_item = *:nachtlicht
      Code:
      #
      # logics/nachtlicht.py
      #
      
      if sh.nachtlicht():
          itemname = trigger['source']
          item = sh.return_item(itemname)
          if item():
              item.helligkeit(item['nachtlicht'])
      Bis bald

      Marcus

      Kommentar


        #4
        Zitat von mknx Beitrag anzeigen
        Ich habe gerade noch in der Dusche nachgedacht, und dabei kam die Lösung raus:
        Der Code ist exakt! identisch mit den letzten drei Zeilen des Codes oben!? Außer dass bei deiner Lösung auch angedimmt wird wenn die Lampe ausgeschaltet wird.

        Das Thema (insbesondere mit dem Attribut) hat schon einen ein halbes Jahr alten Bart: https://knx-user-forum.de/321049-post25.html

        Das ist ja der Beweggrund für den zusätzlichen Attribut-Filter gewesen.

        Kommentar


          #5
          Hi Robert,

          langsam denke ich Du möchtest die Lücke/Rolle ausfüllen die Makki hinterlassen hat.
          Das bekommst Du gut hin.

          Natürlich ist Dein Codefetzen besser und war schon vorher da.

          Ich dachte, ich poste hier eine Runde Lösung, die Leute auch nachvollziehen können.



          Marcus

          Kommentar


            #6
            Zitat von mknx Beitrag anzeigen
            langsam denke ich Du möchtest die Lücke/Rolle ausfüllen die Makki hinterlassen hat.
            Das ist gegenüber makki nicht fair.

            Sag mir einfach, dass ich mich im Ton vergriffen habe. Da hast du recht mit. Ich bitte dich um Entschuldigung.

            Ich hab so unpassend geantwortet, weil wir teilweise (deswegen ja auch der Bart-Hinweis) Sachen mehrfach erfinden, anstelle einen Ansatz zu Ende zu feilen. Sicher gibts auch bei obigen Code was optimieren, was ich ja auch oben geschrieben habe. Z.b. fehlt mir ein smarter Ansatz, wie die Lampen wieder auf "volle" Helligkeit gebracht werden können. Wobei "voll" ja eben durch ein Dali-GW auch "80%" sein kann. Das "aus-ein" versagt aber wenn der Präsenzmelder an einer Sammeladresse hängt, da diese nie extern "ein" wird, man also nicht mitbekommt dass die GA "an" ist und entsprechend handeln kann.

            Hier: "Deckenstrahler" müsste "an" sein, um bei "Nachtmodus -> aus" wieder hochzudimmen. Wird nie der Fall sein. Das eval funzt nicht, weil dann bei jeglichen "an" dass auf dem KNX rausgeschmissen wird, da die "Spiegel-Abfrage" im KNX-Plugin nur auf KNX und nicht auf "Eval" abfragt. Eigentlich richtig wäre es nur, über jedes Einzel-Item zu gehen.
            Code:
              [[Deckenstrahler]]
                type = bool
                knx_dpt = 1
                knx_send = 2/2/11
            #    eval_trigger = Elternbad.Deckenstrahler.Sued | Elternbad.Deckenstrahler.West | Elternbad.Deckenstrahler.Ost
            #    eval = (sh.Elternbad.Deckenstrahler.Sued() or sh.Elternbad.Deckenstrahler.West() or sh.Elternbad.Deckenstrahler.Ost())
                [[[Helligkeitswert]]]
                  type = num
                  enforce_updates = true
                  knx_dpt = 5001
                  knx_send = 2/2/13
                [[[Automatikschalter]]]
                  type = bool
                  enforce_updates = true
                  knx_dpt = 1
                  knx_send = 5/2/141
                  knx_listen = 5/2/141
                  nacht_helligkeitswert = 40
                  [[[[Sperre]]]]
                    type = bool
                    knx_dpt = 1
                    knx_send = 5/2/142
                    knx_cache = 5/2/142
                  [[[[Trigger]]]]
                    type = bool
                    enforce_updates = true
                    knx_dpt = 1
                    knx_send = 5/2/143
                    knx_listen = 5/2/143
                [[[Sued]]]
                  type = bool
                  knx_dpt = 1
                  knx_send = 2/2/195
                  knx_cache = 2/2/195
                  [[[[Helligkeitswert]]]]
                    type = num
                    enforce_updates = true
                    knx_dpt = 5001
                    knx_send = 2/2/197
                    knx_cache = 2/2/197
                [[[West]]]
                  type = bool
                  knx_dpt = 1
                  knx_send = 2/2/198
                  knx_cache = 2/2/198
                  [[[[Helligkeitswert]]]]
                    type = num
                    enforce_updates = true
                    knx_dpt = 5001
                    knx_send = 2/2/200
                    knx_cache = 2/2/200
                [[[Ost]]]
                  type = bool
                  knx_dpt = 1
                  knx_send = 2/2/201
                  knx_cache = 2/2/201
                  [[[[Helligkeitswert]]]]
                    type = num
                    enforce_updates = true
                    knx_dpt = 5001
                    knx_send = 2/2/203
                    knx_cache = 2/2/203
            So gibts hinterher 20 Codefragmente und Neueinsteiger kopieren die lustig zusammen und es kommt Verwunderung auf.

            Nochmal sorry

            Grüße
            Robert

            Kommentar


              #7
              Mir als "Einsteiger" bzw. "Fast nicht Programmierer und mit Mühe Python Code Leser" ist mknx Beispiel lieber. Einfach, weil man es besser verstehen kann. Das mag für Informatiker halt anders sein. Alles in einer Zeile ist aber irgendwie wieder perl-like Da wollen wir ja weg. Letztlich kann es aber jeder machen, wie er will.
              Wenn jemand aber Roberts Beispiel direkt versteht, braucht er die Hilfe hier im Forum nicht mehr. Meine Meinung (Robert, ich hoffe Du verstehst, worauf ich hinaus will).


              Ich werde das mal ausprobieren. Wenns passt, pack ich das in meinen Logik Thread zur Sammlung.
              Derzeit zwischen Kistenauspacken und Garten anlegen.
              Baublog im Profil.

              Kommentar


                #8
                Hallo Marcus

                Code:
                # logic/nachtlicht.py
                zeit = sh.now()
                
                if zeit.hour > 22 and zeit.hour < 6:
                    itemname = trigger['source']
                    item = sh.return_item(itemname)
                    item.dimmen(60)
                dieser Code funktioniert doch gar nicht. Muss es nicht eine ODER Verknüpfung sein?

                Gruß
                Henry
                Neustes Projekt: Ubutu als VM (Parallels) auf einem MacMini
                Raspberry Pi - MacMini - geoTHERM VWL S

                Kommentar


                  #9
                  Zitat von hilknx Beitrag anzeigen
                  Muss es nicht eine ODER Verknüpfung sein?
                  ja, stimmt

                  Kommentar


                    #10
                    Hi Robert,

                    hast Recht der Vergleich mit Makki war etwas unpassend.

                    Entschuldige bitte

                    Marcus


                    Gesendet von unterwegs

                    Kommentar


                      #11
                      help please

                      I am trying to make sense of this thread!!


                      I have a dimmer 0/1/12 which expects 1 byte value 0-255 is that DPT 20??

                      In smartvisu.conf i have

                      Code:
                      [Indoor]
                          [[Light]]
                       [[[BadDim]]]
                                  type = bool
                                  visu = yes
                                  visu_acl = rw
                                  knx_dpt = 20
                                  knx_listen = 0/1/12
                                  knx_send = 0/1/12   
                              [[[Bad]]]
                                  type = bool
                                  visu = yes
                                  visu_acl = rw
                                  knx_dpt = 1
                                  knx_listen = 0/1/11
                                  knx_send = 0/1/11
                      From post#3 I cant's see where i find the folder below????

                      Code:
                      # logic/nachtlicht.py
                      zeit = sh.now()
                      
                      if zeit.hour > 22 or zeit.hour < 6:
                          itemname = trigger['source']
                          item = sh.return_item(itemname)
                          item.dimmen(60)
                      Any other hints would be much appreciated

                      Kommentar


                        #12
                        Usually its DPT 5 (knx_dpt = 5) for 0 to 255 or DPT 5.001 (knx_dpt = 5001) for 0 to 100%
                        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


                          #13
                          Zitat von 2ndsky Beitrag anzeigen
                          Usually its DPT 5 (knx_dpt = 5) for 0 to 255 or DPT 5.001 (knx_dpt = 5001) for 0 to 100%
                          Thanks, that was one more step, but still I am far from getting this logic to work..

                          where exactly do I place the file below(Have no logic in my root folder), and do I need to replace 'Source', 'item name', and sh.return_item?? with what??

                          Code:
                          # logic/nachtlicht.py
                          zeit = sh.now()
                          
                          if zeit.hour > 22 or zeit.hour < 6:
                              itemname = trigger['source']
                              item = sh.return_item(itemname)
                              item.dimmen(60)
                          Sorry but i just don't understand

                          Kommentar


                            #14
                            Hi,

                            it should be placed into logics. And you should read the documentation.

                            so long

                            Marcus

                            Kommentar


                              #15
                              Ich hab es jetzt auch mal ausprobiert. Hab ich Post 3 falsch verstanden?

                              Dimmen Absolut [[[deckenlampe_dimmen]]] geht, aber es kommt in der Uhrzeit zwischen 22 Uhr und 6 Uhr kein zweites Kommando mit einem 15% Dimmwert.

                              Meine flur.conf:

                              Code:
                              [nachtlicht]
                                  type = bool
                                  cache = yes
                                  crontab = 22:00<sunset-12 = 1 | 06:00<sunrise-6 = 0
                                  
                              [eg]
                                  [[flur]]        
                                      [[[deckenlampe_schalten]]]
                                              type = bool
                                              visu_acl = rw
                                              knx_dpt = 1
                                              knx_listen = 1/3/9
                                              knx_send = 1/3/0
                                              knx_init = 1/3/9
                                              
                                              nachtlicht = 15
                                                  [[[[helligkeit]]]]
                                                      type = num
                                                      knx_dpt = 5001
                                                      knx_send = 1/3/10
                                          [[[deckenlampe_dimmen]]]
                                              type = num
                                              visu_acl = rw
                                              knx_dpt = 5001
                                              knx_listen = 1/3/11
                                              knx_send = 1/3/10
                                              knx_init = 1/3/11
                              Zusammen mit dem Code aus Post 3 von Marcus

                              Code:
                              # etc/logic.conf
                              
                              [Nachtlicht]
                                  filename = nachtlicht.py
                                  watch_item = *:nachtlicht
                              Code:
                              #
                              # logics/nachtlicht.py
                              #
                              
                              if sh.nachtlicht():
                                  itemname = trigger['source']
                                  item = sh.return_item(itemname)
                                  if item():
                                      item.helligkeit(item['nachtlicht'])
                              Dank euch.

                              Ciao Hochpass
                              Zapft ihr Narren der König hat Durst

                              Kommentar

                              Lädt...
                              X