[gelöst:] list .* DEF auswerten

Begonnen von JensS, 09 Dezember 2014, 22:33:00

Vorheriges Thema - Nächstes Thema

JensS

Hallo,

ich habe mir in Devical einen Kalender angelegt, mit welchem ich die Schaltzeiten meiner Steckdosen organisiere.
Das klappt auch gut, da der jeweilige Termin den des entsprechenden Devices hat. Der Übersichtlichkeit wegen habe ich den Steckdosen Aliase verpasst. Nun bin ich dabei Betreff des Termins mit der Liste der Namen und Aliase zu vergleichen.
Hier meine Frage: Wie bekomme ich die Ausgabe von list .* DEF in einen mehrdimensionalen Array oder einen Hash? Ich habe zwar schon wenige Erfahrungen mit PHP aber Perl ist leider absolutes Neuland... Gibt es eine Möglichkeit, wie var_dump um den Typ der Variablen, den Aufbau sowie den Inhalt auszugeben?

Gruß Jens

Lösung:
Ein existierendes Script zur Kalenderabfrage habe ich um einige Zeilen erweitert, so dass ich als Termin den Namen oder den Alias des Geräts eintrage. Ich bin noch unsicher in Perl und wäre dankbar, wenn ihr Korrektur lesen würdet. Generell funktionierte der Test.
sub Kalenderstart ($) {
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_fhem summary $uid");
my @ret;
my @etDev = devspec2array("NAME=.*");
foreach my $d (@etDev){
next unless $d;
my $Geraetename= $defs{$d}{NAME};
my $Alias=AttrVal($Geraetename,"alias",0);
my $Geraet;
if($Kalendertext eq $Geraetename or $Kalendertext eq $Alias){
                                $Geraet=$Geraetename;
fhem("set $Geraet on");
};
}
};
}
sub Kalenderende ($) {
my ($Ereignis) = @_;
my @Ereignisarray = split(/.*:\s/,$Ereignis);
my $Ereignisteil1 = $Ereignisarray[1];
my @uids=split(/;/,$Ereignisteil1);
foreach my $uid (@uids) {
my $Kalendertext = fhem("get Kalender_fhem summary $uid");
my @ret;
my @etDev = devspec2array("NAME=.*");
foreach my $d (@etDev){
next unless $d;
my $Geraetename= $defs{$d}{NAME};
my $Alias=AttrVal($Geraetename,"alias",0);
my $Geraet;
if($Kalendertext eq $Geraetename or $Kalendertext eq $Alias){
                                $Geraet=$Geraetename;
fhem("set $Geraet off");
};
}
};
}
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

KernSani

Hi Jens,

ich bin mir nicht ganz sicher, ob ich die Frage komplett verstanden habe, aber könnte dir http://fhem.de/commandref_DE.html#JsonList2 die gewünschten Infos liefern?

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

JensS

Hallo Oli,

danke für deine Antwort. JasonList2 sieht gut aus. Nun muss ich das Ergebnis in einen mehrdimensionalen Array umwandeln...

Name, Alias
Steckdose1, Heckendrippler
Steckdose2, Rasensprenger
Steckdose3, (kein Alias benannt - also "")
Steckdose4, Bachlauf

Anschließend will ich beim Kalendersuchlauf den Betreff des jeweiligen Termins(z.B. Rasensprenger oder Steckdose2) mit dem obigen Array vergleichen, um zu prüfen, ob es einen Rasensprenger bzw. Steckdose2 gibt und damit den Aktor schalten (set Steckdose2 on).

Was ich nun suche ist eine Methode, eben diesen speziellen Array zu erzeugen.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Puschel74

Hallo,

Zitatich habe mir in Devical einen Kalender angelegt, mit welchem ich die Schaltzeiten meiner Steckdosen organisiere.
Ginge das nicht evtl. mit einem Google-Kalender einfacher?
Der liese sich bereits so ganz ohne Verrenkungen in FHEM abfragen und die jeweilige Steckdose ein- und ausschalten (und noch bischen mehr).

Oder spricht generell etwas gegen die Verwendung eines Google-Kalender?

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.

betateilchen

Zitat von: dirigent am 09 Dezember 2014, 22:33:00
Wie bekomme ich die Ausgabe von list .* DEF in einen mehrdimensionalen Array oder einen Hash?

Du denkst viel zu kompliziert, denn Du brauchst weder ein "list irgendwas" ausführen noch über die Erzeugung eines Hash nachdenken. Der gesuchte Hash steht als %defs fhem-weit zur Verfügung. Du musst ihn einfach nur verwenden - aber bitte keine Änderungen selbst darin vornehmen!

Wie man am besten mit Hashes in perl arbeitet, sagt Dir google.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JensS

@betateilchen:
DANKE! %defs ist genau das, was ich brauche.

@Puschel74
Die Termine in Devical lassen sich genauso auswerten wie im Google-Kalender und da ich die Termine vor Ort brauche, muss fhem nicht ins weltweite Web. Zumal ein DSL-Verbindungsabbruch meine Steuerung lamlegen würde.

Vielen Dank nochmals an alle!

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Icinger

ZitatZumal ein DSL-Verbindungsabbruch meine Steuerung lamlegen würde.

Ein Stromausfall auch  ;D
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

JensS

#7
 ;D Beim Stromausfall schließen sich die Magnetventile automatisch - wie durch Zauberei - und es gibt keine Überschwemmung.
Ich hab da auch noch ne kleine USV - sicher ist sicher.
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

JensS

Hallo, hoffentlich bekomme ich eine 2?!  ??? Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.