FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: deinmedium am 05 März 2015, 16:43:37

Titel: Problem mit if elsif und else :-(
Beitrag von: deinmedium am 05 März 2015, 16:43:37
Hallo,

kann mir jemand sagen warum das FHEM hier nicht reagiert und mir die Stufen für den Lüfter umstellt?

Zur Erklärung. Ich vergleich zwei Temperaturen um einen Lüfter an zu steuern. Je größer der Temperaturunterschied ist, desto stärker soll der Lüfter sich drehen. Manuel (über das Frontend) kann ich die Stufen einstellen und FHEM gibt auch die GPIO Stufen weiter. Die Drehzahl der Lüfter verändert sich dann auch. Leider aber nicht über das "at" (Modul).

#Lüfter mit Stufen in 10 schritten und PWM ansteuerung
define Luefter dummy
attr Luefter webCmd state
attr Luefter setList state:0,1,2,3,4,5,6,7,8,9,10
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 &")}

#Lüfterautomatik alle 10sec Temperaturvergleich
define LuefterAnAus at +*00:00:10 {\
my $tempoben = ReadingsVal("GPIO4_DS18B20_00000529c8d8","temperature",0);;\
my $tempunten = ReadingsVal("GPIO4_DS18B20_000005527c24","temperature",0);;\
if ($tempoben - 0.2 > $tempunten) {fhem("set Luefter 1")};;\
elsif ($tempoben - 0.4 > $tempunten) {fhem("set Luefter 2")};;\
elsif ($tempoben - 0.6 > $tempunten) {fhem("set Luefter 3")};;\
elsif ($tempoben - 0.8 > $tempunten) {fhem("set Luefter 4")};;\
elsif ($tempoben - 1.0 > $tempunten) {fhem("set Luefter 5")};;\
elsif ($tempoben - 1.2 > $tempunten) {fhem("set Luefter 6")};;\
elsif ($tempoben - 1.4 > $tempunten) {fhem("set Luefter 7")};;\
elsif ($tempoben - 1.6 > $tempunten) {fhem("set Luefter 8")};;\
elsif ($tempoben - 1.8 > $tempunten) {fhem("set Luefter 9")};;\
elsif ($tempoben - 2.0 > $tempunten) {fhem("set Luefter 10")};;\
else {fhem("set Luefter 10")}}


Ich sage schon mal DANKE!
Titel: Antw:Lüftersteuerung in mehreren schritten.
Beitrag von: deinmedium am 05 März 2015, 22:14:51
Das ist aber ein Auszug aus FHEM heraus. In der CFG sind immer zwei Semikolons.
Titel: Antw:Lüftersteuerung in mehreren schritten.
Beitrag von: deinmedium am 06 März 2015, 10:25:53
Ich habe den Einleitungstext überarbeitet.
Titel: Antw:Problem mit if elsif und else :-(
Beitrag von: eldar am 06 März 2015, 16:14:53
Drei Sachen, die du vielleicht probieren könntest (geh nicht davon aus dass ich weiß wovon ich rede  :P )
- in ReadingsVal benutze ' anstatt " ... so wie ich das verstanden habe, ist " für fhem interne Aufrufe und ' ist für perl-Ausdrücke
- warum hast du \ in deiner at Zeile und nach jedem ;; ?
- vergiss nicht in LuefterAnAus auch eine 0 Stufe einzubauen, eventuell unter "else"
Titel: Antw:Problem mit if elsif und else :-(
Beitrag von: deinmedium am 06 März 2015, 16:40:38
Danke für die Antwort!

Ich habe es gerade eben hinbekommen.

Ob das "sauber" ist weis ich nicht aber es klappt.

#Lüfter mit Stufen in 10 schritten und PWM ansteuerung
define Luefter dummy
attr Luefter fp_umluft 539,696,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 &")}

#Lüfterautomatik alle 10sec Temperaturvergleich
define LuefterAnAus at +*00:00:10 {\
my $tempoben = ReadingsVal("GPIO4_DS18B20_00000529c8d8","temperature",0);;\
my $tempunten = ReadingsVal("GPIO4_DS18B20_000005527c24","temperature",0);;\
if ($tempoben - 0.2 > $tempunten) {fhem("set Luefter 1")};;\
if ($tempoben - 0.4 > $tempunten) {fhem("set Luefter 2")};;\
if ($tempoben - 0.6 > $tempunten) {fhem("set Luefter 3")};;\
if ($tempoben - 0.8 > $tempunten) {fhem("set Luefter 4")};;\
if ($tempoben - 1.0 > $tempunten) {fhem("set Luefter 5")};;\
if ($tempoben - 1.2 > $tempunten) {fhem("set Luefter 6")};;\
if ($tempoben - 1.4 > $tempunten) {fhem("set Luefter 7")};;\
if ($tempoben - 1.6 > $tempunten) {fhem("set Luefter 8")};;\
if ($tempoben - 1.8 > $tempunten) {fhem("set Luefter 9")};;\
if ($tempoben - 2.0 > $tempunten) {fhem("set Luefter 10")}}