HomeAssitent und alles was Cloud heißt, wo ich nicht Herr der Daten und Technik bin, ist für mich inakzeptabel.
MQTT ebenfalls nicht, weil das notifying nur nach Datenzustandsänderung erfolgt.
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.	
HomeAssitent und alles was Cloud heißt, wo ich nicht Herr der Daten und Technik bin, ist für mich inakzeptabel.
MQTT ebenfalls nicht, weil das notifying nur nach Datenzustandsänderung erfolgt.
Ach jetzt sehe ich erst was ich falsch gelesen habe:
da steht "< 500ms erhöhte Crashneigung",
gelesen habe ich aber "> 500ms erhöhte Crashneigung".
Ich habe diverse Temperatursensoren an der Heizungsanlage, deren Temperaturverlauf <tagsüber> innerhalb eines Toleranzbandes liegen sollen.
Kann also nicht zu einem beliebigem Zeitpunkt folgendes machen:
if (actual_temp > max_temp OR actual_temp < min_temp) then do irgendwas ...
Ich kann mir auch keine Tabelle (array) im Shelly hinterlegen, die 2 * 1440 Werte aufnimmt (pro Minute ein Wert mit unterer und oberer Grenze)
Auf dem Webserver (in einer Datenbank-Tabelle) sind all die Dinge hinterlegt. Da hätte ich kein Problem. Komme dann aber nach der Auswertung nicht mehr zurück in den Heizungskeller. Da hängt ein Mobilfunkt Modem, mit ständig wechselnder IP (OK eine DynDNS habe ich mir zwar schon gebaut, aber noch nicht getestet und traue dem Braten aber auch nicht.)
Da wäre mir eine lokale Lösung im Heizungskeller deutlich lieber als über den Umweg Shellies -> Modem -> Webserver -> Datenbank  -> Auswertescript -> Modem -> Shelly
„Zyklisches Programm(Script) < 500ms erhöhte Crashneigung“
Genau das ist ja Abhängig von der CPU Geschwindigkeit und sicher auch noch von anderen Parametern.
Ich glaube die richtige Fragestellung wäre:
Sind in allen Shelly (ausser die aus Gen1) die gleiche CPU und gleiche CPU-Taktfrequenz verbaut?
Ich weiß aus anderen Diskussionen, dass du da viel mit Tasmota gearbeitet hast. Habe aber persönliche Bedenken, dass ich damit klar komme. Aus Programmier Sicht schlage ich mich beruflich mit Assembler auf 8 Bitter und PERL auf Webservern rum. Dann eher privat mit Javacript.
Wie schon im Title geschrieben, suche ich unter en aktuellen Shelly den, den ich am bestem mit Shelly Sript mJS knechten kann.
Bin mir nicht ganz schlüssig, ob ein Gen3 „schneller“ ist, als zb ein Pro 1 PM.
Ein Schaltkontakt wäre toll, Leistungsmessung nicht unbedingt notwendig.
Wer kann da Licht ins Dunkle bringen?
Grüße Jürgen
Hallo Johann,
Hast du dich evtl. mit der Grafik „Monatsverbrauch Gas & WW“ vertan?
Aufsummiert kommst du da locker unter Brüder was um die 27000 kWh , wobei du ganz oben „Gasverbrauch neu“ 12000 kWh plus Heizstrom 5000 kWh geschrieben hast.
Grüße Jürgen
 ZitatEs handelt sich um einen aussentemperaturgeführten Niedrigtemperatur-Kessel. Dieser muss erst getauscht werden, wenn er nicht mehr reparabel ist.
