FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: deinmedium am 09 März 2015, 14:54:24

Titel: Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: deinmedium am 09 März 2015, 14:54:24
Hallo,

ich habe mal nach ganz dummen Wissen hier etwas zusammengeschrieben.

Das ist Zeil ist folgendes:
Ich messe einen Temperatur im Deckenbereich und eine im Bodenbereich. Je großer der Unterschied ist, desto stärker soll ein Lüfter laufen. (In Stufen schriiten) Ich wälze damit die Raumluftum damit die warme Luft nicht unter Decke hängen bleibt. Zusatzlich in dem Scrpit habe ich einen Auswahldummy um die Stufen einstellen zu können.

So sieht der Code aus:
#Lüfter mit Stufen in 10 schritten und PWM ansteuerung
define Luefter dummy
attr Luefter fp_umluft 595,650,2,
attr Luefter setList state:0,1,2,3,4,5,6,7,8,9,10
attr Luefter webCmd state
define 0_Luefter notify Luefter:0 {system("sudo gpio -g pwm 18 0 &")}
define 1_Luefter notify Luefter:1 {system("sudo gpio -g pwm 18 100 &")}
define 2_Luefter notify Luefter:2 {system("sudo gpio -g pwm 18 200 &")}
define 3_Luefter notify Luefter:3 {system("sudo gpio -g pwm 18 300 &")}
define 4_Luefter notify Luefter:4 {system("sudo gpio -g pwm 18 400 &")}
define 5_Luefter notify Luefter:5 {system("sudo gpio -g pwm 18 500 &")}
define 6_Luefter notify Luefter:6 {system("sudo gpio -g pwm 18 600 &")}
define 7_Luefter notify Luefter:7 {system("sudo gpio -g pwm 18 700 &")}
define 8_Luefter notify Luefter:8 {system("sudo gpio -g pwm 18 800 &")}
define 9_Luefter notify Luefter:9 {system("sudo gpio -g pwm 18 900 &")}
define 10_Luefter notify Luefter:10 {system("sudo gpio -g pwm 18 1000 &")}

#Variable für die Abstufung der Temperatur
define Abstufung dummy
attr Abstufung fp_umluft 595,750,2,
attr Abstufung setList state:0.1,0.2,0.3,0.4,0.5
attr Abstufung webCmd state
define 0.1_Abstufung notify Abstufung:0.1 {my $tempabstufung = 0.1}
define 0.2_Abstufung notify Abstufung:0.2 {my $tempabstufung = 0.2}
define 0.3_Abstufung notify Abstufung:0.3 {my $tempabstufung = 0.3}
define 0.4_Abstufung notify Abstufung:0.4 {my $tempabstufung = 0.4}
define 0.5_Abstufung notify Abstufung:0.5 {my $tempabstufung = 0.5}

#Lüfterautomatik alle 10sec Temperaturvergleich
define LuefterAnAus at +*00:00:30 {\
my $tempoben = ReadingsVal("GPIO4_DS18B20_00000529c8d8","temperature",0);;\
my $tempunten = ReadingsVal("GPIO4_DS18B20_000005527c24","temperature",0);;\
my $tempabstufungneu = ReadingsVal("Abstufung","state",99);;\
if ($tempoben - 0 * $tempabstufungneu > $tempunten) {fhem("set Luefter 0")};;\
if ($tempoben - 1 * $tempabstufungneu > $tempunten) {fhem("set Luefter 1")};;\
if ($tempoben - 2 * $tempabstufungneu > $tempunten) {fhem("set Luefter 2")};;\
if ($tempoben - 3 * $tempabstufungneu > $tempunten) {fhem("set Luefter 3")};;\
if ($tempoben - 4 * $tempabstufungneu > $tempunten) {fhem("set Luefter 4")};;\
if ($tempoben - 5 * $tempabstufungneu > $tempunten) {fhem("set Luefter 5")};;\
if ($tempoben - 6 * $tempabstufungneu > $tempunten) {fhem("set Luefter 6")};;\
if ($tempoben - 7 * $tempabstufungneu > $tempunten) {fhem("set Luefter 7")};;\
if ($tempoben - 8 * $tempabstufungneu > $tempunten) {fhem("set Luefter 8")};;\
if ($tempoben - 9 * $tempabstufungneu > $tempunten) {fhem("set Luefter 9")};;\
if ($tempoben - 10 * $tempabstufungneu > $tempunten) {fhem("set Luefter 10")}}


