Verbrauchsvergleich mit diffpsec kriege ich nicht gelöst

Begonnen von cocojambo, 13 April 2025, 12:06:59

Vorheriges Thema - Nächstes Thema

cocojambo

Ich habe ein Ladegerät an dem unsere USB Geräte geladen werden. Da dort aber manchmal ein Gerät und auch mal 4 Geräte dran hängen läßt sich nicht genau festlegen wann diese voll sind und die Ladestation abgeschaltet werden kann.
Darauf hin bin ich auf diffpsec gestossen und habe mir überlegt, wenn sich die Leistungsaufnahme des Ladeteils nur noch sehr gering oder garnicht mehr ändert sind alle angeschlossenen Geräte voll, egal welche Restleistung das Ladegerät noch aufnimmt.

Folgendes habe ich probiert:

defmod Handy_Ladekontrolle_di DOIF ([Handy_Ladekontrolle_Pwr:power:diffpsec]*1000 < -1.2)(set Handy_Ladekontrolle_Pwr off)\
Folgende Rechnung habe ich dabei zu Grunde gelegt:
6W Leisungsaufnahme langsam fallend bis 2,8W, danach nur noch Änderung im 0,2W Stellenbereich auf 2,6W.
ergibt:
letzter Wert - vorletzter Wert = 2,6-2,8=-0,2 / Zeitspanne dazwischen 180sek = -0,0011 * 1000 = -1.11 (funktioniert nicht)
Dann habe gedacht wenn der Unterschied kleiner wird, wird auch das Ergebniss kleiner, aber negativen Bereich, also rechnerisch positiver und habe statt < -1.2 mal > -1.2 eingegeben, geht auch nicht.

Was mache ich da für einen gedanklichen oder echnerischen Fehler?

Gruß aus Köln
Norbert

FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

Du kannst [Handy_Ladekontrolle_Pwr:power:diffpsec] als DOIF_Reading definieren, dann kannst du den errechneten Wert beobachten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cocojambo

@Damian

Das ist toll, das du dich zu meinem Problem gemeldet hast, aber ich habe inzwischen so lange daran herumprobiert, das ich eine änliche Lösung gefunden habe.
Die scheint mit meinen Vorstellungen zu funktionieren, zu mindest bis jetzt.
So sieht es jetzt aus:
erst ein attr ReadingsVal in den Schalter:

attr Handy_Ladekontrolle_Pwr userReadings power_old:power.* { OldReadingsVal("Handy_Ladekontrolle_Pwr","power",undef) }, \
power_diff difference { ReadingsVal("Handy_Ladekontrolle_Pwr","power",0)*100}


Dann das DOIF:

defmod Handy_Ladekontrolle_di DOIF ([Handy_Ladekontrolle_Pwr:power_diff]>-10 and [Handy_Ladekontrolle_Pwr:power_diff]<1 and [Handy_Ladekontrolle_Sw:state] eq"on") (set Handy_Ladekontrolle_Sw off)\
DOELSEIF([Handy_Ladekontrolle_Pwr:power]>50 and [Handy_Ladekontrolle_Sw:state] eq"on")(set Handy_Ladekontrolle_Sw Aus)\
DOELSE
attr Handy_Ladekontrolle_di disable 0
attr Handy_Ladekontrolle_di event-on-change-reading power_diff
attr Handy_Ladekontrolle_di wait 200:10

BIs jetzt haben alle Möglichkeiten funktioniert, auch mit Wechsel von verschiedenen Lasten.
Gruß
Nobbi
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Damian

Das DOIF_Reading kannst du spaßeshalber trotzdem definieren und mit deinem userReading vergleichen, ohne die eigentliche DOIF-Definition zu ändern.

Damit kannst du die Unterschiede sehen und das Problem einkreisen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF