Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

Luigi

Hallo Elektrolurch,
bist du inzwischen mit den Anrufen über FB_CallMonitor und readingsGroup weitergekommen? Kannst du mir zeigen, wie du das realisiert hast?

Gruß
Luigi

Zitat von: Elektrolurch am 08 September 2013, 18:08:04
Hallo Nico,

ich fand das geradezu genial, mit dem Perlcode in ValueFormat kannst Du ja jetzt beliebige Variablen mischen.
Habe gestern begonnen, über den FB_CallMonitor die entgangenen Anrufe zu sammeln und die letzten fünf rollierenden in eine ReadingsGroup zu packen.
Bin mitten drin, da ja auch noch zu berücksichtigen ist, dass mehrere Anrufegleichzeitig eingehen können.... tricky... krieg ich aber schon hin. Und dann geht das über ValueFormat so aus:

08.09.2013 0123456 (Mustermann, Heinrich) entgangen bzw. Dauer: 0:30

Gruß

Elektrolurch

Elektrolurch

#91
Hallo Luigi,

ja, ist fertig und funktioniert mit "allen Schikanen", so z.B. wird auch auf dem FS20 SIG2 für bekannte Anrufer gemeldet, wer da anruft.
Die readingsGroup sieht so aus:


define meineFB FB_CALLMONITOR 192.168.1.254
attr meineFB local-area-code 089
attr meineFB reverse-search all
attr meineFB userReadings eing0 eing1 eing2 eing3 eing4 A0 A1 A2 A3 A4 B0 B1 B2 B3 B4 C0 C1 C2 C3 C4 D0 D1 D2 D3 D4 E0 E1 E2 E3 E4
attr meineFB verbose 0

define FileLog_meineFB FileLog ./log/meineFB-%Y.log meineFB
attr FileLog_meineFB logtype text



define Call_Notify notify meineFB:.* { \
  TelefonMonitor ($EVENT);; \
}
# end Call_Notify



################################
# Neue Version:



define Anrufliste readingsGroup meineFB:A0,B0,C0,D0,E0 meineFB:A1,B1,C1,D1,E1 meineFB:A2,B2,C2,D2,E2 meineFB:A3,B3,C3,D3,E3 meineFB:A4,B4,C4,D4,E4
attr Anrufliste mapping {'meineFB.A0' => '1.', 'meineFB.A1' => '2.', 'meineFB.A2' => '3.', 'meineFB.A3' => '4.', 'meineFB.A4' => '5.'}
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon

Alles, was mit dem Telefon zu tun hat, habe ich in ein eigenes Modul gesteckt.
siehe Anhang.

Gruß

Elektrolurch

configDB und Windows befreite Zone!

Hans Franz

Hallo,
ich denke, du solltest deine persönlichen Daten aus der angehängten Datei entfernen ;).

Gruss
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Luigi

Hallo Elektrolurch,

vielen Dank. Mir fehlt jetzt noch die Funktion EventZeit().

Gruß
Luigi

Elektrolurch

Hallo,

ganz trivial: Die Zeit wird nicht in der fhem-Reihenfolge, sondern für "human Interface" dargestellt.

sub EventZeit()
{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
return sprintf ("%2d:%02d:%02d %2d.%02d.%4d", $hour,$min,$sec,$mday,($mon+1),($year+1900));
} # end sub EventZeit
###################


Ansonsten macht der Telefonmonitor max. 6 Einträge für eingehende und ausgehende Anrufe. (-> und <-). Geht der eingehnde Anruf auf den AB, dann steht stattdessen in der ersten Spalte "AB". Das ganze ist für eine Mehrnummern-Anlage ausgelegt, d.h. während ein Gespräch geführt wird, kann ein zweiters, drittes usw. auch ein- oder ausgehen und die Zuordnung sollte stimmen. Daher der etwas komplizierte Automat, der die CallID (intern von Fritzbox bereitgestellt) auswertet und erst nach Abschluß des  Gespräches die Daten in die readingsGroup schreibt (mit Namen und Nummern und Gesprächsdauer).
Zusätzlich kann man über den Hook eine Telefonaktion ausführen lassen... z.B. auf Basis einer bestimmten Anrufernummer und der gewählten Zielnummer etwas tun.
Die alten Anrufe werden immer um eins nach hinten geschoben, so dass die aktuellen immer oben stehen.

Gruß


Elektrolurch

configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

Du hast mal in einem Beitrag geschrieben, dass man auch ein notify an eine readingsGroup hängen kann.
Ich möchte den Inhalt einer Liste löschen und habe dazu

attr Meine_rg webCmd Alle löschen

definiert.
Unter der ReadingsGroup erscheint nun auch der link "Alle löschen".
Dann ein notify dazu:
define Meine_rg_notify notify  Meine_rg:.* {if ($EVENT eq "Alle löschen") {LöscheAlarmmelder();;}}

Klick ich auf "Alle löschen", so erhalte ich: no SET implented
Hm..  Ist schon klar, dasses kein set für readingsGroup gibt, aber wie muss ich die webCmd hinschreiben, damit ich das Event "Alle löschen" bekomme?

Noch eine Frage:
Ich hatte mir ja mal gewünscht, dass man das defStateIcon und einen Text (z.B. mit einer mod. Zeitangabe -> Licht ein seit xx.yy.zz..) realisieren kann.
Leider geht ja beides gleichzeitig momentan nicht. Sobald das defStateIcon definiert ist, wird valueFormat ignoriert.
Alternativ ging noch ein ValueTimeStampFormat, wenn man notime 0 setzt und das zusammen mit dem Ikon erscheinen würde.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

