Ankündigung

Einklappen
Keine Ankündigung bisher.

Item zeitgesteuert AN/AUS

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

    Item zeitgesteuert AN/AUS

    Hallo zusammen,

    da ich mit den Logiken auf Kriegsfuß stehe


    Könnt Ihr da mal bitte einen Blick drauf werfen...


    Ziel soll sein das Schranlicht (ist zu beispielzwecken) X Sekunden EIN und dann für Y Sekunden AUS dann wieder X Sekunden ein usw.

    Hier der Code - irgendwie geschieht gar nichts

    Code:
    kg.schranklicht.aktor:
      type: bool
      knx_dpt: 1
      knx_send: 2/3/4
      knx_listen: 2/3/4
      enforce_updates: true
      visu: yes
    
    kg.schranklicht.zyklus_start:
      type: bool
      visu: yes
      cache: yes
      # Visualisierungsschalter zum Starten des Zyklus
    
    kg.schranklicht.zyklus_status:
      type: bool
      visu: yes
      cache: yes
      # Zeigt an, ob der Zyklus aktiv ist
    ##########

    Logik

    Code:
    def trigger(item):
        if item == sh.kg.schranklicht.zyklus_start and item():
            schranklicht_zyklus_starten()
    
    def schranklicht_zyklus_starten():
        if sh.kg.schranklicht.zyklus_status():
            return
        sh.kg.schranklicht.zyklus_status(True)
        zyklus_ein()
    
    def zyklus_ein():
        if not sh.kg.schranklicht.zyklus_status():
            return
        sh.kg.schranklicht.aktor(True)
        scheduler.add('schranklicht_zyklus_aus', 55, zyklus_aus)
    
    def zyklus_aus():
        if not sh.kg.schranklicht.zyklus_status():
            return
        sh.kg.schranklicht.aktor(False)
        scheduler.add('schranklicht_zyklus_ein', 29, zyklus_ein)
    
    def schranklicht_zyklus_stoppen():
        sh.kg.schranklicht.zyklus_status(False)
        sh.kg.schranklicht.aktor(False)
        scheduler.remove('schranklicht_zyklus_ein')
        scheduler.remove('schranklicht_zyklus_aus')

    logics/logic.yaml

    Code:
    schranklicht_zyklus:
      filename: schranklicht_zyklus.py
      trigger:
        - kg.schranklicht.zyklus_start
      startup: true

    #2
    Zum Blinken findest du hier was:
    https://www.smarthomeng.de/blinken-per-logik
    https://knx-user-forum.de/forum/supp...-konfigurieren
    https://knx-user-forum.de/forum/supp...-userfunctions

    Der Titel deines Threads hätte mich übrigens eher vermuten lassen, du willst die UZSU nutzen

    Kommentar


      #3
      Danke für die Rückmeldung - leider "Programmieren"=Bahnhof


      Das mit dem Blinken habe ich gefunden --> allerdings meine ich das immer die selbe Dauer verwendet wird?

      1 sek EIN - 1 sek AUS - 1 sek EIN....

      ich würde gerne unterschiedliche Zeiten verwenden [idealerweise über Visu einstell/verstellbar]

      P.S. ich hab es jetzt mal mit der UZSU gelöst --> ist halt sehr unkomfortabel
      P.S. ich hatte extra "zeitgesteuert" und nicht "Uhrzeitgesteuert" gewählt --> mit der UZSU hängt das Ganze jetzt an der Uhrzeit; mir wäre ein Intervall auch recht.

      Kommentar


        #4
        Alles gut
        Ansätze gibt es viele.. Der Ansatz von Cannon mit
        Code:
        for i in range(count):
                sh.kg.schranklicht.aktor(True)
                time.sleep(55)
                sh.kg.schranklicht.aktor(False)
                time.sleep(29)
        wäre womöglich der Einfachste. Count gibt an, wie oft es wiederholt werden soll. Ist aber nicht sonderlich flexibel.

        Dein Ansatz ist prinzipiell auch legitim, nur musst du halt schedule.add richtig aufrufen. Siehe hier:
        https://smarthomeng.github.io/dev_do...scheduler.html

        Beim Laden der Logik im Admin Interface musst du übrigens einen Blick ins Warnings-Log werfen, um mitzubekommen, was falsch ist.

        Kommentar


          #5
          Ich habe mal ein Neues Item sowie Logik erstellt...


          Code:
          # test_wechsel.yaml
          
          
          test:
              wechsel:
                  type: bool
                  visu_acl: rw
          
              einzeit:
                  type: num
                  visu_acl: rw
                  initial_value: 1
          
              auszeit:
                  type: num
                  visu_acl: rw
                  initial_value: 2
          
              aktiv:
                  type: bool
                  visu_acl: rw
                  initial_value: False
          Code:
          #!/usr/bin/env python3
          # wechsel_timer.py
          
          def wechsel_timer():
              # Prüfen, ob Logik aktiv ist
              if not sh.test.aktiv():
                  return  # Logik ist deaktiviert → nichts tun
          
              # Zeiten aus Items lesen
              ein_zeit = sh.test.einzeit()
              aus_zeit = sh.test.auszeit()
          
              # Fallback-Werte
              if not isinstance(ein_zeit, (int, float)) or ein_zeit <= 0:
                  ein_zeit = 10
              if not isinstance(aus_zeit, (int, float)) or aus_zeit <= 0:
                  aus_zeit = 5
          
              # Wechseln und Timer neu setzen
              if sh.test.wechsel():
                  sh.test.wechsel(False)
                  scheduler.trigger('wechsel_timer', aus_zeit)
              else:
                  sh.test.wechsel(True)
                  scheduler.trigger('wechsel_timer', ein_zeit)

          Im Admin Interface unter Logik Scheduler:

          "wechsel_timer 2025-09-27 15:20:04+0200 3 None {5: 5} -"



          Meldung im Log:
          modules.admin.systemdata logic_name='wechsel_timer', logic_info={'name': 'wechsel_timer', 'enabled': True, 'next_exec': '2025-09-27 14:44:39+0200', 'cycle': '5', 'crontab': None, 'watch_item': ['test.wechsel', 'test.auszeit', 'test.einzeit'], 'userlogic': True, 'logictype': 'Python', 'filename': 'wechsel_timer.py', 'pathname': '/usr/local/smarthome/logics/wechsel_timer.py', 'description': '', 'visu_access': False}

          Zuletzt geändert von Maexle; Gestern, 14:20.

          Kommentar

          Lädt...
          X