Diese bestehende Lösung ist laut GEG bis 2044 möglich.
Ich habe das nochmal recherchiert, weil ich die 30 Jahre im Kopf habe.
GEG
Im GEG (vom 16.10.23) unter "§ 72 Betriebsverbot für Heizkessel, Ölheizungen" ist tatsächlich in Absatz (2) die 30 Jahre vermerkt.
Dies wird aber in Absatz (3).1 negiert für den Fall: "Niedertemperatur-Heizkessel und Brennwertkessel"
Johann schreibt aber ganz oben "Atmosphärischer Gas-Kessel (1993)" und dies ist kein Brennwertkessel.
Ob es ein Niedertemperaturkessel wirklich ist, glaube ich fast nicht, da er (Johann) auch von Röhrenheizkörpern spricht und nicht von Fussbodenheizungen.
Im $3 Begriffsbestimmungen wird dies wie folgt definiert:
„Niedertemperatur-Heizkessel“ ein Heizkessel, der kontinuierlich mit einer Eintrittstemperatur von 35
Grad Celsius bis 40 Grad Celsius betrieben werden kann und in dem es unter bestimmten Umständen zur
Kondensation des in den Abgasen enthaltenen Wasserdampfes kommen kann ..."
Vielleicht kannst Du (Johann) das nochmal präzisieren, würde mich interessieren.
Egal wie: nach Absatzt (4) "Heizkessel dürfen längstens bis zum Ablauf des 31. Dezember 2044 mit fossilen Brennstoffen betrieben
werden."
Schaun wir mal was die nächste Bundesregierung daraus macht ...
Spannend wird es dann: "Das muss durch eine "befugte" Person bestätigt werden, ..."
Also Johann, bleib dran ...
Hallo Johann,
Da hast Du Dir sehr viel Arbeit gemacht und viel Energie und Zeit und Geld in Dein Projekt investiert. Das Ergebnis lässt sich sehen und evtl. motiviert dies auch andere, sich einer solchen Thematik anzunehmen. Wobei, dass ist nichts für technische Laien. Man benötigt schon eine technische Grundausbildung.
Schön auch, dass du dein Projekt der öffentlichen Kritik stellst.
Ein paar Dinge sind mir aufgefallen (mein Senf dazu):
Bitte notiere immer die Einheiten bei Zahlen. Selbst Eier kauft man am „Stück“ 😜
Dann:
 Zitat* Gebäude Baujahr 1993
