FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Schorsch am 13 April 2013, 19:18:02

Titel: Proportional nachgeführte Ansteuerung
Beitrag von: Schorsch am 13 April 2013, 19:18:02
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):

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");;\
 }\
}


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
Titel: Aw: Proportional nachgeführte Ansteuerung
Beitrag von: Damian am 14 April 2013, 09:54:23
Hallo Schorsch,

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

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")}

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

Gruß

Damian
Titel: Aw: Proportional nachgeführte Ansteuerung
Beitrag von: rudolfkoenig am 14 April 2013, 09:58:58
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)
Titel: Aw: Proportional nachgeführte Ansteuerung
Beitrag von: Schorsch am 14 April 2013, 11:03:30
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
define n_ChgIfPwr notify sv:currentPower.* { fhem "set 1W_0_10V PIO.BYTE ".int(ReadingsVal("sv","currentPower",0)*0.07286) } geschrieben, damit ich später noch weiß, was ich gemacht habe.

Jetzt lädt das Auto nach Sonneneinstrahlung :-)

Schönen Sonntag!