Das ganze läuft auch ganz gut und so wie das gerne wollte. Das Problem liegt jetzt darin das die Lüfter im 30Sec Takt pumpen.
Wenn ich das ReadingsVal aus dem Script nehme und dort einen Festen Wert eingebe passiert das nicht.

Kann mir da jemand Helfen?

Bitte habt Nachsicht... ich bin ein Anfänger!!!!!! DANKE
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: Icinger am 09 März 2015, 15:24:23
Dann werden deine Temperaturen vermutlich im 30-sek-Takt abgefragt und aktualisiert.

Entweder du setzt das Polling-Intervall rauf, oder du setzt bei den beiden Temp-Sensoren ein event-min-interval zB auf 60 Sekunden (oder wie du's gerne willst).

lg, Ici
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: Icinger am 09 März 2015, 15:31:16
Wie du die ganzen Notify's umgehen könntest:

define ntf_Luefter notify Luefter:.* {system("sudo gpio -g pwm 18 " . $EVTPART1 * 100 . " &")}


Ungetestet, weil ich grad im Büro sitze, müsste aber so funktionieren. Genauso könntest du die ganzen if's zusammenfassen.

lg, Ici
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: vbs am 09 März 2015, 18:23:08
Man sollte wohl sicherheitshalber noch prüfen, ob der Wert von $EVPART1 im erwarteten Bereich legt, ansonsten dreht man u.U. mal den Lüfter auf 10000 Umdrehungen auf aus unerwarteten Gründen :)
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: Icinger am 09 März 2015, 18:36:59
Windkanal im Wohnzimmer gg
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: Joachim am 09 März 2015, 18:44:01
Moin deinmedium,

schau Dir mal das PID20 Modul an, das schreit förmlich danach, dafür genutzt zu werden.

Gruß Joachim
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: deinmedium am 10 März 2015, 10:25:01
Danke für die Antworten. Ich werde mir eure Vorschläge mal anschauen. Da kommen aber bestimmt noch Frage.

Hier mal zwei Bilder damit es verständlich wird. ;-)

Die Lüfter sind mit Gummihalter angebaut und absolut geräuschlos.
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: deinmedium am 10 März 2015, 13:13:00
Zitat von: Icinger am 09 März 2015, 15:31:16
Wie du die ganzen Notify's umgehen könntest:

define ntf_Luefter notify Luefter:.* {system("sudo gpio -g pwm 18 " . $EVTPART1 * 100 . " &")}


Wenn ich das so umsetze dann bekomme ich im LOG diese Meldung.

ntf_Luefter return value: Global symbol "$EVTPART1" requires explicit package name at (eval 3155) line 1.

In FHEM werden zwar die Stufen schön von alleine umgestellt aber die Drehzal vom Lüfter ändert sich nicht.
Wenn ich anstatt $EVTPART! $EVENT nehme dann klappt es aber ich denke das kann nicht der richtige Weg sein.  ???
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: franky08 am 10 März 2015, 13:26:40
Hallo, dass muss $EVTPART1 sein, nicht !

VG
Frank
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: deinmedium am 10 März 2015, 13:34:54
$EVTPART1 hatte ich auch in dem Quelltext. Das geht dann aber leider nicht. Mit $EVTPART0 geht es aber.
Titel: Antw:Lüftersteuerung pumpt wegen unschöner Programiereung
Beitrag von: frank am 10 März 2015, 13:49:22
da das event wohl nur eine zahl ist, kann das event nicht weiter zerlegt werden (event-teile durch leerzeichen getrennt). also event=evtpart0. "normalerweise" wäre evtpart0 der readingname und evtpart1 der wert des readings. ausnahmen bestätigen die regel.  ;)