* ca. 160 qm Wohnfläche
* Heizlast 9.9 KW
Baujahr 1993 ist die dritte Wärmeschutzverordnung. Du hast ein freistehendes Einfamilienhaus? Ein Ansatzpunkt wäre die Reduzierung der Heizlast, durch weitere Isolationsmassnahmen.
Dann die reine Betrachtung der Energieeinsparung ist zwar im Sinne der CO2 Einsparung, letztendlich ist es aber auch immer einer Wirtschaftlichkeitsfrage. Wenn du Deine Grafiken in Euro umskalieren würdest (zb Gas 15 Ct/kwh und Strom 35ct/kwh), sieht die Sache nicht mehr so rosig aus. Ja, du wirst besser dastehen als vor dem Umbau. Vergessen darfst du auch die Anschaffungskosten nicht.
Dann: die 30 Jahre Nutzungsdauer (Atmosphärischer Gas-Kessel (1993)) nach EnEv / GEG sind ja abgelaufen. Was sagt dein Schornsteinfeger dazu? Eigentlich müsste der dir ja langsam den Weiterbetrieb der Heizung untersagen. Was kommt dann danach? Doch ne Wärmepumpe? Was anderes lässt das GEG ja fast schon nicht mehr zu.
Dann: Du schreibst „Heizkörper“. Meinst damit die Röhren- Radiatoren? Wenn ja, dann lass Dir von deinem Heizungsbauer keine neuen Heizkörper aufschwatzen. Die klassischen Röhrenheizkörper, auch mit der alten Auslegung von 1993 und der Heizlast von 9,9 kW, Reichen vollkommen für dein Gebäude aus. Dieser Typ liegt energetisch zwischen denen des Typ 22 und Typ 33. Ein Austausch ist wirtschaftlich nicht vertretbar. Nur Heizkörper des Typ 11 (Flachheizkörper) sollten ausgetauscht werden.
Trotz meiner ganzen Kritik: mache weiter so, gehen den Weg weiter.
Immerhin und dan darf man echt nicht unterschätzen: es mach sau viel Spaß!!! 
Jürgen
eben nicht.
Für ein bestimmtes Problem suche ich eine bestimmte Lösung. 
Und wenn mir da ein Anbieter ein System anbietet, welches analog messen kann, dann ist meine Erwartung dass man damit auch analog messen kann. Der Anbieter hat eigentlich dafür zu sorgen, dass die Genauigkeit spezifiziert und eingehalten wird. An diesen Parametern kann man dann seine Lösung erarbeiten.
Wenn die Angaben aber nicht stimmen, läuft da was falsch.
Ein Beispiel dafür:
Die Tankanzeige deines Autos (egal ob E oder Sprit) soll doch stimmen und nicht nicht im unteren Bereich um 10% abweichen.
Die grundsätzliche Frage in Bezug zu deinem Post wäre: Messen oder Schätzen.
Ich will messen!
Thomas, schön dass du meine Messungen bestätigen konntest.
Danke für deine Mühe.
Die +/- 12 Bit INL des Chip ESP32 erklären nicht die große Abweichung im unteren Bereich.
Die Skizze mit dem Spannungsteiler hast du selbst aufgenommen?
Dann könnte es an einem Input Offset Current (aus dem ESP) kommen, der über die Widerstände 100k/47k einen Spannungsabfall generieren.
Habe mir mal mit meiner These die obige Tabelle angesehen: wenn der Input Offset Current leicht positiv ist (Strom fließt aus dem Pin heraus), dann scheint es kausal zu sein.
Aber egal wie, ändern können wir das nicht. Aber wir können es bei Bedarf umgehen, wie ich gezeigt habe.
Einleitung
Auch bei mir bestand der Bedarf nach einer Messmöglichkeit einer DC-Insel-Solaranlage.
Konkret für eine InselPVThermie-Anlage, welche in meinem Mietshaus den Warmwasserspeicher aufheizen soll.
Als Vermieter bin ich gesetzlich gezwungen, alle Primärenergie, die dem Haus zugeführt wird, zu erfassen und dem Abrechnungsunternehmen, zur Erstellung der jährlichen Heizkostenabrechnung, zu Verfügung zu stellen.
Ein geeichtes Messsystem ist hier nicht notwendig, da die Solarenergie den Mietern kostenlos zur Verfügung gestellt wird.
Die Anforderungen an das Messsystem sind sehr wohl: hohe Linearität und einen Gesamt-Messfehler von unter 5%.
Shelly Öko-System
Meine komplettes Heizungssystem wird mit Shellys überwacht.
Die zeitliche Auflösung beträgt 1 Minute. D.h., jede Minute übertragen die Shellys ihre Daten per http-Request an ein Hosting-Paket im Internet.
Auch das DC-Messsystem muss diesen Anforderungen genügen.
Shelly Plus UNI
Ich hatte mich ja schon in der Vergangenheit mit dem Plus UNI beschäftigt und heraus gefunden, dass der Analog-Eingang alles andere als genau ist.
Messkonzept
Der Plus UNI hat ja nur einen Eingang zum Messen einer analogen Spannung (in Volt oder Analog in Prozent).
Was der gute Shelly aber hat, sind zwei Digital Out-Kanäle!
Die kann man gut nutzen, um einen analogen Multiplexer zu steuern.
Wie oben schon geschrieben, benötige ich jede Minute einen neuen Wert.
Somit habe ich eine Minute lang Zeit, den Strom und die Spannung zu messen.
BTW: ich messe und übertrage mit dem Plus UNI (und auch mit den anderen Shellys) immer nur die RAW-Daten. Auswertungen, Multiplikationen, etc. erledige ich auf dem Server, weil ich da mehr Performance habe.
Also schreibe ich mir ein mJS-Script mit einer State-Machine, die zuerst die Spannung (in %) und dann den Strom (in %) misst.
Danach alle Daten zu einem Paket schnürt und dann versendet.
von der Theorie zur Praxis
Tja, wenn der Shelly ordentlich messen würde, wäre es damit getan gewesen - tut er aber nicht.
Aber es gibt ja noch ein paar technische Kniffe und die Mathematik.
Dann legen wir doch einfach den Nullpunkt (Offset) der Spannung/Strom höher. Konkret ausgewählt bei 3,8V.
Jetzt besteht aber die Gefahr, dass ich auf dem Server immer diese Konstante von den übertragenen Werte abziehe, obwohl die Spannung in der DC-Messbox wegen Temperatur oder Alterung schon längst bei, sagen wir 3,7Volt oder 3,9Volt ist.
Dann bauen wir halt einen 4-fach Multiplexer ein (CD4066) und benötigen dazu zur Selektion der Analog-Schalter noch etwas Digitaltechnik (CD4093).
Somit ändert sich der zeitliche Ablauf in der State-Machine wie folgt:
function FuncScheduler() {
    //Timer-States
    cycles_counter_v = cycles_counter_v + 1;
    if ( cycles_counter_v == 1 ) {
        Switch_Meas_Offset();
    }
    else if ( cycles_counter_v == 16 ) {
        Get_Meas_Offset();
        Switch_Meas_Voltage();
    }
    else if ( cycles_counter_v == 26 ) {
        Get_Meas_Voltage();
        Switch_Meas_Current();
    }
    else if ( cycles_counter_v == 36 ) {
        Get_Meas_Current();
        body_string_v = FuncLoadDataPlusUni();
        //for Debugg only: print(body_string_v);
        FuncShellyCall2(body_string_v);
    }
    else if ( cycles_counter_v == 60 ) {
        cycles_counter_v = 0;
    }
}
	
			Alles anzeigen
	Zuerst den Schalter auf die Offset-Spannung stellen, warten, Spannung messen, warten, Strom messen, Paket bauen und versenden, warten
