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. Idee Ausführung Skripte analog einer Siemens-SPS

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    910

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Idee Ausführung Skripte analog einer Siemens-SPS

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 3 Kommentatoren 803 Aufrufe 2 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.
  • F Offline
    F Offline
    flyer99
    schrieb am zuletzt editiert von
    #1

    Hallo Allerseits,

    Ich möchte hier mal meine Idee (so habe ich es bei mir auch umgesetzt) vorstellen, vielleicht ist das ein alter Hase für manche, vielleicht bringt es jemandem neue Inspirationen und das wäre doch schön.

    Ich lasse mich auch gerne Belehren wenn das eher eine schlechte Lösung/Idee ist !!!

    Zum Hintergrundverständnis gibt es folgendes zu Sagen, eine Siemens SPS hat im Endeffekt fast die gleiche Aufgabe wie der iobroker, Daten erfassen, Logik ausführen, Daten ausgeben ... mal ganz simpel ausgedrückt.
    In einer Siemens SPS läuft das ganz einfach erklärt nach folgendem Schema ab:
    Es gibt einen OB1 --> Organisationsbaustein --> Chef --> in diesem OB1 steht drinn was nacheinander zyklisch aufgerufen wird, z.B. FC1 (Funktionscode) oder FB1 (Funktionsbaustein), FC/FB 2, FC/FB 3 --> Der FC hat kein statisches Gedächtnis, der FB schon, in ihm kann man statische Variablen anlegen. Das soll hier aber nichts zur Sache tun, dient zum Hinweis warum FC oder FB ... Ich werde jetzt nur noch den Begriff FC verwenden.
    Natürlich hat die Siemens SPS noch ganz viele gute und nicht so gute Sachen an Bord, das würde hier aber den Rahmen sprengen das zu erklären, fürs erste langt das Grundprinzip um meine Umsetzung in iobroker zu verstehen.

    Mein Hintergedanke war nun das nicht immer alle Skripte im iobroker ständig laufen. Ich rufe sie nur auf wenn ich sie brauche und sie beenden sich selbstständig.

    Da Bilder mehr sagen als Worte hier mal mein "OB1":
    6b42921f-4825-4276-be91-edc8158d9c1e-image.png
    c6c771ca-2c7c-47e2-a751-e40fdd1a795d-image.png

    Und hier dann die Skripte die dementsprechend aufgerufen werden:
    e99fa381-7123-4de1-bd8e-3aef12839ad0-image.png

    Wie man sieht läuft nur der 0_OB1 ("OB1"), die anderen Skripte (FC's) werden zyklisch gestartet und beenden sich danach wieder selbstständig. Das können natürlich auch BlocklySkripte sein die zyklisch aufgerufen werden und sich wieder selbst beenden ...

    Ich konnte auch eine Verminderung der Prozessorlast sehen, Raspberry 4 Model B Rev 1.2 ist bei mir im Einsatz.

    Dachte ich mach meine Idee mal kund, mir wurde hier schon immer kompetent geholfen und ich finde das Forum wirklich gut, vielleicht bringt es ja jemandem was ......

    Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

    AsgothianA paul53P 2 Antworten Letzte Antwort
    0
    • F flyer99

      Hallo Allerseits,

      Ich möchte hier mal meine Idee (so habe ich es bei mir auch umgesetzt) vorstellen, vielleicht ist das ein alter Hase für manche, vielleicht bringt es jemandem neue Inspirationen und das wäre doch schön.

      Ich lasse mich auch gerne Belehren wenn das eher eine schlechte Lösung/Idee ist !!!

      Zum Hintergrundverständnis gibt es folgendes zu Sagen, eine Siemens SPS hat im Endeffekt fast die gleiche Aufgabe wie der iobroker, Daten erfassen, Logik ausführen, Daten ausgeben ... mal ganz simpel ausgedrückt.
      In einer Siemens SPS läuft das ganz einfach erklärt nach folgendem Schema ab:
      Es gibt einen OB1 --> Organisationsbaustein --> Chef --> in diesem OB1 steht drinn was nacheinander zyklisch aufgerufen wird, z.B. FC1 (Funktionscode) oder FB1 (Funktionsbaustein), FC/FB 2, FC/FB 3 --> Der FC hat kein statisches Gedächtnis, der FB schon, in ihm kann man statische Variablen anlegen. Das soll hier aber nichts zur Sache tun, dient zum Hinweis warum FC oder FB ... Ich werde jetzt nur noch den Begriff FC verwenden.
      Natürlich hat die Siemens SPS noch ganz viele gute und nicht so gute Sachen an Bord, das würde hier aber den Rahmen sprengen das zu erklären, fürs erste langt das Grundprinzip um meine Umsetzung in iobroker zu verstehen.

      Mein Hintergedanke war nun das nicht immer alle Skripte im iobroker ständig laufen. Ich rufe sie nur auf wenn ich sie brauche und sie beenden sich selbstständig.

      Da Bilder mehr sagen als Worte hier mal mein "OB1":
      6b42921f-4825-4276-be91-edc8158d9c1e-image.png
      c6c771ca-2c7c-47e2-a751-e40fdd1a795d-image.png

      Und hier dann die Skripte die dementsprechend aufgerufen werden:
      e99fa381-7123-4de1-bd8e-3aef12839ad0-image.png

      Wie man sieht läuft nur der 0_OB1 ("OB1"), die anderen Skripte (FC's) werden zyklisch gestartet und beenden sich danach wieder selbstständig. Das können natürlich auch BlocklySkripte sein die zyklisch aufgerufen werden und sich wieder selbst beenden ...

      Ich konnte auch eine Verminderung der Prozessorlast sehen, Raspberry 4 Model B Rev 1.2 ist bei mir im Einsatz.

      Dachte ich mach meine Idee mal kund, mir wurde hier schon immer kompetent geholfen und ich finde das Forum wirklich gut, vielleicht bringt es ja jemandem was ......

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

      @flyer99 sagte in Idee Ausführung Skripte analog einer Siemens-SPS:

      Dachte ich mach meine Idee mal kund, mir wurde hier schon immer kompetent geholfen und ich finde das Forum wirklich gut, vielleicht bringt es ja jemandem was ......

      Prinzipiell eine interessante Idee. Allerdings muss man diese in 2 unterschiedliche Komponenten teilen:

      • Nutzung von Zeitplänen an Stelle von Event-Getriebenen Aktionen
      • Auslagern von kurzen Aktionen in externe Skripte die explizit gestartet werden und sich selber wieder beenden.

      Eine grosse Zahl von Cron-Zeitplänen kann zu Lastspitzen führen (in deinem Fall alle 5 Minuten, da zu diesem Zeitpunkt alle 4 Cron Skripte laufen). Wie gross diese Lastspitzen sind hängt letztendlich (auch) davon ab was in den einzelnen Skripten passiert. Da kann es Sinnvoll sein durch geeignete CRON Regeln die Aktionen voneinander zu Trennen soweit möglich.

      Ein Beispiel aus Deinem Skript:

      Welchen Sinn macht es, alle 2 sekunden nachzuschauen ob ein Datenpunkt auf Wahr ist, wenn dieses am Tag nur ein paar mal auftritt. Statt dessen ist es einfacher einen Trigger auf "ist grösser als vorher" zu setzen - damit fängst du den Wechsel von Falsch auf Wahr und kannst deine Aktion direkt (oder zur Not mit 2 Sekunden Verzögerung) ausführen.

      Beim 5 Sekunden Zeitplan ist es nicht ganz so einfach da damit offensichtlich eine regelmässige Aktualisierung einer Visualisierung angestossen wird, und die Aktualisierungsgeschwindigkeit der Strommessung wahrscheinlich schneller als einmal alle 15 sekunden ist.

      Auch bei dem 15 Sekunden Zeitplanen müsste genau geschaut werden was da wirklich hinter den Skripten steht und wie oft die Strommessung aktualisiert wird um abzuschätzen in wie weit diese Sinnvoll sind.

      Das Auslagern in nur kurz aufgerufene Skripte ist im Bezug auf die Lesbarkeit der Skripte wahrscheinlich ein Vorteil. In wie weit der Start eines Skriptes unnötige Last erzeugt kann ich aktuell nicht bewerten. Allerdings gehe ich im Moment davon aus das ein Aufbau bei dem die einzelnen Zeitpläne jeweils ein eigenes Skript mit allen Aktionen darstellen von der Ressourcenauslastung gesamt besser ist.

      In dem Zusammenhang ist zu bedenken das ein Skript welches "aktiv" ist aber keine eigenen Aktionen mehr hat (Weil die eigentlichen Aktionen durch kapseln in Zeitplänen oder Triggern ausgelagert wurden) meines Wissens nach nur Speicher und keine Prozessorlast beansprucht.

      Ansonsten muss bei dieser Methode noch ein weiterer Hinweis bedacht werden: Sollte ein Skript selber länger laufen als der aufrufende Zeitplan, dann würde dieses Skript nicht neu gestartet. Je nach Aktion kann dieses von Vorteil sein, muss es aber nicht.

      Ich gehe mal davon aus das Du das bei Dir berücksichtigt hast - es sollte aber denen die das Konzept nachmachen wollen deutlich gemacht werden.

      Ein letzter Punkt noch zu den von Dir aufgerufenen Skripten:
      So wie es aktuell geschrieben ist wirst du solange Tasmota Sensor Strom Power_curr unter -150 bleibt das Skript Shelly_Garage_Ein alle 5 sekunden aufrufen, selbst wenn das Skript selber dann eigentlich nichts macht weil die Aktion ja bereits geschehen ist. Das ist auf jeden Fall unnötig, und gilt analog auch für Shelly_Garage_Aus, Poolpumpe_ein, Trockner_run und Trockner_pause.

      Wenn du wirklich Prozessorlast minimieren willst solltest Du das noch unterbinden - sprich die skripte nur starten wenn auch eine Aktion notwendig wird.

      A.

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

      F 1 Antwort Letzte Antwort
      1
      • F flyer99

        Hallo Allerseits,

        Ich möchte hier mal meine Idee (so habe ich es bei mir auch umgesetzt) vorstellen, vielleicht ist das ein alter Hase für manche, vielleicht bringt es jemandem neue Inspirationen und das wäre doch schön.

        Ich lasse mich auch gerne Belehren wenn das eher eine schlechte Lösung/Idee ist !!!

        Zum Hintergrundverständnis gibt es folgendes zu Sagen, eine Siemens SPS hat im Endeffekt fast die gleiche Aufgabe wie der iobroker, Daten erfassen, Logik ausführen, Daten ausgeben ... mal ganz simpel ausgedrückt.
        In einer Siemens SPS läuft das ganz einfach erklärt nach folgendem Schema ab:
        Es gibt einen OB1 --> Organisationsbaustein --> Chef --> in diesem OB1 steht drinn was nacheinander zyklisch aufgerufen wird, z.B. FC1 (Funktionscode) oder FB1 (Funktionsbaustein), FC/FB 2, FC/FB 3 --> Der FC hat kein statisches Gedächtnis, der FB schon, in ihm kann man statische Variablen anlegen. Das soll hier aber nichts zur Sache tun, dient zum Hinweis warum FC oder FB ... Ich werde jetzt nur noch den Begriff FC verwenden.
        Natürlich hat die Siemens SPS noch ganz viele gute und nicht so gute Sachen an Bord, das würde hier aber den Rahmen sprengen das zu erklären, fürs erste langt das Grundprinzip um meine Umsetzung in iobroker zu verstehen.

        Mein Hintergedanke war nun das nicht immer alle Skripte im iobroker ständig laufen. Ich rufe sie nur auf wenn ich sie brauche und sie beenden sich selbstständig.

        Da Bilder mehr sagen als Worte hier mal mein "OB1":
        6b42921f-4825-4276-be91-edc8158d9c1e-image.png
        c6c771ca-2c7c-47e2-a751-e40fdd1a795d-image.png

        Und hier dann die Skripte die dementsprechend aufgerufen werden:
        e99fa381-7123-4de1-bd8e-3aef12839ad0-image.png

        Wie man sieht läuft nur der 0_OB1 ("OB1"), die anderen Skripte (FC's) werden zyklisch gestartet und beenden sich danach wieder selbstständig. Das können natürlich auch BlocklySkripte sein die zyklisch aufgerufen werden und sich wieder selbst beenden ...

        Ich konnte auch eine Verminderung der Prozessorlast sehen, Raspberry 4 Model B Rev 1.2 ist bei mir im Einsatz.

        Dachte ich mach meine Idee mal kund, mir wurde hier schon immer kompetent geholfen und ich finde das Forum wirklich gut, vielleicht bringt es ja jemandem was ......

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #3

        @flyer99 sagte: Ich konnte auch eine Verminderung der Prozessorlast sehen

        Das bezweifele ich. Jeder Skriptstart erzeugt eine hohe CPU-Last, da das Skript erst compiliert wird. Das Ausführen per Zeitplan erzeugt ebenfalls Lastspitzen zu festen Zeitpunkten, da mehrere Zeitpläne (nahezu) gleichzeitig auslösen können.
        Eine SPS arbeitet zwar zyklisch, der Zyklus wird aber durch die Dauer der Programmabarbeitung bestimmt und liegt im Millisekunden-Bereich.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        F 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @flyer99 sagte in Idee Ausführung Skripte analog einer Siemens-SPS:

          Dachte ich mach meine Idee mal kund, mir wurde hier schon immer kompetent geholfen und ich finde das Forum wirklich gut, vielleicht bringt es ja jemandem was ......

          Prinzipiell eine interessante Idee. Allerdings muss man diese in 2 unterschiedliche Komponenten teilen:

          • Nutzung von Zeitplänen an Stelle von Event-Getriebenen Aktionen
          • Auslagern von kurzen Aktionen in externe Skripte die explizit gestartet werden und sich selber wieder beenden.

          Eine grosse Zahl von Cron-Zeitplänen kann zu Lastspitzen führen (in deinem Fall alle 5 Minuten, da zu diesem Zeitpunkt alle 4 Cron Skripte laufen). Wie gross diese Lastspitzen sind hängt letztendlich (auch) davon ab was in den einzelnen Skripten passiert. Da kann es Sinnvoll sein durch geeignete CRON Regeln die Aktionen voneinander zu Trennen soweit möglich.

          Ein Beispiel aus Deinem Skript:

          Welchen Sinn macht es, alle 2 sekunden nachzuschauen ob ein Datenpunkt auf Wahr ist, wenn dieses am Tag nur ein paar mal auftritt. Statt dessen ist es einfacher einen Trigger auf "ist grösser als vorher" zu setzen - damit fängst du den Wechsel von Falsch auf Wahr und kannst deine Aktion direkt (oder zur Not mit 2 Sekunden Verzögerung) ausführen.

          Beim 5 Sekunden Zeitplan ist es nicht ganz so einfach da damit offensichtlich eine regelmässige Aktualisierung einer Visualisierung angestossen wird, und die Aktualisierungsgeschwindigkeit der Strommessung wahrscheinlich schneller als einmal alle 15 sekunden ist.

          Auch bei dem 15 Sekunden Zeitplanen müsste genau geschaut werden was da wirklich hinter den Skripten steht und wie oft die Strommessung aktualisiert wird um abzuschätzen in wie weit diese Sinnvoll sind.

          Das Auslagern in nur kurz aufgerufene Skripte ist im Bezug auf die Lesbarkeit der Skripte wahrscheinlich ein Vorteil. In wie weit der Start eines Skriptes unnötige Last erzeugt kann ich aktuell nicht bewerten. Allerdings gehe ich im Moment davon aus das ein Aufbau bei dem die einzelnen Zeitpläne jeweils ein eigenes Skript mit allen Aktionen darstellen von der Ressourcenauslastung gesamt besser ist.

          In dem Zusammenhang ist zu bedenken das ein Skript welches "aktiv" ist aber keine eigenen Aktionen mehr hat (Weil die eigentlichen Aktionen durch kapseln in Zeitplänen oder Triggern ausgelagert wurden) meines Wissens nach nur Speicher und keine Prozessorlast beansprucht.

          Ansonsten muss bei dieser Methode noch ein weiterer Hinweis bedacht werden: Sollte ein Skript selber länger laufen als der aufrufende Zeitplan, dann würde dieses Skript nicht neu gestartet. Je nach Aktion kann dieses von Vorteil sein, muss es aber nicht.

          Ich gehe mal davon aus das Du das bei Dir berücksichtigt hast - es sollte aber denen die das Konzept nachmachen wollen deutlich gemacht werden.

          Ein letzter Punkt noch zu den von Dir aufgerufenen Skripten:
          So wie es aktuell geschrieben ist wirst du solange Tasmota Sensor Strom Power_curr unter -150 bleibt das Skript Shelly_Garage_Ein alle 5 sekunden aufrufen, selbst wenn das Skript selber dann eigentlich nichts macht weil die Aktion ja bereits geschehen ist. Das ist auf jeden Fall unnötig, und gilt analog auch für Shelly_Garage_Aus, Poolpumpe_ein, Trockner_run und Trockner_pause.

          Wenn du wirklich Prozessorlast minimieren willst solltest Du das noch unterbinden - sprich die skripte nur starten wenn auch eine Aktion notwendig wird.

          A.

          F Offline
          F Offline
          flyer99
          schrieb am zuletzt editiert von
          #4

          @asgothian Hallo asgothian,
          Vielen Dank für deine Ausführliche Erläuterung. Das mit den 5 Minuten bei welchen alle 4 Skripte gleichzeitig ausgeführt werden stimmt natürlich, Danke für den Hinweis, hatte ich nicht auf dem Schirm ....

          Das mit dem 2 Sekunden Aufruf ist mein Garagentor welches ich per Handy auf Ein schalte zum Öffnen oder Schließen und durch das Script wieder auf Aus geschalten wird damit ich nicht am Handy 2x drücken muss. Ist schon 3 Jahre im Einsatz und einfach alt, keine Eltakofunktion .....

          Bei den 15 Sekunden Scripts (Verbraucher je nach PV Leistung schalten) wird der aktuelle Stromfluß (Überschuß von PV oder Beziehen von der Straße) natürlich öfters aktualisiert, die 15 Sekunden sollen hier mehr als Hysterese dienen für die Verbraucher.

          "Sollte ein Skript selber länger laufen als der aufrufende Zeitplan, dann würde dieses Skript nicht neu gestartet" --> Das ist mir bewusst.

          "So wie es aktuell geschrieben ist wirst du solange Tasmota Sensor Strom Power_curr unter -150 bleibt das Skript Shelly_Garage_Ein alle 5 sekunden aufrufen, selbst wenn das Skript selber dann eigentlich nichts macht weil die Aktion ja bereits geschehen ist. Das ist auf jeden Fall unnötig, und gilt analog auch für Shelly_Garage_Aus, Poolpumpe_ein, Trockner_run und Trockner_pause."
          --> Aber das ist ja eigentlich der Sinn analog einer SPS, der "Baustein" "Shelly_Garage_Ein" wird zyklisch aufgerufen, das Script selber macht nichts wenn der zu steuernde DP schon auf 1 ist.

          "Wenn du wirklich Prozessorlast minimieren willst solltest Du das noch unterbinden - sprich die skripte nur starten wenn auch eine Aktion notwendig wird."
          --> Müssen tu ich das nicht, bin nicht am Limit, ich wollte einfach eine SPS nachbilden.

          Über was ich mir aber trotzdem noch nicht sicher bin ist die allgemeine Aussage das beim Starten eines Scriptes dieses anscheinend im Ram liegt, der Ram macht aber keine logische Auswertung, das macht trotzdem der Prozessor ...?
          Bedeutet für mich ich habe alle Scripts am laufen (also nicht so wie ich es jetzt habe), liegen im Ram, der Prozessor muss alle durchackern immer wieder... Bei mir wird das Script gestartet, Logik ausgewertet und dementsprechend eine Aktion ausgelöst, Script beenden fertig. Erneutes Ackern erst nach x Sekunden/Minuten verstehst was ich meine ?

          Vielen Dank nochmals für deine Denkanstöße !!!

          Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

          paul53P AsgothianA 2 Antworten Letzte Antwort
          0
          • F flyer99

            @asgothian Hallo asgothian,
            Vielen Dank für deine Ausführliche Erläuterung. Das mit den 5 Minuten bei welchen alle 4 Skripte gleichzeitig ausgeführt werden stimmt natürlich, Danke für den Hinweis, hatte ich nicht auf dem Schirm ....

            Das mit dem 2 Sekunden Aufruf ist mein Garagentor welches ich per Handy auf Ein schalte zum Öffnen oder Schließen und durch das Script wieder auf Aus geschalten wird damit ich nicht am Handy 2x drücken muss. Ist schon 3 Jahre im Einsatz und einfach alt, keine Eltakofunktion .....

            Bei den 15 Sekunden Scripts (Verbraucher je nach PV Leistung schalten) wird der aktuelle Stromfluß (Überschuß von PV oder Beziehen von der Straße) natürlich öfters aktualisiert, die 15 Sekunden sollen hier mehr als Hysterese dienen für die Verbraucher.

            "Sollte ein Skript selber länger laufen als der aufrufende Zeitplan, dann würde dieses Skript nicht neu gestartet" --> Das ist mir bewusst.

            "So wie es aktuell geschrieben ist wirst du solange Tasmota Sensor Strom Power_curr unter -150 bleibt das Skript Shelly_Garage_Ein alle 5 sekunden aufrufen, selbst wenn das Skript selber dann eigentlich nichts macht weil die Aktion ja bereits geschehen ist. Das ist auf jeden Fall unnötig, und gilt analog auch für Shelly_Garage_Aus, Poolpumpe_ein, Trockner_run und Trockner_pause."
            --> Aber das ist ja eigentlich der Sinn analog einer SPS, der "Baustein" "Shelly_Garage_Ein" wird zyklisch aufgerufen, das Script selber macht nichts wenn der zu steuernde DP schon auf 1 ist.

            "Wenn du wirklich Prozessorlast minimieren willst solltest Du das noch unterbinden - sprich die skripte nur starten wenn auch eine Aktion notwendig wird."
            --> Müssen tu ich das nicht, bin nicht am Limit, ich wollte einfach eine SPS nachbilden.

            Über was ich mir aber trotzdem noch nicht sicher bin ist die allgemeine Aussage das beim Starten eines Scriptes dieses anscheinend im Ram liegt, der Ram macht aber keine logische Auswertung, das macht trotzdem der Prozessor ...?
            Bedeutet für mich ich habe alle Scripts am laufen (also nicht so wie ich es jetzt habe), liegen im Ram, der Prozessor muss alle durchackern immer wieder... Bei mir wird das Script gestartet, Logik ausgewertet und dementsprechend eine Aktion ausgelöst, Script beenden fertig. Erneutes Ackern erst nach x Sekunden/Minuten verstehst was ich meine ?

            Vielen Dank nochmals für deine Denkanstöße !!!

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @flyer99 sagte: liegen im Ram, der Prozessor muss alle durchackern immer wieder...

            Der Prozessor arbeitet den Inhalt eines Skriptes nur ab, wenn das Trigger-Ereignis vorliegt. Was der Prozessor ständig macht: Auf Ereignisse prüfen.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            F 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @flyer99 sagte: Ich konnte auch eine Verminderung der Prozessorlast sehen

              Das bezweifele ich. Jeder Skriptstart erzeugt eine hohe CPU-Last, da das Skript erst compiliert wird. Das Ausführen per Zeitplan erzeugt ebenfalls Lastspitzen zu festen Zeitpunkten, da mehrere Zeitpläne (nahezu) gleichzeitig auslösen können.
              Eine SPS arbeitet zwar zyklisch, der Zyklus wird aber durch die Dauer der Programmabarbeitung bestimmt und liegt im Millisekunden-Bereich.

              F Offline
              F Offline
              flyer99
              schrieb am zuletzt editiert von
              #6

              @paul53 Hallo paul53,

              Werden die Skripte beim Start immer neu compiliert ??
              Die Ausführung mit dem Zeitplan erzeugt Überschneidungen zu welchen mehrere Skripts gleichzeitig ausgeführt werden, das wurde mir klar nach dem Post von Asgothian, vollkommen richtig ...

              "Eine SPS arbeitet zwar zyklisch, der Zyklus wird aber durch die Dauer der Programmabarbeitung bestimmt und liegt im Millisekunden-Bereich."
              --> vollkommen richtig, den Millisekundenbereich werde ich hier auch nicht schaffen , aber vielleicht eine analoge Abarbeitungstechnik. Ich bastel mal weiter, kann ja nicht schaden, man lernt nur dazu ....

              Danke für Eure Infos ....

              Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

              paul53P 1 Antwort Letzte Antwort
              0
              • F flyer99

                @asgothian Hallo asgothian,
                Vielen Dank für deine Ausführliche Erläuterung. Das mit den 5 Minuten bei welchen alle 4 Skripte gleichzeitig ausgeführt werden stimmt natürlich, Danke für den Hinweis, hatte ich nicht auf dem Schirm ....

                Das mit dem 2 Sekunden Aufruf ist mein Garagentor welches ich per Handy auf Ein schalte zum Öffnen oder Schließen und durch das Script wieder auf Aus geschalten wird damit ich nicht am Handy 2x drücken muss. Ist schon 3 Jahre im Einsatz und einfach alt, keine Eltakofunktion .....

                Bei den 15 Sekunden Scripts (Verbraucher je nach PV Leistung schalten) wird der aktuelle Stromfluß (Überschuß von PV oder Beziehen von der Straße) natürlich öfters aktualisiert, die 15 Sekunden sollen hier mehr als Hysterese dienen für die Verbraucher.

                "Sollte ein Skript selber länger laufen als der aufrufende Zeitplan, dann würde dieses Skript nicht neu gestartet" --> Das ist mir bewusst.

                "So wie es aktuell geschrieben ist wirst du solange Tasmota Sensor Strom Power_curr unter -150 bleibt das Skript Shelly_Garage_Ein alle 5 sekunden aufrufen, selbst wenn das Skript selber dann eigentlich nichts macht weil die Aktion ja bereits geschehen ist. Das ist auf jeden Fall unnötig, und gilt analog auch für Shelly_Garage_Aus, Poolpumpe_ein, Trockner_run und Trockner_pause."
                --> Aber das ist ja eigentlich der Sinn analog einer SPS, der "Baustein" "Shelly_Garage_Ein" wird zyklisch aufgerufen, das Script selber macht nichts wenn der zu steuernde DP schon auf 1 ist.

                "Wenn du wirklich Prozessorlast minimieren willst solltest Du das noch unterbinden - sprich die skripte nur starten wenn auch eine Aktion notwendig wird."
                --> Müssen tu ich das nicht, bin nicht am Limit, ich wollte einfach eine SPS nachbilden.

                Über was ich mir aber trotzdem noch nicht sicher bin ist die allgemeine Aussage das beim Starten eines Scriptes dieses anscheinend im Ram liegt, der Ram macht aber keine logische Auswertung, das macht trotzdem der Prozessor ...?
                Bedeutet für mich ich habe alle Scripts am laufen (also nicht so wie ich es jetzt habe), liegen im Ram, der Prozessor muss alle durchackern immer wieder... Bei mir wird das Script gestartet, Logik ausgewertet und dementsprechend eine Aktion ausgelöst, Script beenden fertig. Erneutes Ackern erst nach x Sekunden/Minuten verstehst was ich meine ?

                Vielen Dank nochmals für deine Denkanstöße !!!

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

                @flyer99 sagte in Idee Ausführung Skripte analog einer Siemens-SPS:

                Über was ich mir aber trotzdem noch nicht sicher bin ist die allgemeine Aussage das beim Starten eines Scriptes dieses anscheinend im Ram liegt, der Ram macht aber keine logische Auswertung, das macht trotzdem der Prozessor ...?
                Bedeutet für mich ich habe alle Scripts am laufen (also nicht so wie ich es jetzt habe), liegen im Ram, der Prozessor muss alle durchackern immer wieder... Bei mir wird das Script gestartet, Logik ausgewertet und dementsprechend eine Aktion ausgelöst, Script beenden fertig. Erneutes Ackern erst nach x Sekunden/Minuten verstehst was ich meine ?

                Ich verstehe was du meinst, du hast aber letztendlich nur bedingt recht.

                Skripte die laufen aber auf einen Trigger (via Cron, Zeitplan oder Trigger auf DP) warten werden vom Prozessor nicht ständig durchgearbeitet. Ihr "Einsprungpunkt" wird an eine interne Funktion des JS Controllers weiter gegeben der das Starten zu einer bestimmten Zeit / wenn ein Event eintritt übernimmt.

                Dementsprechend hast du also ggf. etwas RAM verbrauch ohne das dieses regelmässig "durchgegraben" wird.

                In dem Moment wo ein Skript gestartet wird passiert folgendes:

                • Die Datei wird ins Ram geladen
                • Der JS code wird kompiliert
                • Der JS code wird gestartet

                Daraus ergibt sich das beim Laden eines Skriptes erst einmal "overhead" entsteht (Laden und kompilieren) der nicht bei jeder Aktivierung notwendig ist wenn der JS code aus einem immer noch aktiven Skript getriggert wird.

                Die Funktion die die Liste der CRON Einträge bzw. Werte Änderungen überwacht ist im JS Controller sowieso immer aktiv.

                A.

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

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @flyer99 sagte: liegen im Ram, der Prozessor muss alle durchackern immer wieder...

                  Der Prozessor arbeitet den Inhalt eines Skriptes nur ab, wenn das Trigger-Ereignis vorliegt. Was der Prozessor ständig macht: Auf Ereignisse prüfen.

                  F Offline
                  F Offline
                  flyer99
                  schrieb am zuletzt editiert von
                  #8

                  @paul53
                  Woher weis der Prozessor das ein Trigger ausgelöst wurde ? der Ram sagt es ihm nicht, der Prozessor muss das Skript immer durchackern um ein Trigger zu erkennen ???

                  Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • F flyer99

                    @paul53 Hallo paul53,

                    Werden die Skripte beim Start immer neu compiliert ??
                    Die Ausführung mit dem Zeitplan erzeugt Überschneidungen zu welchen mehrere Skripts gleichzeitig ausgeführt werden, das wurde mir klar nach dem Post von Asgothian, vollkommen richtig ...

                    "Eine SPS arbeitet zwar zyklisch, der Zyklus wird aber durch die Dauer der Programmabarbeitung bestimmt und liegt im Millisekunden-Bereich."
                    --> vollkommen richtig, den Millisekundenbereich werde ich hier auch nicht schaffen , aber vielleicht eine analoge Abarbeitungstechnik. Ich bastel mal weiter, kann ja nicht schaden, man lernt nur dazu ....

                    Danke für Eure Infos ....

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    @flyer99 sagte: Werden die Skripte beim Start immer neu compiliert ??

                    Sonst könnte für ein deaktiviertes Skript kein RAM freigegeben werden.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • F flyer99

                      @paul53
                      Woher weis der Prozessor das ein Trigger ausgelöst wurde ? der Ram sagt es ihm nicht, der Prozessor muss das Skript immer durchackern um ein Trigger zu erkennen ???

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      @flyer99 sagte: der Prozessor muss das Skript immer durchackern um ein Trigger zu erkennen ???

                      Die Trigger werden vom Compiler an den Kernel von Node.js übergeben, der diese verwaltet: Es müssen nur die Bedingungen geprüft werden, die zu einem Ereignis führen, was in Node.js effizient gelöst ist.

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      • F Offline
                        F Offline
                        flyer99
                        schrieb am zuletzt editiert von
                        #11

                        @Asgothian
                        @paul53

                        Ach Männer, das wollte ich jetzt nicht hören :-)
                        Aber trotzdem nochmals vielen Dank für die wirklich gute Erklärung, ich glaub ich habs verstanden ...

                        Ein Skript mit Trigger welches ich starte wird kompiliert und hochgeladen, danach gestartet, liegt im Speicher, wird aber nur durchgeackert wenn der JS Controller sagt "mach jetzt".

                        "Die Trigger werden vom Compiler an den Kernel von Node.js übergeben, der diese verwaltet: Es müssen nur die Bedingungen geprüft werden, die zu einem Ereignis führen, was in Node.js effizient gelöst ist." --> Der gibt dem JS Controller bescheid zum Starten des Skripts ?

                        Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • F flyer99

                          @Asgothian
                          @paul53

                          Ach Männer, das wollte ich jetzt nicht hören :-)
                          Aber trotzdem nochmals vielen Dank für die wirklich gute Erklärung, ich glaub ich habs verstanden ...

                          Ein Skript mit Trigger welches ich starte wird kompiliert und hochgeladen, danach gestartet, liegt im Speicher, wird aber nur durchgeackert wenn der JS Controller sagt "mach jetzt".

                          "Die Trigger werden vom Compiler an den Kernel von Node.js übergeben, der diese verwaltet: Es müssen nur die Bedingungen geprüft werden, die zu einem Ereignis führen, was in Node.js effizient gelöst ist." --> Der gibt dem JS Controller bescheid zum Starten des Skripts ?

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @flyer99 sagte: Der gibt dem JS Controller bescheid zum Starten des Skripts ?

                          ... zum Auslösen des Ereignisses (Trigger, Ablauf eines Timers, ...) innerhalb des Skriptes.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          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

                          760

                          Online

                          32.6k

                          Benutzer

                          82.2k

                          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