FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gromeck am 05 September 2018, 12:41:55

Titel: Alias für ein Gerät
Beitrag von: gromeck am 05 September 2018, 12:41:55
Hallo FHEM-ler,

ich würde mich zwar nicht mehr als einen FHEM-Anfänger bezeichnen, aber da ich keine andere Rubrik gefunden habe, mache ich das Thema hier auf.

In habe in meiner FHEM-Konfiguration GTags mit Namen Token.GTag<nr>, deren Status mit dem PRESENCE-Modul geholt wird.

Wenn dann mal eine Batterie so langsam leer ist, dann möchte ich das jeweilige GTag gegen ein "freies" tauschen (das erledigen meine User).
Ich tausche dann an dem freigewordnen GTag dann die Batterie und lege es wieder bereit.
Ich hätte gerne alle GTags im System mit ihrer absoluten Nummer (die habe ich auch auf den GTag geklebt) und dann möchte ich aber so etwas wie ein "alias" mit der jeweiligen Funktion bzw. dem Usernamen auf das im Einsatz befindliche GTag setzen.

Leider gibt es in FHEM keine #defines (Macros) wie man sie aus C/C++ oder anderen Sprachen kennt, die den C Preprocessor verwenden. Es gibt in FHEM auch keine Strings, die man im globalen Kontext setzen kann, die dann in jedem Perl-Snippet an einem Trigger zur Verfügung stehen.

Hat dafür jemand vielleicht eine Lösung?

gromeck
Titel: Antw:Alias für ein Gerät
Beitrag von: r00t2 am 05 September 2018, 12:55:25
Meine Idee wäre: Benenne die Tag-Devices so, dass sie die "absoluten Nummern" im Devicenamen haben.
Und verwende das "alias" Attribut dafür, dass Du anwenderfreundliche Bezeichnungen (wie die Funktion oder den Usernamen) auf dem entsprechenden Device setzt. Siehe hier: https://fhem.de/commandref_DE.html#attributes
Titel: Antw:Alias für ein Gerät
Beitrag von: darkness am 05 September 2018, 14:07:26
Hallo,

ich glaube ich habe dein Prinzip noch nicht ganz verstanden  :-\

Ich habe auch die GTags im Einsatz zusammen mit lepresenced.
Dort arbeitest du doch mit der MAC-Adresse. Wenn der User den Tag tauscht, musst du doch nur die MAC-Adresse anpassen.
Oder, alternativ. Du legest für jeden Tag mittels Presnece ein device an und benennst diese entsprechende.
Da gibt es dann halt PRESENCE1-X für die User und PRESENCEY-Z  als Reserve.
Beim Wechsel eines Tags wird dann PRESENCE-Y zu PRESENCE-1 und umgekehrt.

Aber wäre es nicht einfacher, die Batterie zu tauschen?

Titel: Antw:Alias für ein Gerät
Beitrag von: gromeck am 05 September 2018, 14:53:48
Zitat von: r00t2 am 05 September 2018, 12:55:25
Meine Idee wäre: Benenne die Tag-Devices so, dass sie die "absoluten Nummern" im Devicenamen haben.
Ja, das habe ich getan.

Zitat von: r00t2 am 05 September 2018, 12:55:25
Und verwende das "alias" Attribut dafür, dass Du anwenderfreundliche Bezeichnungen (wie die Funktion oder den Usernamen) auf dem entsprechenden Device setzt. Siehe hier: https://fhem.de/commandref_DE.html#attributes
Das Attribut alias kann ich zwar setzen, aber es ist nicht gleichwertig zu dem Namen, da es z.B. in einem Trigger nicht funktioniert (genau dort bräuchte ich eben die Abstraktion, damit ich den Code eben nicht mehr anfassen muss).
Titel: Antw:Alias für ein Gerät
Beitrag von: gromeck am 05 September 2018, 15:03:58
Zitat von: darkness am 05 September 2018, 14:07:26
Hallo,
ich glaube ich habe dein Prinzip noch nicht ganz verstanden  :-\
Ich habe auch die GTags im Einsatz zusammen mit lepresenced.
Dort arbeitest du doch mit der MAC-Adresse. Wenn der User den Tag tauscht, musst du doch nur die MAC-Adresse anpassen.
Ja, genau, aber eine MAC-Adresse anzupassen ist eben fehleranfällig und ich würde deswegen ja gerne mit einem Mapping, Alias, Namen, ... etc. arbeiten.