Schaltplan
Im Schaltplan kann man zentral den Analog-Multiplexer erkennen.
Unten die Referenzspannungserzeugung für den Offset.
Auf der rechten Seite gibt es oben die Spannungsmessung über einen Spannungsteiler direkt am Anschluss des Generator-Anschluss-Kasten (GAK).
Ich muss hier noch erwähnen, dass die Spannung dort lebensgefährlich hoch ist, dass elektrotechnische Laien daran nichts zu suchen haben.
Also Finger weg!
Die Strommessung erfolgt potenzialfrei über einen LEM LA-55P.
Aufbau Elektronik
Im ersten Schritt habe ich zur Zeit dort eine Lochrasterplatine verwendet, die demnächst noch gegen eine ordentliche Leiterplatte ersetzt wird.
Server-Software / Datenbank
Wenn der http-Request auf dem Server ankommt, werden die %-Werte des Plus UNI in echte Spannung / Strom mit dem gemessenen Offset umgerechnet.
Das ist einfache Mathematik in den Grundrechenarten.
In einem weiteren Schritt werden dann die korrigierten Werte miteinander zur Leistung multipliziert.
Alle Daten, also die %-Daten, Spannung/Strom/Offset und berechnete Spannung/Strom/Leistung, lege ich dann mit dem Unix-Zeitstempel in einer Datenbank-Tabelle ab.
Kalibrierung
Als die InselPVThermie-Anlage in Gänze stand und Strom produzierte, habe ich die Kalibrierung vorgenommen.
Dazu habe ich mit meinen Fluke Messsystemen an der DC-Messbox den realen Strom und die reale Spannung gemessen und protokolliert.
Gleichzeitig dazu dann in meiner APP den im Server-Script berechneten Strom, Spannung und Leistung ebenfalls protokolliert und mit den realen Werten verglichen.
Die Strommessung zeigte lediglich einen Fehler von etwa 1-1,5% auf.
Bei der Spannungsmessung hatte ich etwa konstant 10V zu viel berechnet.
Diese 10V habe ich Serverseitig wieder rausgerechnet, so dass auch die Spannungsmessung meiner Anforderung genügt.
Fazit
Für technisch Visierte, die auch mit hohen Spannungen arbeiten dürfen, ist das eine feine Lösung zur DC-Leistungsmessung.
Sie passt wunderbar in mein Shelly-Öko-System und ich kann die Messdaten nach belieben auswerten.
Man kann natürlich die Offset-Korrekturrechnung sowie die Multiplikation zur Leistung auch im mJS-Script auf dem Plus UNI machen.
Ich hatte nun wieder was Zeit gefunden, um die entworfene Schaltung an einem Prototypaufbau zu testen.
realisierte Schaltung mit Shelly Dimmer 0-10V und Shelly AddOn
Inbetriebnahme
Tja, ich hatte da einen Tiny Micro-Current LDO von Micrel MIC5231 eingesetzt, um stabile 5V für den Schmittrigger zu versorgen, der ja dann über das RC-Glied die PWM in Analogspannung umsetzen sollte.
Hier ist die Güte der 5V wichtig, weil die halt für die Genauigkeit der Integration wichtig ist: U(t) = 5V ( 1 - e ^t/Tau)
Tja, die konnte der kleine LDO nicht liefern. Der war schon mit den 1-2mA Impulsstrom vom Pull-Up des Optokopplers überfordert und fing an zu schwingen.
Also habe ich einen in der Schublade verfügbaren LM75L05 eingesetzt (im Bild oben liegt der auf dem Rücken am Platinenrand).
Der ist zwar absolut nicht so präzise, was die 5V angeht, kann aber prima mit den Impulsströmen klar kommen.
Messungen
Blau ist der Ausgang per 750Ohm Pull-Up vom Shelly Dimmer 0-10V.
Gelb ist hinter dem Schmitttrigger.
Grün ist der Ausgang mit AC gemessen, um den Spannungs-Ripple besser erkennen zu können.
Gleiches Bild als Zoom.
Für die Versuche hatte ich auch ein Shelly AddOn unter dem Dimmer 0-10V geklickt und das "Voltmeter" eingerichtet.
Das Voltmeter (Analog In) habe ich an den Ausgang vom AnalogAddOn verschaltet, um direkt die erzeugte Gleichspannung zu messen.
Das kann man auch auf einem der Bilder erkennen.
Genauigkeit
Jouw, da war ich doch enttäuscht. Nicht von meinem AnalogAddOn, sondern vom Shelly AddOn.
Zur Erklärung der Tabelle:
* PWM habe ich an der Weboberfläche vom Shelly Dimmer 0-10V eingestellt und die Soll Spannung errechnet.
* Die "Zeit vor RC" ist hinter dem Schmitttrigger aber vor dem RC-Glied abgenommen und dort die Impulsbreite gemessen. Ich wollte wissen, wie genau der Schmitttrigger die schlaffen Flanken vom Optokoppler gerade biegt.
* AnalogAddOn ist gemessen mit einem Fluke 179
* Shelly Voltmeter habe ich abgelesen
Im kleinen PWM Bereich wird es schwierig, da sich hier die Fehler der Flankenkorrektur deutlich mehr auswirken werden, dass war mit klar.
Aber ab 3% PWM liegt der Fehler bei etwa 2%.
Das Shelly Voltmeter hingegen, misst deutlich größere Fehler. Erst so ab 20% PWM kann man von einer reproduzierbaren Messung reden.
Aber als Monitor zur groben Messung des Analog-Ausganges reicht es aber dann doch.
Schaltpläne
Wenn jemand zum Nachbauen die GERBER-/NC-Daten & Stückliste haben möchte, soll er mir eine PN senden.
Fazit
Das AnalogAddOn funktioniert.
Den falschen LDO habe ich derweil schon korrigiert.
Für meine Zwecke reicht das vollkommen aus.
Ich werde jetzt noch dynamische Messungen, angesteuert per mJS-Script, in der nächsten Zeit durchführen.
	DIYROLLY : Schaue Dir mal ASKOHEAT-F+ an
