Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Event auslösen wenn länger als Zeit X

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    553

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

Event auslösen wenn länger als Zeit X

Geplant Angeheftet Gesperrt Verschoben Blockly
37 Beiträge 5 Kommentatoren 3.3k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • AsgothianA Asgothian

    @gerber sagte in Event auslösen wenn länger als Zeit X:

    Ich komme wie gesagt mit dem Timeout noch nicht ganz klar, wie ich den Wert der sich sekündlich ändert abfragen soll.

    Den fragst du garnicht (explizit) ab. Der Trigger auf "Wert hat sich geändert" liefert den Wert

    Screenshot 2023-02-14 at 09.10.56.png

    Wichtig ist das der Baustein "previous value" und der Baustein "state value" aus dem Trigger Bereich stammen - da ist er mit "Objekt ID" vorbelegt und erlaubt Zugriff auf eine Vielzahl von Details zu genau dem Datenpunkt der den Trigger ausgelöst hat:
    Screenshot 2023-02-14 at 09.11.13.png

    In diesem Baustein steht im einen Fall der Wert den der DP hatte bevor der trigger aktiviert wurde, im anderen der Wert nachdem der Trigger aktiviert wurde.

    Letztendlich prüft die 1 Falls Bedingung ob der Wert gerade unter 0 fällt - dann war er vorher höher und es könnte ein Timeout aktiv sein
    die 2. Falls Bedingung prüft ob der Wert gerade von weniger als 0 auf 0 oder grösser gestiegen ist. Genau in diesem Fall willst du deinen Timeout starten, damit 5 Minuten nachdem der Wert auf 0 oder grösser gestiegen ist deine Aktion ausgelöst wird.

    Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.

    A.
    Nachtrag: Schreibfehler im Kommentar - das passiert nach 5 Minuten :)

    G Offline
    G Offline
    Gerber
    schrieb am zuletzt editiert von Gerber
    #18

    @asgothian
    Vielen Vielen Dank für die Hilfe und ausführliche Antwort.

    Ich glaube ich komme der Sache näher 😅😅.

    Kann es sein, dass der zweite IF Block etwas anders lauten muss, da dort < und <= vorhanden ist.
    Sonst würde er doch nie erkennen, wenn dieser über 0 geht??

    Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
    

    Hier würde man dann einfach den Wert "0" auf den Wunsch Wert erhöhen?

    AsgothianA 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @gerber sagte: Wie genau funktioniert das mit dem Stop "delayOn / delayOff".

      Der zugehörige Timer wird gestoppt und die Variable (z.B. delayOn) wird auf null gesetzt.

      @gerber sagte in Event auslösen wenn länger als Zeit X:

      Der Wert "PV-GrenzwertEin" ist ein Datenpunkt, welcher du fest definierst?

      Das ist ein eigener Datenpunkt, mit dem der Einschalt-Grenzwert vorgegeben werden kann, z.B. unterschiedlich für Winter / Sommer.

      G Offline
      G Offline
      Gerber
      schrieb am zuletzt editiert von Gerber
      #19

      @paul53
      Sollten auch in deinem Beispiel nicht die Vergleichsoperatoren gedreht sein??

      Du gibst doch einen Grenzwert Ein (Über einen Datenpunkt), bei dem der Switch angeschaltet werden soll (z.B. Ladestation).

      Hier sollte doch dann eigentlich
      wenn Wert >= Grenzwert ein sein und nicht <= oder?

      und im zweiten If Block auch umgedreht?
      Wenn der GrenzwertAus 30 Minuten unterschritten ist, dann soll er den Switch ausschalten?

      Dann noch ein weiterer Punkt:
      Wie löst du es, wenn z.B. das Auto nicht angeschlossen ist in diesem Moment in dem der Überschuss erkannt wurde?

      Angenommen der Überschuss findet um 10 Uhr statt, das Auto wird aber erst um 11 Uhr angeschlossen.
      Dann wurde ja theoretisch der Überschuss bereits erkannt und der Switch umgelegt.

      Ist es irgendwie möglich einen Trigger Wert wieder auf 0 zusetzten?

      AsgothianA 1 Antwort Letzte Antwort
      0
      • G Gerber

        @asgothian
        Vielen Vielen Dank für die Hilfe und ausführliche Antwort.

        Ich glaube ich komme der Sache näher 😅😅.

        Kann es sein, dass der zweite IF Block etwas anders lauten muss, da dort < und <= vorhanden ist.
        Sonst würde er doch nie erkennen, wenn dieser über 0 geht??

        Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
        

        Hier würde man dann einfach den Wert "0" auf den Wunsch Wert erhöhen?

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #20

        @gerber sagte in Event auslösen wenn länger als Zeit X:

        @asgothian
        Vielen Vielen Dank für die Hilfe und ausführliche Antwort.

        Ich glaube ich komme der Sache näher 😅😅.

        Kann es sein, dass der zweite IF Block etwas anders lauten muss, da dort < und <= vorhanden ist.
        Sonst würde er doch nie erkennen, wenn dieser über 0 geht??

        Das ganze funktioniert gut - nur wenn der Wert ständig um 0 herum schwankt ist es kritisch. Deswegen wird oft eine Hysterse eingeführt, sprich das Aktivieren findet statt wenn der Wert z.Bsp. über 1 steigt, das deaktivieren wenn der Wert unter 0 fällt.
        

        Hier würde man dann einfach den Wert "0" auf den Wunsch Wert erhöhen?

        Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        1 Antwort Letzte Antwort
        1
        • G Gerber

          @paul53
          Sollten auch in deinem Beispiel nicht die Vergleichsoperatoren gedreht sein??

          Du gibst doch einen Grenzwert Ein (Über einen Datenpunkt), bei dem der Switch angeschaltet werden soll (z.B. Ladestation).

          Hier sollte doch dann eigentlich
          wenn Wert >= Grenzwert ein sein und nicht <= oder?

          und im zweiten If Block auch umgedreht?
          Wenn der GrenzwertAus 30 Minuten unterschritten ist, dann soll er den Switch ausschalten?

          Dann noch ein weiterer Punkt:
          Wie löst du es, wenn z.B. das Auto nicht angeschlossen ist in diesem Moment in dem der Überschuss erkannt wurde?

          Angenommen der Überschuss findet um 10 Uhr statt, das Auto wird aber erst um 11 Uhr angeschlossen.
          Dann wurde ja theoretisch der Überschuss bereits erkannt und der Switch umgelegt.

          Ist es irgendwie möglich einen Trigger Wert wieder auf 0 zusetzten?

          AsgothianA Offline
          AsgothianA Offline
          Asgothian
          Developer
          schrieb am zuletzt editiert von
          #21

          @gerber sagte in Event auslösen wenn länger als Zeit X:

          @paul53
          Sollten auch in deinem Beispiel nicht die Vergleichsoperatoren gedreht sein??

          Du gibst doch einen Grenzwert Ein (Über einen Datenpunkt), bei dem der Switch angeschaltet werden soll (z.B. Ladestation).

          Hier sollte doch dann eigentlich
          wenn Wert >= Grenzwert ein sein und nicht <= oder?

          und im zweiten If Block auch umgedreht?
          Wenn der GrenzwertAus 30 Minuten unterschritten ist, dann soll er den Switch ausschalten?

          Dann noch ein weiterer Punkt:
          Wie löst du es, wenn z.B. das Auto nicht angeschlossen ist in diesem Moment in dem der Überschuss erkannt wurde?

          Angenommen der Überschuss findet um 10 Uhr statt, das Auto wird aber erst um 11 Uhr angeschlossen.
          Dann wurde ja theoretisch der Überschuss bereits erkannt und der Switch umgelegt.

          Ist es irgendwie möglich einen Trigger Wert wieder auf 0 zusetzten?
          Ich wüsste nicht warum du das willst. Du erlaubst der Ladelektronik zu laden, da Überschuss da ist. Wenn dann das Auto angeschlossen wird wird automatisch auch geladen.

          Dabei sollte eigentlich egal sein in welcher Reihenfolge das passiert.

          Ansonsten bräuchtest Du:

          • einen Datenpunkt "Überschuss vorhanden, Laden möglich" unter 0_userdata
          • einen Datenpunkt "Auto angeschlossen, Laden möglich" unter 0_userdata

          Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
          Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.

          Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.

          A.

          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

          G 1 Antwort Letzte Antwort
          0
          • AsgothianA Asgothian

            @gerber sagte in Event auslösen wenn länger als Zeit X:

            @paul53
            Sollten auch in deinem Beispiel nicht die Vergleichsoperatoren gedreht sein??

            Du gibst doch einen Grenzwert Ein (Über einen Datenpunkt), bei dem der Switch angeschaltet werden soll (z.B. Ladestation).

            Hier sollte doch dann eigentlich
            wenn Wert >= Grenzwert ein sein und nicht <= oder?

            und im zweiten If Block auch umgedreht?
            Wenn der GrenzwertAus 30 Minuten unterschritten ist, dann soll er den Switch ausschalten?

            Dann noch ein weiterer Punkt:
            Wie löst du es, wenn z.B. das Auto nicht angeschlossen ist in diesem Moment in dem der Überschuss erkannt wurde?

            Angenommen der Überschuss findet um 10 Uhr statt, das Auto wird aber erst um 11 Uhr angeschlossen.
            Dann wurde ja theoretisch der Überschuss bereits erkannt und der Switch umgelegt.

            Ist es irgendwie möglich einen Trigger Wert wieder auf 0 zusetzten?
            Ich wüsste nicht warum du das willst. Du erlaubst der Ladelektronik zu laden, da Überschuss da ist. Wenn dann das Auto angeschlossen wird wird automatisch auch geladen.

            Dabei sollte eigentlich egal sein in welcher Reihenfolge das passiert.

            Ansonsten bräuchtest Du:

            • einen Datenpunkt "Überschuss vorhanden, Laden möglich" unter 0_userdata
            • einen Datenpunkt "Auto angeschlossen, Laden möglich" unter 0_userdata

            Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
            Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.

            Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.

            A.

            G Offline
            G Offline
            Gerber
            schrieb am zuletzt editiert von
            #22

            @asgothian

            Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.
            

            yes, danke hierfür.

            Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
            Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.
            
            Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.
            

            Würdest du hier dann auf 3 Scripte setzten?
            Datenpunkt "Überschuss "durch den Überschuss- Script aktualisieren.
            Datenpunkt "Auto angeschlossen" durch Auto-angeschlossen-Script aktualisieren.

            Und als letztens ein Script, dass auf beides triggert?

            Ich habe es zum Test einmal den Anfang mit den Timeouts aufgebaut und einfach mit Whatsapp Nachrichten getestet.

            341c2743-933e-4a5d-b23b-b6ba6fd9909f-image.png

            In dem Script passt alles gut.
            Wird das Auto angesteckt und ist auf 1, dann wird zusätzlich der Trigger auf die Einspeisung gestartet und bei einem Überschuss das laden (in dem Fall Whatsapp Nachricht) gestartet.

            Nun wollte ich zum Test die WhatsApp Nachrichten nochmal bekommen, wenn der Wert länger als 1 Minute über in diesem Fall 500 bleibt.
            Also habe ich zum Test folgendes eingebaut:

            9d5e99fc-f78c-4134-bdaa-593ddf473d3a-image.png

            Nun bekomme ich aber wenn dieser Block triggert, fast sekündlich Whatsapp Nachrichten, wiesoo??

            AsgothianA 1 Antwort Letzte Antwort
            0
            • G Gerber

              @asgothian

              Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.
              

              yes, danke hierfür.

              Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
              Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.
              
              Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.
              

              Würdest du hier dann auf 3 Scripte setzten?
              Datenpunkt "Überschuss "durch den Überschuss- Script aktualisieren.
              Datenpunkt "Auto angeschlossen" durch Auto-angeschlossen-Script aktualisieren.

              Und als letztens ein Script, dass auf beides triggert?

              Ich habe es zum Test einmal den Anfang mit den Timeouts aufgebaut und einfach mit Whatsapp Nachrichten getestet.

              341c2743-933e-4a5d-b23b-b6ba6fd9909f-image.png

              In dem Script passt alles gut.
              Wird das Auto angesteckt und ist auf 1, dann wird zusätzlich der Trigger auf die Einspeisung gestartet und bei einem Überschuss das laden (in dem Fall Whatsapp Nachricht) gestartet.

              Nun wollte ich zum Test die WhatsApp Nachrichten nochmal bekommen, wenn der Wert länger als 1 Minute über in diesem Fall 500 bleibt.
              Also habe ich zum Test folgendes eingebaut:

              9d5e99fc-f78c-4134-bdaa-593ddf473d3a-image.png

              Nun bekomme ich aber wenn dieser Block triggert, fast sekündlich Whatsapp Nachrichten, wiesoo??

              AsgothianA Offline
              AsgothianA Offline
              Asgothian
              Developer
              schrieb am zuletzt editiert von Asgothian
              #23

              @gerber sagte in Event auslösen wenn länger als Zeit X:

              @asgothian

              Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.
              

              yes, danke hierfür.

              Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
              Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.
              
              Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.
              

              Würdest du hier dann auf 3 Scripte setzten?
              Datenpunkt "Überschuss "durch den Überschuss- Script aktualisieren.
              Datenpunkt "Auto angeschlossen" durch Auto-angeschlossen-Script aktualisieren.

              Und als letztens ein Script, dass auf beides triggert?

              Ich habe es zum Test einmal den Anfang mit den Timeouts aufgebaut und einfach mit Whatsapp Nachrichten getestet.

              341c2743-933e-4a5d-b23b-b6ba6fd9909f-image.png

              In dem Script passt alles gut.
              Wird das Auto angesteckt und ist auf 1, dann wird zusätzlich der Trigger auf die Einspeisung gestartet und bei einem Überschuss das laden (in dem Fall Whatsapp Nachricht) gestartet.

              Nun wollte ich zum Test die WhatsApp Nachrichten nochmal bekommen, wenn der Wert länger als 1 Minute über in diesem Fall 500 bleibt.
              Also habe ich zum Test folgendes eingebaut:

              9d5e99fc-f78c-4134-bdaa-593ddf473d3a-image.png

              Nun bekomme ich aber wenn dieser Block triggert, fast sekündlich Whatsapp Nachrichten, wiesoo??

              Weil du Unsinn gemacht hast - an mehreren Stellen:

              Jedes mal wenn der Datenpunkt "Auto Angeschlossen" auf den Wert 1 wechselt legst du einen neuen Trigger an.

              Du hast da also 2 Trigger ineinander geschachtelt. Das macht man nicht. Der korrekte weg (in diesem einfachen Beispiel) ist ein Falls als erstes im Trigger auf die Wirkleistung:

              Falls Wert von AutoAngeschlossen = 1 mache..
              darin dann die eigentliche Bearbeitung.

              Der Trigger auf das Anstecken des Autos entfällt in diesem Fall.

              Nun zur Frage warum du sekündlich die WhatsApp bekommst:

              Der Wert ändert sich jede Sekunde.
              Solange der Wert und der vorherige Wert über 500 ist sagst du jede Sekunde das in einer Minute eine WhatsApp kommen soll.
              Die willst du aber nur jede Minute haben. Dazu gibt es 2 einfache Wege.

              Option 1: da wo du auch den 30 Sekunden Timeout setzt setzt du zusätzlich noch ein Intervall alle 1 Minute. Darin dann die WhatsApp Meldung, allerdings musst du dann an stelle des "Wert" Baustein im Text den "Wert von Objekt ID P-Active power / Wirkleistung -" einsetzen. In diesem Fall muss unter den stop timeout noch ein stop Intervall Baustein
              Option 2: Definiere eine Variable "timestamp". In dem sonst Falls Zweig den du aktuell hast schaust du nach ob "Zeitstempel letzte Änderung" - "timestamp" > 60000 ist (60 Sekunden in ms). Wenn ja, dann "timestamp = Zeitstempel letzte Änderung", WhatsApp schicken. In diesem Fall gibt es keinen Timeout2

              Ich hoffe das ist so verständlich.

              A.
              ps. Ich bau mal was zusammen wie ich das lösen würde :
              Screenshot 2023-02-14 at 13.08.46.png

              Auch hier wieder ein Trick: Die Variable CarStatus wird auf 1 gesetzt wenn das Auto angesteckt wird. im "SonstFalls" sorgt dieser Wert dann dafür das wenn die Wirkleistung schon länger über 500 war direkt der 5 Minuten Timeout zum Freischalten des Ladens gestartet wird, und nicht erst wenn die Wirkleistung zwischendurch mal auf unter 500 gefallen ist.

              Das Hochzählen der Variable auf 2 sorgt dafür das diese Bedingung genau 1 mal - bei der ersten Änderung der Wirkleistung nach Anstecken des Autos - relevant wird.

              ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
              "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

              G 1 Antwort Letzte Antwort
              1
              • AsgothianA Asgothian

                @gerber sagte in Event auslösen wenn länger als Zeit X:

                @asgothian

                Korrekt, in beiden Fällen. Ich hab das halt kurz zusammen gebaut und einmal falsch herum ausgewählt. Aber mit der Erklärung sollte ein Nachbauen möglich sein.
                

                yes, danke hierfür.

                Den Überschuss vorhanden Datenpunkt setzt du automatisch aus dem Skript oben
                Den "Auto angeschlossen" Datenpunkt setzt du über eine Erkennung das das Auto zum Laden angeschlossen ist.
                
                Als letztes kommt ein Trigger auf "Auto angeschlossen" UND (gleichzeitig) "Auto Angeschlossen". Da prüfst Du ob beide auf Wahr sind, dann wird das laden gestartet. Sobald einer von beiden auf Falsch geht wird das Laden beendet.
                

                Würdest du hier dann auf 3 Scripte setzten?
                Datenpunkt "Überschuss "durch den Überschuss- Script aktualisieren.
                Datenpunkt "Auto angeschlossen" durch Auto-angeschlossen-Script aktualisieren.

                Und als letztens ein Script, dass auf beides triggert?

                Ich habe es zum Test einmal den Anfang mit den Timeouts aufgebaut und einfach mit Whatsapp Nachrichten getestet.

                341c2743-933e-4a5d-b23b-b6ba6fd9909f-image.png

                In dem Script passt alles gut.
                Wird das Auto angesteckt und ist auf 1, dann wird zusätzlich der Trigger auf die Einspeisung gestartet und bei einem Überschuss das laden (in dem Fall Whatsapp Nachricht) gestartet.

                Nun wollte ich zum Test die WhatsApp Nachrichten nochmal bekommen, wenn der Wert länger als 1 Minute über in diesem Fall 500 bleibt.
                Also habe ich zum Test folgendes eingebaut:

                9d5e99fc-f78c-4134-bdaa-593ddf473d3a-image.png

                Nun bekomme ich aber wenn dieser Block triggert, fast sekündlich Whatsapp Nachrichten, wiesoo??

                Weil du Unsinn gemacht hast - an mehreren Stellen:

                Jedes mal wenn der Datenpunkt "Auto Angeschlossen" auf den Wert 1 wechselt legst du einen neuen Trigger an.

                Du hast da also 2 Trigger ineinander geschachtelt. Das macht man nicht. Der korrekte weg (in diesem einfachen Beispiel) ist ein Falls als erstes im Trigger auf die Wirkleistung:

                Falls Wert von AutoAngeschlossen = 1 mache..
                darin dann die eigentliche Bearbeitung.

                Der Trigger auf das Anstecken des Autos entfällt in diesem Fall.

                Nun zur Frage warum du sekündlich die WhatsApp bekommst:

                Der Wert ändert sich jede Sekunde.
                Solange der Wert und der vorherige Wert über 500 ist sagst du jede Sekunde das in einer Minute eine WhatsApp kommen soll.
                Die willst du aber nur jede Minute haben. Dazu gibt es 2 einfache Wege.

                Option 1: da wo du auch den 30 Sekunden Timeout setzt setzt du zusätzlich noch ein Intervall alle 1 Minute. Darin dann die WhatsApp Meldung, allerdings musst du dann an stelle des "Wert" Baustein im Text den "Wert von Objekt ID P-Active power / Wirkleistung -" einsetzen. In diesem Fall muss unter den stop timeout noch ein stop Intervall Baustein
                Option 2: Definiere eine Variable "timestamp". In dem sonst Falls Zweig den du aktuell hast schaust du nach ob "Zeitstempel letzte Änderung" - "timestamp" > 60000 ist (60 Sekunden in ms). Wenn ja, dann "timestamp = Zeitstempel letzte Änderung", WhatsApp schicken. In diesem Fall gibt es keinen Timeout2

                Ich hoffe das ist so verständlich.

                A.
                ps. Ich bau mal was zusammen wie ich das lösen würde :
                Screenshot 2023-02-14 at 13.08.46.png

                Auch hier wieder ein Trick: Die Variable CarStatus wird auf 1 gesetzt wenn das Auto angesteckt wird. im "SonstFalls" sorgt dieser Wert dann dafür das wenn die Wirkleistung schon länger über 500 war direkt der 5 Minuten Timeout zum Freischalten des Ladens gestartet wird, und nicht erst wenn die Wirkleistung zwischendurch mal auf unter 500 gefallen ist.

                Das Hochzählen der Variable auf 2 sorgt dafür das diese Bedingung genau 1 mal - bei der ersten Änderung der Wirkleistung nach Anstecken des Autos - relevant wird.

                G Offline
                G Offline
                Gerber
                schrieb am zuletzt editiert von
                #24

                @asgothian
                Vielen Dank.

                Ich verstehe jetzt, wieso die Whatsapp mehrfach verschickt wird.
                Die von dir beschriebenen Optionen werde ich mir genauer ansehen, damit ich diese genauer verstehe.


                Ich wäre dir hierfür natürlich sehr sehr dankbar, wenn du dir die Mühe machst und solch ein Szenario einmal aufbauen könntest.
                Lass dir soviel Zeit wie du benötigst😊.

                G 1 Antwort Letzte Antwort
                0
                • G Gerber

                  @asgothian
                  Vielen Dank.

                  Ich verstehe jetzt, wieso die Whatsapp mehrfach verschickt wird.
                  Die von dir beschriebenen Optionen werde ich mir genauer ansehen, damit ich diese genauer verstehe.


                  Ich wäre dir hierfür natürlich sehr sehr dankbar, wenn du dir die Mühe machst und solch ein Szenario einmal aufbauen könntest.
                  Lass dir soviel Zeit wie du benötigst😊.

                  G Offline
                  G Offline
                  Gerber
                  schrieb am zuletzt editiert von
                  #25

                  @Asgothian

                  Wow vielen Dank dafür.
                  Ich denke ich habe das ganze jetzt weitestgehend verstanden 👍👍.


                  Ich würde dann die CarStatus Variable bei "Else-If" auf

                  Else-if Carstatus = 3 oder 4 setzten (da dies einmal 3= bereit für laden und 4 = Finished aber noch connected) bedeutet
                  Zusätzlich dann die darunterliegende Carstatus Variable beim "do" auf z.B. 5 setzten.

                  Ich hoffe, dass es so richtig ist.

                  Folgende Fragen hätte ich noch zu deinem Script:

                  • Ganz oben setzt du die CarStatus Variable auf False.
                    Ist das, damit diese Variable einen anderen Wert beim Neustart des Scripts bekommt?

                  • Du schreibst bei Execution "Interval", dass die Nachricht wieder weg kann. Heißt hier muss direkt danach noch der Intervall gestoppt werden?
                    Sonst würde ja alle 1 min eine Whatsapp verschickt werden oder?

                  • Das gleiche müsste ich jetzt eigentlich noch für den oberen Teil bauen, dass nicht direkt bei einem State Value unter 500 das Laden abgebrochen wird, sondern auch hier nur wenn der State Value länger als z.B. 10 Minuten unter 500 ist...

                  AsgothianA 1 Antwort Letzte Antwort
                  0
                  • G Gerber

                    @Asgothian

                    Wow vielen Dank dafür.
                    Ich denke ich habe das ganze jetzt weitestgehend verstanden 👍👍.


                    Ich würde dann die CarStatus Variable bei "Else-If" auf

                    Else-if Carstatus = 3 oder 4 setzten (da dies einmal 3= bereit für laden und 4 = Finished aber noch connected) bedeutet
                    Zusätzlich dann die darunterliegende Carstatus Variable beim "do" auf z.B. 5 setzten.

                    Ich hoffe, dass es so richtig ist.

                    Folgende Fragen hätte ich noch zu deinem Script:

                    • Ganz oben setzt du die CarStatus Variable auf False.
                      Ist das, damit diese Variable einen anderen Wert beim Neustart des Scripts bekommt?

                    • Du schreibst bei Execution "Interval", dass die Nachricht wieder weg kann. Heißt hier muss direkt danach noch der Intervall gestoppt werden?
                      Sonst würde ja alle 1 min eine Whatsapp verschickt werden oder?

                    • Das gleiche müsste ich jetzt eigentlich noch für den oberen Teil bauen, dass nicht direkt bei einem State Value unter 500 das Laden abgebrochen wird, sondern auch hier nur wenn der State Value länger als z.B. 10 Minuten unter 500 ist...

                    AsgothianA Offline
                    AsgothianA Offline
                    Asgothian
                    Developer
                    schrieb am zuletzt editiert von
                    #26

                    @gerber sagte in Event auslösen wenn länger als Zeit X:

                    Ganz oben setzt du die CarStatus Variable auf False.
                    Ist das, damit diese Variable einen anderen Wert beim Neustart des Scripts bekommt?

                    Du schreibst bei Execution "Interval", dass die Nachricht wieder weg kann. Heißt hier muss direkt danach noch der Intervall gestoppt werden?
                    Sonst würde ja alle 1 min eine Whatsapp verschickt werden oder?

                    Das gleiche müsste ich jetzt eigentlich noch für den oberen Teil bauen, dass nicht direkt bei einem State Value unter 500 das Laden abgebrochen wird, sondern auch hier nur wenn der State Value länger als z.B. 10 Minuten unter 500 ist...

                    • Das mit dem False ist mal wieder ein Baufehler - da muss eine 0 rein, damit die Variable einen definierten Wert hat
                    • Wenn du die Meldung nicht mehr willst würde ich das ganze Intervall weg nehmen - dann hat sich das erledigt
                    • Ja.

                    @gerber sagte in Event auslösen wenn länger als Zeit X:

                    Ich würde dann die CarStatus Variable bei "Else-If" auf
                    Else-if Carstatus = 3 oder 4 setzten (da dies einmal 3= bereit für laden und 4 = Finished aber noch connected) bedeutet
                    Zusätzlich dann die darunterliegende Carstatus Variable beim "do" auf z.B. 5 setzten.

                    Vorsichtig - der Wert 1 wird genutzt um zu erkennen das das Auto frisch angeschlossen wurde. Das ist wichtig für die Situation das du das Auto anschliesst während der Überschuss bereits stabil über 500 ist. In diesem Fall würde das Auto ansonsten nie laden, da die Bedingung "Wechsel von unter 500 auf 500 oder mehr" nicht erfüllt werden kann.

                    Wenn die Variable direkt vom Auto gelesen wird musst du ggf. für die Situation frisch eingesteckt einen eigenen Marker vergeben.

                    A.

                    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                    G 1 Antwort Letzte Antwort
                    0
                    • AsgothianA Asgothian

                      @gerber sagte in Event auslösen wenn länger als Zeit X:

                      Ganz oben setzt du die CarStatus Variable auf False.
                      Ist das, damit diese Variable einen anderen Wert beim Neustart des Scripts bekommt?

                      Du schreibst bei Execution "Interval", dass die Nachricht wieder weg kann. Heißt hier muss direkt danach noch der Intervall gestoppt werden?
                      Sonst würde ja alle 1 min eine Whatsapp verschickt werden oder?

                      Das gleiche müsste ich jetzt eigentlich noch für den oberen Teil bauen, dass nicht direkt bei einem State Value unter 500 das Laden abgebrochen wird, sondern auch hier nur wenn der State Value länger als z.B. 10 Minuten unter 500 ist...

                      • Das mit dem False ist mal wieder ein Baufehler - da muss eine 0 rein, damit die Variable einen definierten Wert hat
                      • Wenn du die Meldung nicht mehr willst würde ich das ganze Intervall weg nehmen - dann hat sich das erledigt
                      • Ja.

                      @gerber sagte in Event auslösen wenn länger als Zeit X:

                      Ich würde dann die CarStatus Variable bei "Else-If" auf
                      Else-if Carstatus = 3 oder 4 setzten (da dies einmal 3= bereit für laden und 4 = Finished aber noch connected) bedeutet
                      Zusätzlich dann die darunterliegende Carstatus Variable beim "do" auf z.B. 5 setzten.

                      Vorsichtig - der Wert 1 wird genutzt um zu erkennen das das Auto frisch angeschlossen wurde. Das ist wichtig für die Situation das du das Auto anschliesst während der Überschuss bereits stabil über 500 ist. In diesem Fall würde das Auto ansonsten nie laden, da die Bedingung "Wechsel von unter 500 auf 500 oder mehr" nicht erfüllt werden kann.

                      Wenn die Variable direkt vom Auto gelesen wird musst du ggf. für die Situation frisch eingesteckt einen eigenen Marker vergeben.

                      A.

                      G Offline
                      G Offline
                      Gerber
                      schrieb am zuletzt editiert von Gerber
                      #27

                      @Asgothian

                      Das mit dem False ist mal wieder ein Baufehler - da muss eine 0 rein, damit die Variable einen definierten Wert hat
                      Wenn du die Meldung nicht mehr willst würde ich das ganze Intervall weg nehmen - dann hat sich das erledigt
                      Ja.
                      

                      Alles klar, danke.

                      Vorsichtig - der Wert 1 wird genutzt um zu erkennen das das Auto frisch angeschlossen wurde. Das ist wichtig für die Situation das du das Auto anschliesst während der Überschuss bereits stabil über 500 ist. In diesem Fall würde das Auto ansonsten nie laden, da die Bedingung "Wechsel von unter 500 auf 500 oder mehr" nicht erfüllt werden kann.
                      
                      Wenn die Variable direkt vom Auto gelesen wird musst du ggf. für die Situation frisch eingesteckt einen eigenen Marker vergeben.
                      

                      Alles klar, danke.

                      Aber theoretisch könnte ich es wie von dir beschrieben nutzen, auf den Datenpunkt der Wallbox reagieren, wenn sich der Car Datenpunkt ändert.

                      Daraufhin wie oben beschrieben Wenn = 3 oder 4, dann laden.

                      Natürlich muss ich jetzt die Werte noch so anpassen, dass wenn das Auto lädt die Kapazität für das beenden der Ladung beachtet wird.

                      Ich habe es jetzt so mit den Variablen gelöst, denke sollte passen.

                      65869790-51cc-40d2-99f9-1ef499997b56-image.png

                      AsgothianA 1 Antwort Letzte Antwort
                      0
                      • G Gerber

                        @Asgothian

                        Das mit dem False ist mal wieder ein Baufehler - da muss eine 0 rein, damit die Variable einen definierten Wert hat
                        Wenn du die Meldung nicht mehr willst würde ich das ganze Intervall weg nehmen - dann hat sich das erledigt
                        Ja.
                        

                        Alles klar, danke.

                        Vorsichtig - der Wert 1 wird genutzt um zu erkennen das das Auto frisch angeschlossen wurde. Das ist wichtig für die Situation das du das Auto anschliesst während der Überschuss bereits stabil über 500 ist. In diesem Fall würde das Auto ansonsten nie laden, da die Bedingung "Wechsel von unter 500 auf 500 oder mehr" nicht erfüllt werden kann.
                        
                        Wenn die Variable direkt vom Auto gelesen wird musst du ggf. für die Situation frisch eingesteckt einen eigenen Marker vergeben.
                        

                        Alles klar, danke.

                        Aber theoretisch könnte ich es wie von dir beschrieben nutzen, auf den Datenpunkt der Wallbox reagieren, wenn sich der Car Datenpunkt ändert.

                        Daraufhin wie oben beschrieben Wenn = 3 oder 4, dann laden.

                        Natürlich muss ich jetzt die Werte noch so anpassen, dass wenn das Auto lädt die Kapazität für das beenden der Ladung beachtet wird.

                        Ich habe es jetzt so mit den Variablen gelöst, denke sollte passen.

                        65869790-51cc-40d2-99f9-1ef499997b56-image.png

                        AsgothianA Offline
                        AsgothianA Offline
                        Asgothian
                        Developer
                        schrieb am zuletzt editiert von
                        #28

                        @gerber Da passt leider was nicht:

                        Screenshot 2023-02-15 at 09.48.36.png

                        das "stop CarStatus" wird so nichts bringen, da muss eher ein "stop Timeout" rein.

                        Sonst sieht es gut aus.

                        A

                        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                        G 1 Antwort Letzte Antwort
                        1
                        • AsgothianA Asgothian

                          @gerber Da passt leider was nicht:

                          Screenshot 2023-02-15 at 09.48.36.png

                          das "stop CarStatus" wird so nichts bringen, da muss eher ein "stop Timeout" rein.

                          Sonst sieht es gut aus.

                          A

                          G Offline
                          G Offline
                          Gerber
                          schrieb am zuletzt editiert von
                          #29

                          @asgothian

                          Ahhhhhhhhhhh. Das "STop" Timeout hatte ich zuvor eingefügt und nicht mehr beachtet.
                          Muss natürlich angepasst werden, danke.

                          Würdest du jetzt ein zweites Script schreiben, zwecks dem Stoppen des Ladevorgangs oder in das jetzige mit einbauen?

                          AsgothianA 1 Antwort Letzte Antwort
                          0
                          • G Gerber

                            @asgothian

                            Ahhhhhhhhhhh. Das "STop" Timeout hatte ich zuvor eingefügt und nicht mehr beachtet.
                            Muss natürlich angepasst werden, danke.

                            Würdest du jetzt ein zweites Script schreiben, zwecks dem Stoppen des Ladevorgangs oder in das jetzige mit einbauen?

                            AsgothianA Offline
                            AsgothianA Offline
                            Asgothian
                            Developer
                            schrieb am zuletzt editiert von
                            #30

                            @gerber In das jetzige mit einbauen. Ist effektiver

                            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                            G 1 Antwort Letzte Antwort
                            1
                            • AsgothianA Asgothian

                              @gerber In das jetzige mit einbauen. Ist effektiver

                              G Offline
                              G Offline
                              Gerber
                              schrieb am zuletzt editiert von Gerber
                              #31

                              @asgothian Alles klar.

                              Jetzt ist mir gearde noch ein Gedanke gekommen.
                              Wäre es nicht sinnvoller den CarStatus eins drüber zu setzten, damit zuerst geprüft wird ob überhaupt ein Auto verbunden ist und nur dann geladen wird?

                              In diesem Fall könnte es ja sein, dass der vorherige Werte < 500 ist und der jetzige Wert >= und somit würde er den Ladebefehl senden.

                              BZW eigentlich könnte man den Operator von Oder auf Und drehen und somit würde er nur in das Timeout gehen, wenn ein Überschuss ist und ein Auto verbunden ist, richtig?

                              Also so:

                              b091f09b-20f3-41b0-9945-bb1ffd5bdbbc-image.png

                              EDIT:

                              Oder sogar den Carstatus ganz oben abfragen, so dass beide Blöcke nur loslaufen, wenn ein Auto auch wirklich verbunden ist 🤔

                              Final dann so:

                              7514af4a-eb33-4cb4-afc8-4bfca8f96417-image.png
                              5e0d92f0-2721-4e78-ac63-43738e5cdc13-image.png

                              Somit würde er den ladenStarten Timeout beenden, wenn kein Überschuss mehr da ist und das Laden nur abbrechen, wenn kein Überschuss mehr da ist und ein Auto momentan lädt.
                              Und das ganze könnte ich je Situation ändern. Heißt auch bei einem kleineren Überschuss (auch wenn es für das Auto nicht komplett ausreicht), dass laden starten und wenn es lädt mit anderen Werten das laden beenden.

                              Sollte doch eigentlich so passen oder habe ich hier ein Denkfehler? 🤔

                              Natürlich noch die Aktion zum Starten des Ladens etc einbauen.

                              AsgothianA 1 Antwort Letzte Antwort
                              0
                              • BananaJoeB Online
                                BananaJoeB Online
                                BananaJoe
                                Most Active
                                schrieb am zuletzt editiert von
                                #32

                                Ich setzte so etwas ähnliches auch in einigen Skripten ein - allerdings nicht als Timout.

                                Skript 1 reagiert auf Datenpunktänderungen und prüft den Zustand, z.B. ob eine Solarproduktion aktiv ist oder nicht, oder ob ein Gerät eingeschaltet ist oder nicht.
                                Und setzt a.) einen entsprechenden Datenpunkt auf True. Und b.) schreibt es den Zeitstempel in einen anderen Datenpunkt (Typ Number). Ist der Zustand dann wieder Aus / False setzte ich auch False und setze den Zeitstempel auf 0
                                Zeitstempel sind die Millisekunden seit dem 1.1.1970, 00:00 Uhr.

                                Damit kann man nämlich prima Rechnen.

                                Für Dinge die dann nach einer gewissen Zeit passieren sollen nutze ich ein 2. Skript welches 1x pro Minute läuft und die Datenpunkte prüft. Zum Beispiel Ob der Zeitstempel nicht 0 ist und wenn ja wie groß ist die Differenz.
                                Ich muss natürlich sicherstellen das es nicht mehrmals auslöst, also nicht jede Minute weil die Differenz > 600.000 Milisekunden ist

                                Vorteil ist - für mich - das ich das ganze mehrmals mit unterschiedlichen Zeitenräumen verwerten kann, nebenbei habe ich so auch die Einschaltdauer.

                                ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                1 Antwort Letzte Antwort
                                0
                                • G Gerber

                                  @asgothian Alles klar.

                                  Jetzt ist mir gearde noch ein Gedanke gekommen.
                                  Wäre es nicht sinnvoller den CarStatus eins drüber zu setzten, damit zuerst geprüft wird ob überhaupt ein Auto verbunden ist und nur dann geladen wird?

                                  In diesem Fall könnte es ja sein, dass der vorherige Werte < 500 ist und der jetzige Wert >= und somit würde er den Ladebefehl senden.

                                  BZW eigentlich könnte man den Operator von Oder auf Und drehen und somit würde er nur in das Timeout gehen, wenn ein Überschuss ist und ein Auto verbunden ist, richtig?

                                  Also so:

                                  b091f09b-20f3-41b0-9945-bb1ffd5bdbbc-image.png

                                  EDIT:

                                  Oder sogar den Carstatus ganz oben abfragen, so dass beide Blöcke nur loslaufen, wenn ein Auto auch wirklich verbunden ist 🤔

                                  Final dann so:

                                  7514af4a-eb33-4cb4-afc8-4bfca8f96417-image.png
                                  5e0d92f0-2721-4e78-ac63-43738e5cdc13-image.png

                                  Somit würde er den ladenStarten Timeout beenden, wenn kein Überschuss mehr da ist und das Laden nur abbrechen, wenn kein Überschuss mehr da ist und ein Auto momentan lädt.
                                  Und das ganze könnte ich je Situation ändern. Heißt auch bei einem kleineren Überschuss (auch wenn es für das Auto nicht komplett ausreicht), dass laden starten und wenn es lädt mit anderen Werten das laden beenden.

                                  Sollte doch eigentlich so passen oder habe ich hier ein Denkfehler? 🤔

                                  Natürlich noch die Aktion zum Starten des Ladens etc einbauen.

                                  AsgothianA Offline
                                  AsgothianA Offline
                                  Asgothian
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #33

                                  @gerber sagte in Event auslösen wenn länger als Zeit X:

                                  Sollte doch eigentlich so passen oder habe ich hier ein Denkfehler?

                                  So sieht es gut aus.

                                  @bananajoe sagte in Event auslösen wenn länger als Zeit X:

                                  Und setzt a.) einen entsprechenden Datenpunkt auf True. Und b.) schreibt es den Zeitstempel in einen anderen Datenpunkt (Typ Number). Ist der Zustand dann wieder Aus / False setzte ich auch False und setze den Zeitstempel auf 0
                                  Zeitstempel sind die Millisekunden seit dem 1.1.1970, 00:00 Uhr.
                                  Damit kann man nämlich prima Rechnen.
                                  Für Dinge die dann nach einer gewissen Zeit passieren sollen nutze ich ein 2. Skript welches 1x pro Minute läuft und die Datenpunkte prüft. Zum Beispiel Ob der Zeitstempel nicht 0 ist und wenn ja wie groß ist die Differenz.
                                  Ich muss natürlich sicherstellen das es nicht mehrmals auslöst, also nicht jede Minute weil die Differenz > 600.000 Milisekunden ist

                                  Kann man machen, ist meiner Meinung nach aber ressourcentechnisch nicht so gut. Du machst schon bei jeder Änderung etwas, und nur weil du da nicht noch ein komplexeres Ifthenelse einbauen willst machst du zusätzlich noch etwas per Heartbeat.

                                  Finde ich doppelt gemoppelt.

                                  A.

                                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                  BananaJoeB G 2 Antworten Letzte Antwort
                                  0
                                  • AsgothianA Asgothian

                                    @gerber sagte in Event auslösen wenn länger als Zeit X:

                                    Sollte doch eigentlich so passen oder habe ich hier ein Denkfehler?

                                    So sieht es gut aus.

                                    @bananajoe sagte in Event auslösen wenn länger als Zeit X:

                                    Und setzt a.) einen entsprechenden Datenpunkt auf True. Und b.) schreibt es den Zeitstempel in einen anderen Datenpunkt (Typ Number). Ist der Zustand dann wieder Aus / False setzte ich auch False und setze den Zeitstempel auf 0
                                    Zeitstempel sind die Millisekunden seit dem 1.1.1970, 00:00 Uhr.
                                    Damit kann man nämlich prima Rechnen.
                                    Für Dinge die dann nach einer gewissen Zeit passieren sollen nutze ich ein 2. Skript welches 1x pro Minute läuft und die Datenpunkte prüft. Zum Beispiel Ob der Zeitstempel nicht 0 ist und wenn ja wie groß ist die Differenz.
                                    Ich muss natürlich sicherstellen das es nicht mehrmals auslöst, also nicht jede Minute weil die Differenz > 600.000 Milisekunden ist

                                    Kann man machen, ist meiner Meinung nach aber ressourcentechnisch nicht so gut. Du machst schon bei jeder Änderung etwas, und nur weil du da nicht noch ein komplexeres Ifthenelse einbauen willst machst du zusätzlich noch etwas per Heartbeat.

                                    Finde ich doppelt gemoppelt.

                                    A.

                                    BananaJoeB Online
                                    BananaJoeB Online
                                    BananaJoe
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #34

                                    @asgothian sagte in Event auslösen wenn länger als Zeit X:

                                    Du machst schon bei jeder Änderung etwas, und nur weil du da nicht noch ein komplexeres Ifthenelse einbauen willst machst du zusätzlich noch etwas per Heartbeat

                                    Naja, die Timeout-Beispiele reagieren auch auf jede Änderungen und steigen dank Sperrvariable wieder aus. Das ist dann nicht mehr oder weniger. Oder wie oft wird das letzte Beispiel von @Gerber ausgeführt?

                                    Mehr ist der zusätzliche 1x die Minute Aufruf, richtig.

                                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                    AsgothianA 1 Antwort Letzte Antwort
                                    0
                                    • AsgothianA Asgothian

                                      @gerber sagte in Event auslösen wenn länger als Zeit X:

                                      Sollte doch eigentlich so passen oder habe ich hier ein Denkfehler?

                                      So sieht es gut aus.

                                      @bananajoe sagte in Event auslösen wenn länger als Zeit X:

                                      Und setzt a.) einen entsprechenden Datenpunkt auf True. Und b.) schreibt es den Zeitstempel in einen anderen Datenpunkt (Typ Number). Ist der Zustand dann wieder Aus / False setzte ich auch False und setze den Zeitstempel auf 0
                                      Zeitstempel sind die Millisekunden seit dem 1.1.1970, 00:00 Uhr.
                                      Damit kann man nämlich prima Rechnen.
                                      Für Dinge die dann nach einer gewissen Zeit passieren sollen nutze ich ein 2. Skript welches 1x pro Minute läuft und die Datenpunkte prüft. Zum Beispiel Ob der Zeitstempel nicht 0 ist und wenn ja wie groß ist die Differenz.
                                      Ich muss natürlich sicherstellen das es nicht mehrmals auslöst, also nicht jede Minute weil die Differenz > 600.000 Milisekunden ist

                                      Kann man machen, ist meiner Meinung nach aber ressourcentechnisch nicht so gut. Du machst schon bei jeder Änderung etwas, und nur weil du da nicht noch ein komplexeres Ifthenelse einbauen willst machst du zusätzlich noch etwas per Heartbeat.

                                      Finde ich doppelt gemoppelt.

                                      A.

                                      G Offline
                                      G Offline
                                      Gerber
                                      schrieb am zuletzt editiert von
                                      #35

                                      @Asgothian

                                      So sieht es gut aus.
                                      
                                      

                                      Super, dann habe ich die komplette logik auch mit den Timeouts verstanden.
                                      Nochmal vielen Dank für die Hilfe.

                                      Das Script hat heute auch super funktioniert.
                                      Die Werte mit dem Laden abbrechen muss ich noch ein wenig variieren.

                                      @BananaJoe
                                      Danke für dein Vorschlag.

                                      1 Antwort Letzte Antwort
                                      0
                                      • BananaJoeB BananaJoe

                                        @asgothian sagte in Event auslösen wenn länger als Zeit X:

                                        Du machst schon bei jeder Änderung etwas, und nur weil du da nicht noch ein komplexeres Ifthenelse einbauen willst machst du zusätzlich noch etwas per Heartbeat

                                        Naja, die Timeout-Beispiele reagieren auch auf jede Änderungen und steigen dank Sperrvariable wieder aus. Das ist dann nicht mehr oder weniger. Oder wie oft wird das letzte Beispiel von @Gerber ausgeführt?

                                        Mehr ist der zusätzliche 1x die Minute Aufruf, richtig.

                                        AsgothianA Offline
                                        AsgothianA Offline
                                        Asgothian
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #36

                                        @bananajoe sagte in Event auslösen wenn länger als Zeit X:

                                        Mehr ist der zusätzliche 1x die Minute Aufruf, richtig.

                                        Bedingt. Es ist der Minütliche Aufruf plus die Aufrufe zur Synchronisation an den Minütlichen Aufruf.

                                        Nebenbei reagieren die Timeout-Befehle gerade nicht auf jede Änderung. Wenn du mal genau liest reagieren sie nur auf die Änderungen bei denen der Wert von "Vorher unter schwellwert" auf "jetzt über Schwellwert" wechselt. Das heist zu 95% läuft der Timeout nicht. Nur in dem Zeitrahmen wo der Wert um den Schwellwert schwankt gibt es regelmässig Timeouts.

                                        Nur das wir uns nicht missverstehen. Das ist nicht viel, da hast du recht. Das kann man so machen - das stimmt auch - für jeden Einzelfall. Aber im grossen und ganzen halte ich es für empfehlenswert sich tiefer mit der Event-Basierten Programmierung zu beschäftigen um weniger regelmässige Skripte zu haben.

                                        Gerade das von @Gerber vorgeschlagene Problem lässt sich leicht vollständig ohne Zeitpläne nutzen - wenn man es durchdenkt.

                                        A.

                                        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                        BananaJoeB 1 Antwort Letzte Antwort
                                        2
                                        • AsgothianA Asgothian

                                          @bananajoe sagte in Event auslösen wenn länger als Zeit X:

                                          Mehr ist der zusätzliche 1x die Minute Aufruf, richtig.

                                          Bedingt. Es ist der Minütliche Aufruf plus die Aufrufe zur Synchronisation an den Minütlichen Aufruf.

                                          Nebenbei reagieren die Timeout-Befehle gerade nicht auf jede Änderung. Wenn du mal genau liest reagieren sie nur auf die Änderungen bei denen der Wert von "Vorher unter schwellwert" auf "jetzt über Schwellwert" wechselt. Das heist zu 95% läuft der Timeout nicht. Nur in dem Zeitrahmen wo der Wert um den Schwellwert schwankt gibt es regelmässig Timeouts.

                                          Nur das wir uns nicht missverstehen. Das ist nicht viel, da hast du recht. Das kann man so machen - das stimmt auch - für jeden Einzelfall. Aber im grossen und ganzen halte ich es für empfehlenswert sich tiefer mit der Event-Basierten Programmierung zu beschäftigen um weniger regelmässige Skripte zu haben.

                                          Gerade das von @Gerber vorgeschlagene Problem lässt sich leicht vollständig ohne Zeitpläne nutzen - wenn man es durchdenkt.

                                          A.

                                          BananaJoeB Online
                                          BananaJoeB Online
                                          BananaJoe
                                          Most Active
                                          schrieb am zuletzt editiert von
                                          #37

                                          @asgothian sagte in Event auslösen wenn länger als Zeit X:

                                          Aber im grossen und ganzen halte ich es für empfehlenswert sich tiefer mit der Event-Basierten Programmierung zu beschäftigen um weniger regelmässige Skripte zu haben.

                                          Da hast du natürlich Recht. Ich nutze das "1x die Minute" genau genommen auch nur an 2 Stellen für VIS Darstellungen (z.B. Ereignisanzeige auf der verschiedenen Meldungen nacheinander angezeigt werden, neue Meldungen aber sofort erscheinen), der große Rest läuft Eventbasiert - das war ja gerade eines der Dinge die ich genial finde (neben dem Objektebaum) und mich deshalb für ioBroker entschieden hatte.

                                          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                          1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          874

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe