Mehrere if / else Bedingungen

Begonnen von sun1907, 06 Februar 2013, 14:24:45

Vorheriges Thema - Nächstes Thema

Predictor

Im Moment habe ich ein funktionierendes given - when in der 99_Utils

In den Header dies hier rein:
use Switch 'Perl5', 'Perl6';

Das ist die (gekürtzte) given when:
given ($CommandInput){
  when("POWER") { $CommandCode = 116; } #Taste: POWER ON/OFF
 # -----------------------------------------
  when("0") { $CommandCode = 11; } #Taste: 0
  when("1") { $CommandCode = 2;  } #Taste: 1
  when("2") { $CommandCode = 3;  } #Taste: 2
  when("3") { $CommandCode = 4;  } #Taste: 3
  when("4") { $CommandCode = 5;  } #Taste: 4
  when("5") { $CommandCode = 6;  } #Taste: 5
  when("6") { $CommandCode = 7;  } #Taste: 6
  when("7") { $CommandCode = 8;  } #Taste: 7
  when("8") { $CommandCode = 9;  } #Taste: 8
  when("9") { $CommandCode = 10; } #Taste: 9
  when("TV") { $CommandCode = 377; } #Taste: Digital-TV
  when("RADIO") { $CommandCode = 385; } #Taste: Digital-Radio
  when("TEXT") { $CommandCode = 388; }  #Taste: "text"
  when("HELP") { $CommandCode = 138; }  #Taste: "help"  
  default { $CommandCode = 998; }
}

=> Funktioniert, aber Performance?

Ich habe mal versucht ob ich eine Hash Table anlegen kann mit:
%ages = ("John", 43, "Paul", 25, "Marie", 22);
aber da meldet FHEM (wenn ich über das WI die datei speichern will):
Global symbol "%ages" requires explicit package name at ./FHEM/99_Utils.pm line 180.


Einen anderen Fehler hatte ich bisher nicht bemerkt (da ich die geänderte 99_Utils.pm immer per FTP hochgeladen habe)
Not enough arguments for main::GetHttpFile at ./FHEM/99_Utils.pm line 197, near "$CommandCode) "

Das ist diese Zeile:
fhem( GetHttpFile($receiverIP.$Site.$CommandCode) );
ABER der Befehl an sich funktioniert.
Hat da evtl auch noch einen Tipp parat - ist unschön, so kann ich es nicht ins WIKI stellen.


Danke & Grüße
Predi
FHEM auf Fritz!Box 7390
FS20 per CUL

Puschel74

Hallo,

auch wenn ich absolut keine Ahnung hab.

Hast du schonmal versucht vor das %ages ein my zu setzen?

Also so
my %ages = ("John", 43, "Paul", 25, "Marie", 22);

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Dietmar63

my davorsetzen und dein hash funktioniert
So wie Puschel es beschrieben hat.

das my sorgt dafür dass eine explizite Definition der Variable erstellt wird.
das my vor jeder erstmaligen Nutzung einer Variablen wird durch use strict; weiter oben erzwungen.

use strict; ist empfehlenswert, weil damit viele Schreibfehler vom Laufzeitsystem entdeckt werden.

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Predictor

OMG - kennt ihr das Gefühl wenn man sich ein Stück Holz aufs Hirn hauen könnte?

Wenn man es liest ist es eigentlich logisch - funktioniert => bastle dann mal meinen given-when um.


DANKE
FHEM auf Fritz!Box 7390
FS20 per CUL

Mike85

#19
Einen wunderschönen guten Abend,
ich versuche seit Tagen meine if / else Bedingung ans laufen zu bekommen, bekomme es aber irgendwie nicht hin.

Zur Erklärung, es soll je nach Jahreszeit ein Baum andersfarbig beleuchtet werden.

Mein Code sieht so aus:
*{sunset(-1800)} { if (value("Jahreszeit") eq "Frühling" ) {\
fhem("set HUE_HUEDevice1 on : hue 17994 : sat 254 : bri 254");;\
}\
elsif (value("Jahreszeit") eq "Sommer" ) {\
fhem("set HUE_HUEDevice1 on : hue 17994 : sat 254 : bri 254");;\
}\
elsif (value("Jahreszeit") eq "Herbst" ) {\
fhem("set HUE_HUEDevice1 on : hue 10923 : sat 254 : bri 254");;\
}\
elsif (value("Jahreszeit") eq "Winter" ) {\
fhem("set HUE_HUEDevice1 on : hue 10923 : sat 53 : bri 254");;\
}\
}


Das ganze ist als at angelegt und Jahreszeit ist ein DOIF das den Wert Herbst, Winter, Frühling und Sommer ausgibt. Das DOIF habe ich hier aus dem Forum kopiert und funktioniert auch.

Kann mir irgendjemand weiterhelfen?

TomLee

Zitat von: commandrefUm auf die Gerätestatus/Attribute zuzugreifen benutzen Sie bitte die folgenden Funktionen:
Value(<devicename>)
gibt den Status eines Gerätes zurück (entsprechend dem Ausdruck in Klammern, den Sie beim List-Befehl sehen).

Vermute hier liegt der Fehler.

Gruß

Thomas

Mike85

Oh man,

vielen Dank Thomas, das war es.

Manchmal sieht man den Wald vor lauter Bäumen nicht. :P

Otto123

Könnte man vielleicht im Ausführungsteil so einkürzen:
{ my $out=": hue 17994 : sat 254";;\
     $out=": hue 10923 : sat 254" if (Value("Jahreszeit") eq "Herbst" );;\
     $out=": hue 10923 : sat 53" if (Value("Jahreszeit") eq "Winter" );;\
     fhem("set HUE_HUEDevice1 on $out : bri 254");;\
}

Oder auch so
{ my $out;;\
     $out= (Value("Jahreszeit") eq "Herbst" )?": hue 10923 : sat 254":": hue 17994 : sat 254";;\
     $out= (Value("Jahreszeit") eq "Winter" )?": hue 10923 : sat 53" :": hue 17994 : sat 254";;\
     fhem("set HUE_HUEDevice1 on $out : bri 254");;\
}

Je nach dem was einem in ein paar Wochen logischer erscheint :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz