Hallo,
ich überarbeite grade meine Rollosteuerung und will sie in die 99_MyUtils auslagern.
Mit dem Aufruf der Funktion
{UpdateRollo("WZ_RolloFest","dmy_WZ_RolloFest_Alarm")}
werden die verschiedenen zu beachtenden Geräte und Dummies übergeben.
Zum üben und testen verwende ich zur Zeit nur $Rollo (Welches Rollo gesteuert wird) und $Alarm (Ob "Alarm" gesetzt wurde)
Mein Problem nun: Ich übergebe den Namen des Dummies in die Funktion, brauche dann aber den Wert.
Wenn ich den Namen des Dummies in der Funktion "hart code" erhalte ich mit
my $Alarmstate = ReadingsVal('dmy_WZ_RolloFest_Alarm', 'state', "")
den Wert in der Variablen und kann damit im if-Teil weiterarbeiten.
my $Alarmstate = ReadingsVal('$Alarm', 'state', "")
funktioniert leider nicht. Wie teile ich mit, dass $Alarm eine Variable mit dem Inhalt ist dmy_WZ_RolloFest_Alarm
Liebe Grüße
Jens
Du übergibst doch Deiner Funktion den Namen als Wert. Warum liest du ihn dann nicht in der Funktion ein.
my ($rollo,$rolloFestAlarm = @_;
Wäre aber nicht schlecht wenn Du mal den ganzen Code postest.
Hallo CoolTux,
ja ich übergebe den Namen als Wert
Es gibt einen Dummy mit Namen "dmy_WZ_RolloFest"_Alarm der den Wert "on" oder "off" hat
Aber ich will ja prüfen, ob der Alarm aktiv ist.
hier der Code aus der MyUtils
sub UpdateRollo($$){
#WelchesRollo,Alarmstatus,Einbruchstatus,Fensteröffnungsstatus,VerdunklungNotwendig,Timeset
# my ($Rollo,$Alarm,$Einbruch,$Fenster,$Verdunklung,$Timeset) = @_;
my ($Rollo,$Alarm) = @_;
my $Alarmstate = 0;
# my $Alarmstate = ReadingsVal('dmy_WZ_RolloFest_Alarm', 'state', ""); #so kann auf den Wert des Dummies zugegriffen werden
my $Alarmstate = Value('$Alarm', 'state', "") ); #so nicht
if ($Alarmstate eq "off") {
fhem ( "set $Rollo 100" );
}
}
my $Alarmstate = Value("$Alarm");
Bitte Codetags verwenden. Der Funktion Value wird nur ein Wert übergeben. Im Gegensatz zur Funktion ReadingsVal.
Und schaue Dir mal an was es heißt wenn Du die Variable in ' ' oder in " " setzt. Gibt da einen feinen Unterschied.
my $Alarmstate = Value('$Alarm', 'state', "") );
Die Hochkommas bei $Alarm haben da gar nix zu suchen 8)
Mit
my $Alarmstate = ReadingsVal($Alarm, 'state', undef) );
klapts dann auch ^^
lg, Stefan
Danke für die Hilfe...
wo wird denn erklärt wann ' oder " oder auch nix gesetzt wird?
Das gab es hier vor einiger Zeit von Betateilchen. Ausserdem findet man es in diversen Perl Dokumentationen.
Hey,
kann mir evtl. jemand beantworten, wo es hier zu einem Syntax Error in der myUtils kommt ? :)
my $einFensterOffen = (([XMI_158d0002091ead:state] eq "open") or ([XMI_158d00020b5d5e:state] eq "open") or ([XMI_158d0002092032:state] eq "open") or ([XMI_158d00020b5d5d:state] eq "open"));
my $alleFensterGeschlossen = (([XMI_158d0002091ead:state] eq "close") && ([XMI_158d00020b5d5e:state] eq "close") && ([XMI_158d0002092032:state] eq "close") && ([XMI_158d00020b5d5d:state] eq "close"));
Ich möchte je ein true zurückgeben, wenn der Wert der der Variable zugeordneten Bedingung zutrifft :)
Warum hängst du dich an so einen alten (und nicht wirklich passenden) Thread dran (statt einen neuen, eigenen, passenden zu eröffnen)!?
Und dann mal in perl Dokumentationen bzgl. "anlegen" von Variablen schauen...
Also entweder Variable "anlegen" oder eine Bedingung prüfen (mit Variablen)...
Bedingungen beim "Anlegen" von Variablen wird eher nicht funktionieren...
Kurz, da nur mobil grad...
Gruß, Joachim
Zitat von: MadMax-FHEM am 24 Juni 2018, 01:59:57
Warum hängst du dich an so einen alten (und nicht wirklich passenden) Thread dran (statt einen neuen, eigenen, passenden zu eröffnen)!?
Und dann mal in perl Dokumentationen bzgl. "anlegen" von Variablen schauen...
Also entweder Variable "anlegen" oder eine Bedingung prüfen (mit Variablen)...
Bedingungen beim "Anlegen" von Variablen wird eher nicht funktionieren...
Kurz, da nur mobil grad...
Gruß, Joachim
Hey, joa.
Das ist mir klar - hab nur massive Probleme in Bedinungen oder beim Deklarieren von Variablen (state vom Tür- / Fenster Kontakt).
Bekomme da keinen Zugriff auf das Device und die Daten hin.
Häng schon den 3. Tag an der Heizungssteuerung - das macht mich kirre.
Sorry
Du bringst Perl und DOIF durcheinander.
Wenn Du eine myUtils machst arbeitest Du komplett mit Perl. Du programmierst. Damit Du es leichter hast an FHEM interne Daten zu kommen, gibt es dafür fertige Funktionen.
ReadingsVal() zum Beispiel um Werte aus Readings zu lesen. Hierzu findest du was in der Commandref und hier im Forum.
Was Dein eigentliches Anliegen an geht, zu wissen ob Fenster auf oder alle zu sind. Lege Dir ein structure Devices an. Das zeigt on wenn nur eines von vielen Fenstern auf ist und off wenn alle zu sind. Dann musst du nur ein Devices abfragen.