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. [gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    323

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

[gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
53 Beiträge 10 Kommentatoren 6.2k Aufrufe 6 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

    @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

    @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

    .....
    ich würde die Datenpunkte generell per On() auslesen und in Variablen speichern. Zusammen mit einem Auslesen beim Skriptstart hast du dann im Skript zu jedem Zeitpunkt ein sauberes Abbild der Datenpunkte und musst nicht zur Ermittlung der Werte an die Objektstates.
    .....

    Danke für die ausführliche Erklärung.
    Das Einlesen der Datenpunkte werde ich ereignisgesteuert ausführen.
    Das restliche Programm als zyklische Routine, weil ich das leichter verstehe.

    Gerade in diesem Fall ist eine zyklische Abarbeitung eher weniger Sinnvoll.

    Letztendlich ist eine Aktion (Ändern des Ladevorgangs, Aktualisierung der Darstellung) nur Sinnvoll wenn sich Werte auch geändert haben. Dabei gibt es in dem was ich da sehe keinen Wert der sich nur aus Vorgabewerten und Zeit berechnen lässt.

    Zum Thema komplizierter:

    Du baust dir eine Funktion "Aktion_ausführen". In dieser verarbeitest du alle gespeicherten Variablen. Zusätzlich merkst Du dir in einer Variable "Timestamp" wann die Funktion gelaufen ist.

    Diese Funktion rufst du aus jedem Trigger NACH dem aktualisieren der Variablen auf.

    Aus dem Unterschied zwischen "jetzt" und "Timestamp" kannst du Berechnungen anstellen die auf den Zeitunterschied zwischen 2 Änderungen angewiesen sind.

    H Offline
    H Offline
    hub01
    schrieb am zuletzt editiert von
    #24

    @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

    .....
    Gerade in diesem Fall ist eine zyklische Abarbeitung eher weniger Sinnvoll.

    Letztendlich ist eine Aktion (Ändern des Ladevorgangs, Aktualisierung der Darstellung) nur Sinnvoll wenn sich Werte auch geändert haben. Dabei gibt es in dem was ich da sehe keinen Wert der sich nur aus Vorgabewerten und Zeit berechnen lässt.
    .....

    Ich weiß nicht, ob ich dich da richtig verstanden habe, aber hier mal 2 kurze Teilfunktion aus meiner Anwendung:

    • wenn genügend Überschuss vorhanden ist, dann erhöhe den Ladestrom alle 15 Sekunden um 1 Ampere
    • wenn 1-phasiges Laden aktiv ist und mit 16A geladen wird und 5 Minuten lang genügend Überschuss für die Phasenumschaltung vorhanden ist, dann schalte um
    AsgothianA 1 Antwort Letzte Antwort
    0
    • H hub01

      @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

      .....
      Gerade in diesem Fall ist eine zyklische Abarbeitung eher weniger Sinnvoll.

      Letztendlich ist eine Aktion (Ändern des Ladevorgangs, Aktualisierung der Darstellung) nur Sinnvoll wenn sich Werte auch geändert haben. Dabei gibt es in dem was ich da sehe keinen Wert der sich nur aus Vorgabewerten und Zeit berechnen lässt.
      .....

      Ich weiß nicht, ob ich dich da richtig verstanden habe, aber hier mal 2 kurze Teilfunktion aus meiner Anwendung:

      • wenn genügend Überschuss vorhanden ist, dann erhöhe den Ladestrom alle 15 Sekunden um 1 Ampere
      • wenn 1-phasiges Laden aktiv ist und mit 16A geladen wird und 5 Minuten lang genügend Überschuss für die Phasenumschaltung vorhanden ist, dann schalte um
      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #25

      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

      auf Grund der regen Diskussion habe ich mal die Zeit gemessen, die mein Skript in Anspruch nimmt.
      Diese schwankt zwischen 2 und 4 Millisekunden.

      Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

      Ich weiß nicht, ob ich dich da richtig verstanden habe, aber hier mal 2 kurze Teilfunktion aus meiner Anwendung:

      wenn genügend Überschuss vorhanden ist, dann erhöhe den Ladestrom alle 15 Sekunden um 1 Ampere

      Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

      • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
      • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

      wenn 1-phasiges Laden aktiv ist und mit 16A geladen wird und 5 Minuten lang genügend Überschuss für die Phasenumschaltung vorhanden ist, dann schalte um

      Wenn der Überschuss sich geändert hat nachschauen:

      • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
      • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

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

      B H 2 Antworten Letzte Antwort
      0
      • H hub01

        Hallo zusammen,

        auf Grund der regen Diskussion habe ich mal die Zeit gemessen, die mein Skript in Anspruch nimmt.
        Diese schwankt zwischen 2 und 4 Millisekunden.
        Das Ganze läuft auf einem PC in VMware mit Windows 10 und 6GB Ram.
        Wobei ich meine, dass mein Skript im Vergleich zu normalen Haus-Automatisierungen umfangreich und aufwändig ist.

        Für mich stellt sich deswegen nicht die Frage, ob das Skript zyklisch oder ereignisgesteuert aufgebaut sein soll, sondern wie im Eingangspost geschrieben, nur ob das Lesen der Datenpunkte besser ereignisgesteuert erfolgen sollte.

        B Offline
        B Offline
        Blockmove
        schrieb am zuletzt editiert von
        #26

        @hub01 said in Datenpunkte zyklisch oder ereignisgesteuert lesen:

        Für mich stellt sich deswegen nicht die Frage, ob das Skript zyklisch oder ereignisgesteuert aufgebaut sein soll, sondern wie im Eingangspost geschrieben, nur ob das Lesen der Datenpunkte besser ereignisgesteuert erfolgen sollte.

        Was meinst du mit Datenpunkte ereignisgesteuert lesen?
        Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

        The difference beetween Man and Boys:
        The price of their toys 😀

        H 1 Antwort Letzte Antwort
        0
        • B Blockmove

          @hub01 said in Datenpunkte zyklisch oder ereignisgesteuert lesen:

          Für mich stellt sich deswegen nicht die Frage, ob das Skript zyklisch oder ereignisgesteuert aufgebaut sein soll, sondern wie im Eingangspost geschrieben, nur ob das Lesen der Datenpunkte besser ereignisgesteuert erfolgen sollte.

          Was meinst du mit Datenpunkte ereignisgesteuert lesen?
          Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

          H Offline
          H Offline
          hub01
          schrieb am zuletzt editiert von
          #27

          @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

          @hub01 said in Datenpunkte zyklisch oder ereignisgesteuert lesen:

          Für mich stellt sich deswegen nicht die Frage, ob das Skript zyklisch oder ereignisgesteuert aufgebaut sein soll, sondern wie im Eingangspost geschrieben, nur ob das Lesen der Datenpunkte besser ereignisgesteuert erfolgen sollte.

          Was meinst du mit Datenpunkte ereignisgesteuert lesen?
          Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

          Hi,
          siehe 1. Beitrag

          1 Antwort Letzte Antwort
          0
          • AsgothianA Asgothian

            @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

            auf Grund der regen Diskussion habe ich mal die Zeit gemessen, die mein Skript in Anspruch nimmt.
            Diese schwankt zwischen 2 und 4 Millisekunden.

            Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

            @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

            Ich weiß nicht, ob ich dich da richtig verstanden habe, aber hier mal 2 kurze Teilfunktion aus meiner Anwendung:

            wenn genügend Überschuss vorhanden ist, dann erhöhe den Ladestrom alle 15 Sekunden um 1 Ampere

            Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

            • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
            • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

            wenn 1-phasiges Laden aktiv ist und mit 16A geladen wird und 5 Minuten lang genügend Überschuss für die Phasenumschaltung vorhanden ist, dann schalte um

            Wenn der Überschuss sich geändert hat nachschauen:

            • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
            • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.
            B Offline
            B Offline
            Blockmove
            schrieb am zuletzt editiert von
            #28

            Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

            Das ist auf jeden Fall korrekt.
            Schwallbildung, egal ob nun durch Heartbeat, abhängige Events oder eben sonstwas, ist nie gut.
            Bei "großen" Systemen definiert man eben Ablaufgruppen um sowas zu vermeiden.
            Angesichts der Leistungsfähigkeit heutiger Hardware, hatte ich das bei ioBroker noch nie gebraucht.
            Da stolpere ich manchmal eher über das Thema synchron / asychron bei Javascript

            The difference beetween Man and Boys:
            The price of their toys 😀

            AsgothianA 1 Antwort Letzte Antwort
            1
            • B Blockmove

              Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

              Das ist auf jeden Fall korrekt.
              Schwallbildung, egal ob nun durch Heartbeat, abhängige Events oder eben sonstwas, ist nie gut.
              Bei "großen" Systemen definiert man eben Ablaufgruppen um sowas zu vermeiden.
              Angesichts der Leistungsfähigkeit heutiger Hardware, hatte ich das bei ioBroker noch nie gebraucht.
              Da stolpere ich manchmal eher über das Thema synchron / asychron bei Javascript

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

              @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

              Angesichts der Leistungsfähigkeit heutiger Hardware, hatte ich das bei ioBroker noch nie gebraucht.
              Da stolpere ich manchmal eher über das Thema synchron / asychron bei Javascript

              Schau mal im Forum wie viele Leute versuchen einen ioBroker auf einem PI3 oder sogar PIZero laufen zu lassen, und denk dann nochmal über das Thema Leistung aktueller Hardware nach :)

              @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

              Was meinst du mit Datenpunkte ereignisgesteuert lesen?
              Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

              Wenn sich in einem Skript mehrere "on ..." Befehle befinden dann wird nur der Code innerhalb des "on..." Ereignisgesteuert ausgeführt - nicht das gesamte Skript.

              An dieser Stelle kämpft Deine Vorstellung ggf. wieder mit dem Thema Synchron / Asynchron. Ein Skript welches nur aus

              var MyValue = "xy"
              on ...
              on ...
              on ...
              on ...
              schedule ...
              
              

              besteht wird zur Laufzeit erst einmal nur wenig machen. Es stellt den Kontext zur Verfügung in dem die Variable MyValue definiert ist, hat die Trigger über die "on" Befehle mit einem Einsprungpunkt im eigenen Kontext versorgt (dito mit dem Zeitplan durch den "shedule" Befehl). Danach belegt es keine weitere Prozessorzeit, hält aber den Kontext aufrecht.

              Wird das Skript beendet wird der Kontext gelöscht und die Einträge in den Schedule dispatcher und an den Triggerdatenpunkten entfernt.

              Ansonsten wird immer nur der Teil des Skriptes aktiv ausgeführt der hinter dem Einsprungpunkt liegt, und das auch nur wenn seine Bedingung erfüllt ist (Trigger oder Zeitplan)

              A.

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

              B CodierknechtC 2 Antworten Letzte Antwort
              0
              • AsgothianA Asgothian

                @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                Angesichts der Leistungsfähigkeit heutiger Hardware, hatte ich das bei ioBroker noch nie gebraucht.
                Da stolpere ich manchmal eher über das Thema synchron / asychron bei Javascript

                Schau mal im Forum wie viele Leute versuchen einen ioBroker auf einem PI3 oder sogar PIZero laufen zu lassen, und denk dann nochmal über das Thema Leistung aktueller Hardware nach :)

                @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                Was meinst du mit Datenpunkte ereignisgesteuert lesen?
                Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

                Wenn sich in einem Skript mehrere "on ..." Befehle befinden dann wird nur der Code innerhalb des "on..." Ereignisgesteuert ausgeführt - nicht das gesamte Skript.

                An dieser Stelle kämpft Deine Vorstellung ggf. wieder mit dem Thema Synchron / Asynchron. Ein Skript welches nur aus

                var MyValue = "xy"
                on ...
                on ...
                on ...
                on ...
                schedule ...
                
                

                besteht wird zur Laufzeit erst einmal nur wenig machen. Es stellt den Kontext zur Verfügung in dem die Variable MyValue definiert ist, hat die Trigger über die "on" Befehle mit einem Einsprungpunkt im eigenen Kontext versorgt (dito mit dem Zeitplan durch den "shedule" Befehl). Danach belegt es keine weitere Prozessorzeit, hält aber den Kontext aufrecht.

                Wird das Skript beendet wird der Kontext gelöscht und die Einträge in den Schedule dispatcher und an den Triggerdatenpunkten entfernt.

                Ansonsten wird immer nur der Teil des Skriptes aktiv ausgeführt der hinter dem Einsprungpunkt liegt, und das auch nur wenn seine Bedingung erfüllt ist (Trigger oder Zeitplan)

                A.

                B Offline
                B Offline
                Blockmove
                schrieb am zuletzt editiert von
                #30

                @asgothian
                Die Arbeitsweise von ioBroker beim Abarbeiten von Scripten ist mir schon klar.
                Das zu Grunde liegende Konzept ist richtig gut umgesetzt.
                Die Stabilität und Robustheit von ioBroker ist hervorragend.

                Ich bin nur nicht der größte Fan von Javascript / node.js.
                Aber so hat halt jeder seine persönliche Vorlieben.

                The difference beetween Man and Boys:
                The price of their toys 😀

                1 Antwort Letzte Antwort
                0
                • AsgothianA Asgothian

                  @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                  Angesichts der Leistungsfähigkeit heutiger Hardware, hatte ich das bei ioBroker noch nie gebraucht.
                  Da stolpere ich manchmal eher über das Thema synchron / asychron bei Javascript

                  Schau mal im Forum wie viele Leute versuchen einen ioBroker auf einem PI3 oder sogar PIZero laufen zu lassen, und denk dann nochmal über das Thema Leistung aktueller Hardware nach :)

                  @blockmove sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                  Was meinst du mit Datenpunkte ereignisgesteuert lesen?
                  Das Lesen erfolgt doch dann über ein Script? Und dieses Script löst du dann eben mit einem Ereignis aus.

                  Wenn sich in einem Skript mehrere "on ..." Befehle befinden dann wird nur der Code innerhalb des "on..." Ereignisgesteuert ausgeführt - nicht das gesamte Skript.

                  An dieser Stelle kämpft Deine Vorstellung ggf. wieder mit dem Thema Synchron / Asynchron. Ein Skript welches nur aus

                  var MyValue = "xy"
                  on ...
                  on ...
                  on ...
                  on ...
                  schedule ...
                  
                  

                  besteht wird zur Laufzeit erst einmal nur wenig machen. Es stellt den Kontext zur Verfügung in dem die Variable MyValue definiert ist, hat die Trigger über die "on" Befehle mit einem Einsprungpunkt im eigenen Kontext versorgt (dito mit dem Zeitplan durch den "shedule" Befehl). Danach belegt es keine weitere Prozessorzeit, hält aber den Kontext aufrecht.

                  Wird das Skript beendet wird der Kontext gelöscht und die Einträge in den Schedule dispatcher und an den Triggerdatenpunkten entfernt.

                  Ansonsten wird immer nur der Teil des Skriptes aktiv ausgeführt der hinter dem Einsprungpunkt liegt, und das auch nur wenn seine Bedingung erfüllt ist (Trigger oder Zeitplan)

                  A.

                  CodierknechtC Offline
                  CodierknechtC Offline
                  Codierknecht
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #31

                  @asgothian
                  Oder um es auf ein - dem Einen oder Anderen eher geläufiges - Windows zu münzen:
                  Man stelle sich eine Windows-Application mit 3 Button vor.
                  Hinter jedem der Buttons steht die Ereignisbehandlung für den Klick.

                  procedure TForm3.Button1Click(Sender: TObject);
                  begin
                    // mach was
                  end;
                  
                  procedure TForm3.Button2Click(Sender: TObject);
                  begin
                    // mach was anderes
                  end;
                  
                  procedure TForm3.Button3Click(Sender: TObject);
                  begin
                    // mach was völlig anderes
                  end;
                  

                  Beim Start der Applikation (im ioB: Script) wird lediglich die entsprechende Ereignisbehandlung an den Button gebunden.
                  Solange keiner klickt, passiert auch nix und es wird auch keine Rechenzeit verbraten.
                  Erst wenn der Button angeklickt wird, wird dessen Ereignisbehandlung aufgerufen.
                  Und zwar genau dann, wenn geklickt wird. Da läuft kein "Scheduler", der alle x Millisekunden prüft ob ein Button geklickt wurde oder etwas in der Art. Sowas wäre reine Ressourcenverschwendung.

                  Ersetzt man jetzt "ButtonClick" durch "DatenpunktÄnderung" hat man prizipiell das Verhalten im ioBroker.

                  Wohlgemerkt "prinzipiell", denn die Asynchronität macht einige Dinge ggf. etwas komplizierter.

                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                  Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                  HmIP|ZigBee|Tasmota|Unifi
                  Zabbix Certified Specialist
                  Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                  1 Antwort Letzte Antwort
                  1
                  • AsgothianA Asgothian

                    @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                    auf Grund der regen Diskussion habe ich mal die Zeit gemessen, die mein Skript in Anspruch nimmt.
                    Diese schwankt zwischen 2 und 4 Millisekunden.

                    Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                    @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                    Ich weiß nicht, ob ich dich da richtig verstanden habe, aber hier mal 2 kurze Teilfunktion aus meiner Anwendung:

                    wenn genügend Überschuss vorhanden ist, dann erhöhe den Ladestrom alle 15 Sekunden um 1 Ampere

                    Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                    • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                    • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                    wenn 1-phasiges Laden aktiv ist und mit 16A geladen wird und 5 Minuten lang genügend Überschuss für die Phasenumschaltung vorhanden ist, dann schalte um

                    Wenn der Überschuss sich geändert hat nachschauen:

                    • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                    • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.
                    H Offline
                    H Offline
                    hub01
                    schrieb am zuletzt editiert von
                    #32

                    @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                    Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                    das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                    Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                    Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                    • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                    • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                    Wenn der Überschuss sich geändert hat nachschauen:

                    • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                    • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

                    Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                    Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.
                    Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                    Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                    Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                    Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                    Meine zyklisches Programm teilt sich auf in:

                    • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                    • alle 2 Sekunden: Überschuss ermitteln
                    • alle 15 Sekunden: Routine für (langsames) Hochschalten
                    • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                    Das Ein-/Ausschalten werde ich noch überdenken.
                    Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                    CodierknechtC B AsgothianA HomoranH 4 Antworten Letzte Antwort
                    0
                    • H hub01

                      @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                      Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                      das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                      Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                      Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                      • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                      • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                      Wenn der Überschuss sich geändert hat nachschauen:

                      • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                      • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

                      Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                      Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.
                      Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                      Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                      Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                      Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                      Meine zyklisches Programm teilt sich auf in:

                      • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                      • alle 2 Sekunden: Überschuss ermitteln
                      • alle 15 Sekunden: Routine für (langsames) Hochschalten
                      • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                      Das Ein-/Ausschalten werde ich noch überdenken.
                      Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                      CodierknechtC Offline
                      CodierknechtC Offline
                      Codierknecht
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #33

                      @hub01
                      Ich vermute trotzdem, dass ein solches zyklisches Vorgehen mehr Last produziert als Trigger.
                      Besonders die kurzen Zyklen von 0,5 bzw. 2 Sekunden.

                      Ich würde auf die 3 Eingangswerte einen Trigger legen und in dessen Ereignisbehandlung mit Schwellwerten arbeiten.
                      Erst bei Änderungen über dem Schwellwert erfolgt dann die weitere Verarbeitung.
                      Ich nehme dazu einfach mal an, dass man Änderungen unterhalb des Schwellwertes der Einfachheit halber ignorieren kann. Wie man den jeweiligen Schwellwert dann definiert, ist Ansichtssache.

                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified Specialist
                      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                      1 Antwort Letzte Antwort
                      0
                      • H hub01

                        @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                        Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                        das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                        Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                        Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                        • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                        • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                        Wenn der Überschuss sich geändert hat nachschauen:

                        • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                        • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

                        Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                        Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.
                        Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                        Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                        Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                        Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                        Meine zyklisches Programm teilt sich auf in:

                        • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                        • alle 2 Sekunden: Überschuss ermitteln
                        • alle 15 Sekunden: Routine für (langsames) Hochschalten
                        • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                        Das Ein-/Ausschalten werde ich noch überdenken.
                        Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                        B Offline
                        B Offline
                        Blockmove
                        schrieb am zuletzt editiert von
                        #34

                        @hub01 said in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                        Meine zyklisches Programm teilt sich auf in:

                        • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                        • alle 2 Sekunden: Überschuss ermitteln
                        • alle 15 Sekunden: Routine für (langsames) Hochschalten
                        • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                        Ich hab einen Schedule mit 0,5s
                        Darin habe ich eine Variable als "Taktzähler".
                        Abhängig vom diesem Taktzähler rufe ich dann meine Funktionen auf.

                        The difference beetween Man and Boys:
                        The price of their toys 😀

                        1 Antwort Letzte Antwort
                        0
                        • H hub01

                          @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                          Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                          das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                          Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                          Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                          • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                          • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                          Wenn der Überschuss sich geändert hat nachschauen:

                          • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                          • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

                          Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                          Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.
                          Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                          Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                          Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                          Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                          Meine zyklisches Programm teilt sich auf in:

                          • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                          • alle 2 Sekunden: Überschuss ermitteln
                          • alle 15 Sekunden: Routine für (langsames) Hochschalten
                          • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                          Das Ein-/Ausschalten werde ich noch überdenken.
                          Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

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

                          @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                          das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                          Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                          Kein, es geht da eher darum das mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen. In dem von Dir vorgegebenen Beispiel tritt dieser Peak alle 30 Sekunden auf, da da alle Zeitpläne aktiv werden. Natürlich haben auch Adapter die alle x Sekunden etwas tun ihren Anteil daran. An dem kann der Anwender aber selten etwas ändern.

                          Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                          Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                          Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                          Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                          Dies liesse sich über ein entsprechendes Visualisierungsobjekt lösen, dem gegeben wird:

                          • eine Zeit wann 100% erreicht sind
                          • eine Zeit die als 0% anzusehen ist
                          • ein "Aktiv" oder "inaktiv"

                          Aus diesen 3 Parametern kann der Web-Server oder Web-Client jederzeit die korrekte Anzeige erzeugen (läuft dann im Browser)
                          Die Zielzeit würde dann im Trigger beim Start des Timeouts mit gesetzt, und die Visualisierung ist auf Stand.

                          Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                          Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                          Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                          Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                          Meine zyklisches Programm teilt sich auf in:

                          • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                          • alle 2 Sekunden: Überschuss ermitteln
                          • alle 15 Sekunden: Routine für (langsames) Hochschalten
                          • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                          Das Ein-/Ausschalten werde ich noch überdenken.
                          Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                          Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                          A.

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

                          H 1 Antwort Letzte Antwort
                          0
                          • H hub01

                            @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                            Mal vorweg - der effektive Lastunterschied in einzelnen Fällen ist auf jeden Fall minimal. Es geht hier eher um den generellen Ansatz. Ich habe mehrfach Systeme gesehen die durch eine grössere Anzahl von Heartbeat getriebenen Einzelfunktionen plötzliche Lastspitzen hatten - immer dann wenn durch den Heartbeat alle Skripte gleichzeitig arbeiten wollten.

                            das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                            Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                            Ausgehend davon das sich der "Überschuss" häufiger als alle 15 Sekunden ändert:

                            • vorheriger wert =< "Genügend Überschuss für +1 A" > "Genügend Überschuss für +1 A" => Timeout setzen, 15 s. Wenn der auslöst, Ladestrom +1A
                            • aktueller Wert <= "Genügend Überschuss für +1 A" - Timeout löschen.

                            Wenn der Überschuss sich geändert hat nachschauen:

                            • vorheriger wert =< "Überschussgrenze für Phasenumschaltung" und aktueller Wert > "Überschussgrenze für Phasenumschaltung" => Timeout setzen, 5 min. Wenn der auslöst, Phasenumschaltung
                            • aktueller Wert <= "Überschussgrenze für Phasenumschaltung" - Timeout löschen.

                            Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                            Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.
                            Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                            Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                            Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                            Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                            Meine zyklisches Programm teilt sich auf in:

                            • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                            • alle 2 Sekunden: Überschuss ermitteln
                            • alle 15 Sekunden: Routine für (langsames) Hochschalten
                            • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                            Das Ein-/Ausschalten werde ich noch überdenken.
                            Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von
                            #36

                            @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                            wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                            ich vermute, dass die Timeouts dann nicht alle richtig gestoppt wurden und mehrfach liefen.

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            1 Antwort Letzte Antwort
                            0
                            • AsgothianA Asgothian

                              @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                              das mit den Heartbeat habe ich nicht verstanden. Ist das nicht ein Problem der Adapter?
                              Oder könnte z.B. ein hängender Adapter mein Skript blockieren?

                              Kein, es geht da eher darum das mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen. In dem von Dir vorgegebenen Beispiel tritt dieser Peak alle 30 Sekunden auf, da da alle Zeitpläne aktiv werden. Natürlich haben auch Adapter die alle x Sekunden etwas tun ihren Anteil daran. An dem kann der Anwender aber selten etwas ändern.

                              Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                              Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                              Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                              Auf der anderen Seite will ich bei Zeitverzögerungen diese auch als Fortschrittsbalken auf der Visu. sehen. (in meiner Hardcopy der Teil links oben / Schaltfreigaben)

                              Dies liesse sich über ein entsprechendes Visualisierungsobjekt lösen, dem gegeben wird:

                              • eine Zeit wann 100% erreicht sind
                              • eine Zeit die als 0% anzusehen ist
                              • ein "Aktiv" oder "inaktiv"

                              Aus diesen 3 Parametern kann der Web-Server oder Web-Client jederzeit die korrekte Anzeige erzeugen (läuft dann im Browser)
                              Die Zielzeit würde dann im Trigger beim Start des Timeouts mit gesetzt, und die Visualisierung ist auf Stand.

                              Beim Rest ist es oft schwierig, wenn man nicht das ganze Skript kennt.
                              Deswegen eine kurze Erklärung, warum ich zyklisch programmiere, unabhängig davon, dass ich es leichter verstehe.

                              Fast alle Funktionen sind vom Überschuss abhängig. Der Überschuss wird aus den 3 Energiewerten vom Energiemeter gebildet. Diese ändern sich zw. 2 und bis zu 8 Sekunden. Die 2 Sekunden sind vermutlich die Pollzeit vom Adapter oder vom Energiemeter. Ereignisgesteuert würden meine Routinen somit im 2/3 bis 8/3 Sekundentakt laufen.

                              Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                              Meine zyklisches Programm teilt sich auf in:

                              • alle 0,5 Sekunden: Ein-/Ausschalten, Steuersignale und Zeitsignale bilden
                              • alle 2 Sekunden: Überschuss ermitteln
                              • alle 15 Sekunden: Routine für (langsames) Hochschalten
                              • alle 5 Sekunden: Routine für (schnelles) Runterschalten

                              Das Ein-/Ausschalten werde ich noch überdenken.
                              Beim Rest denke ich, dass ich langsamer und ressourcenschonender bin.

                              Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                              A.

                              H Offline
                              H Offline
                              hub01
                              schrieb am zuletzt editiert von
                              #37

                              @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                              @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                              Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                              Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                              Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                              Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.
                              Eigentlich nicht weiter schlimm (solange sie sich nicht aufaddieren).
                              Meine ersten Versuche mit Timeout waren da gravierender, war aber unter Linux/Debian, bevor ich auf Windows umgestellt hatte.

                              Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                              Genau das macht ja mein zyklisches Programm auch. Fast jede Aktion hängt an einer oder mehreren Wenn/Dann-Funktion.

                              Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                              Ja, die ms der Systemzeit nutze ich für meine Zeiten.
                              Warum ich aber 500ms nutze, hab ich oben schon mal geschrieben.

                              • um Rückmeldungen auf der Visu. zeitnah zu sehen
                              • um in Trendanzeigen zeitfolgerichtige Kurven zu bekommen
                              • um Verzögerungszeiten feiner auflösen zu können
                              HomoranH AsgothianA 2 Antworten Letzte Antwort
                              0
                              • H hub01

                                @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                                Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                                Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                                Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.
                                Eigentlich nicht weiter schlimm (solange sie sich nicht aufaddieren).
                                Meine ersten Versuche mit Timeout waren da gravierender, war aber unter Linux/Debian, bevor ich auf Windows umgestellt hatte.

                                Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                                Genau das macht ja mein zyklisches Programm auch. Fast jede Aktion hängt an einer oder mehreren Wenn/Dann-Funktion.

                                Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                                Ja, die ms der Systemzeit nutze ich für meine Zeiten.
                                Warum ich aber 500ms nutze, hab ich oben schon mal geschrieben.

                                • um Rückmeldungen auf der Visu. zeitnah zu sehen
                                • um in Trendanzeigen zeitfolgerichtige Kurven zu bekommen
                                • um Verzögerungszeiten feiner auflösen zu können
                                HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von Homoran
                                #38

                                @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.

                                Das ist jetzt wirklich nicht

                                @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                soweit danebenliegen /abweichen kann

                                Das dürfte, wenn überhaupt, deiner Hardware geschuldet sein, wenn

                                @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen

                                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                H 1 Antwort Letzte Antwort
                                0
                                • H hub01

                                  @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                  @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                  Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                                  Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                                  Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                                  Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.
                                  Eigentlich nicht weiter schlimm (solange sie sich nicht aufaddieren).
                                  Meine ersten Versuche mit Timeout waren da gravierender, war aber unter Linux/Debian, bevor ich auf Windows umgestellt hatte.

                                  Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                                  Genau das macht ja mein zyklisches Programm auch. Fast jede Aktion hängt an einer oder mehreren Wenn/Dann-Funktion.

                                  Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                                  Ja, die ms der Systemzeit nutze ich für meine Zeiten.
                                  Warum ich aber 500ms nutze, hab ich oben schon mal geschrieben.

                                  • um Rückmeldungen auf der Visu. zeitnah zu sehen
                                  • um in Trendanzeigen zeitfolgerichtige Kurven zu bekommen
                                  • um Verzögerungszeiten feiner auflösen zu können
                                  AsgothianA Offline
                                  AsgothianA Offline
                                  Asgothian
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #39

                                  @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                  @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                  @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                  Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                                  Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                                  Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                                  Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.
                                  Eigentlich nicht weiter schlimm (solange sie sich nicht aufaddieren).
                                  Meine ersten Versuche mit Timeout waren da gravierender, war aber unter Linux/Debian, bevor ich auf Windows umgestellt hatte.

                                  Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                                  Genau das macht ja mein zyklisches Programm auch. Fast jede Aktion hängt an einer oder mehreren Wenn/Dann-Funktion.

                                  Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                                  Ja, die ms der Systemzeit nutze ich für meine Zeiten.
                                  Warum ich aber 500ms nutze, hab ich oben schon mal geschrieben.

                                  • um Rückmeldungen auf der Visu. zeitnah zu sehen
                                  • um in Trendanzeigen zeitfolgerichtige Kurven zu bekommen
                                  • um Verzögerungszeiten feiner auflösen zu können

                                  Ich denke die Diskussion zwischen uns kann hier beendet werden. Du bist davon überzeugt das der Weg den Du gehst der beste ist. Ich bin davon überzeugt das dem nicht so ist.

                                  Belassen wir es dabei.

                                  A.

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

                                  H 1 Antwort Letzte Antwort
                                  4
                                  • AsgothianA Asgothian

                                    @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                    @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                    @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                    Deine vorgeschlagenen Lösungen habe ich soweit verstanden, aber Timeouts waren das erste, was ich aus meinen Skripten verbannt habe.
                                    Für mich völlig unverständlich, wie ein hochmodernes System soweit danebenliegen/abweichen kann.

                                    Diesen Punkt müsstest du mal genauer erklären. Ich sehe nicht was ein Timeout mit "daneben liegen" und "abweichen" zu tun hat.

                                    Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.
                                    Eigentlich nicht weiter schlimm (solange sie sich nicht aufaddieren).
                                    Meine ersten Versuche mit Timeout waren da gravierender, war aber unter Linux/Debian, bevor ich auf Windows umgestellt hatte.

                                    Prinzipiell ja, wobei auch da bei geschickter Umsetzung regelmässig ganz wenig passiert (geänderten Wert in eine Variable holen, eine Bedingung prüfen und nur wenn die Bedingung zutrifft eine Aktion auslösen)

                                    Genau das macht ja mein zyklisches Programm auch. Fast jede Aktion hängt an einer oder mehreren Wenn/Dann-Funktion.

                                    Ich denke die 0,5 Sekunden kannst Du dir sparen, da die eigentlichen Aktionen sowieso maximal im 5 Sekunden Raster laufen. Schneller muss da nichts laufen, und Zeitsignale musst du eigentlich nicht bilden - du hast direkt zugriff auf die in ms laufende Systemzeit.

                                    Ja, die ms der Systemzeit nutze ich für meine Zeiten.
                                    Warum ich aber 500ms nutze, hab ich oben schon mal geschrieben.

                                    • um Rückmeldungen auf der Visu. zeitnah zu sehen
                                    • um in Trendanzeigen zeitfolgerichtige Kurven zu bekommen
                                    • um Verzögerungszeiten feiner auflösen zu können

                                    Ich denke die Diskussion zwischen uns kann hier beendet werden. Du bist davon überzeugt das der Weg den Du gehst der beste ist. Ich bin davon überzeugt das dem nicht so ist.

                                    Belassen wir es dabei.

                                    A.

                                    H Offline
                                    H Offline
                                    hub01
                                    schrieb am zuletzt editiert von
                                    #40

                                    @asgothian
                                    :+1:
                                    ich werde deine Anregungen/Empfehlungen nicht gänzlich unbeachtet lassen. Einiges bei den 500ms werde ich sicher noch ändern. Danke dir

                                    1 Antwort Letzte Antwort
                                    0
                                    • HomoranH Homoran

                                      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.

                                      Das ist jetzt wirklich nicht

                                      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      soweit danebenliegen /abweichen kann

                                      Das dürfte, wenn überhaupt, deiner Hardware geschuldet sein, wenn

                                      @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen

                                      H Offline
                                      H Offline
                                      hub01
                                      schrieb am zuletzt editiert von
                                      #41

                                      @homoran sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.

                                      Das ist jetzt wirklich nicht

                                      @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      soweit danebenliegen /abweichen kann

                                      Für den Einen nicht, für den Anderen schon …
                                      Aber ich versteh dich, für meinen Anwendungsfall eher nicht ausschlaggebend.
                                      Es ist halt für mich nur nicht begreiflich (egal wo das herkommt), zumal die Systemzeit im Millisekundenbereich ohne Probleme funktioniert. Als SPS-Programmierer kenne ich so was nicht.

                                      Das dürfte, wenn überhaupt, deiner Hardware geschuldet sein, wenn

                                      @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                      mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen

                                      Und auch das versteh ich nicht.
                                      Mein Skript mit über 400 Zeilen benötigt zw. 2-4ms ohne Ausreißer.
                                      Und eine einzelne Zeitfunktion liegt bis 100ms daneben?
                                      Das sind sicherlich nicht meine gleichzeitig laufenden Zeitpläne.

                                      CodierknechtC HomoranH 2 Antworten Letzte Antwort
                                      0
                                      • H hub01

                                        @homoran sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                        @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                        Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.

                                        Das ist jetzt wirklich nicht

                                        @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                        soweit danebenliegen /abweichen kann

                                        Für den Einen nicht, für den Anderen schon …
                                        Aber ich versteh dich, für meinen Anwendungsfall eher nicht ausschlaggebend.
                                        Es ist halt für mich nur nicht begreiflich (egal wo das herkommt), zumal die Systemzeit im Millisekundenbereich ohne Probleme funktioniert. Als SPS-Programmierer kenne ich so was nicht.

                                        Das dürfte, wenn überhaupt, deiner Hardware geschuldet sein, wenn

                                        @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                        mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen

                                        Und auch das versteh ich nicht.
                                        Mein Skript mit über 400 Zeilen benötigt zw. 2-4ms ohne Ausreißer.
                                        Und eine einzelne Zeitfunktion liegt bis 100ms daneben?
                                        Das sind sicherlich nicht meine gleichzeitig laufenden Zeitpläne.

                                        CodierknechtC Offline
                                        CodierknechtC Offline
                                        Codierknecht
                                        Developer Most Active
                                        schrieb am zuletzt editiert von
                                        #42

                                        @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                        Als SPS-Programmierer ...

                                        Lös' Dich davon.
                                        SPS ist etwas völlig anderes*. Ich glaube, daher kommt auch Dein Festhalten an zyklischen Dingen.

                                        *Wobei ich natürlich zugeben muss, dass meine Erfahrungen mit SPS schon einige Jahrzehnte alt sind ...

                                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                        HmIP|ZigBee|Tasmota|Unifi
                                        Zabbix Certified Specialist
                                        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                        1 Antwort Letzte Antwort
                                        0
                                        • H hub01

                                          @homoran sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                          @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                          Habe eben ein Testprogramm mit Timeouts erstellt. Aktuelle Abweichung zw. 10 und 30ms, ab und zu ein Ausreißer bis 90ms.

                                          Das ist jetzt wirklich nicht

                                          @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                          soweit danebenliegen /abweichen kann

                                          Für den Einen nicht, für den Anderen schon …
                                          Aber ich versteh dich, für meinen Anwendungsfall eher nicht ausschlaggebend.
                                          Es ist halt für mich nur nicht begreiflich (egal wo das herkommt), zumal die Systemzeit im Millisekundenbereich ohne Probleme funktioniert. Als SPS-Programmierer kenne ich so was nicht.

                                          Das dürfte, wenn überhaupt, deiner Hardware geschuldet sein, wenn

                                          @asgothian sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                          mehrere Zeitpläne gleichzeitig ihre Aktion durchführen wollen

                                          Und auch das versteh ich nicht.
                                          Mein Skript mit über 400 Zeilen benötigt zw. 2-4ms ohne Ausreißer.
                                          Und eine einzelne Zeitfunktion liegt bis 100ms daneben?
                                          Das sind sicherlich nicht meine gleichzeitig laufenden Zeitpläne.

                                          HomoranH Nicht stören
                                          HomoranH Nicht stören
                                          Homoran
                                          Global Moderator Administrators
                                          schrieb am zuletzt editiert von
                                          #43

                                          @hub01 sagte in Datenpunkte zyklisch oder ereignisgesteuert lesen:

                                          Als SPS-Programmierer kenne ich so was nicht.

                                          das ist was ganz anderes.
                                          Auch ein Arduino würde "genauer" arbeiten.

                                          Wir reden bei ioBroker von umfangreichem SmartHome, nicht von begrenzter Prozesssteuerung

                                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          731

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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