Problem mit if elsif und else :-(

Begonnen von deinmedium, 05 März 2015, 16:43:37

Vorheriges Thema - Nächstes Thema

deinmedium

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!

deinmedium

Das ist aber ein Auszug aus FHEM heraus. In der CFG sind immer zwei Semikolons.

deinmedium

Ich habe den Einleitungstext überarbeitet.

eldar

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"

deinmedium

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