99_MyUtils und Zugriff auf Dummies

Begonnen von Bitschubser, 27 November 2016, 17:37:41

Vorheriges Thema - Nächstes Thema

Bitschubser

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
FHEM in VM auf Proxmox, Homematic über 2x HM-Lan, Homematic-IP über Raspimatic in VM auf Proxmox, SMA-Wechselrichter, Pushover, TTS, Shelly + Sonoff über MQTT

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bitschubser

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" );
   }
}
FHEM in VM auf Proxmox, Homematic über 2x HM-Lan, Homematic-IP über Raspimatic in VM auf Proxmox, SMA-Wechselrichter, Pushover, TTS, Shelly + Sonoff über MQTT

CoolTux


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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Icinger

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
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Bitschubser

Danke für die Hilfe...

wo wird denn erklärt wann ' oder " oder auch nix gesetzt wird?
FHEM in VM auf Proxmox, Homematic über 2x HM-Lan, Homematic-IP über Raspimatic in VM auf Proxmox, SMA-Wechselrichter, Pushover, TTS, Shelly + Sonoff über MQTT

CoolTux

Das gab es hier vor einiger Zeit von Betateilchen. Ausserdem findet man es in diversen Perl Dokumentationen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Tardar

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 :)

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Tardar

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net