[ich verlinke das Produkt hier nicht, weil ich keine Werbung dafür machen will. Kennen den Laden auch nicht.]
Hallo Rolf,
ist etwas komplizierter geworden, deshalb stelle ich den Schaltplan mal hier zum download ein:
[Schaltplan erst einmal wieder entfernt. Projektstand wird hier aber weiter geführt 22.04.24]
Hinweise:
Der Schaltplan ist noch nicht real wie gezeichnet getestet worden.
Den Link werde ich spätestens am kommenden WE wieder entfernen.
So, weiter gehts.
Die Idee dahinter:
Links legt man dann den Shelly Dimmer 0-10V hin und schraubt die (hier grünen) Drähten in den Klemmen fest.
Dann legt man die 24Vdc & GND an und kann an den Klemmen 0-10V & GND die Analogspannung abgreifen.
Man dann die Baugruppe nach hinten klappen und mit einem 3D-Druck Hutschienenadatpter lässt sich der auch wunderbar montieren.
Von der Größe her ist der ca. 2mm kleiner als ein Shelly, so dass auch ein eigenes 3D-Druck Gehäuse noch passen würde.
Letzteres kann ich nicht, würde aber die STEP-Daten der Baugruppe zur Verfügung stellen, wenn sie jemand benötigt.
Entwicklungs-Status:
Schaltplan und Layout sind fertig.
Ich muss nun wieder Zeit finden, Bauteile und die PCB zu bestellen, für einen finalen Test.
Ich habe den Fehler SSR-Output korrigiert und dort Optokoppler-Ausgang notiert.
Bleibe an dem Thema dran. Der OP-Ausgang wird natürlich irgendwas um die 10mA können.
Muss mir aber noch genauerer Gedanken zum Spannungsversorgungskonzept machen.
Und dann muss das Dinga ja uach noch so klein sein, dass es, wie das Plus AddOn, Huckepack am Dimmer hängen kann.
Dauert ein bischen.
Einleitung
Inspiriert von dem Tear-Down Artikel von Thomas ( thgoebel )
habe ich mich auch mal damit befasst.
Ursprünglich dachte ich, dass wenn da in der Artikelbeschreibung 0-10V steht, dass das Ding auch 0-10V kann.
Tja, is wohl nich.
Der Shelly Dimmer 0-10V macht an diesem Ausgang ein PWM-Signal mit der maximalen Spannungshöhe von 10V bei einer konstanten PWM-Frequenz von 500Hz.
Wobei eigentlich sogar nur ein potenzialfeier Transistor-Ausgang (Optokoppler) zur Verfügung steht.
Der Thomas hat ja in seinem Artikel schon einiges dazu geschrieben, wie man da doch einen analogen Ausgang draus machen kann.
Mit den einfachen Mittel ist das ja schon mal ein Ansatz.
Ich möchte aber genau da ansetzen und die Freiheitsgrade erhöhen.
Mein Konzept sieht so aus
24V DC Netzteil (z.B. von Meanwell HDR-15-24) versorgt den Shelly Dimmer 0-10V und auch weitere Schaltungsteile.
Am SSR-Ausgang + ist ein Widerstand nach 10V verschaltet. Den Wert dessen erkläre ich weiter unten.
Dahinter folgt ein CD4093, das ist ein 4-fach NAND mit Schmitt-Trigger-Eingang zur Rekonstruktion des Signals, gefolgt von einem RC-Tiefpass zur Intergration des Signals (Signal glatt bügeln).
Die noch benötigte 10V Spannungsversorgung, werde ich über ein Schaltregler-Modul aus den 24V erzeugen.
(Im Bild unten nutze ich noch Laborgeräte.)
Messaufbau
Ok, schauen wir uns auch den Messaufbau an:
Messungen
Als erstes habe ich mal die Aussage von Thomas überprüft, dass der Pull-Up Widerstand, also der Widerstand, den man zur Strombegrenzung an dem Optokoppler-Ausgang den Dimmer0-10V anschließen muss, idealer Weise 3kOhm betragen soll.
Dann sieht so eine 50% PWM so wie oben aus.
Zoomt man hinein, kann man die Signalanstiegszeit ermitteln:
Naja, irgendwas um die 30us (Anstiegszeiten werden zwischen 10% und 90% des Signales gemessen).
Ich war dann so frech und habe anstatt des 3kOhm Widerstandes einen 1kOhm-Typen eingesetzt. Der dadurch fliesende Strom (10mA) ist noch im Bereich des zulässigen:
Damit sind die Flanken nochmals steiler geworden: die Anstiegszeit ist jetzt unter Brüdern bei 9usek und die Abfallzeit bei 13usek.
Der Fuchs unter euch wird aber festgestellt haben, dass sich das Spannungsniveau im "Aus"-Zustand von annähernd 0V auf 2,2V erhöht hat.
So kommt man nicht an eine ordentliche PWM, die für einen analog Ausgang geeignet ist.
(Ich meine mich zu erinnern, das dem Thomas das auch schon aufgefallen ist).
Das ist aber kein Problem und mit ein bisschen Elektronik zu lösen.
In einem Schaltplan sieht das dann so aus:
Hinter dem Optokoppler-Ausgang gibt es besagten Pull-Up (hier mit Fragenzeichen) und dahinter folgt dann die Schmitt-Trigger Schaltung zur Rekonstruktion des Signales
Hier folgen ein paar Screenshots dazu. grünes Signal ist an MP1 und blaues Signal an MP2 gemessen.
Wie Ihr seht, ist das blaue Signal schön rekonstruiert, von Pegel 0V nach Pegel 10V, mit scharf Flanken (aber sowas von ... ).
Das letzte Bild ist übrigens ein 1% PWM-Signal.
Hinter MP2 folgt nun das eigentliche Integrieren des PWM-Signals zu einem Analog-Signal.
Den 100nF Kondensator würde ich noch durch einen etwas größeren ersetzen wollen, um den (kleinen) Ripple noch etwas mehr zu glätten, evtl. 1uF.
Ich habe dann noch eine Messung gemacht:
Die Spannung habe ich mit einem Fluke Multimeter gemessen.
Wenn ich wieder etwas Zeit finde, werde ich noch weitere Versuche unternehmen.
Darunter einen mit einem hinter MP3 geschaltetem Operationsverstärker zur Impedanzwandlung.
Wenn ich dem dann noch die Verstärkung V=1,02 mit auf dem Weg gebe, dann ist das Analog-Signal perfekt.
Thomas,
danke für Dein Angebot. Komme sicher irgend wann mal auf Dich zu. Aber meine ToDo Liste ist noch sehr lang und die muss ich erst abarbeiten.
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).
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.
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:
// FJG, Stand 11.04.24
// es duerfen hier nur die Peripherals integriert werden,
// die der Weboberflaeche installiert worden.
// Ansonsten Scriptfehler!
// Konstanten definieren
//===========================================
// Shelly-Type vorbesetzen
const shellytyp1_c = "ShellyPlusUni";
const shellyname1_c = "Plus-Uni-SSR-Speed3 1 Kanal";
//check every seconds   > <
const checkInterval_c = 80;
// Namensdefinitionen, Anwendungsspezifisch
//===========================================
// Benennung SSR am ShellyPlusUni
const switch_name0_c  = "LowPegel Out1";
const switch_name1_c  = "LowPegel Out2";
// Benennung Digital-Eingaenge am ShellyPlusUni
const digital_name0_c = "LowPegel In1";
const digital_name1_c = "LowPegel In2";
// Analog-Eingang
const analog_name0_c  = "Analog-Eingang 0";
// Variablen definieren
//===========================================
// Hardwarenahe Variablen
let togglebit0_v = "0";
//ShellyPlusUni
//=======================
function FuncTimerSet() {
	ScheduleTimer_v = Timer.set(
	checkInterval_c,
	true,
	function (ud) {
      if ( togglebit0_v === "0" ) {
        Shelly.call(
		"Switch.Set",
		{ id: 0, on: false },
		function (response, error_code, error_message) {}
	    );	
		togglebit0_v = "1";
      }
      else {
		Shelly.call(
		"Switch.Set",
		{ id: 0, on: true },
		function (response, error_code, error_message) {}
	    );
		togglebit0_v = "0";
      };
	}, 
	null
	);
}
FuncTimerSet();
	
			Alles anzeigen
	Das sich aus diesem Script ergebene minimal taugliche Timing ist in [checkInterval_c = 80;] als Millisekunden definiert, für einen Puls bzw. eine Pause.
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:
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:
// FJG, Stand 11.04.24
// es duerfen hier nur die Peripherals integriert werden,
// die der Weboberflaeche installiert worden.
// Ansonsten Scriptfehler!
// Konstanten definieren
//===========================================
// Shelly-Type vorbesetzen
const shellytyp1_c = "ShellyPlusUni";
const shellyname1_c = "Plus-Uni-SRS-Speed3 2 Kanal";
//check every seconds   > <
const checkInterval_c = 150;
// Namensdefinitionen, Anwendungsspezifisch
//===========================================
// Benennung SSR am ShellyPlusUni
const switch_name0_c  = "LowPegel Out1";
const switch_name1_c  = "LowPegel Out2";
// Benennung Digital-Eingaenge am ShellyPlusUni
const digital_name0_c = "LowPegel In1";
const digital_name1_c = "LowPegel In2";
// Analog-Eingang
const analog_name0_c  = "Analog-Eingang 0";
// Variablen definieren
//===========================================
// Hardwarenahe Variablen
let togglebit0_v = "0";
let togglebit1_v = "0";
//ShellyPlusUni
//=======================
function FuncTimerSet() {
	ScheduleTimer_v = Timer.set(
	checkInterval_c,
	true,
	function (ud) {
      if ( togglebit0_v === "0" ) {
        Shelly.call(
		"Switch.Set",
		{ id: 0, on: false },
		function (response, error_code, error_message) {}
	    );	
		Shelly.call(
		"Switch.Set",
		{ id: 1, on: true },
		function (response, error_code, error_message) {}
	    );	
		togglebit0_v = "1";
      }
      else {
		Shelly.call(
		"Switch.Set",
		{ id: 0, on: true },
		function (response, error_code, error_message) {}
	    );
	    Shelly.call(
		"Switch.Set",
		{ id: 1, on: false },
		function (response, error_code, error_message) {}
	    );	
		togglebit0_v = "0";
      };
	}, 
	null
	);
}
FuncTimerSet();
	
			Alles anzeigen
	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.
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.
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.