Zitat von: darkness am 05 September 2018, 14:07:26
Oder, alternativ. Du legest für jeden Tag mittels Presnece ein device an und benennst diese entsprechende.
Da gibt es dann halt PRESENCE1-X für die User und PRESENCEY-Z  als Reserve.
Beim Wechsel eines Tags wird dann PRESENCE-Y zu PRESENCE-1 und umgekehrt.
Ja, genau so mache ich es jetzt, aber dann stimmt meine Nummeriereung der GTags (aufgeklebt auf dem GTag) nicht mehr.
Dann müsste ich auf dem GTag die letzten Stellen der MAC-Adresse aufdrucken, damit könnte ich leben.

Zitat von: darkness am 05 September 2018, 14:07:26
Aber wäre es nicht einfacher, die Batterie zu tauschen?
Wie schon geschrieben: die Batterie kann ich wechseln, aber nicht meine User -- so groß ist die Akzeptanz dann doch nicht.
Ich bin ja auch nicht immer da, wenn ein "leeres" GTag mal wieder den Weg ins Haus findet.
Titel: Antw:Alias für ein Gerät
Beitrag von: Beta-User am 05 September 2018, 15:05:09
Aber vom Devicenamen ist es doch einen Katzensprung zum alias, oder?

Ungeprüft in Perl innerhalb eines notify etwa so:
my $devName =AttrVal($DEVICE, "alias", $DEVICE);
Ab da dann eben weiter mit $devName.

Gruß, Beta-User
Titel: Antw:Alias für ein Gerät
Beitrag von: gromeck am 05 September 2018, 16:56:43
Zitat von: Beta-User am 05 September 2018, 15:05:09
Aber vom Devicenamen ist es doch einen Katzensprung zum alias, oder?

Ungeprüft in Perl innerhalb eines notify etwa so:
my $devName =AttrVal($DEVICE, "alias", $DEVICE);
Ab da dann eben weiter mit $devName.

Gruß, Beta-User
Ja das würde innerhalb Perl funktionieren, aber z.B. nicht in der Eventmaske eines Triggers.

Ich mach es mal konkreter: unsere Putzfrau hat an unserm/ihrem Schlüssel ein GTag. Solange sie da ist, meckert das Haus z.B. nicht über offenstehende Fenster und Türen (während der Heizperiode, ist aber nur ein Beispiel). D.h. das Haus verhält sich ein bisschen anders, wenn sie da ist.
Um auf ihren Presence-Status zu reagieren gibt es einen Trigger:
define Trigger.Anwesenheit.Putzfrau notify Token.GTag.Putzfrau:(absent|present) {
  :
}
Titel: Antw:Alias für ein Gerät
Beitrag von: Beta-User am 05 September 2018, 18:21:21
OK, so herum funktioniert es nicht.

Lösen kann man das (min.) auf zwei Arten:
a) Aus einem einzigen notify, das _auf alle Tags_ reagiert,  eine myUtils-Funktion aufrufen und an diese dann die Info wer und den Status übergeben, also "myGtagReaction($devName,$EVENT)". In der kannst du dann die unterschiedlichen Fälle abarbeiten.
b) Oder du nutzt es nur, um z.B. den Status einer "Person" (dummy?) auf an- oder abwesend zu setzen und triggerst dann auf dieses 2. Ereignis, das du ja damit auslöst.

Spontan gefällt mir Variante a) besser, weil man weniger Devices braucht, und Perl-Code ist m.E. leichter zu pflegen als einzelne notify für jede Person. Ist aber Geschmackssache.

Hoffe, das hilft weiter,
Beta-User
Titel: Antw:Alias für ein Gerät
Beitrag von: gromeck am 05 September 2018, 18:56:10
Ja, das wären Optionen. Mir gefällt die Kombination a) + b), d.h. ein notify für alle GTags in denen ich dann das Alias auslese und damit den Status der "Rolle" setze. Dann brauche ich kein myUtils (die paar Zeilen sind generisch und kann ich direkt unter den trigger klemmen. Und mit dem Alias alleine kann ich die Rolle setzen.

Danke!