Shelly Plus Uni minimales Timing an den SSR-Outputs

  • Einleitung:
    Mich interessierte, welche minimalen Impulse an den Outputs möglich sind, evtl. auch um dort eine eigene PWM erzeugen zu können.
    Letzteres vorweg: max. 6Hz bei 1 kanaligem Betrieb und max. 3 Hz bei 2 kanaligem Betrieb.
    Damit ist einem wirklich nicht geholfen, wenn mein eine PWM benötig.
    Aber man könnte (evtl. werde ich das noch ergänzen) am Analogeingang ein Poti anklemmen und dann damit die "PWM" als autarke Blinklichtsteuerung nutzen.

    Messaufbau:
    Der Messaufbau ist recht simpel: 24V Netzteil versorgt den Shelly Plus Uni und die beiden Pull-UPs mit je 1kOhm. Die andere Seite der Widerstände sind an je einem Output verschaltet.
    Und natürlich noch ein Scope zum Messen.

    messaufbau shelly plus uni outputs_IMG_2370.jpg

    Ich messe zuerst jedoch nur einen Kanal, um das grundsätzliche Verhalten zu erforschen.

    Versuche mit 1 Kanal:
    Als erstes habe ich es mit einem meiner üblich erstellten Scripte probiert: alles schön in Teil-Funktionen gepackt, die dann von irgendwas anderem aufgerufen werden.

    Da habe ich schnell gemerkt, dass wenn man da an die Grenzen will, das Plus Uni recht schnell "sensibel" wird.
    Ich habe dann mal alle AddOns entfernt und alles weitere auch deaktiviert (bis auf den Websocket), den brauchte ich zum Debuggen.

    Dann habe ich gemerkt, dass auch diese Aufruferei der Funktionen Zeit kosten, also habe ich das Script auf das wesentliche minimalisiert:

    Das sich aus diesem Script ergebene minimal taugliche Timing ist in [checkInterval_c = 80;] als Millisekunden definiert, für einen Puls bzw. eine Pause.

    SDS2204X Plus_PNG_42.png

    SDS2204X Plus_PNG_43.png

    Die Signale mit einer Pulsdauer von 79ms und Pausendauer von 80ms sehen recht passabel aus.
    Warum das die minimalsten Zeiten sind, kann man am folgenden Screenshot erahnen:

    SDS2204X Plus_PNG_45.png

    Ab und an kommt wohl der Sheduler des Shellys bei der hohen Scriptlast aus dem Tritt und unterbricht knallhart das Script.
    Eine Timing-Inkonsistenz tritt auf, im Screenshot bei etwa 1000ms hinter der Mittenachse.

    Das wird umso schlimmer, wenn der Wert bei CheckInterval kleiner als 80ms wird.
    Recht gut geht es, wenn auch mit geringen Einschränkungen, mit CheckInterval = 100ms.

    Versuche mit dem 2-Kanalige Output
    OK, dass war der einkanalige Betrieb, da dürfte doch wohl beim 2 kanaligen das Gleiche rauskommen?
    Der Shelly hat ja 2 gleich wertige SSR-Outputs, da könnte man doch auf die Idee kommen, die im Gegentakt zu betreiben.
    Warum? Weiss ich gerade selber nicht, aber manchmal kommen mir da so Ideen ...

    Also, das Script von oben auf 2-kanaligem Betrieb umschreiben und damit dann die weiteren Timing-Versuche durchführen:

    Das Script wird später nochmal interessant.

    Bei dem Ursprünglich, vom ersten Script übernommenen Wert, von 80ms stürtzte das Scripting sofort nach Aktivierung ab.
    Die Fehlermeldungen in der Script-Konsole sind ja nicht wirklich hilfreich.
    Also den Wert langsam erhöhen, bis sich eine stabile Funktionalität einstellt: [checkInterval_c = 150;]
    Weniger geht nicht.

    SDS2204X Plus_PNG_47.png

    SDS2204X Plus_PNG_48.png

    Ja, man kann hier auch schön die eingestellten Puls- und Pause-Zeiten erkennen und der 2. Kanal ist eine Invertierung des 1. Kanals.

    Jetzt kommen wir wieder zum Script zurück.
    Dort kann man in den IF-Cases sehen, dass die Shelly CALLS nacheinander erfolgen.
    Dieses nacheinander ist der Grund dafür, dass die beiden Kanäle nicht wirklich exakt invertiert sind, sondern ein kleiner Versatz dazwischen ist.

    SDS2204X Plus_PNG_49.png

    Ich habe dann mal den Versatz ausgemessen: dieser liegt bei 15ms.
    Das bedeutet auch, dass dieser Shelly 15ms benötigt, um den Shelly CALL abzuarbeiten.

  • Danke für die Untersuchung - obwohl das Ergebnis etwas enttäuschend ist. Gut herausgearbeitet wurde die Rolle des Scripts als „Bremser“! Vielleicht sollte man für die Generierung von Impulspaketen oder PWM-Signalen auf die Fähigkeiten des Cron-Jobs (Scheduler) im Mongoose-OS zurückgreifen? Bin nicht im Bilde, wie die Parametrierung im Millisekundenbereich aussieht. Da ließe sich ja noch weiter forschen…

    „Habt Geduld. Alle Dinge sind schwierig, bevor sie einfach werden!“ (aus Frankreich)

    „Nothing in life is to be feared, it is only to be understood.“ (Marie Curie, 1867-1934)

    „Es reicht nicht“, rief Schiller, „Gedankenfreiheit zu fordern, man muß auch denken können, sonst fordert man Gedankenlosigkeitsfreiheit und die ist die Freiheit zur Dummheit, welche wiederum die schlimmste Unfreiheit überhaupt ist!“
    (Aus „Besuch aus Weimar“ von Gert Heidenreich, Schriftsteller, *1944 in Eberswalde)

  • Der User Johann (Priamos) arbeitet ja für sowas gerne mit Tasmota.
    Damit ginge es bestimmt auch. Muss aber sagen, dass ich kein „Programmier“ bin der das in C programmieren kann.

    Erst einmal reicht mir das Shelly mJS.

    Ich meine mich zu erinnern, dass Cron-Jobs nur bis zu einer Sekunde „runter“ können ( zumindest auf Webserver).

  • JuergenAC Danke für die gute Dokumentation

    thgoebel Die Shelly Schedule Jobs verarbeiten ausschließlich Zeitmuster mit Sekundenauflösung, nicht kleiner. Damit sind keine höherfrequenten Pulse möglich.

    Für programmierbare, höherfrequente PWM dürften ladbare Hardware-Zähler mit eigenem Taktgenerator am besten geeignet sein.

    Evtl. sind die ESP32 internen Counter , welche auch für Interrupts nutzbar sind, und hardwarenahe Programmierung in C(++) auch gut geeignet. Dann ist aber die Shelly Firmware außen vor.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

    Einmal editiert, zuletzt von eiche (12. April 2024 um 09:20)

  • Dieses Thema enthält einen weiteren Beitrag, der nur für registrierte Benutzer sichtbar ist, bitte registrieren Sie sich oder melden Sie sich an um diesen lesen zu können.