Mit Shelly Plug S Acculadung überwachen

Begonnen von griessbx, 07 Dezember 2021, 09:41:13

Vorheriges Thema - Nächstes Thema

griessbx

Hallo,
ich versuche das Laden meiner Fahrradaccus mit Hilfe eines Shelly Plug zu überwachen. Ich habe einen DOIF mit folgendem Code:
([IN_Steckdose_WZ_Switch:power] < 2) (set IN_Steckdose_WZ_Switch off)
das klappt auch wie gewünscht, solange ich den Plug manuell einschalte. Wenn ich das ganze über die TabletUI anstoße wird sofort wieder abgeschaltet. Der Shelly liefert den Wert für power wohl etwas verzögert. Wie bekomme ich das hin, das die Abfrage im DOIF erst nach einer Verzögerung startet
Gruß Roland

Otto123

#1
Hallo Roland,

in dem Du erst nach einer Ladeschwelle überhaupt "losläufst". Ich habe das etwas aufwendiger gemacht, meine Dose hat zunächst mal noch einen geglätteten Zusatzwert powerDiff bekommen:
attr PSD3_Pwr event-aggregator powerDiff::none:median:900
attr PSD3_Pwr event-on-change-reading .*
attr PSD3_Pwr userReadings powerDiff:power:.* difference {ReadingsNum("$name","power",0)}

Mein DOIF sieht kompliziert aus: ;)
defmod di_wm DOIF ([$SELF:"^running:.0$"]) (set PSD3_Sw off) DOELSEIF\
([PSD3_Pwr:power] > 10 )(setreading $SELF running 1) DOELSEIF \
( abs([PSD3_Pwr:powerDiff]) < [?$SELF:threshold] and [PSD3_Pwr:power] < 3 and [?$SELF:running] eq '1')\
   (sleep 1;;setreading $SELF running 0)
attr di_wm cmdState Pause|on|off
attr di_wm do resetwait
attr di_wm readingList threshold
attr di_wm room TestPower
attr di_wm setList threshold
attr di_wm wait 0:0:600
setstate di_wm 2021-12-06 05:03:24 running 0
setstate di_wm 2021-08-01 00:20:08 threshold 0.015

Letzlich muss eine gewisse Leistung erreicht werden, am Schluss muss die Ladekurve eine Steigung von nahe null haben, die absolute Schwelle ist mir also egal.
Das Readings threshold muss man setzen, kann man sicher noch besser machen

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

griessbx

Danke, ich werde mir das mal zu Gemüte führen und vor allen Dingen versuchen zu verstehen
Gruß Roland

Otto123

Die Grundidee stammt aus der Ecke: "Die Waschmaschine ist fertig" ;)
Es gibt drei Bedingungen / Zweige:

  • Es kommt der Event di_wm:running:.0 -> der Vorgang ist zu Ende, schalte ab. Der Befehl dazu steht ganz zum Schluß. Damit das überhaupt einen Event gibt ist sleep 1 vorgesetzt (Stichwort Schleifenverhinderung)
  • Die Leistung ist über den Wert 10 (anpassbar) gestiegen -> starte den Ladeüberwachungsvorgang. Wenn also kein Akku steckt passiert nichts (dein aktuelles Problem)
  • Die Leistung ist unter einem Wert 3 (anpassbar) gefallen und die Ladeleistung ändert sich kaum noch (delta < 15 mW) -> warte 10 min und schalte dann ab.
Ich wollte sicherstellen, dass der Akku wirklich voll geladen ist und es egal ist welcher Akku zum Laden angesteckt wurde. Die Werte sind relativ willkürlich gewählt

Im Anhang siehst Du eine typische Kurve.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz