Ankündigung

Einklappen
Keine Ankündigung bisher.

Idee für Zufallszeit in structs

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

    Idee für Zufallszeit in structs

    Hi SHler,

    ich habe meine Rolladenitems nun in struct verpackt, dabei habe ich jedoch für jede der Rolladen eine ca. 1-stündige Abfrage drinnen (die brauche ich wenn die Aktoren mal neu gestartet werden, nach Starten senden sie leider nix von selber):
    Code:
               Rueckmeldung:
                    type: bool
                    knx_dpt: 1
                    knx_init_: "8/7/{....:_device}"
                    knx_poll_:       # damit wenn der Rolladenaktor nicht erreichbar war (Stromausfall)
                            - "8/7/{....:_device}"
                            - 3600
                    knx_send_: "8/7/{....:_device}"
    Der Nachteil ist allerdings 30 Rolladen nutzen dieses struct und werden dann gleichzeitig abgefragt, was unschön ist und zu "Verstopfung" führen kann, insbesondere die Stunden nach dem Booten. Gibt es eine Idee/Methode wie man den Wert von 3600s "verrauschen" kann?

    Ich habe schon mit
    Code:
               Rueckmeldung:
                    type: bool
                    knx_dpt: 1
                    knx_init_: "8/7/{....:_device}"
                    knx_poll_:       # damit wenn der Rolladenaktor nicht erreichbar war (Stromausfall)
                            - "8/7/{....:_device}"
                            - "3{....:_device}"
                    knx_send_: "8/7/{....:_device}"
    gespielt, allerdings gibt es dann Rolladen mit Abfrage alle 31s und Rolladen mit 3255s. Das war auch nicht zielführend.​

    Ich suche so etwas wie 3300 + (Randomzahl % 600) .... irgendwelche Ideen.

    Ansonsten bliebe mir nur übrig in allen item-Files, wo das struct aufgerufen wird, einen weiteren Parameter einzubauen, geht, aber ist Arbeit und auch nicht elegant ....


    Grüße und Danke schonmal,

    Ralf
    Zuletzt geändert von ralf9000; 20.06.2025, 17:18.

    #2
    Code:
    import random
    
    # Zufallszahl zwischen 1 und 3600 erzeugen:
    zufallszahl = random.randint(1, 3600)
    Sowas könntest Du als userfunction ablegen und dann innerhalb eval aufrufen: Siehe Doku

    Kommentar


      #3
      Zitat von bmx Beitrag anzeigen
      Sowas könntest Du als userfunction ablegen und dann innerhalb eval aufrufen...
      So ganz habe ich es nicht verstanden, ich brauche es ja einmalig beim initialisieren wo das struct in die vielen items überführt wird, danach kann das verschiedene Zeitintervalle pro Rollade immer für die jeweilige Rollade gleich bleiben, damit tickt dann jede struct-Einbindung anders. Was mir auch an Wissen fehlt, wie kann ich dem zweiter Argument von knx_poll eine Variable mitgeben (wenn perment zur Runtime) ....

      Ralf

      Kommentar


        #4
        Ups sorry, ich glaube ich habe etwas anderes da reininterpretiert als Du geschrieben hast.

        Für Deinen Fall würde ich mir einfach eine Logik erstellen. Diese Logik kannst Du ja einmal alle Stunde aufrufen und in dieser Logik eine Liste erstellen mit allen Items die das Item knx_poll haben und mit "Rueckmeldung" enden. Du nimmst dann bei diesen Items die ga daher und fragst sie mit knxpluginname.groupread(ga) ab. Dann wartest Du etwas ab und nimmst das nächste Item daher.

        Ohne Deine Items getestet zu haben also sowas in der Art. Du kannst das Skript mit dem Executor Plugin ausführen und testen ob alle Deine Aktoren erwischt werden. Vorteil ist natürlich das Du das Skript auf manuell triggern kannst wenn Du weißt das Dein Aktor neu gestartet wurde

        Code:
        from lib.item import Items
        items = Items.get_instance()
        
        for item in items.find_items('knx_poll'):
            if item.id().endswith("Rueckmeldung"):
                ga = item.conf["knx_cache"]
                # hier die groupread methode des knx Plugins aufrufen, als Test nur print
                print(f"groupread({ga=})")
                time.sleep(5)
        else:
            print("Nix gemacht")​

        Kommentar


          #5
          Danke! Oh, das ist "Neuland" für mich, werde ich heute Abend mal versuchen ....

          Kommentar

          Lädt...
          X