so wie du das möchtest geht das nicht. ein webCmd führt das kommando in dem device aus bei dem es gesetzt ist. readingsGroup hat keine set kommandos.

als workaround fällt mir nur ein ein dummy mit passendem devStateIcon zu definieren und von diesem dann state als icon mit in die readings group rein zu nehmen. wenn es kein passendes icon gibt wird statt dessen der text von state angezeigt. der müsste auch klickbar sein.

das mit dem icon und state gleichzeitig hab ich noch im auge und auch das mit dem timestampFormat. es funktioniert nur noch nicht ganz wie ich es möchte.

in der version die eingecheckt ist gibt es aber schon die möglichkeit in der liste der readings ein <TEXT> anzugeben. der text zwischen den <> wird 1:1 angezeigt. du kannst zwischen die <> auch einen perl ausdruck in {} setzen. der kennt $DEVICE und muss einen string zurück geben. das ganze funktioniert aber nur für mehrere readings in einer zeile. versuch mal ob dir das hilft. also etwas in der art:define rg readingsGroup xyz:state,<{ReadingsTimestamp($DEVICE, "state", 0)}>

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

wozu kann man dann bei einer readingsGroup das Attribut webCmd nutzen?
Dann habe ich nicht verstanden, was im notify, welches an einer rg hängt, erscheint?
Das webCmd erscheint ja unter der Liste, damit so einige Funktionen auszulösen, die das Erscheinungsbild der Liste ändern, wäre eine feine Sache.
Und wenn man die rg um ein "dummy-set" erweitert, dass nur die webCmds in die Event-Kette von fhem leitet.....?

Gruß


Elektrolurch
configDB und Windows befreite Zone!

justme1968

da attribut webCmd ist global und das gibt es für jedes device. ich kann es nicht für die readingsGroup abschalten.

ich denke mal drüber nach...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

weiß ich, dass das Global ist...
Da ich jetzt mit zei dummys, dynamisch gesetzten webCmds und zwei an die dummys angehängten notifys mir eine Programmierung aller meiner fht-Thermostate bzg. Tag- und Nachtemperatur und den Schaltzeiten für die einzelnen Tage / Werktage / Wochenende gebaut habe, bin ich so richtig auf den Geschmack gekommen. Wenn sowas auch für die readingsGoup funktionieren würde....

..Du hattest damit im übrigen Recht, wenn man einmal mit fhem und perl anfängt... :-)

Gruß
Elektrolurch
configDB und Windows befreite Zone!

justme1968

ich denke über das wenCmd nach... was ich nicht verstehe ist wo du es siehst. eigentlich sollte es noch nicht mal zu sehen sein. ist es bei mir auch nicht.

hast du mal über den workaround mit dem dumm nachgedacht?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

bei mir sieht das so aus (untere Zeile der rg):

2. OG Bewegungsmelder 17:40:29 9.11.2013
Alle löschen

"Alle löschen" ist anklickbar und dann kommt die Meldung mit dem nicht implementierten set für rg.
Mit dem Ikon ginge wahrscheinlich schon, aber mit dem anklickbaren Links unterhalb der Tabelle fände ich das schon von der Optik schöner. Ich denke, wenn man da mehrere Knöpfe hinmachen wollte, wäre das mit den webCmds auch einfacher.

Mit dem Text <> in den REadings-Definitionen werde ich mal ausprobieren. Mal sehen, ob ich in der Tabelle über "Alle eingeschalteten Lampen" nicht nur das Ikon zum Ausschalten, sondern auch die Zeitangabe, seit wann die Lampe / das Gerät an ist, hinbekomme.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

justme1968

das ist komisch... ich sehe ein gesetes webCmd nicht. ist das der screenreader der das macht oder ist es auch wirklich zu sehen ?

die zeit müsstest du mit etwas wie dem beispiel oben bekommen.

wenn du ein dumm verwendest für dessen state es kein icon gibt sollte der text anklickbar sein. auch ohne bildchen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Hallo Andre,

ich hänge mal einen Screenshot an. Ich dachte, der Link "Alle löschen" wäre unterhalb der rg, er steht aber wohl rechts daneben. Das ist natürlich nicht schön, aber wenn man mit dem Mauszeiger drüber fährt, dann kommt auch das Handsymbol für den Link. Du müsstest das also anklicken können. Wenn man mit der Pfeiltaste "dwon" durch die rg navigiert, dass geht dann zeilenweise von Spalte zu Spalte, dann steht der Link direkt hinter dem letzten Element der Tabelle.
Gruß
Elektrolurch
configDB und Windows befreite Zone!

justme1968

jetzt sehe ich den grund...

du hast die readingsGroup in eine gruppe gesteckt. dann taucht webCmd plötzlich auf. das macht fhem aber automatisch. da habe ich keinen einfluss drauf. selbst wenn ich die sets z.b. mit einem setList wie bei einem dummy einbaue würde die liste immer noch rechts auftauchen und nicht darunter.

den vorschlag mit dem dummy von oben kannst du so formatieren das er als letztes in der gruppe erscheint und vermutlich auch farblich so absetzen das es besser ausschaut.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968