FHEM > Automatisierung

Proportional nachgeführte Ansteuerung

(1/1)

Schorsch:
Hi,

ich steh gerade auf dem Schlauch und würde mich über Tipps freuen.
Ziel ist es, ein über 0-10V steuerbares Ladegerät nach Solaranlagenleistung anzusteuern. Muss nichtmal stufenlos sein.

Als Solarleistung bekomme ich vom Device "sv" ein Reading "currentPower" von 0...3500 geliefert.
Die 0-10V des Laders spreche ich über ein Device "1W_0_10V" an, das konfiguriere ich über das Command "PIO.BYTE" mit den Werten "0" für 0V bis "255" für 10V.

Das einzige, was mir einfällt, ist ein stufiges Notify wie (hier mal nur 4 Stufen):


--- Code: ---define n_ChgIfPwr notify sv:currentPower.* {\
 if (ReadingsVal("sv","currentPower",0) < 1000) {\
     fhem("set 1W_0_10V PIO.BYTE 0");;\
   }\
 } else {\
 if (ReadingsVal("sv","currentPower",0) < 2000) {\
     fhem("set 1W_0_10V PIO.BYTE 150");;\
   }\
 } else {\
 if (ReadingsVal("sv","currentPower",0) < 3000) {\
     fhem("set 1W_0_10V PIO.BYTE 200");;\
   }\
 } else {\
      fhem("set 1W_0_10V PIO.BYTE 255");;\
 }\
}
--- Ende Code ---


Mal abgesehen davon, dass der Code noch fehlerhaft ist und nicht läuft (manuell kann ich die Werte aber setzen), gefällt mir die Lösung nicht, denn ich müsste schon 10 Stufen oder so bauen.

Kennt Ihr schlauere Alternativen? Man kann von Linearität ausgehen, daher überlege ich, ob man nicht einfach einen Faktor setzen sollte (Wert von currentPower * 0,06 z.B.) - aber wie schreibt man das? Ich brauche Ganzzahlen, die würde ich aber wohl mit sprintf bekommen...

PID und THRESHOLD funktionieren für meine Anwendung glaube ich nicht, nach dem, was ich so gelesen habe.

Danke und viele Grüße!
Schorsch

Damian:
Hallo Schorsch,

im Prinzip sollte es mit einem Notify stufenlos gehen. Wenn dezimale Voltzahlen angegeben werden können:


--- Code: ---define n_ChgIfPwr notify sv:currentPower.* {my $cp=ReadingsVal("sv","currentPower",0);;my $Volt=$cp/13.725;;fhem("set 1W_0_10V PIO.BYTE $Volt")}
--- Ende Code ---


Wenn dezimale Voltzahlen nicht funktioniern, dann muss man vorher noch runden.

Gruß

Damian

rudolfkoenig:
Zum Beispiel so (natuerlich ungetestet):


define n_ChgIfPwr notify sv:currentPower.* { fhem "set 1W_0_10V PIO.BYTE ".int($EVENT1*0.07286) }


$EVENT1 entspricht in diesem Fall ReadingsVal("sv","currentPower",0)

Schorsch:
Vielen Dank Euch beiden! Es läuft. Habe Rudolfs Zeile genommen und bin immer wieder fasziniert, wie kurz man schreiben kann, wenn man kann. Hatte mit Dummy und userReadings rumprobiert heute morgen...

Lediglich $EVENT1 ging nicht (vielleicht wäre es $EVENT0 gewesen), habe jetzt aber

--- Code: ---define n_ChgIfPwr notify sv:currentPower.* { fhem "set 1W_0_10V PIO.BYTE ".int(ReadingsVal("sv","currentPower",0)*0.07286) }
--- Ende Code ---
geschrieben, damit ich später noch weiß, was ich gemacht habe.

Jetzt lädt das Auto nach Sonneneinstrahlung :-)

Schönen Sonntag!

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln