FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: docb am 16 Juli 2013, 12:45:37

Titel: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 12:45:37
Hallo Freunde,
ich würde gerne mit devspec2array alle meine Fensterkontakte abfragen. Allerdings finde ich nirgends eine Funktionsbeschreibung für den Befehl. Ich habe schon einiges ausprobiert, bzw. Teile aus der Wiki angepasst, allerdings ohne Erfolg.
Hier meine Funktion (gekürzt):
sub CheckWindows() {
    foreach my $dev (devspec2array("type=ShutterContact")) {
   #... noch mehr Abfragen
$num = $num +1;
  }
  FB_mail('email@email.com','Test',$status."-".$text."-".$num);
  }

Das liefert allerdings 0 (nix) zurück - es wird offensichtlich nichts ins Array geladen.
Was klappt ist die Abfrage mit
devspec2array("TYPE=MAX")
Aber das liefert mir ja alle 22 MAX-Komponenten und ich brauche ja nur die Fensterkontakte. Ich habe es noch mit
devspec2array("DEF=ShutterContact 062546") versucht, das klappt. Aber das gibt mir ja nur den einen Shutter zurück. Mit Wildcard * funktioniert es leider nicht ("DEF=ShutterContact*").
 
Was/wie kann ich denn mit devspec2array genau abfragen?
Viele Grüße
doc
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 12:55:05
Hi nochmal, ich konnte das Testen nicht lassen und habe festgestellt, dass man sogar das Attribut comment auslesen kann. Sogar mit Wildcard. Wenn ich jetzt überall "Test" oder "Batterie;Test" als comment bei den Fensterkontakten eintrage, frägt er sie richtig ab:
foreach my $dev (devspec2array("comment=/*Test/*")) {

Aber deswegen verstehe ich immer noch nicht, warum er z.B. "type=ShutterContact" nicht mag. Also wäre ich immer noch an der grundsätzlichen Erklärung interessiert.
Viele Grüße
Doc
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: UliM am 16 Juli 2013, 16:57:25
...weil type ne TYPE
devspec2array("TYPE=ShutterContact")
sollte gehen.
=8-)
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 17:00:23
Tja, da ist das Problem...
TYPE ist bei dem device leider was anderes wie type...

Internals:
   CFGFN      ./BB/max.conf
   DEF        ShutterContact 062546
   IODev      cm
   LASTInputDev cm
   MSGCNT     23
   NAME       BA_Fenster
   NR         673
   NTFY_TRIGGERTIME 2013-07-16 16:31:32
   STATE      Offen
   TYPE       MAX
   addr       062546
   backend    cm
   cm_MSGCNT  23
   cm_RAWMSG  Z0B8006300625461234990012
   cm_TIME    2013-07-16 16:31:32
   rferror    0
   type       ShutterContact


8-7
greetz
doc
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: UliM am 16 Juli 2013, 17:08:32
DEF=ShutterContact.*  
(Punkt vor dem Stern)
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 17:10:47
Ah.. genau. Danke, da war was mit den Leerzeichen. Aber zum Verständnis - theoretisch kann ich alles was mit beim Device angezeigt wird abfragen (Internals, Readings, Attribute)? Richtig?
Grüßle
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: UliM am 16 Juli 2013, 17:24:09
Hi,
perl regexp -> * steht für "kein oder beliebig viele", ist also nur ein quantifier. Qualifier ist . (beliebiges Zeichen).  Also .* = beliebiges Zeichen, davon 0 oder beliebig viele ( .+ = beliebiges Zeichen, davon beliebig viele aber mindestens eins ).

Bei bla* bin ich nicht sicher ob es heisst "bla beliebig oft" -> bla, blabla, blablabla, nicht blab; oder "bl und beliebig viele a" (bla, blaa, blaaaa, nicht blb). Kannste mal nachschauen, zB http://www.troubleshooters.com/codecorn/littperl/perlreg.htm (//www.troubleshooters.com/codecorn/littperl/perlreg.htm)


Hab gerade mal per Kommandozeile mit list probiert. Mir scheint, dass Internals und Attribute gehen, readings nicht.

=8-)
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 17:41:39
äh um ja - VIELEN DANK! Ich verstehe.
zum Großteil ;-)
sehr gut!
grüßle
doc
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: AK-868 am 16 Juli 2013, 19:33:05
Schreibt er dann alle Offenen in die Mail?

Oder jedesmal eine Mail?

Ich hab es so gemacht. Bei jedem Event wird eine Mail geschrieben.


define notify_Alarmanlage_open notify sens.*:open {\
 fhem ("set Geschlossen open");;\
 if (ReadingsVal("Anwesend", "state", "") eq "Nein")\
 {\
 FB_mail ('gibsnicht@@gibsnicht.com','Status geöffnet','Statusänderung @ ist offen!!');;\
 }\
}
Titel: Aw: devspec2array - Funktionsbeschreibung
Beitrag von: docb am 16 Juli 2013, 19:45:10
Also so wie ich es gelöst habe, schreibt er alle in eine Mail. Das nütze ich wenn ich rausgehe - beim "Abmelden" bekomme ich quasi eine Benachrichtigung, wenn ich vergessen habe, ein Fenster zu schließen. In der Mail stehen dann alle drin, die noch offen sind. Ähnlich habe ich das mit der Abfrage des Batteriestatus gelöst. Da es dich zu interessieren scheint - hier mein Quälcode:


sub CheckWindows() {
 my $datumzeit = sub{sprintf '%04d-%02d-%02d %02d:%02d', $_[5]+1900, $_[4]+1, $_[3], $_[2], $_[1]}->(localtime);
 my $status = "ZU";
 my $text ="";
    foreach my $dev (devspec2array("comment=/*Fenster/*")) {
    my $tmp = ReadingsVal($dev, "state", "nicht auslesbar");
if ($tmp eq "opened") {
$text = $text."Gerät: ".$dev." - Status:".$tmp."\n";
$status = "OFFEN";
}
  }
   if ($status eq "OFFEN") {
    FritzBoxCallnr('**9');
    FB_mail('bla@blu.b','Fensterkontrolle',$datumzeit." Uhr:\n".$text);
   }
 }