FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Bitschubser am 27 November 2016, 17:37:41

Titel: 99_MyUtils und Zugriff auf Dummies
Beitrag von: Bitschubser am 27 November 2016, 17:37:41
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
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: CoolTux am 27 November 2016, 17:41:06
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.
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: Bitschubser am 27 November 2016, 18:00:27
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" );
   }
}
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: CoolTux am 27 November 2016, 18:12:43

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.
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: Icinger am 27 November 2016, 18:14:58
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
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: Bitschubser am 27 November 2016, 18:23:40
Danke für die Hilfe...

wo wird denn erklärt wann ' oder " oder auch nix gesetzt wird?
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: CoolTux am 27 November 2016, 18:34:02
Das gab es hier vor einiger Zeit von Betateilchen. Ausserdem findet man es in diversen Perl Dokumentationen.
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: Tardar am 24 Juni 2018, 01:11:51
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 :)
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag 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
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: Tardar am 24 Juni 2018, 03:14:05
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
Titel: Antw:99_MyUtils und Zugriff auf Dummies
Beitrag von: CoolTux am 24 Juni 2018, 07:51:48
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.