Hallo @all. Wie ihr euch sicher denken könnt bin ich relativ neu was fhem angeht. Muss sagen ich habe es zum laufen bekommen und auch das eine oder andere aus der Wiki umgesetzt bekommen. Immer streng nach Anleitung halt.
Ich habe den Call_Monitor installiert und möchte jetzt eine Liste (vielleicht eine readingsGroup?) wo ich sehen kann wer angerufen hat (Anruf in Abwesenheit) und ob jemand auf den AB gesprochen hat. Ich habe mehrmals gelesen das das einige von euch bereits umgesetzt haben.
Da mir die Erfahrung fehlt und ich es durch Versuch macht klug nicht hinbekommen habe, wäre es super wenn mir jemand unter die Arme greifen könnte.
mfg
Mirco
Um mich etwas genauer aus zu drücken... ich habe unter FB_CALLMONITOT - Readings z.B. missed_call was auch richtig gefüttert wird. Wie kann ich dieses Ereignis in einem Feld im Raum Telefon mit der Bezeichnung "Verpasst" anzeigen?
Grüße
Mirco
Suchdienst fiedel meldet sich zur Stelle... (http://forum.fhem.de/index.php/topic,14425.msg106380.html#msg106380) ;)
Guten Morgen Fiedel, das hatte ich über die Suche auch schon gefunden. Habe versucht es für meine Umgebung anzupassen. Leider bin ich wohl noch nicht soweit zu verstehen was davon gebraucht wird und was nicht. Ich habe gehofft das man die Ergebnisse in eine z.B. Dummy über einen "für Anfänger" tauglichen Weg darstellen kann.
Grüße
Mirco
Da wagst du dich als Anfänger ja schon mal an ganz kapitale Hirsche... ;)
Schreib doch mal was du alles schon wie eingerichtet hast und was du nun nicht verstehst. Ich habe z.B. den Code von diesem Post / Thread einfach bei mir reinkopiert, etwas angepasst und es lief so gut wie auf Anhieb.
Gruß
Frank
Gerne. fhem.cfg define Fritz_Box FB_CALLMONITOR 192.168.143.1
attr Fritz_Box local-area-code 05237
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
# attr Fritz_Box icon icoWelt
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
# attr FileLog_Fritz_Box room Telefon
und heraus kommt das aus dem Anhang.
Zitat von: fiedel am 26 Januar 2014, 20:34:23
Suchdienst fiedel meldet sich zur Stelle... (http://forum.fhem.de/index.php/topic,14425.msg106380.html#msg106380) ;)
Ich habe das ganze auch gleich mal getestet! Ich bekommen allerdings eine Fehlermeldung. Hier die Meldung aus dem Log:
2014.01.27 19:58:53 3: Call_Notify return value: Undefined subroutine &main::EventZeit called at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 154.
2014.01.27 19:59:29 3: Call_Notify return value: Undefined subroutine &main::sig2_break called at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 120.
ZitatIch habe das ganze auch gleich mal getestet! Ich bekommen allerdings eine Fehlermeldung.
Die Infos die man braucht, damit es funktioniert, sind in dem Thread etwas "verteilt". Man muss da mehrmals lesen und genau aufpassen. ;) Ich stelle mal mein funktionierendes Beispiel hier rein, ich habe ja selbst noch nicht komplett verstanden, wie und warum es funktioniert. ;D Das mit den farbigen Pfeilen je nach In/Out habe ich noch nicht hinbekommen. Vielleicht schafft ihr das ja? Würde mich dann über die Lösung freuen.
In die CFG:
# Logfile der Anrufe (Fritzbox)
define FileLog_Callmon FileLog /fhem/log/Callmon-%Y.log Callmon
attr FileLog_Callmon logtype text
# Callmonitor mit scrollender Anruferliste:
define Callmon FB_CALLMONITOR 192.168.0.10:1012
attr Callmon icon phone_call
attr Callmon local-area-code 030
attr Callmon reverse-search all
attr Callmon reverse-search-cache 1
attr Callmon reverse-search-phonebook-file /fhem/fb_phonebook.xml
attr Callmon 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 Callmon verbose 0
# Telefonevents für Anzeige abfangen:
define Func_TelMon_N notify Callmon:.* { \
TelefonMonitor ($EVENT);; \
}
# Anzeige der Anrufe generieren:
define Anrufliste readingsGroup Callmon:A0,B0,C0,D0,E0 Callmon:A1,B1,C1,D1,E1 Callmon:A2,B2,C2,D2,E2 Callmon:A3,B3,C3,D3,E3 Callmon:A4,B4,C4,D4,E4
attr Anrufliste mapping {'Callmon.A0' => '1.', 'Callmon.A1' => '2.', 'Callmon.A2' => '3.', 'Callmon.A3' => '4.', 'Callmon.A4' => '5.'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room 0_Überblick
# attr Anrufliste style style="font-size:20px"
# Style ( noch machen): Pfeile und/oder Nummern farbig je nach in/out:
# attr Anrufliste valueStyle {($READING eq "A0" && $A[$callID] = "<-")?'style="color:red"':'style="color:green"'}
Viel Erfolg!
Frank
Guten Abend Frank,
habe alles nach meinem Wissen angepasst. Die Readingsgroup wird als Feld (siehe Anhang) angezeigt.
Natürlich nicht so wie ich es gerne hätte. Die Events werden nach wie vor richtig angezeigt und in die richtigen Attr. geschrieben (ebenfalls siehe Anhang). Wäre nett wenn Du mal drüber schauen würdest.
Mirco
Ha, ;) in der Utils- Datei musste auch noch dein "Fritz_Box" engesetzt werden, anstatt meinem "Callmon..."
Guten Abend. Danke Frank für das bereits angepasste Script. Hatte gesucht und nichts mehr gefunden. Dachte mir "was meint er?"
Da kam mir der Gedanke...er hat meine Arbeit gemacht. :D
Leider bekomme ich nichts angezeigt. Das Log sieht gut aus 2014.01.29 17:56:10 0: Server shutdown
2014.01.29 17:56:13 1: Including fhem.cfg
2014.01.29 17:56:15 3: telnetPort: port 7072 opened
2014.01.29 17:56:16 3: WEB: port 8083 opened
2014.01.29 17:56:16 3: WEBphone: port 8084 opened
2014.01.29 17:56:16 3: WEBtablet: port 8085 opened
2014.01.29 17:56:16 2: eventTypes: loaded 590 events from ./log/eventTypes.txt
2014.01.29 17:56:17 3: Opening CUL_0 device /dev/ttyACM0
2014.01.29 17:56:17 3: Setting CUL_0 baudrate to 38400
2014.01.29 17:56:17 3: CUL_0 device opened
2014.01.29 17:56:17 3: CUL_0: Possible commands: BCFiAZEGMRTVWXefmltux
2014.01.29 17:56:17 2: Switched CUL_0 rfmode to HomeMatic
2014.01.29 17:56:21 3: Opening Fritz_Box device 192.168.143.1:1012
2014.01.29 17:56:21 3: Fritz_Box device opened
2014.01.29 17:56:21 2: FB_CALLMONITOR: Fritz_Box found FritzBox phonebook /var/flash/phonebook
2014.01.29 17:56:21 2: FB_CALLMONITOR: Fritz_Box read 4 contacts from FritzBox phonebook
2014.01.29 17:56:21 3: FB_CALLMONITOR: loading cache file ./log/Fritz_Box-%Y.log Fritz_Box
2014.01.29 17:56:21 2: FB_CALLMONITOR: Fritz_Box read 4 contacts from Cache
2014.01.29 17:56:21 1: Including ./log/fhem.save
2014.01.29 17:56:22 1: usb create starting
2014.01.29 17:56:23 1: usb create end
2014.01.29 17:56:23 2: SecurityCheck: WEB,WEBphone,WEBtablet has no basicAuth attribute. Running with root privileges. Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2014.01.29 17:56:23 0: Server started with 49 defined entities (version $Id: fhem.pl 4709 2014-01-21 18:00:07Z rudolfkoenig $, os linux, user root, pid 16042)
2014.01.29 17:56:26 3: Device Heizung.Bad added to ActionDetector with 000:10 time
2014.01.29 17:56:26 3: Device Heizung.Kueche added to ActionDetector with 000:10 time
2014.01.29 17:58:35 2: CUL_HM set Heizung.Bad_ClimRT_tr getConfig
Im Eventmonitor sieht auch alles gut aus. Hast Du eine Idee?
Grüße
Mirco
Hallo Frank,
danke für deine Zusammenfassung! Ich habe alles reinkopiert und nur das nötigste angepasst. Allerdings zeigt er bei mir auch nichts in der readingGroup an.
Hier Mal das was im Log steht:
2014.01.29 19:09:31 1: readingsUpdate(,A4,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,B4,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,C4,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,D4,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,E4,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,A3,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,B3,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,C3,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,D3,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,E3,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,A2,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,B2,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,C2,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,D2,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,E2,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,A1,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,B1,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,C1,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,D1,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,E1,-) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,A0,-> ) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,B0,19:09:26 29.01.2014) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,C0,unknown) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,D0,01635424437) missed to call readingsBeginUpdate first.
2014.01.29 19:09:31 1: readingsUpdate(,E0, 0:00) missed to call readingsBeginUpdate first.
Und hier meine cfg:
# Logfile der Anrufe (Fritzbox)
define FileLog_Callmon FileLog ./log/Callmon-%Y.log Callmon
attr FileLog_Callmon logtype text
# Callmonitor mit scrollender Anruferliste:
define Callmon FB_CALLMONITOR 192.168.6.1:1012
attr Callmon icon phone_call
attr Callmon local-area-code 0965
attr Callmon reverse-search all
attr Callmon reverse-search-cache 1
attr Callmon reverse-search-phonebook-file /fhem/phonebook.xml
attr Callmon 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 Callmon verbose 0
# Telefonevents für Anzeige abfangen:
define Func_TelMon_N notify Callmon:.* { \
TelefonMonitor ($EVENT);; \
}
# Anzeige der Anrufe generieren:
define Anrufliste readingsGroup Callmon:A0,B0,C0,D0,E0 Callmon:A1,B1,C1,D1,E1 Callmon:A2,B2,C2,D2,E2 Callmon:A3,B3,C3,D3,E3 Callmon:A4,B4,C4,D4,E4
attr Anrufliste mapping {'Callmon.A0' => '1.', 'Callmon.A1' => '2.', 'Callmon.A2' => '3.', 'Callmon.A3' => '4.', 'Callmon.A4' => '5.'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room 0_Überblick
# attr Anrufliste style style="font-size:20px"
# Style ( noch machen): Pfeile und/oder Nummern farbig je nach in/out:
# attr Anrufliste valueStyle {($READING eq "A0" && $A[$callID] = "<-")?'style="color:red"':'style="color:green"'}
Hm, ist schon wieder ne weile her, dass ich das eingerichtet habe. Was könnte das noch sein?
@coolice:
- mal ein Update machen
- auch immer gerne:
attr global userattr devStateIcon devStateStyle sumERROR sumStatus webCmd
@holzwurm83
- guck mal in der zweiten Utils- Datei (mein letzter Post vor diesem): Dort muss alles was "Fritz_Box" heißt, umbenannt werden in
"Callmon". Also so wie der Callmonitor heißt.
Gruß
Frank
Tja.leider kein Erfolg. Wenn es wenigstens eine Fehlermeldung gäbe. :(
So, wie es aussieht geht es jetzt. :)
Jetzt muss ich nur noch die Darstellung hier und da anpassen.
@ coclice: hast du schon mal einen Anruf getätigt und dann geschaut ob es geht?
Zitat von: holzwurm83 am 29 Januar 2014, 21:25:07
@ coclice: hast du schon mal einen Anruf getätigt und dann geschaut ob es geht?
Natürlich. In Events wird auch alles richtig angezeigt. Anruf kommt rein, anrufende Nummer wird gezeigt, Rückwärtssuche einfach alles.
Nur die Readingsgroup will nicht.
Was mir noch einfällt:
- die "99_myUtilsTelefon.pm" hast du in den FHEM- Ordner kopiert (wird im Menü "Edit Files" auch angezeigt)
- danach ein "shutdown restart" gemacht?
Wenn dein Callmonitor geht, kann es ja nur noch eine Kleinigkeit sein... ;)
Ist im FHEM Ordner. Wahrscheinlich ist es wirklich nur eine Kleinigkeit. Aber welche ;-) in Events läuft alles akurat ab.
Gesendet von meinem iPhone mit Tapatalk
Oh man. Probiert, probiert, update hier update da und ... Schlimmer als vorher. Missing ack sind ja bekannt. Naja. Fhem komplett neu aufgesetzt und die readingsgroup läuft leider immer noch nicht.
Gesendet von meinem iPhone mit Tapatalk
Also wenn die 99_my... Datei richtig vorhanden ist und alle Namen richtig umgeschrieben wurden, könnte es noch an der CFG liegen.
Ich habe das ganze gestern auch eingebaut und es hatte nicht funktioniert, bis ich die Felher in der CFG fand, wo noch Callmon stand, statt Anrufmonitor, so wie mein Device definiert ist (siehe rot):
# Telefonevents für Anzeige abfangen:
define Func_TelMon_N notify Anrufmonitor:.* { \
TelefonMonitor ($EVENT);; \
}
# Anzeige der Anrufe generieren:
define Anrufliste readingsGroup Anrufmonitor:A0,B0,C0,D0,E0 Anrufmonitor:A1,B1,C1,D1,E1 Anrufmonitor:A2,B2,C2,D2,E2 Anrufmonitor:A3,B3,C3,D3,E3 Anrufmonitor:A4,B4,C4,D4,E4
attr Anrufliste mapping {'Anrufmonitor.A0' => '1.', 'Anrufmonitor.A1' => '2.', 'Anrufmonitor.A2' => '3.', 'Anrufmonitor.A3' => '4.', 'Anrufmonitor.A4' => '5.'}
Hallo Mitch,
war oder ist komplett angepasst gewesen. :'(
Ich werde jetzt alles löschen. Dat bekomm i net hin.
Lass den Kopf nicht hängen! ;)
Wenn ich Zeit finde, bau ich dir mal eine Minimalkonfiguration. Stell mal deine aktuelle Konfig noch mal hier rein.
Auf der Fritzbox könnte es noch daran liegen, dass die IP "localhost" oder "172.0.0.1" lauten muss, aber dein Monitor läuft ja.
Das muss doch gehen... :)
Gruß
Frank
Sehr gerne ;D
99_myUtilsTelefon
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$)
{
my $adress = $_[0].'@sms.kundenserver.de';
my $body = $_[1];
Log (3,"SendSMS: $adress - $body");
FB_mail($adress,"",$body);
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Fritz_Box = $defs{"Fritz_Box"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "-> ";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "<-";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Fritz_Box);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Fritz_Box"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Fritz_Box",$j.($i-1),"-");
readingsBulkUpdate($Fritz_Box,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Fritz_Box,"A0",$A[$callID]);
readingsBulkUpdate($Fritz_Box,"B0",$B[$callID]);
readingsBulkUpdate($Fritz_Box,"C0",$C[$callID]);
readingsBulkUpdate($Fritz_Box,"D0",$D[$callID]);
readingsBulkUpdate($Fritz_Box,"E0",$E[$callID]);
readingsEndUpdate($Fritz_Box, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
1;
fhm.cfg
define Fritz_Box FB_CALLMONITOR 192.168.143.1
attr Fritz_Box local-area-code 05237
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room FileLogs
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# end Call_Notify
Hallo,
kann mir Jemand sagen wie man die Funktion "TelefonAktion" verwendet ?
Danke,
Oli
Hi Mirco,
also wenn es jetzt nicht geht... :o ;)
Auf einem frisch installierten FHEM, Updates gemacht, nichts weiter geändert:
99_myUtilsTelefon.pm:
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$)
{
my $adress = $_[0].'@sms.kundenserver.de';
my $body = $_[1];
Log (3,"SendSMS: $adress - $body");
FB_mail($adress,"",$body);
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Fritz_Box = $defs{"Fritz_Box"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "-> ";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "<-";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Fritz_Box);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Fritz_Box"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Fritz_Box",$j.($i-1),"-");
readingsBulkUpdate($Fritz_Box,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Fritz_Box,"A0",$A[$callID]);
readingsBulkUpdate($Fritz_Box,"B0",$B[$callID]);
readingsBulkUpdate($Fritz_Box,"C0",$C[$callID]);
readingsBulkUpdate($Fritz_Box,"D0",$D[$callID]);
readingsBulkUpdate($Fritz_Box,"E0",$E[$callID]);
readingsEndUpdate($Fritz_Box, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
1;
fhem.cfg (komplett):
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global sendStatistics onUpdate
attr global statefile ./log/fhem.save
attr global uniqueID ./FHEM/FhemUtils/uniqueID
attr global updateInBackground 1
attr global verbose 3
define telnetPort telnet 7072 global
define WEB FHEMWEB 8083 global
attr WEB stylesheetPrefix dark
attr WEB refresh 30
define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix darksmallscreen
attr WEBphone refresh 30
define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix darktouchpad
attr WEBtablet refresh 30
# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
# define autocreate autocreate
# attr autocreate filelog ./log/%NAME-%Y.log
define eventTypes eventTypes ./log/eventTypes.txt
# Disable this to avoid looking for new USB devices on startup
# define initialUsbCheck notify global:INITIALIZED usb create
#Test für coolice:
# Callmonitor mit rollierender Anruferliste:
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
define Fritz_Box FB_CALLMONITOR 192.168.1.1:1012
attr Fritz_Box local-area-code 05237
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
# Anrufliste generieren:
#########################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste mapping {'Fritz_Box.A0' => '1.', 'Fritz_Box.A1' => '2.', 'Fritz_Box.A2' => '3.', 'Fritz_Box.A3' => '4.', 'Fritz_Box.A4' => '5.'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
Zu beachten wäre noch:
- zur optimalen Darstellung den Style "dark" verwenden
- Änderung der IP der Fritzbox auf eigene Adresse, Port aber so lassen
- mein Beispiel kommt von einem Linuxrechner, ggf. gibt es Abweichungen bei den Pfaden oder der Angabe der IP- Adresse,
wenn FHEM direkt auf der FB läuft -> das checken, falls es noch Probleme gibt
So, nu bin ich ja gespannt... ;D
Gruß
Frank
Hallo,
bin ich eigentlich der Einzige der bei dieser Zeile einen Fehler bekommt ?
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
Macht das zweite ; $ab; überhaupt Sinn ? Da wird doch überhaupt nichts ausgeführt, oder ?
Grüße,
Oli
@ Frank ... ;D ;D ;D ;D
Es läuft. Merci. Mal sehen ob ich es jetzt nach meinen Vorstellungen angepasst bekomme.
Man(n) wird sehen.
Schönes Wochenende
Mirco
Na siehste, sag ich doch! ;D Ebenfalls schönes WE!
Zur Anpassung steht noch mehr im readingsGroup- Thread weiter hinten. Der Tipp von Holzwurm mit den Icons ist auch schick. Alles ums Layout was statisch ist (Größe, Farben usw.) geht mit der CSS- Datei. Dazu kannst du mich ggf. auch noch ausquetschen. :-\ ;)
@ Oli:
Keiner weiß was du meinst, weil du hier nur Bruchstücken reinwirfst! Ich weiß es aber. 8)
Diese Meldungen habe ich auch, konnte mich aber darum noch nicht kümmern. Du kannst alles was du nicht brauchst aus der Utils- Datei rauswerfen. Dann werden die Meldungen schon mal weniger. Ggf. versuche ich demnächst mal rauszukriegen, was da schief läuft.
Gruß
Frank
geht dieses alles nur wenn Fhem auf der Fritzbox läuft..? Ich habe Fhem auf dem Raspberry...
Zitatgeht dieses alles nur wenn Fhem auf der Fritzbox läuft..?
Nein, das ist ja das schöne. Durch die Eingabe von IP- Adr. und Port der FB in der Def. des Callmonitor kann man von jedem beliebigen Netzwerkrechner aus auf die FB zugreifen.
Ich versuche mich auch gerade an diesem Callmonitor, und eingehende und abgehende Anrufe werden auch mit Klarnamen registriert. So falsch kann ich dann doch gar nicht sein! Nur im Fenster 'Anrufliste' tut sich nichts.
Im Logfile steht nur überall:
missed to call readingsBeginUpdate first.
Wo liegt mein Fehler?
Mal Updates machen und wenn es dann nicht geht, meine Minimalkonfig von ein paar Posts weiter oben nehmen.
Ich habe die Anrufliste bei mir nach dieser Anleitung installiert und sie läuft fast super.
Leider habe ich festgestellt, dass ein Anruf heute nicht angezeigt wird.
ich erhielt einen Anruf mit unterdrückter nummer, den ich ncht annahm. Es klingelte, bis der AB anging. dann legte der Anrufer offenbar auf, ohne etwas zu sagen.
Der Anruf wurde im LOG gespeichert.
2014-02-14_11:54:07 Callmon event: ring
2014-02-14_11:54:07 Callmon external_number: unknown
2014-02-14_11:54:07 Callmon external_name: unknown
2014-02-14_11:54:07 Callmon internal_number: 88888888
2014-02-14_11:54:07 Callmon external_connection: ISDN
2014-02-14_11:54:07 Callmon call_id: 0
2014-02-14_11:54:33 Callmon event: connect
2014-02-14_11:54:33 Callmon internal_connection: Answering_Machine_1
2014-02-14_11:54:33 Callmon call_id: 0
Andere Anrufe werden korrekt angezeigt, ich weiss aber nicht, ob noch ander Varianten kommen können, wo es nicht geht.
Hier mal ein korrekter Log:
2014-02-14_10:42:00 Callmon event: call
2014-02-14_10:42:00 Callmon external_number: 11111111
2014-02-14_10:42:00 Callmon external_name: aaaadfadsasdfasdf
2014-02-14_10:42:00 Callmon internal_number: 22222222
2014-02-14_10:42:00 Callmon external_connection: ISDN
2014-02-14_10:42:00 Callmon internal_connection: DECT_3
2014-02-14_10:42:00 Callmon call_id: 1
2014-02-14_10:42:08 Callmon event: connect
2014-02-14_10:42:08 Callmon internal_connection: DECT_3
2014-02-14_10:42:08 Callmon call_id: 1
2014-02-14_10:46:20 Callmon event: disconnect
2014-02-14_10:46:20 Callmon call_duration: 256
2014-02-14_10:46:20 Callmon call_id: 1
Säntliche Rufnummern habe ich natürlich geändert.
Hat jemand eine Idee, was ich tun kann?
Hab nochmal alles gecheckt, und tatsächlich war da doch ein altes file geladen. Blöd so etwas. Trotzdem zeigt er in der Anrufliste immer noch nichts an.
Im Logfile ist nach wie vor dieser Fehler:
2014.02.14 15:55:13 3: Fritz_Box device opened
2014.02.14 15:55:13 2: FB_CALLMONITOR: Fritz_Box found FritzBox phonebook /var/flash/phonebook
2014.02.14 15:55:13 2: FB_CALLMONITOR: Fritz_Box read 83 contacts from FritzBox phonebook
2014.02.14 15:55:13 3: FB_CALLMONITOR: loading cache file ./log/Fritz_Box-%Y.log Fritz_Box
2014.02.14 15:55:13 3: FB_CALLMONITOR: could not open cache file
Hat jemand einen Rat?
Ich denke, dass vielleicht dein Logfile falsch definiert ist. Esistiert denn die Datei?
Hier mal meine Version:
define FileLog_Callmon FileLog ./log/Callmon-%Y.log Callmon
attr FileLog_Callmon logtype text
Wird schon wieder sehr unübersichtlich. Daher mal hier eine komplette, funktionierende Konfiguration:
# Logfile der Anrufe (Fritzbox)
# Callmonitor mit scrollender Anruferliste:
define Callmon FB_CALLMONITOR 192.168.178.1:1012
attr Callmon icon phone_call
attr Callmon local-area-code 030
attr Callmon reverse-search all
attr Callmon reverse-search-cache 1
attr Callmon reverse-search-phonebook-file /fhem/fb_phonebook.xml
attr Callmon 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 Callmon verbose 0
# Telefonevents für Anzeige abfangen:
define Func_TelMon_N notify Callmon:.* { \
TelefonMonitor ($EVENT);; \
}
# Anzeige der Anrufe generieren:
define Anrufliste readingsGroup Callmon:A0,B0,C0,D0,E0 Callmon:A1,B1,C1,D1,E1 Callmon:A2,B2,C2,D2,E2 Callmon:A3,B3,C3,D3,E3 Callmon:A4,B4,C4,D4,E4
attr Anrufliste group Anrufe
attr Anrufliste mapping {'Callmon.A0' => '1.', 'Callmon.A1' => '2.', 'Callmon.A2' => '3.', 'Callmon.A3' => '4.', 'Callmon.A4' => '5.'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room 0_Überblick
# attr Anrufliste style style="font-size:20px"
# Style ( noch machen): Pfeile und/oder Nummern farbig je nach in/out:
# attr Anrufliste valueStyle {($READING eq "A0" && $A[$callID] = "<-")?'style="color:red"':'style="color:green"'}
define FileLog_Callmon FileLog ./log/Callmon-%Y.log Callmon
attr FileLog_Callmon logtype text
define rgAnrufe readingsGroup Anrufliste A1,B1,C1,D1
Und die 99_myUtilsTelefon,pm
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$)
{
my $adress = $_[0].'@sms.kundenserver.de';
my $body = $_[1];
Log (3,"SendSMS: $adress - $body");
FB_mail($adress,"",$body);
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Callmon = $defs{"Callmon"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "-> ";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "<-";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Callmon);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Callmon"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Callmon",$j.($i-1),"-");
readingsBulkUpdate($Callmon,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Callmon,"A0",$A[$callID]);
readingsBulkUpdate($Callmon,"B0",$B[$callID]);
readingsBulkUpdate($Callmon,"C0",$C[$callID]);
readingsBulkUpdate($Callmon,"D0",$D[$callID]);
readingsBulkUpdate($Callmon,"E0",$E[$callID]);
readingsEndUpdate($Callmon, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
1;
endlich mal was auf Anheb hinbekommen, :)
gerade mal ne halbe Stunde obwohl ich dafür den Nachmittag reserviert hatte, 8)
dank der guten Anleitung hier. :D
verstehe zwar noch nicht gas die 99util ...
da steht was von sms, hab schon eine Vorahnung was da geht..
was ist mit email Benachrichtigung, hab d mal an anderer Stelle was gelesen..
macht sich super im Dashboard, mal sehen was meine Frau dazu meint
(http://telefonliste.jpg)
kann mir jemand sagen warum meine Fritzbox in dem Room Telefon unter "FB_CALLMONITOR Fritz_Box disconnected" anzeigt.
Ich arbeite mit dem RPI und habe die Fritzbox IP eingetragen Port ist der default 1012
Call_Notify ist active die Anrufliste leer
Meine Code ist praktisch der hier aus dem Thread weiter oben ich habe aber anstatt Callmon überall Fritz_Box drin siehe Code
99_Telefon Modul ist 1:1 übernommen
define Fritz_Box FB_CALLMONITOR 10.0.0.1:1012
attr Fritz_Box local-area-code 05131
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
# Anrufliste generieren:
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste mapping {'Fritz_Box.A0' => '1.', 'Fritz_Box.A1' => '2.', 'Fritz_Box.A2' => '3.', 'Fritz_Box.A3' => '4.', 'Fritz_Box.A4' => '5.'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
########################################################################
##
## Log von der Fritzbox
##
#########################################################################
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y-%m.log Fritz_Box
attr FileLog_Fritz_Box group Logfile
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Logs
@ moonsorrox:
hast Du den Monitor mit #96*5* (am Telefon) aktiviert?
@ Invers: Danke - habe alles neu aufgesetzt und erhalte meine alte Fehlermeldung nicht mehr.
Aber eine Anruferliste erhalte ich leider immer noch nicht. Anrufer sehe ich nur, wenn ich im CallMonitor unter 'Readings' nachschaue. Irgendwas funkt dazwischen.
Zitat von: Absolute Beginner am 14 Februar 2014, 17:44:50
@ moonsorrox:
hast Du den Monitor mit #96*5* (am Telefon) aktiviert?
Oha sorry, echt das habe ich nirgends gelesen, vielen Dank das war es :D
die beiden Kommandos kann man schön im Fritzbox Telefonbuch ablegen damit man es nicht vergisst
hat jemand Idee für Anrufbeantworter
was ist mit Fax (nur so am Rande)
Zitat von: Absolute Beginner am 14 Februar 2014, 17:48:52
Aber eine Anruferliste erhalte ich leider immer noch nicht.
ich leider auch nicht...!
Äh ich meinte das ich alles erhalte, aber immer wird bei mir unknown und kein Name angezeigt, obwohl ich die xml Datei von der Fritzbox nach fhem kopiert habe
Zitat von: moonsorrox am 14 Februar 2014, 17:53:07
Oha sorry, echt das habe ich nirgends gelesen, vielen Dank das war es :D
Das gehört ja auch nicht zu fhem, sondern steht in der Anleitung der Fritzbox und an vielen andeen Stellen auch hier.
Telnet muss bei Bedarf ebenfalls angeschaltet werden.
Nächstesmal hast du es wieder vergessen, wnn du es nicht irgenwo hinschreibst, wo du es immer wieder siehst. ;D
so bis auf das er mir bei Anrufen (einmal nicht) unknown anzeigt habe ich das jetzt auch mit den Icons hinbekommen.
wie hast du das denn mit den Icons gemacht
über die weboberfläche habe ich keine Möglichkeit gefunden
Zitat von: Franz Tenbrock am 14 Februar 2014, 20:03:39
wie hast du das denn mit den Icons gemacht
über die weboberfläche habe ich keine Möglichkeit gefunden
Das hier wäre eine Möglichkeit http://forum.fhem.de/index.php/topic,14425.msg133120.html#msg133120
supi
klappt prima,
in der Anzeige erscheinen dann aber erst die neuen Anrufe mit dem Icon, also nicht erschrecken, Testanruf und dann sind sie da.
Klasse !
Hier die geänderte 99_myUtilsTelefon.pm die beötigt wird
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
##
#
#sub SendSMS ($$)
#{
# my $adress = $_[0].'@tenbrock.de';
# my $body = $_[1];
# Log (3,"SendSMS: $adress - $body");
# FB_mail($adress,"",$body);
# end sub SendSMS
#}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Fritz_Box = $defs{"Fritz_Box"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "in";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "out";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Fritz_Box);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Fritz_Box"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Fritz_Box",$j.($i-1),"-");
readingsBulkUpdate($Fritz_Box,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Fritz_Box,"A0",$A[$callID]);
readingsBulkUpdate($Fritz_Box,"B0",$B[$callID]);
readingsBulkUpdate($Fritz_Box,"C0",$C[$callID]);
readingsBulkUpdate($Fritz_Box,"D0",$D[$callID]);
readingsBulkUpdate($Fritz_Box,"E0",$E[$callID]);
readingsEndUpdate($Fritz_Box, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
und hier der Abschnitt der in die fhem.cfg muss
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
define Fritz_Box FB_CALLMONITOR 192.168.178.1:1012
attr Fritz_Box local-area-code 02309
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
# Anzeige mit Icons
attr Anrufliste valueIcon {'A0.out' => 'phone_call@lightgreen', 'A0.in' => 'phone_call@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out' => 'phone_call@lightgreen', 'A1.in' => 'phone_call@red', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A2.out' => 'phone_call@lightgreen', 'A2.in' => 'phone_call@red', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A3.out' => 'phone_call@lightgreen', 'A3.in' => 'phone_call@red', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A4.out' => 'phone_call@lightgreen', 'A4.in' => 'phone_call@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Zitat von: Franz Tenbrock am 14 Februar 2014, 20:03:39
wie hast du das denn mit den Icons gemacht
über die weboberfläche habe ich keine Möglichkeit gefunden
OK genau dieses Beispiel von Holzwurm83 habe ich als Besipiel genutzt nur die Icons ausgetauscht
Hallo zusammen,
hat einer von euch das mit dem AB getestet? Bei mir wir kein "AB" Reading geschrieben.
Hallo kann auch nicht!!! nach deiner Frage habe ich etwas verändert und bei mir klappt es.
Änder mal
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
$A[$callID] = "AB";
} # end if internal_connection
dann sollte es klappen.
Also einfügen
$A[$callID] = "AB";
Was $ab = "ab" bringt weiß ich auch nicht
irgendwas stimmt da noch nicht? Bekomme diese
Can't modify constant item in scalar assignment at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 180, near "red]"
syntax error at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 180, near "]$A"
syntax error at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 226, near "$callDuration = sprintf("%2d:%02d", ($arg/60"
Missing right curly or square bracket at /Users/mediaserver/fhem/FHEM/99_myUtilsTelefon.pm line 306, at end of line
Fehlermeldung.
Danke! Jetzt passt es! ;D
Hallo zusammen,
Ihr habt klasse Arbeit geleistet hier - ich werde auch demnächst den Callmonitor installieren... Ich habe aber noch fragen - ist es möglich den AB zu steuern? Ich möchte gerne bei Abwesenheit automatisch den AB anschalten. Stummschalten und per licht klingeln wenn der Nachwuchs schläft wäre auch toll...
Aber automatisch bei Abwesenheit ist doch völlig unnotig?
Wenn der AB so programmiert ist, dass er rangeht, wenn es z.B. 20 Sekunden klingelt, dann ist er doch bereits auf Automatik.
Programmierung macht da nur Sinn, wenn er sofort rangehen soll. Aber wirklich nötig sollte selbst das nicht sein, weil die Leute, welche nicht draufsprechen wollen, dies weder sofort, noch nach 20 Sekunden tun.
Solltest du da einen speziellen Anwendungsfall im Auge haben, dann sag mal.
Es geht um meine Büronummer - wenn ich nicht zuhause bin soll es einfach nicht klingeln und auf den AB springen.
Meine Partnerin wird es mir danken...
Ahhhhh. Verstehe. Gute Plan. :-)
Es gibt halt immer wieder Sachen, an die man einfach nicht denkt, und auf die man auch nicht kommt.
Aber ich denke, das kann man selber realisiern. Der AB lässt sich ja über Tastenkombinationen des Telefons steuern, also fast, wie eine Rufnummer. Man müsste nun diesen Anruf bei Abwesenheit auslösen.
Mist. Habe gerade gesucht. Es scheint keine Telefoncodes zur Steuerung des AB zu geben.
Trick gelesen:
In der Box eine Rufumleitung auf eine nicht existierende Nummer einrichten.
Diese Rufumleitung kann dann per Code geschalet werden.
Hallo, hier erst einmal wie es im Dashboard zB aussieht.
anhand der Zeiten des Anrufs kann man abschätzen ob wirklich eine Nachricht hinterlegt wurde
8)
(http://telefonliste1.jpg)
@invers
falls es bei dir klappt kanns du eine kurze Aneitung schreiben wie man das realisiert
Oh, ich habe gar nicht die Absicht, so etwas zu realisieren, da kein Bedarf besteht.
ich würde es trotzdem probieren, aber in Kürze geht mein Flieger. Bin in den Reisevorbereitungen.
Ich bitte nochmal um Hilfe, bin fast am Verzweifeln!
Bei mir taucht immer noch nicht eine Anrufliste auf. Die Anrufe werden aber alle geloggt.
2014.02.16 12:30:42 2: FB_CALLMONITOR: Fritz_Box found FritzBox phonebook /var/flash/phonebook
2014.02.16 12:30:42 2: FB_CALLMONITOR: Fritz_Box read 236 contacts from FritzBox phonebook
2014.02.16 12:30:42 3: FB_CALLMONITOR: loading cache file ./log/Fritz_Box-%Y.log Fritz_Box
2014.02.16 12:30:42 3: FB_CALLMONITOR: could not open cache file
2014.02.16 12:30:42 1: Including ./log/fhem.save
Die Datei Fritz_Box-2014.log wird auch angelegt.
Muß man die 99_myUtilsTelefon.pm noch gesondert aufrufen, wie? Habe jetzt wirklich alle Beispiele ausprobiert und FHEM selbst neu aufgesetzt -immer das gleiche Ergebnis.
Hallo,
Ich habe den Code aus Anwort 47 bei mir eingefügt, die Anruferliste bleibt aber leer, obwohl Anrufe geloggt wurden. Gleiches Problem wurde auch schon in Antwort 8 behandelt, aber ich komme als Anfänger da nicht weiter.
Meine CFG
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
define Fritz_Box FB_CALLMONITOR 192.168.178.1:1012
attr Fritz_Box local-area-code 06363
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-cache.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { TelefonMonitor ($EVENT);; }
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out' => 'phone_call@lightgreen', 'A0.in' => 'phone_call@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out' => 'phone_call@lightgreen', 'A1.in' => 'phone_call@red', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A2.out' => 'phone_call@lightgreen', 'A2.in' => 'phone_call@red', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A3.out' => 'phone_call@lightgreen', 'A3.in' => 'phone_call@red', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A4.out' => 'phone_call@lightgreen', 'A4.in' => 'phone_call@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
# Anzeige mit Icons
Meine 99_myUtil ist exakt die aus Antwort 47.
Wenn du mein Beispiel mit der kompletten CFG (http://forum.fhem.de/index.php/topic,19238.msg134520.html#msg134520) nimmst, ohne etwas umzubenennen, aber mit upgedatetem, frischem FHEM, sollte es gehen. Die Utils- Datei wird beim Start von FHEM autom. mit geladen. Von Hand geht das mit "reload 99_myUtilsTelefon.pm" in der Eingabezeile.
Zitat von: Absolute Beginner am 16 Februar 2014, 12:38:50
Muß man die 99_myUtilsTelefon.pm noch gesondert aufrufen, wie? Habe jetzt wirklich alle Beispiele ausprobiert und FHEM selbst neu aufgesetzt -immer das gleiche Ergebnis.
Hast du die nach dem einfügen oder ändern geladen?
Damit
reload 99_myUtilsTelefon.pm
kannst sie neu laden.
Endlich! Geschafft! Es funktioniert!
Nein, es war nicht das Einbinden der 99-myUtilsTelefon.pm. Ganz simpel and herzlichen Dank für den Tipp: Ich mußte einfach FHEM updaten!
Super Anwendung!
hast du es mit meiner cfg gemacht ? dann schreibe ich noch hinzu das ein update vorher gemacht wird. Wenn man was neues macht das hab ich mittlerweile auch gelernt , vor her ein update machen damit man mit der neuesten Version arbeitet
Klasses
wenn das mit dem automatischen anrufbeantworter dann noch klappt ( invers ) ist das einfach alles genial
Hallo Franz, ja ich habe Deine cfg genommen (bin übrigens aus PLZ:0231), aber die hat vor dem FHEM-update auch nicht funktioniert. Das Update ist wahrscheinlich Pflicht!
Komisch: in den Logs steht nach wie vor:
FB_CALLMONITOR: could not open cache file
So ganz in Ordnung ist das wohl immer noch nicht bei mir. Trotzdem Danke!
Ist denn das Logfile richtig definiert?
Irgendwo stan fehlerhaft der Pfad fhem/log/....... drinnen. Muss aber ./log/ bei der Definition heissen, da es sonst nicht geht.
Bei mir lautet dann der Name der erzeugten datei: Callmon-2014.log
Ich weiss jetzt nicht, ob das alles so richtig ist, aber bei mir klappt es seitdem. Nur die Icons nutze ich noch nicht, könnte also dazu nichts sagen.
die Definition sieht bei mir genauso wie bei den anderen aus:
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Unsorted
define Fritz_Box FB_CALLMONITOR 192.168.1.30:1012
attr Fritz_Box local-area-code 0231
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
Wie gesagt: es funktioniert, aber das Logfile meldet diesen Fehler.
Ja, so hab ich das auch. Kannst du noch gucken, ob die Datei im richtigen Ordner liegt und ob du auch Schreibrechte drauf hat. Ansonsten muss der Fehler woanders liegen.
Leider hast du keine Signatur. Falls du eine FB hast, könntest du diese mal neu starten (2 Minuten Stromlos machen und neu verbinden). Das wirkt immer dann Wunder, wenn der Fehler unauffindbar ist und sich nicht in fhem versteckt.
Zitat von: Absolute Beginner am 16 Februar 2014, 15:58:45
attr Fritz_Box local-area-code 0231
ich bin der Meinung das dies nicht der PLZ Bereich ist sondern hier muss der Vorwahlbereich rein
Natürlich die Vorwahl!
ich erwähne es nur, weil Absolute Beginners weiter oben beschrieben hat
ZitatHallo Franz, ja ich habe Deine cfg genommen (bin übrigens aus PLZ:0231),
;)
Von dem ganzen Herumprobieren wird man noch ganz krank im Kopf... natürlich meinte ich die Vorwahl, nicht die PLZ. Die Datei habe ich eben auf 0777 gesetzt und neu gebootet - brachte aber auch nichts. Werde morgen mal die Fritzbox abklemmen. Guten Abend an alle!
aus der Commandref http://fhem.de/commandref_DE.html#FB_CALLMONITOR (http://fhem.de/commandref_DE.html#FB_CALLMONITOR) sehe ich das es noch so einige Dinge zum probieren gibt, hat jemand davon etwas im Einsatz und vor allem weiß jemand wohin das kommt.
Ich habe nach wie vor das Problem das bei Anrufen nach dem Datum/Zeit immer "unknown" angezeigt wird. Evtl. kann man das mit einem Codeschnipsel verändern..!
du hast dein FHEM nicht auf einer Fritzbox?!,
hast aber eine ?!
bei mir läuft alles auf einer 7490
und klappt prima.
Der Raspi muss sich das interene Telefonbuch der Fritz holen ?!
Meine Fritzbox stromlos gemacht, Neustart, aber immer noch:
FB_CALLMONITOR: could not open cache file
Hat noch jemand eine Idee?
Das liegt wahrsch. an den Rechten. Die sind sowieso immer Schuld... ;D
Probier mal einen Trick: Du öffnest in der FHEM- Oberfläche (edit Files) eine beliebige Datei (Utils, css, gplot - ist völlig egal), löschst den gesamten Inhalt und speicherst sie unter anderen Namen (z.B. "TelmonCache.txt") ab. Jetzt hast du ein neues leeres Textfile mit FHEM- Berechtigungen. Dieses suchst du dir jetzt (liegt dort, wo die Originaldatei her war) und gibst es in deinem Attr. an. Dann sollte es gehen.
Edit: Hab das gleich mal zum Anlass genommen, es bei mir so einzurichten: Geht wie es soll!
ich hab auch immer das Theater mit den Rechten gehabt, also mach folgendes....
Geh mit putty drauf, logge dich ein und gib folgenden Befehl ein, dann sollten alle Rechte wieder stimmen..... Es ist ein leidiges Thema welches immer mal wieder auftritt
sudo chmod -R a+w /opt/fhem && sudo usermod -a -G tty pi && sudo usermod -a -G tty fhem
habe den Befehl hier aus dem Forum mal bekommen und habe seitdem keine Probleme mehr mit den Rechten, immer mal wieder monatlich eingeben alles ist OK
Danke Euch beiden für die Unterstützung. Nach Methode 1 finde ich die leere Datei nicht wieder, und nach Methode 2 nach Einloggen in Putty und Eingabe des Commandos kommt die Ausgabe 'sudo: not found'
Damit kann ich nichts anfangen. Bin leider - wie der Name schon sagt - Anfänger und froh, überhaupt mit Putty etc. halbwegs umgehen zu können.
Liegt es daran, dass ich FHEM als root eingerichtet habe?
probier mal ohne sudo
Zitat von: Franz Tenbrock am 17 Februar 2014, 08:58:58
Der Raspi muss sich das interene Telefonbuch der Fritz holen ?!
wenn du mich meinst ja ich habe das Telefon importiert, von der FB zum Raspi und auch das Verzeichnis geändert...! Danke für den Hinweis...
Da muss glaub ich was anderes noch geändert werden, bin nur noch nicht dahinter gekommen...!
ZitatNach Methode 1 finde ich die leere Datei nicht wieder
Wenn du mit Putty auf der box bist, kannst du ja mal durch die Verzeichnisse stöbern (z.B. "cd var") und dich dann darin umsehen ("ls").
Wenn du im Forum mal suchst, wie die FHEM- Pfade auf der Box heißen, findest du auf diese Art die Datei.
Ich nutze lieber den Midn. Commander ("apt-get install mc"), aber das wird auf der FB wohl nicht gehen. Ich finde sowieso dass FHEM auf der FB nicht unbedingt was für "Rookies" ist. ;D Da hat man mit nem Raspi mehr Möglickeiten zu probieren und zu lernen.
chmod -R a+w /var/media/ftp/fhem && usermod -a -G tty pi && usermod -a -G tty fhem
gibt dann die Fehlerausgabe
usermod: not found
Ich dachte, gerade weil die Fritzbox 24/7 an ist sei sie sinnvoller. Einen Raspi habe ich hier auch noch herumliegen.
Zitat von: Absolute Beginner am 17 Februar 2014, 12:30:11
chmod -R a+w /var/media/ftp/fhem && usermod -a -G tty pi && usermod -a -G tty fhem
gibt dann die Fehlerausgabe
usermod: not found
Ich dachte, gerade weil die Fritzbox 24/7 an ist sei sie sinnvoller. Einen Raspi habe ich hier auch noch herumliegen.
dann geht das wohl so auf der Fritze nicht...! Bin nun auch nicht der Freak...!
Evtl. installierst dir fhem auf dem Pi, so kannst du dir deine FB nicht zerschießen, ist immer etwas sicherer... Der RPI verbraucht bei mir 3W also nicht die Welt und die Fritze hat ihre liebe Ruh ;)
Mit Putty bin ich nun auf das angelegte File gestossen und habe entsprechend in der fhem.cfg geändert. Was passiert:
2014.02.17 12:43:45 3: FB_CALLMONITOR: loading cache file ./FHEM/telmoncache.txt
2014.02.17 12:43:45 2: FB_CALLMONITOR: Fritz_Box read no contacts from Cache
Ist das alles blöd!
ergänze mal dein Profil
Fritzbox Modell zB
bei mir lief das Ganze mehr oder weniger schnell probemlos.
Kannst du denn über die Fritte selbst auf das Telefonbuch zugreifen
siehst du in der Übersicht der Fritzbox Oberfläche denn die Telefonnummern und den Namen
Habe gerade folgendes gesehen,
ich habe von einem Autohaus die Telefonnummer die ich vorher noch nie gewählt hatte im Internet rausgesucht und dann dort angerufen
und was sehe ich gerade im Dashboard wo alles schön aufgelistet ist
passend zu der Telefonnummer der passende Teilnehmer, da hat die Kiste imHintergrund
mal eben ne Rückwärtssuche gemacht
8)
Eigentlich funktioniert alles bei mir. Es fällt nur die Fehlermeldung in den Logs auf. Das FB-Telefonbuch ist auch eingebunden; eine Rückwärtssuche aus dem Internet wäre auch fein - wo müßte man welche URL ergänzen?
Hallo, mit der cfg die ich benutze ist das wohl schon alles implementiert, ich habe jedenfalls ncihts daran geändert :-=)
das einzige was ich selber gemacht habe, mit Anleitung aus dem Forum hier warne die Icons.
Da ich mich manchmal auch schwer tue den ganzen thread abzusuchen habe ich beides was man braucht einfach mit hochgeladen.
Warum klappt das Telefonbuch jetzt?
Zitat2014.02.17 12:43:45 3: FB_CALLMONITOR: loading cache file ./FHEM/telmoncache.txt
2014.02.17 12:43:45 2: FB_CALLMONITOR: Fritz_Box read no contacts from Cache
Ist das alles blöd!
Hast doch alles richtig gemacht! In dem File sammeln sich doch erst nach und nach Einträge an. Alles gut so!!!
Aber die Datei ist und bleibt 0 Bytes groß, egal wie viel ich telefoniere...
Dort werden ja nur Daten abgelegt, wenn du mit jemandem telefonierst, der nicht in deiner ebenfalls eingerichteten lokalen Telefonliste (Fritzbox- Export) steht. Bei mir sieht das genau so aus. Beobachte es mal länger.
Also folgendes ist heute nach einem Update passiert, mein FHEM startet nicht mehr, der FB_Callmonitor war bei dem Update dabei.
Was habe ich gemacht damit es wieder startet...!
ich habe folgendes eingegeben da ich festgestellt habe das "FHEM not running" war
sudo /etc/init.d/fhem start
als Fehlermeldung kommt folgendes:
Useless use of a variable in void context at ./FHEM/99_myUtilsTelefon.pm line 185, <$fh> line 5.
Undefined subroutine &main::FB_CALLMONITOR_DoInit called at FHEM/DevIo.pm line 259, <> line 16.
muss ich jetzt erst einmal suchen, evtl. weiß jemand warum dies passiert..!!
per Putty und mit dem FTP Programm bin ich ja noch rauf gekommen, also habe ich den Callmonitor auskommentiert, da ich diese Datei in der fhem.cfg include war dies relativ einfach...
Jetzt geht es ans Fehler suchen denn fhem ohne den Callmonitor startet wieder... puuh ein Glück...
Muss also irgendwie am Update liegen, evtl macht ja noch jemand das Update und hat auch den Fehler, dann bitte unterstützt mich, denn ich bin auch noch Anfänger :)
Siehe dazu: http://forum.fhem.de/index.php/topic,20419.0.html
ja da bin ich grad am lesen... vielen Dank
@ Fiedel:
Du hast Recht! Inzwischen füllt sich die Datei. Ich habe aber meine Config-Datei leicht modifiziert:
attr Fritz_Box reverse-search-cache-file ./FHEM/telmoncache.log
und das "Fritz_Box" dahinter weggelassen. So arbeitet das Callmonitor-Modul bei mir einwandfrei.
Was jetzt noch schön wäre: In der Anzeige das in jeder Zeile voranstehende und überflüssige "Fritz_Box" weglassen können.
Zitat von: Absolute Beginner am 19 Februar 2014, 11:10:54
Was jetzt noch schön wäre: In der Anzeige das in jeder Zeile voranstehende und überflüssige "Fritz_Box" weglassen können.
versuche es damit mal:
attr deineGroup mapping
Zitat von: Absolute Beginner am 19 Februar 2014, 11:10:54
Was jetzt noch schön wäre: In der Anzeige das in jeder Zeile voranstehende und überflüssige "Fritz_Box" weglassen können.
versuche es damit mal:
Code: [Auswählen]
attr deineGroup mapping
Danke, das funktioniert! So sieht die Anrufliste 1A aus.
Habe heute den Callmonitor installiert
Die Anrufliste hat sofort funktioniert
Klasse Arbeit hier
Danke
Axel
Hallo,
ich habe heute erst FHEM installiert und alles aus Antwort 47 kopiert. #96*5* ist auch gewähöt. Nur bleibt meine Anrufliste leer. Gelogt wird jedoch alles. Wenn ich ein "reload 99_myUtilsTelefon.pm" mache erscheint im Log:
"reload 99_myUtilsTelefon.pm"
Dort sehe ich auch ein
"2014.03.19 00:20:34 3: FB_CALLMONITOR: loading cache file ./log/Fritz_Box-%Y.log Fritz_Box
2014.03.19 00:20:34 3: FB_CALLMONITOR: could not open cache file"
Aber das File ist da und gefüllt (liegt unter /opt/fhem/log/Fritz_Box-2014.log)
Was ist mein Fehler?
hast Du mal die rechte des Files geprüft?
So, heute morgen war es dann da! :) Hat doch noch geklappt. Warum es auch immer nicht gegangen ist!? Ich hatte mich extra noch selbts angerufen zum testen.
Zitat von: linuxq am 19 März 2014, 00:23:51
2014.03.19 00:20:34 3: FB_CALLMONITOR: could not open cache file"
dies ist meines Erachtens eine Rechte Sache hatte ich auch, kann sein wenn er das nächste mal abfragen muss dies wieder geschieht. Er kann es nicht öffnen weil die Datei nicht ihm gehört Gruppe und Attribute mal untersuchen...!
Hallo, jetzt funktioniert es!
Zitat2014.03.24 09:22:41 3: Fritz_Box device opened
2014.03.24 09:22:41 3: FB_CALLMONITOR: loading cache file ./log/Fritz_Box-%Y.log Fritz_Box
2014.03.24 09:22:41 2: FB_CALLMONITOR: Fritz_Box read 8 contacts from Cache
2014.03.24 09:22:42 2: FB_CALLMONITOR: Fritz_Box found FritzBox phonebook ./log/Fritz_TB.xml
2014.03.24 09:22:43 2: FB_CALLMONITOR: Fritz_Box read 667 contacts from FritzBox phonebook
Aber warum wird das Jahr nicht eingesetzt im Cache-File? Es heißt tatsächlich "Fritz_Box-%Y.log Fritz_Box". Mit Leerzeichen und %Y! Ich habe die Konfig von hier kopiert:
########### Fritzbox ###############
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
define Fritz_Box FB_CALLMONITOR 192.168.2.1:1012
attr Fritz_Box local-area-code 06233
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_TB.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
Zitatattr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
Das Cachefile darf natürlich nicht das Logfile sein. Wo hast du das denn her??? ;)
attr Fritz_Box reverse-search-cache-file ./log/CallmonCache.txt
Hallo,
kurze Frage,
ich habe die Konfig von Invers genommen. Bei mir werden jetzt aber nicht die Icons angezeigt und anstelle der Nummern steht bei mir Callmon?
Hat da jemand zufällig eine Idee?
Ich habe das Modul bei mir wieder entfernt. Daher weiss ich nicht, ob es noch laufen würde.
Ich denke es wäre an der Zeit, dass mal jemand deine laufende Konfiguration als neue Zusammenfassung hier postet. Durch die vielen Beiträge und Codeschnipsel ist das Ganze sehr unübersichtlich geworden.
Könnte man eigentlich aus der ganzen Geschichte nicht ein Modul basteln? Also nicht ich, ich bin dazu zu doof, aber ich meine, ob es vielleicht überhaupt möglich wäre. Oder vielleicht einen Wiki-Eintrag? Ein funktionierender Code im ersten Post wäre auch eine gute Möglichkeit, hier den Überblick zu behalten.
Alles nur so eine Idee.
Eigentlich gehört doch alles ins Modul. Eine zusätzliche Datei wie "99_myUtilsTelefon.pm" die Readings anlegt ist irgendwie schräg?!
Ich bekomme übrigends auch den Fehler "FB_CALLMONITOR: could not open cache file" nicht aus dem Logfile.
Meine attr ist wie folgt
attr FritzBox reverse-search-cache-file ./log/FritzBoxCallmonCache.txt
Ist halt die Frage was schneller umzusetzen geht, um die Daten in einem entsprechenden Format zu aktualisieren und danach dann darstellen zu können. Alternativ könnte man auch diesen Ansatz direkt in der cfg verfolgen:
define TelefonAN notify CallMon:event:.ring { \
my $Direction = "<-";;\
my $number=(ReadingsVal("CallMon","internal_number",99));;\
my $name=(ReadingsVal("CallMon","external_name",99));;\
my $duration=(ReadingsVal("CallMon","call_duration",99));;\
}
Das gleiche dann für .call oder mit einem IF...THEN ELSE je nach event .call oder .ring. Da bin ich derzeit aber noch überfordert. Hat da jemand eine Idee? Das dürfte wohl aber aufwendiger sein als die ganzen Funktionen in die externe Util Datei auszulagern?
Jedenfalls gibt es bei der Formatierung des readingsGroup einige Probleme bei mir. Ich vermute, dass da etwas am Modul geändert wurde:
http://forum.fhem.de/index.php/topic,14425.390.html
Elektrolurch hat da etwas vergleichbares geschrieben.
Hi!
Habe den Callmonitor bei mir auch soweit erfolgreich implementieren können. Hab aber noch ne Frage zum Anrufliste:
Wie bekomme ich denn bei den ReadingGroups das "Fritz_Box" am Anfang der Zeile weg?
Danke und Gruß
Michael
Zitat von: Michi240281 am 15 April 2014, 10:42:35
Wie bekomme ich denn bei den ReadingGroups das "Fritz_Box" am Anfang der Zeile weg?
Nur nicht überanstrengen beim lesen . . .
Zitat von: holzwurm83 am 19 Februar 2014, 21:43:46
versuche es damit mal:
attr deineGroup mapping
Funzt!
Hatte es nirgendwo gefunden, sorry!
Noch eine Frage: Wie muss man denn die Farben der Icons anpassen, um folgende Logik zu erhalten?
Ankommende Anrufe in Abwesenheit: rot
Ankommende angenommene Anrufe: grün
Abgehende Anrufe: blau
Werde aus den A0 bis A5 noch nicht schlau.
Das sind einfach die fünf dargestellten Zeilen, du kannst auch auf A6 * erweitern also eine Anrufbenachrichtigung mehr speichern... Von A0 nach A5 wird gerollt first in last out.
z.b. .in .out enthalten dann eben die Darstellung der Icons - hier kann man bei svg Icons mit @red noch eine Farbe mitgeben.
Sollte für sich selbst sprechen.. Probier einfach ein bisschen aus...
Zitatattr Anrufliste valueIcon {'A0.out' => 'phone_call_out', 'A0.in' => 'phone_call_in', 'A0.AB' => 'phone_answering',
die 99_telefonUtils.pm muss natürlich auch erweitert werden...
Aktuell siehts bei mir folgendermaßen aus.
99_myUtilsTelefon.pm:
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
##
#
#sub SendSMS ($$)
#{
# my $adress = $_[0].'@tenbrock.de';
# my $body = $_[1];
# Log (3,"SendSMS: $adress - $body");
# FB_mail($adress,"",$body);
# end sub SendSMS
#}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Fritz_Box = $defs{"Fritz_Box"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "in";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "out";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Fritz_Box);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Fritz_Box"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Fritz_Box",$j.($i-1),"-");
readingsBulkUpdate($Fritz_Box,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Fritz_Box,"A0",$A[$callID]);
readingsBulkUpdate($Fritz_Box,"B0",$B[$callID]);
readingsBulkUpdate($Fritz_Box,"C0",$C[$callID]);
readingsBulkUpdate($Fritz_Box,"D0",$D[$callID]);
readingsBulkUpdate($Fritz_Box,"E0",$E[$callID]);
readingsEndUpdate($Fritz_Box, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
Und die cfg:
#######################
### FB Call Monitor ###
#######################
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Fritzbox
define Fritz_Box FB_CALLMONITOR 192.168.188.1:1012
attr Fritz_Box local-area-code 05237
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Fritzbox
attr Fritz_Box 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 Fritz_Box verbose 0
# Anrufliste generieren:
#########################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Fritzbox
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste mapping ;
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Fritzbox
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out' => 'phone_call_out@lightgreen', 'A0.in' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out' => 'phone_call_out@lightgreen', 'A1.in' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A2.out' => 'phone_call_out@lightgreen', 'A2.in' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A3.out' => 'phone_call_out@lightgreen', 'A3.in' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A4.out' => 'phone_call_out@lightgreen', 'A4.in' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Allerdings war der Anruf um 21:04:20 kein Anruf in Abwesenheit sondern ein angenommener. Wo muss ich da also die Farbe ändern? Bei Ax.AB?
Also laut Log wird zwischen angenommen und nicht angenommen nicht unterschieden. Bei beiden ist Ax=in?!?!?
2014-04-15_21:15:53 Fritz_Box A1: in
2014-04-15_21:15:53 Fritz_Box B1: 20:41:46 15.04.2014
2014-04-15_21:15:53 Fritz_Box C1: unknown
2014-04-15_21:15:53 Fritz_Box D1: unknown
2014-04-15_21:15:53 Fritz_Box E1: 0:42
2014-04-15_21:15:53 Fritz_Box A0: in
2014-04-15_21:15:53 Fritz_Box B0: 21:04:20 15.04.2014
2014-04-15_21:15:53 Fritz_Box C0: unknown
2014-04-15_21:15:53 Fritz_Box D0: unknown
2014-04-15_21:15:53 Fritz_Box E0: 11:29
Habe jetzt noch ein weiteres Problem:
Die Anrufliste wird nicht aktualisiert! Es stehen 5 Anrufe drin, aber die sind paar Tage alt. Im Logfile stehen alle Anrufe drin.
Hi,
wie kann ich die Anrufliste filtern nach angerufener MSN? Ich bekomme in der Liste auch alle eingehenden Faxe angezeigt und das will ich eigentlich verhindern!
Gruß und Danke für Tips
Marcel
Hallo zusammen,
ich habe meinerseits die 99_myUtilsTelefon auch noch ein bisschen aufgebohrt. Was mit vor allem gestört hat war, dass es nicht möglich war anhand der Icons zu unterscheiden, ob ein Anruf angenommen wurde oder nicht. Dass die Icons für ausgehende bzw. eingehende Anrufe rot bzw. grün waren hat zum Verständnis auf einen Blick auch nicht gerade beigetragen.
Also habe ich die Datei umgestrickt. Im Groben gibt es ja drei Teile:
- den Teil, der aufgerufen wird wenn ein eingehender Anruf erfolgt
- den Teil, der aufgerufen wird wenn ein ausgehender Anruf erfolgt
- den Teil, der aufgerufen wird wenn ein Anruf beendet wird
Mein Gedanke war, dass ich eigentlich Aktionen auslösen möchte wenn ich jemanden anrufe (Musik ausschalten beispielsweise) oder ich angerufen werde (ebenfalls Musik aus und per Lautsprecher die Ansage, dass ein Anruf erfolgt). Und zum Schluss möchte ich nach Ende des Telefonates evtl. wieder Musik einschalten oder wenn ich nicht zu Hause war eine Nachricht über den verpassten Anruf auf mein Handy bekommen.
Dazu gibt für die ersten beiden Fälle die Bereiche "if ( $stat eq "ring" )" und "if ( $stat eq "call" )". Die habe ich noch ein bisschen aufgeräumt, so dass sie für jeden sofort nutzbar werden.
Alles was das Ende eines Anrufs angeht habe ich unter dem Bereich "if ( $stat eq "disconnect" )" zusammengefasst. In Form eines Kommentars (beginnt mit einem #) habe ich auf die Stellen hingewiesen, an denen man Aktionen für das Ende eines Anrufs auslösen kann. Einfach unter der Kommentarzeile eine neue Zeile einfügen und die Aktionen reinschreiben. Es gibt einen großen If-Block mit mehreren elsif-Verzweigungen, die spezifisch für die verschieden Aktionen in Abhängigkeit der Telefonatstatus' ausgeführt werden sollen.
Nach diesen Blöcken sollte man dann Aktionen ausführen, die generell für jede Art beendeten Anrufs stehen.
Das geänderte Script sieht dann so aus:
99_myUtilsTelefon
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub myUtilsTelefon_Initialize($$) {
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$) {
my $adress = $_[0] . '@sms.kundenserver.de';
my $body = $_[1];
Log( 3, "SendSMS: $adress - $body" );
FB_mail( $adress, "", $body );
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub FBCall ($$) {
my $callnr = $_[0];
my $duration = $_[1];
Log( 3, "FBCall: $callnr mit Dauer $duration" );
$callnr = "ATDT" . $callnr . "#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer( gettimeofday() + $duration, "FBHangOn", "", 0 );
return;
}
sub FBHangOn () {
Log( 3, "FBCallHangOn aufgerufen" );
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$) {
# es wird der Name und die interne angerufene Nummer uebergeben
my ($caller) = split( '\(', $_[0] );
$caller = ltrim( rtrim($caller) );
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com) {
Log( 3, "TelefonAktion: commando: $com" );
sig2_repeat( $com, 5, 4 );
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
sub TelefonMonitor($) {
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
# Anrufdauer als Integervariable speichern
our $intCallDuration;
our $stat;
our @lastPhoneEvent;
my $i;
my $j;
our $ab;
my $meineFB = $defs{"fb_cmFritzBox"};
my ( $event, $arg ) = split( ':', $_[0] );
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ( $event eq "event" ) {
$stat = $arg;
return;
} # end if event
if ( $stat eq "ring" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "internal_number" ) {
$intnum = $arg;
return;
} # end if intnum
if ( $event eq "call_id" ) {
$callID = $arg;
$lastPhoneEvent[$callID] = $stat;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion( $extname, $intnum );
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if ring loop
if ( $stat eq "connect" ) {
if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
{
$ab = "AB";
} # end if internal_connection
} # end if connect
if ( $stat eq "call" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "call_id" ) {
$callID = $arg;
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
return;
} # end if callid
return;
} # end if callloop
if ( $stat eq "disconnect" ) {
if ( $event eq "call_duration" ) {
$intCallDuration = $arg;
$callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
return;
} # if call_duration
if ( $lastPhoneEvent[$callID] eq "call" ) {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "out_notconnected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der nicht angenommen wurde
} elsif ( $intCallDuration gt 0 ) {
$A[$callID] = "out_connected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der angenommen wurde
}
} elsif ( $lastPhoneEvent[$callID] eq "ring") {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "in_notconnected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der nicht angenommen wurde
$intCallDuration = undef;
} elsif ( $ab eq "AB" ) {
$A[$callID] = "AB";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
$intCallDuration = undef;
} elsif ($intCallDuration gt 0 ){
$A[$callID] = "in_connected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der angenommen wurde
$intCallDuration = undef;
}
}
#hier notieren was generell passieren soll, sobald ein Anruf beendet wurde (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" ) {
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($meineFB);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'E' ) {
# $defs{"meineFB"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "fb_cmFritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $meineFB, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $meineFB, "A0", $A[$callID] );
readingsBulkUpdate( $meineFB, "B0", $B[$callID] );
readingsBulkUpdate( $meineFB, "C0", $C[$callID] );
readingsBulkUpdate( $meineFB, "D0", $D[$callID] );
readingsBulkUpdate( $meineFB, "E0", $E[$callID] );
readingsEndUpdate( $meineFB, 1 );
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
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
###################
1;
Um auf die Icons zurückzukommen: Das Script merkt sich, womit ein Anruf begonnen hat (eingehend oder ausgehend) und wie lange die Anrufdauer war (0 oder >=0) und prüft ob der AB dranging (da war in meiner Version ein kleiner Fehler: "AB" statt "ab"). In den Readings steht nun folgendes:
[ul]
- in_connected # für eingehende Anrufe, die angenommen wurden
- in_notconnected # für eingehende Anruf, die nicht angenommen wurden
- out_connected # für ausgehende Anrufe, die angenommen wurden
- out_notconnected # für ausgehende Anrufe, die nicth angenommen wurden
- AB # für Anrufe, die auf dem AB gelandet sind.
[/ul]
Daran muss natürlich noch das Attribut valueIcon angepasst werden:
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Und am Ende sieht es dann so aus wie auf dem Screenshot unten.
Gibt es eigentlich schon jemanden, der sich draum kümmert diesen Thread mal in's Wiki zu stellen? Es ist für jeden, der den Callmonitor implementieren möchte schon arg aufwändig, sich durch den gesamten Thread zu kämpfen. Wenn nicht, würde ich damit gern beginnen. Aber ich denke nicht, dass ich die Berechtigung habe gleich einen neuen Artikel anzulegen, oder?
Viele Grüße
Zephyr
edit: noch einen Fehler gefunden und behoben
Jetzt ist es perfekt.
Gesendet von meinem iPhone mit Tapatalk
Hallo zusammen,
wollte gerade die Neuerung mal testen, aber bekomme ich den Namen für meinen Callmonitor nicht richtig ersetzt. Er heißt "Callmon". Könnt ihr mir sagen was ich dafür austauschen muss?
Zitat von: fiedel am 29 Januar 2014, 19:55:15
@holzwurm83
- guck mal in der zweiten Utils- Datei (mein letzter Post vor diesem): Dort muss alles was "Fritz_Box" heißt, umbenannt werden in
"Callmon". Also so wie der Callmonitor heißt.
Das habe ich bereits so umgesetzt, allerdings trifft das wohl nicht für die Änderung von Zephyr zu?
Zitat von: holzwurm83 am 28 April 2014, 20:10:00
Das habe ich bereits so umgesetzt, allerdings trifft das wohl nicht für die Änderung von Zephyr zu?
Stimmt heißt dort auch nicht fritzbox sondern fb_cmFritzBox
Danke! Jetzt geht das auch!
Ja, Verzeihung, das hätte ich noch schreiben können: Der Name des Callmonitors muss in den Zeilen 97 und 220 angepasst werden.
Schreibt denn jemand einen Eintrag in's Wiki schon?
Ist das vom OP gewollt?
Viele Grüße
Zephyr
Einträge ins Wiki sind generell und auf jeden Fall immer gewollt... ;)
Dann versuche ich mich mal daran.
Macht es Sinn, diesen Artikel auf Grundlage des Threads zu überarbeiten: http://www.fhemwiki.de/wiki/Telefonat_als_Ausl%C3%B6ser_f%C3%BCr_Aktionen (http://www.fhemwiki.de/wiki/Telefonat_als_Ausl%C3%B6ser_f%C3%BCr_Aktionen)
Viele Grüße
Zephyr
Keine Icons in Anrufliste :(
Hallo miteinander, ich habe meine Anrufliste entsprechend Post #115 aktualisiert und bekomme seitdem die Icons nicht mehr angezeigt - stattdessen kommt nur "in" bzw "out". Woran kann das liegen?
Die Icons sind bei mir im Verzeichnis
www\images\openautomation
vorhanden. Das war auch vorher schon so und hatte bis zur Umstellung auch funktioniert. Muss der Pfad nochmal irgendwo angegeben werden?
Danke Uwe
Zitat von: locodriver am 04 Mai 2014, 17:38:15
Hallo miteinander, ich habe meine Anrufliste entsprechend Post #115 aktualisiert und bekomme seitdem die Icons nicht mehr angezeigt - stattdessen kommt nur "in" bzw "out". Woran kann das liegen?
Die Icons sind bei mir im Verzeichnis
www\images\openautomation
Das sind noch alte Werte, die nicht mit dem geänderten Skript geschrieben wurden. Das neue Skript schreibt soetwas wie "in_connected" in die UserReadings. Das Attribut valueIcon schaut ebenfalls nach solchen Einträgen. Es findet aber -aktuell- nur "in" und "out".
Mach mal einen Testanruf auf Deine Nummer und sag an, ob dann ein Icon da ist. Wenn ja, dann aktualisieren sich die Einträge nach und nach mit den nächsten Anrufen.
Alternativ einfach mit
set Anrufliste.A0 in_connected
oder ähnlichem per Hand aktualisieren.
LG
Zephyr
Hm...
Kommando zurück. Ich hatte natürlich die gesamte cfg aus o.g. Post kopiert. Da war deine(?) Vorwahl drin, mit meiner funzt es jetzt :D.
Trotzdem danke - durch deinen Denkanstoß habe ich alle Einstellungen nochmal gecheckt und den Fehler bemerkt.
Schönen Sonntag Abend noch.
Ich bin es nochmal...
Heute hatte ich einen verpassten Anruf mit unterdrückter Nummer, da tauchten folgende Einträge im allg. Log auf:
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myUtilsTelefon.pm line 198.
Use of uninitialized value $ab in string eq at ./FHEM/99_myUtilsTelefon.pm line 192.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myUtilsTelefon.pm line 187.
Das hatte ich gestern auch schon mal.
Muss ich noch andere Anpassungen vornehmen?
Danke Uwe.
Muss ich mir mal anschauen. Habe zudem noch einen weiteren Fehler gefunden.
Werde ich aber vermutlich erst in der nächsten Woche schaffen. Ich hoffe es eilt nicht?
Gruß
Zephyr
Nur die Ruhe - die Anrufe werden in der Liste ja korrekt dargestellt :-)
Schön wäre ein Rückruf-Knopf bei den verpassten Anrufen. Vielleicht, wenn man das Icon klickbar macht.
Geht so etwas?
Zitat von: Invers am 05 Mai 2014, 14:26:50
Schön wäre ein Rückruf-Knopf bei den verpassten Anrufen. Vielleicht, wenn man das Icon klickbar macht.
Geht so etwas?
Wie meinst du das? Willst Du über FHEM telefonieren? Wenn ich das richtig verstehe ist FHEM ein Programm für die Hausautomation... Telefonieren scheint mir nicht so recht darunter zu fallen.
Wenn Du eine FritzBox hast, empfehle ich für ein mobildes Device die Android / iOS - Apps von AVM, mit denen man innerhalb des heimischen Netzwerks zum einen ebenfalls eine Anrufliste hat und zum anderen über diese Anrufliste direkt mit dem gewünschten Teilnehmer in Verbindung treten kann.
Die Anrufliste in FHEM ist cool, aber auch nur eine Krücke, die gut für die Anzeige taugt.
Dedizierte Apps für bestimmte Aufgaben sind oft unschlagbar.
... meint
Zephyr
Ich will nicht mit fhem telefonieren. Ich will die Wählhilfe der Fritzbox benutzen.
Ich klicke den "Knopf", die Box wählt und ich nehme den Hörer ab. Kennt das keiner?
Nutze ich schon lange z.B. mit Outlook und Phonesuite auf dem PC. Sofort nach dem klick auf den Knopf kann man am Gerät den Hörer am DECT-Telefon abnehmen, welches natürlich an der Fritzbox angemeldet ist.
Den anderen Kram habe ich natürlich auch, inklusive BoxToGo.
Hi Invers,
ich kenne das und nutze es auch für die automatische Verbindung von meiner analogen Türsprechstelle (Fon2) mit meinem Handy wenn ich unterwegs bin und jemand klingelt an der Haustür. Sieh dir dazu mal die Fritzbox- API an (Forensuche und WIKI). mit der kannst du deine Rückruffunktion realisieren. Du fängst aus dem Callmonitor die verpasste Nummer ab, steckst sie in eine Variable und übergibst sie dem "Call_Phone"- Script aus der API. Dann geht alles so weiter, wie du es kennst - Hörer abheben und warten... ;) Die Details, wie du z.B. das Icon klickbar machst und die o.g. Funktion damit auslöst habe ich leider nicht parat.
Gruß
Frank
Danke für die Antwort, suche ich mir raus und bastel es rein (hoffe ich).
Hi,
bei mir kommen keine neuen Icons und überhaupt keine neuen Anrufe in die Anrufliste. Wo kann mein Fehler liegen? Hier der Ausschnitt aus meiner .cfg:
########### Fritzbox ###############
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
define Fritz_Box FB_CALLMONITOR 192.168.2.1:1012
attr Fritz_Box local-area-code 06233
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box_Callmon.cache
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_TB.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste mapping fbcm # fb_cmFritzBox  
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1 v
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
# attr Anrufliste room 0.00_Desktop
# Anzeige mit Icons
Hier das Log (incl. letztem Anruf vorher):
2014-05-07_15:17:21 Fritz_Box A0: out
2014-05-07_15:17:21 Fritz_Box B0: 15:13:27 7.05.2014
2014-05-07_15:17:21 Fritz_Box C0: Wintxx
2014-05-07_15:17:21 Fritz_Box D0: 062xxx
2014-05-07_15:17:21 Fritz_Box E0: 3:47
2014-05-07_15:39:17 Fritz_Box event: call
2014-05-07_15:39:17 Fritz_Box external_number: 062xxx
2014-05-07_15:39:17 Fritz_Box external_name: Benxxx
2014-05-07_15:39:17 Fritz_Box internal_number: 062xx
2014-05-07_15:39:17 Fritz_Box external_connection: SIP1
2014-05-07_15:39:17 Fritz_Box internal_connection: DECT_1
2014-05-07_15:39:17 Fritz_Box call_id: 1
2014-05-07_15:39:30 Fritz_Box event: connect
2014-05-07_15:39:30 Fritz_Box internal_connection: DECT_1
2014-05-07_15:39:30 Fritz_Box call_id: 1
2014-05-07_15:47:02 Fritz_Box event: call
2014-05-07_15:47:02 Fritz_Box external_number: 0179xx
2014-05-07_15:47:02 Fritz_Box external_name: Mxx
2014-05-07_15:47:02 Fritz_Box internal_number: 06xx
2014-05-07_15:47:02 Fritz_Box external_connection: SIP1
2014-05-07_15:47:02 Fritz_Box internal_connection: VoIP_2
2014-05-07_15:47:02 Fritz_Box call_id: 3
2014-05-07_15:47:05 Fritz_Box event: connect
2014-05-07_15:47:05 Fritz_Box internal_connection: VoIP_2
2014-05-07_15:47:05 Fritz_Box call_id: 3
2014-05-07_15:47:08 Fritz_Box event: disconnect
2014-05-07_15:47:08 Fritz_Box call_duration: 3
2014-05-07_15:47:08 Fritz_Box call_id: 3
Wo kann da mein Fehler sein?
Hallo
du hast ein paar ganz kleine Unterschiede im Code obwohl der aus einem meiner Posts ganz oben ist.
ist das hier definitiv die adresse der fritz ?
define Fritz_Box FB_CALLMONITOR 192.168.2.1:1012
bei mir hat die Fritz 192.168.178.xxx
da würde ich noch einmal nachschauen.
und diese Zeilen sind auch etwasa anders als meine. Wenn nur ein Buchstabe falsch ist klappt es schon nicht mehr
Bei mir läuft der Code seit Monaten stabil, bin daher auch nicht mehr so im Thema
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Anrufliste group Telefonliste
attr Anrufliste mapping  
attr Anrufliste nameStyle style="font-weight:bold"
Hier der Rest komplett, würde ich einfach im Block kopieren
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste mapping  
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out' => 'phone_call_out@lightgreen', 'A0.in' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out' => 'phone_call_out@lightgreen', 'A1.in' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A2.out' => 'phone_call_out@lightgreen', 'A2.in' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A3.out' => 'phone_call_out@lightgreen', 'A3.in' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A4.out' => 'phone_call_out@lightgreen', 'A4.in' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Hallo zusammen,
sagt mal, bin ich eigentlich der einzige, bei dem der letzte Code nicht unverändert funktioniert? Ich musste die Methode folgendermaßen ändern:
sub TelefonMonitor($) {
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $intCallDuration; # Anrufdauer als Integervariable speichern
our $stat;
our @lastPhoneEvent;
my $i;
my $j;
our $ab;
my $meineFB = $defs{"tmp_fb"};
my ( $event, $arg ) = split( ':', $_[0] );
$arg = ltrim($arg);
Log(3,"TM: event: $event arg: $arg");
if ( $event eq "event" ) {
$stat = $arg;
return;
} # end if event
if ( $stat eq "ring" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "internal_number" ) {
$intnum = $arg;
return;
} # end if intnum
if ( $event eq "call_id" ) {
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion( $extname, $intnum );
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
Log(3,"TM: set lastPhoneEvent[$callID] = $stat");
return;
} # end if callid
return;
} # end if ring loop
if ( $stat eq "connect" ) {
if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
{
$ab = "AB";
} # end if internal_connection
} # end if connect
if ( $stat eq "call" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "call_id" ) {
$callID = $arg;
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
Log(3,"TM: set lastPhoneEvent[$callID] = $stat");
return;
} # end if callid
return;
} # end if callloop
if ( $stat eq "disconnect" ) {
if ( $event eq "call_duration" ) {
$intCallDuration = $arg;
$callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
return;
} # if call_duration
Log(3,"TM: get lastPhoneEvent[$callID] = $lastPhoneEvent[$callID]");
if ( $lastPhoneEvent[$callID] eq "call" ) {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "out_notconnected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der nicht angenommen wurde
} else {
$A[$callID] = "out_connected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der angenommen wurde
}
} elsif ( $lastPhoneEvent[$callID] eq "ring") {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "in_notconnected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der nicht angenommen wurde
} elsif ( $ab eq "AB" ) {
$A[$callID] = "AB";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
} else {
$A[$callID] = "in_connected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der angenommen wurde
}
}
#hier notieren was generell passieren soll, sobald ein Anruf beendet wurde (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" ) {
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($meineFB);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'E' ) {
# $defs{"meineFB"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "tmp_fb", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $meineFB, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $meineFB, "A0", $A[$callID] );
readingsBulkUpdate( $meineFB, "B0", $B[$callID] );
readingsBulkUpdate( $meineFB, "C0", $C[$callID] );
readingsBulkUpdate( $meineFB, "D0", $D[$callID] );
readingsBulkUpdate( $meineFB, "E0", $E[$callID] );
readingsEndUpdate( $meineFB, 1 );
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
Also das setzen des lastPhoneEvent ins call_id if mit reinziehen. Die Position vorher außerhalb des ifs hat sich mir nicht ganz erschlossen. So scheint es auf jeden Fall zu funktionieren. Kann aber auch sein, dass ich einen Sonderfall habe, weil ich meine FritzBox remote habe und den Callmonitor nach Anleitung per FHEM2FHEM gekoppelt habe.
Gruß
Leo
Zitat von: limats am 07 Mai 2014, 22:07:25
Hallo zusammen,
sagt mal, bin ich eigentlich der einzige, bei dem der letzte Code nicht unverändert funktioniert? Ich musste die Methode folgendermaßen ändern:
Hier wäre eine Differenzdarstellung interessant.
Gruß
Zephyr
Hallo Zephyr,
hoffe, man kann die Unterschiede erkennen.
Gruß
Leo
@Franz und @zephyr:
Mit Franz Originalversion lief es einwandfrei! Ich habe ja die Änderungen von Zephyr durchgeführt und seit dem klappt es nicht mehr.
Gruß
LinuxQ
@linuxq:
Dann vielleicht doch meine Version der sub TelefonMonitor() (3 Posts weiter oben) probieren. Vielleicht hast du ja das selbe Problem wie ich.
Leo
Funktioniert nach wir vor nicht. Bei mit sieht das Log ja nun auch ganz anders aus. Mit diesen Daten kann es doch m.E. dann nicht funktionieren oder?
Zitat2014-05-07_15:39:17 Fritz_Box event: call
2014-05-07_15:39:17 Fritz_Box external_number: 062xxx
2014-05-07_15:39:17 Fritz_Box external_name: Benxxx
2014-05-07_15:39:17 Fritz_Box internal_number: 062xx
2014-05-07_15:39:17 Fritz_Box external_connection: SIP1
2014-05-07_15:39:17 Fritz_Box internal_connection: DECT_1
2014-05-07_15:39:17 Fritz_Box call_id: 1
2014-05-07_15:39:30 Fritz_Box event: connect
2014-05-07_15:39:30 Fritz_Box internal_connection: DECT_1
2014-05-07_15:39:30 Fritz_Box call_id: 1
2014-05-07_15:47:02 Fritz_Box event: call
2014-05-07_15:47:02 Fritz_Box external_number: 0179xx
2014-05-07_15:47:02 Fritz_Box external_name: Mxx
2014-05-07_15:47:02 Fritz_Box internal_number: 06xx
2014-05-07_15:47:02 Fritz_Box external_connection: SIP1
2014-05-07_15:47:02 Fritz_Box internal_connection: VoIP_2
2014-05-07_15:47:02 Fritz_Box call_id: 3
2014-05-07_15:47:05 Fritz_Box event: connect
2014-05-07_15:47:05 Fritz_Box internal_connection: VoIP_2
2014-05-07_15:47:05 Fritz_Box call_id: 3
2014-05-07_15:47:08 Fritz_Box event: disconnect
2014-05-07_15:47:08 Fritz_Box call_duration: 3
2014-05-07_15:47:08 Fritz_Box call_id: 3
Hallo limats,
mit den Änderungen bezüglich des Streichens der Zeilen mit $intCallDuration = undef; geht's auch nicht. Danke auch für die Änderungsdarstellung.
Wird der Inhalt der Variablen nicht ordentlich gelöscht, sind noch alte Daten darin. Das führt dann zu Fehlern.
Andererseits führt es zu Fehlern im Log, weil eben undefinierte Variablen verwendet wurden.
Der Fehler wurde weiter oben bereits angesprochen und ich habe schon gemeint, dass ich das noch ändern müsste, mir in dieser Woche aber definitiv die Zeit dazu fehlt. Wenn jemand eine andere Lösung hat, immer her damit. :D
Viele Grüße
Zephyr
Ooooookay,
zwei Probleme wurden angesprochen.
- im Log tauchen Meldungen mit "undefined Variable" auf
Zitat von: limats am 07 Mai 2014, 22:07:25sagt mal, bin ich eigentlich der einzige, bei dem der letzte Code nicht unverändert funktioniert? Ich musste die Methode folgendermaßen ändern:
Zum ersten Punkt:
Anstatt die Variable $intCallDuration mit $intCallDuration = undef zurückzusetzen, damit sie beim nächsten Anruf kein Fehlergebnis liefert, kann man sie auch mit einer leeren Zeichenkette füllen: $intCallDuration = ""
Zum zweiten Punkt:
linuxq, Du hattest Änderungen gemacht, die ich auch schon mal so drin hatte. Leider gibt es dann Probleme. Zum Beispiel beim Wechsel zwischen ausgehenden und eingehenden Anrufen mit/ohne connect/disconnect.
Weil einfach in der Variable noch ein alter Wert gespeichert wurde. Daher ist es nicht egal ob man ein einfaches else oder ein elsif mit einer Prüfung benutzt.
Die Daten aus deinem Log, linuxq, kommen bei mir ganz exakt gleich rein. Daran, dass Du die FB per FHEM2FHEM anbindest liegt es ebenfalls nicht. Denn das mache ich genau so.
Den Namen des Callmonitors hast Du auch korrekt gesetzt. Das Script neu geladen?
Könntest Du evtl. in Zeile 103 das # Zeichen rausnehmen, ein paar Testanrufe machen und dann die Ausgabe aus dem Log posten? Vielleicht hilft das ja weiter. Versprechen kann ich aber nix.
Für alle anderen hier die aktuellen Änderungen:
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub myUtilsTelefon_Initialize($$) {
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$) {
my $adress = $_[0] . '@sms.kundenserver.de';
my $body = $_[1];
Log( 3, "SendSMS: $adress - $body" );
FB_mail( $adress, "", $body );
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub FBCall ($$) {
my $callnr = $_[0];
my $duration = $_[1];
Log( 3, "FBCall: $callnr mit Dauer $duration" );
$callnr = "ATDT" . $callnr . "#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer( gettimeofday() + $duration, "FBHangOn", "", 0 );
return;
}
sub FBHangOn () {
Log( 3, "FBCallHangOn aufgerufen" );
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$) {
# es wird der Name und die interne angerufene Nummer uebergeben
my ($caller) = split( '\(', $_[0] );
$caller = ltrim( rtrim($caller) );
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com) {
Log( 3, "TelefonAktion: commando: $com" );
sig2_repeat( $com, 5, 4 );
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
sub TelefonMonitor($) {
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
# Anrufdauer als Integervariable speichern
our $intCallDuration;
our $stat;
our @lastPhoneEvent;
my $i;
my $j;
our $ab;
my $meineFB = $defs{"fb_cmFritzBox"};
my ( $event, $arg ) = split( ':', $_[0] );
$arg = ltrim($arg);
#Log(3,"event: $event; arg: $arg");
if ( $event eq "event" ) {
$stat = $arg;
return;
} # end if event
if ( $stat eq "ring" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "internal_number" ) {
$intnum = $arg;
return;
} # end if intnum
if ( $event eq "call_id" ) {
$callID = $arg;
$lastPhoneEvent[$callID] = $stat;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion( $extname, $intnum );
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if ring loop
if ( $stat eq "connect" ) {
if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
{
$ab = "AB";
} # end if internal_connection
} # end if connect
if ( $stat eq "call" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "call_id" ) {
$callID = $arg;
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
return;
} # end if callid
return;
} # end if callloop
if ( $stat eq "disconnect" ) {
if ( $event eq "call_duration" ) {
$intCallDuration = $arg;
$callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
return;
} # if call_duration
if ( $lastPhoneEvent[$callID] eq "call" ) {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "out_notconnected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der nicht angenommen wurde
} elsif ( $intCallDuration gt 0 ) {
$A[$callID] = "out_connected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der angenommen wurde
}
} elsif ( $lastPhoneEvent[$callID] eq "ring") {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "in_notconnected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der nicht angenommen wurde
$intCallDuration = "";
} elsif ( $ab eq "AB" ) {
$A[$callID] = "AB";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
$intCallDuration = "";
} elsif ($intCallDuration gt 0 ){
$A[$callID] = "in_connected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der angenommen wurde
$intCallDuration = "";
}
}
#hier notieren was generell passieren soll, sobald ein Anruf beendet wurde (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" ) {
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($meineFB);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'E' ) {
# $defs{"meineFB"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "fb_cmFritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $meineFB, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $meineFB, "A0", $A[$callID] );
readingsBulkUpdate( $meineFB, "B0", $B[$callID] );
readingsBulkUpdate( $meineFB, "C0", $C[$callID] );
readingsBulkUpdate( $meineFB, "D0", $D[$callID] );
readingsBulkUpdate( $meineFB, "E0", $E[$callID] );
readingsEndUpdate( $meineFB, 1 );
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
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
###################
1;
P.S. Ich beginne heute mal im Wiki mit einer entsprechenden Seite auf meinem privaten Namespace. Und dann geht irgendwann die Änderung auf die richtige Seite. Dann kann jeder mal am Code "rumprobieren". ;OD
LG
Zephyr
Hi,
ich komme nicht weiter,
habe jetzt mal hier alles durch gelesen und bekomme im Log immer
14.05.11 10:46:17 1: readingsUpdate(,D0,0241955478) missed to call readingsBeginUpdate first.
2014.05.11 10:46:17 1: readingsUpdate(,E0, 0:00) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,A4,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,B4,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,C4,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,D4,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,E4,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,A3,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,B3,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,C3,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,D3,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,E3,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,A2,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,B2,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,C2,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,D2,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,E2,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,A1,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,B1,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,C1,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,D1,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,E1,-) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,A0,out_notconnected) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,B0,10:46:49 11.05.2014) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,C0,unknown) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,D0,02309750820) missed to call readingsBeginUpdate first.
2014.05.11 10:46:52 1: readingsUpdate(,E0, 0:00) missed to call readingsBeginUpdate first.
Vielleicht kann ja mal einer drüber schauen wo das Problem ist.
Der Notify Arbeitet, ich sehe die Calls in den Logs und im Reading, aber die Anrufliste zeigt nichts an.
Hier mal die CFG und die PM
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define Fritz_Box FB_CALLMONITOR 192.168.178.1:1012
attr Fritz_Box local-area-code 02xxx
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/CallmonCache.txt
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
# Anzeige mit Icons
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub myUtilsTelefon_Initialize($$) {
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$) {
my $adress = $_[0] . '@sms.kundenserver.de';
my $body = $_[1];
Log( 3, "SendSMS: $adress - $body" );
FB_mail( $adress, "", $body );
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub FBCall ($$) {
my $callnr = $_[0];
my $duration = $_[1];
Log( 3, "FBCall: $callnr mit Dauer $duration" );
$callnr = "ATDT" . $callnr . "#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer( gettimeofday() + $duration, "FBHangOn", "", 0 );
return;
}
sub FBHangOn () {
Log( 3, "FBCallHangOn aufgerufen" );
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$) {
# es wird der Name und die interne angerufene Nummer uebergeben
my ($caller) = split( '\(', $_[0] );
$caller = ltrim( rtrim($caller) );
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com) {
Log( 3, "TelefonAktion: commando: $com" );
sig2_repeat( $com, 5, 4 );
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
sub TelefonMonitor($) {
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
# Anrufdauer als Integervariable speichern
our $intCallDuration;
our $stat;
our @lastPhoneEvent;
my $i;
my $j;
our $ab;
my $meineFB = $defs{"fb_cmFritzBox"};
my ( $event, $arg ) = split( ':', $_[0] );
$arg = ltrim($arg);
#Log(3,"event: $event; arg: $arg");
if ( $event eq "event" ) {
$stat = $arg;
return;
} # end if event
if ( $stat eq "ring" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "internal_number" ) {
$intnum = $arg;
return;
} # end if intnum
if ( $event eq "call_id" ) {
$callID = $arg;
$lastPhoneEvent[$callID] = $stat;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion( $extname, $intnum );
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if ring loop
if ( $stat eq "connect" ) {
if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
{
$ab = "AB";
} # end if internal_connection
} # end if connect
if ( $stat eq "call" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "call_id" ) {
$callID = $arg;
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
return;
} # end if callid
return;
} # end if callloop
if ( $stat eq "disconnect" ) {
if ( $event eq "call_duration" ) {
$intCallDuration = $arg;
$callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
return;
} # if call_duration
if ( $lastPhoneEvent[$callID] eq "call" ) {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "out_notconnected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der nicht angenommen wurde
} elsif ( $intCallDuration gt 0 ) {
$A[$callID] = "out_connected";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war, der angenommen wurde
}
} elsif ( $lastPhoneEvent[$callID] eq "ring") {
if ( $intCallDuration eq 0 ) {
$A[$callID] = "in_notconnected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der nicht angenommen wurde
$intCallDuration = "";
} elsif ( $ab eq "AB" ) {
$A[$callID] = "AB";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
$intCallDuration = "";
} elsif ($intCallDuration gt 0 ){
$A[$callID] = "in_connected";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der angenommen wurde
$intCallDuration = "";
}
}
#hier notieren was generell passieren soll, sobald ein Anruf beendet wurde (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" ) {
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($meineFB);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'E' ) {
# $defs{"meineFB"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "fb_cmFritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $meineFB, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $meineFB, "A0", $A[$callID] );
readingsBulkUpdate( $meineFB, "B0", $B[$callID] );
readingsBulkUpdate( $meineFB, "C0", $C[$callID] );
readingsBulkUpdate( $meineFB, "D0", $D[$callID] );
readingsBulkUpdate( $meineFB, "E0", $E[$callID] );
readingsEndUpdate( $meineFB, 1 );
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
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
###################
1;
Keiner eine Idee? :'(
Schade das hier keiner Weiterhelfen kann.
:'(
Du hast den Namen deiner FritzBox in den beiden notwendigen Zeilen nicht angepasst.
habe in 97 geändert
my $meineFB = $defs{"fb_cmFritz_Box"};
und in 220
$tt = ReadingsVal( "fb_cmFritz_Box", $j . ( $i - 1 ), "-" );
wie angegeben.
Jedoch das gleiche auch nach neustart!
GRuss Dirk
In was hast Du es geändert?
In Fritz_Box
Gesendet von meinem SGP521 mit Tapatalk
Hmmm... Tjaaaa. Die Funktion readingsBeginUpdate fehlt offensichtlich.
Aber wieso weiß ich leider so gar nicht.
Kannst Du FHEM in einer aktuellen SVN-Version auf einem Testrechner installieren und schauen ob es dort das gleiche Problem gibt?
Hi,
also die allererste Version aus dem Thread funktioniert. Jedoch ohne die Icons
Alle anderen bringen keine Anzeige im Anrufmonitor
Hat jemand noch eine Ahnung wie man auch die Icons bekommt?
#########################################################################
############ Callmonitor mit rollierender Anruferliste: ############
#########################################################################
### http://forum.fhem.de/index.php/topic,19238.msg137848.html#msg137848
define Fritz_Box FB_CALLMONITOR 192.168.178.1:1012
attr Fritz_Box local-area-code 02xxx
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/CallmonCache.txt
attr Fritz_Box reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box 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 Fritz_Box verbose 0
define FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Telefon
#########################################################################
############ Anrufliste generieren: ############
#########################################################################
# Telefonevents für Anrufliste abfangen:
define Call_Notify notify Fritz_Box:.* { \
TelefonMonitor ($EVENT);; \
}
attr Call_Notify room Telefon
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
attr Anrufliste group Telefonliste
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
# Anzeige mit Icons
#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;
sub
myUtilsTelefon_Initialize($$)
{
my ($hash) = @_;
#...
}
################################################################
sub SendSMS ($$)
{
my $adress = $_[0].'@sms.kundenserver.de';
my $body = $_[1];
Log (3,"SendSMS: $adress - $body");
FB_mail($adress,"",$body);
# end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox
sub
FBCall ($$)
{
my $callnr = $_[0];
my $duration = $_[1];
Log(3,"FBCall: $callnr mit Dauer $duration");
$callnr = "ATDT".$callnr."#";
my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
InternalTimer(gettimeofday()+$duration, "FBHangOn", "", 0);
return;
}
sub FBHangOn ()
{
Log(3,"FBCallHangOn aufgerufen");
my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
$ret =~ s,[\r\n]*,,g;
return;
}
######################################
sub TelefonAktion($$)
{
# es wird der Name und die interne angerufene Nummer uebergeen
my ($caller) = split ('\(',$_[0]);
$caller = ltrim(rtrim($caller));
my $intern = $_[1];
# Log(3,"TelefonAktion: $caller $intern");
# Sound ausgeben
my $com = $main::TelefonAktionsListe{$caller};
if ($com)
{
Log(3,"TelefonAktion: commando: $com");
sig2_repeat($com,5,4);
} # falls commando vorhanden
} # end sub TelefonAktion
######################################
# EventZeit: 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
######################################
sub TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
our $stat;
my $i; my $j;
our $ab;
my $Fritz_Box = $defs{"Fritz_Box"};
my ($event,$arg) = split (':',$_[0]);
$arg = ltrim($arg);
# Log(3,"TM: event: $event arg: $arg");
if ($event eq "event")
{
$stat = $arg;
if ($arg eq "disconnect")
{
# fhem("set msg2_TVMarina MUTE 0");
# fhem("set msg2_TVWohnzimmer MUTE 0");
# sig2_break(); fiedel: -> Funktion um Anrufername auf FS20SIG2 auszugeben (nicht genutzt)
# sig2(70); # ringout
} # if disconnect
return;
} # end if event
if ($stat eq "ring")
{
if ($event eq"external_number")
{
$extnum = $arg;
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "internal_number")
{
$intnum = $arg;
return;
} # end if intnum
if ($event eq "call_id")
{
$callID = $arg;
# hier koennen wir eine anrufgesteuerte Aktion starten
TelefonAktion($extname, $intnum);
$A[$callID] = "-> ";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
# fiedel: Folgende Dummys bzw. Funktionen in der CFG einrichten, wenn Samsung TV vorhanden!
# fhem("set msg2_TVMarina MUTE 1");
# fhem("set msg2_TVWohnzimmer MUTE 1");
# fhem("set msg1_TVMarina call Anruf von $extname $extnum");
# fhem("set msg1_TVWohnzimmer call Anruf von $extname $extnum");
return;
} # end if callid
return;
} # end if ring loop
if ($stat eq "connect")
{
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$ab = "ab";
} # end if internal_connection
if ($event eq "call_id")
{
$callID = $arg;
if ($ab && ($ab eq "AB")) {$A[$callID] = "AB"; $ab; }
$ab = undef; # zuruecksetzen
} # end if callID
} # end if connect
if ($stat eq "call")
{
if ($event eq"external_number")
{
$extnum = $arg;
#sig2(70); # ringout
return;
} # if external number
if ($event eq "external_name")
{
$extname = $arg;
return;
}
if ($event eq "call_id")
{
$callID = $arg;
$A[$callID] = "<-";
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
return;
} # end if callid
return;
} # end if callloop
if ($stat eq "disconnect")
{
if ($event eq "call_duration")
{
$callDuration = sprintf("%2d:%02d", ($arg/60),$arg%60);
return;
} # if call_duration
if ($event eq "call_id")
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($Fritz_Box);
for ($i=4;$i>0; $i--)
{
foreach $j ('A'..'E')
{
# $defs{"Fritz_Box"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal("Fritz_Box",$j.($i-1),"-");
readingsBulkUpdate($Fritz_Box,$j.$i,$tt);
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate($Fritz_Box,"A0",$A[$callID]);
readingsBulkUpdate($Fritz_Box,"B0",$B[$callID]);
readingsBulkUpdate($Fritz_Box,"C0",$C[$callID]);
readingsBulkUpdate($Fritz_Box,"D0",$D[$callID]);
readingsBulkUpdate($Fritz_Box,"E0",$E[$callID]);
readingsEndUpdate($Fritz_Box, 1);
$stat = "";
return;
} # end if callid
} # end if disconnect
##############################
} #end sub TelefonMonitor
1;
Ooookay, ich versuche es mal weiter...
Könntest Du in der Zeile #Log(3,"event: $event; arg: $arg");
das # wegmachen, die 99_myUtilsTelefon mit reload 99_myUtilsTelefon neuladen, dann einen Anruf tätigen und den Inhalt des Logs bitte posten?
Es scheint, als würde bei Dir die Verzweigung
if ($event eq "call_id") { ...
nicht ausgeführt werden. Daher wird kein readginsBeginUpdate gemacht und das readingsBulkUpdate schlägt fehl.
Aber das ist nur eine dunkle Vermutung.
hi,
so habe die alte CFg wieder genommen,
hier das log, es wird wieder nichts in der Anrufliste angezeigt:
2014.05.26 16:07:02 1: readingsUpdate(,A4,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,B4,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,C4,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,D4,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,E4,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,A3,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,B3,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,C3,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,D3,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,E3,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,A2,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,B2,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,C2,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,D2,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,E2,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,A1,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,B1,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,C1,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,D1,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,E1,-) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,A0,in_connected) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,B0,16:06:26 26.05.2014) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,C0,Dirk) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,D0,xxxx20394949xxx) missed to call readingsBeginUpdate first.
2014.05.26 16:07:02 1: readingsUpdate(,E0, 0:27) missed to call readingsBeginUpdate first.
was sagt denn der EventMonitor, wenn Du wieder auf die funktionierende Version zurückspringst und während eines Anrufes mal schaust und postet, was im EventMonitor angezeigt wird?
Das hier kommt im eventmonitor bei der funktionierenden
ts:
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box event: ring
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box external_number: 010533
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box external_name: Dirk
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box internal_number: 750
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box external_connection: SIP0
2014-05-26 18:36:50 FB_CALLMONITOR Fritz_Box call_id: 0
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box event: disconnect
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box call_duration: 0
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box missed_call: 0133 (Dirk)
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box missed_call_line: 750
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box call_id: 0
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box A4: ->
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box B4: 7:16:47 26.05.2014
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box C4: Dirk
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box D4: 0133
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box E4: 0:04
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box A3: <-
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box B3: 7:19:58 26.05.2014
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box C3: Dirk
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box D3: 0133
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box E3: 0:09
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box A2: ->
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box B2: 13:40:57 26.05.2014
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box C2: unknown
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box D2: 0176
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box E2: 0:11
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box A1: ->
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box B1: 16:58:34 26.05.2014
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box C1: unknown
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box D1: 015676
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box E1: 6:14
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box A0: ->
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box B0: 18:36:50 26.05.2014
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box C0: Dirk
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box D0: 0173
2014-05-26 18:36:56 FB_CALLMONITOR Fritz_Box E0: 0:00
Gesendet von meinem SGP521 mit Tapatalk
Damit kann ich etwas anfangen, danke. Muss aber ein paar Tage warten. Habe ab nächster Woche Urlaub und kann dann in Ruhe reinschauen. Im Moment ist noch ein bisschen was abzugeben.
Hallo,
eigentlich sieht der Auszug aus dem Eventmonitor ok aus. Nach Abschluss des Anrufes schiebt das Modul die Werte nach oben, dass sind die A4 - A0,..E4..E0 Einträge.
Die Meldung mit dem readingsBulkUpdate lässt eher darauf schliessen, dass der Name der Fritzbox-Instanz nicht in ein korrektes Hash für den ersten Parameter der readingsBeginUpdate/readingsBulkUpdate umgewandelt wird.
Dies erfolgt mit einer Anweisung der Art:
my $hash = $defs{'name-des-Objektes'};
und die readingsBeginUpdate wird dann mit($hash...
aufgerufen.
Bei mir im Original heisst die Instanz des CallMonitors 'meineFB'. Das muss natürlich dann im Modul angepast werden.
Werde das ganze bei Gelegenheit noch Mal etwas überarbeiten, denn der Name der Instanz des Callmonitors kommt auch im Event mit und kann so auch verwendet werden.
Gruß
Elektrolurch
Auch auf die Gefahr aus dem Fred gejagt zu werden... ;D
Welche Modulversion/Config ist denn nun die aktuellste und funktioniert auch noch?
Markus
Hallo,
hatte da noch einen Fehler gefunden, und zwar wenn man die Box nicht "meineFB" genannt hatte.
Habe das gefixt und verwende nun über das notify den Namen der Box. Daher ist die Rotine nun mit zwei Parametern aufzurufen.
Außerdem wird der loglevel für die Routine nun durch den loglevel (attr verbose) der aufrufenden Fritzbox bestimmt.
notify:
define Call_Notify notify meineFB:.* { \
TelefonMonitor ($NAME,$EVENT);; \
}
Noch ein Hinweis:
Für die Darstellung wird eine readingsGroup verwendet. Zur Ausgabe der Zeilennummer habe ich dort eine Änderung gemacht:
http://forum.fhem.de/index.php/topic,14608.msg172346/topicseen.html#msg172346
Gruß
Elektrolurch
Hallo
hier sind so viele schnipsel in den einzelnen Postings.
kann mir jemand mal eine Funktionierende komplette Posten bitte.
Steige bei den Treads nicht mehr durch.
DAnke
Nachtrag Keine Anzeige in der Anrufliste:
Fehler laut LOG:
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 40) line 2.
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 41) line 2.
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 42) line 2.
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 43) line 2.
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 44) line 2.
2014.05.31 10:50:26 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 45) line 2.
2014.05.31 10:50:45 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 55) line 2.
2014.05.31 10:50:45 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 56) line 2.
2014.05.31 10:50:45 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 57) line 2.
2014.05.31 10:50:46 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 61) line 2.
2014.05.31 10:50:46 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 62) line 2.
2014.05.31 10:50:46 3: Call_Notify return value: Undefined subroutine &main::TelefonMonitor called at (eval 63) line 2.
Ein Post höher steht die Datei und die Erklärung!
Die Version ist aktuell.
Moin,
habe vor ein paar Tagen den Callmonitor erfolgreich in mein Fhem einbinden können. Heute ist mir aufgefallen das die Anrufliste im Dashboard nicht automatisch geändert wird.
Das Problem ist schon einmal Thema gewesen.
Zitat von: Michi240281 am 18 April 2014, 12:58:40
Habe jetzt noch ein weiteres Problem:
Die Anrufliste wird nicht aktualisiert! Es stehen 5 Anrufe drin, aber die sind paar Tage alt. Im Logfile stehen alle Anrufe drin.
hat jemand ein Idee!!
Gruss Sven
mittlerweile läuft es bei mir.
Jeodch habe ich jeden Anruf in der Liste 2x.
Hallo,
habe mal schnell eine Wiki- Seite mit einer Beispielkonfig (http://www.fhemwiki.de/wiki/Callmonitor_mit_Anruferliste_und_Zusatzfunktionen) eingestellt. Bitte mal testen und bei Problemen hier melden. Der Code im Wiki ist direkt aus meinem funktionierenden System. Allerdings läuft es bei mir mit dem tollen Code von Zephyr auch erst wenige Tage. Also alles experimentell und kann / sollte verbessert und vervollständigt werden.
Vielleicht hilft es, um leichter eine funktionierende Anruferliste aus diesem mittlerweile unübersichtlichen Thread hinzubekommen.
Gruß
Frank
Edit: Wer das mit dem Floorplan und dem Seitenwechsel nachmachen möchte: Im Forum und Wiki mal nach "pageswap" suchen. :)
Hallo,
bisher ist es ja so das augehende Anrufe mit einem roten und eingehende mit einem grünen Icon dargestellt werden.
Was ich noch nicht hinbekommen haben:
Ist es möglich ausgehende Anrufe mit einem blauen Icon darzustellen (ja ist möglich).
Aber, ist es möglich anrufe in Abwesenheit bzw nicht angenommene Anrufe mit einem roten Icon darzustellen und angenommene mit einem grünen???
Viele Grüße
Phil
Ganz einfach Phil: Du trägst in das u. g. Attr. die entspr. Farben ein, so wie es dir gefällt.
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Gruß
Frank
Hallo Frank,
bei deiner attr-Zeile macht das natürlich Sinn und ich kann erkennen welches in.connected und in.notconnected ist.
Ich werde es später mal testen, bei mir sieht die attr-Zeile momentan noch folgendermaßen aus (da kann man das unterscheiden):
attr Anrufliste valueIcon {'A0.out' => 'phone_call@lightgreen', 'A0.in' => 'phone_call@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out' => 'phone_call@lightgreen', 'A1.in' => 'phone_call@red', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A2.out' => 'phone_call@lightgreen', 'A2.in' => 'phone_call@red', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A3.out' => 'phone_call@lightgreen', 'A3.in' => 'phone_call@red', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A4.out' => 'phone_call@lightgreen', 'A4.in' => 'phone_call@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}
Viele Grüße
Ich habe jetzt mal die Konfiguration aus dem Wiki getestet, allerdings werden da bei mir garkeine Icons angezeigt.
Funktioniert das bei euch?
Hast du dein FHEM auf dem neuesten Stand (update force)?
In deiner Web- Instanz muss der Imagepfad angegeben werden:
attr WEB iconPath fhemSVG:openautomation:default
Danach am Besten "shutdown restart".
Ja klar, denn mit einer älteren, hier aus dem Thread zusammen gebastelten Konfiguration hat es ja funktioniert. Dort konnte ich nur nicht unterscheiden zwischen in.connectedbund in.notconnected. deshalb wollte ich malbdie Konfiguration aus dem wiki testen. Die 99_myUtilsTelefon hab ich auch aus dem wiki
Gesendet von meinem Nexus 5 mit Tapatalk
Gab es zwischendurch denn neue Anrufe? Kann sein, dass in der Anrufliste noch immer A0.out steht und kein A0.outnotconnected?
Was sagt Dein Log, bzw der Event Monitor wenn ein Anruf über die FritzBox läuft?
Hallo,
ich hab jetzt die Version aus dem Wiki laufen, funktioniert fast alles ;-)
Das einzige Problem was ich jetzt habe ist das immer TM: event: external_name arg: unknown
bei allen anrufen ausgehend und eingehen. Das bedeutet es werden keine namen mehr aufgelöst.
?hat sonst noch jemand dieses Problem?
Gruß Rolf
Hallo, hab den Code aus dem Wiki übernommen und funktioniert ... bis auf eine Kleinigkeit...
Die Zeile des Floorplanes im Block "Anzeige der Anrufliste generieren:" müsste im Wiki noch auskommentiert bzw. entfernt werden (da bekam ich nen Fehler):
attr Anrufliste fp_9_Telefon 370,206,0,Anrufliste
Trotzdem VIELEN DANK für die tolle Arbeit!
Zitat von: spooy99 am 10 Juli 2014, 23:14:27
Die Zeile des Floorplanes im Block "Anzeige der Anrufliste generieren:" müsste im Wiki noch auskommentiert bzw. entfernt werden (da bekam ich nen Fehler):
attr Anrufliste fp_9_Telefon 370,206,0,Anrufliste
Erledigt. Danke für die Rückmeldung.
Peter
Habe bei mir alles auf Configdb umgestellt, seit dem funktioniert der Callmon nicht mehr.
Hat jemand das selbe problem?
GRuss Dirk
Hallo
ich hatte ja seit dem ich die Version aus dem Wiki genommen hatte das Problem, dass keine Anrufernamen mehr angezeigt wurden.
Ich konnte den Fehler eingrenzen, sobald ich:
define Func_TelMon_Show_N notify my_callmonitor:event:.ring { \
my $intum = ReadingsVal("my_callmonitor", "internal_number", undef);;\
my $extnum = ReadingsVal("my_callmonitor", "external_number", undef);;\
my $extname = ReadingsVal("my_callmonitor", "external_name", undef);;\
\
fhem "set Dum_TelMon_ShowNa_D $extname";;\
fhem "set Dum_TelMon_ShowNu_D $extnum";;\
\
if ($extname eq "unknown"){\
fhem("define Melde_Anrufer_A at +00:00:01 set webtablet ttsSay Rufnummer unterdrückt");;\
}\
else {\
fhem("define Melde_Anrufer_A at +00:00:01 set webtablet ttsSay $extname.");;\
}\
}
mit einbaue gehen die Anrufernamen nicht mehr?
Hat hier jemand eine Idee was hierbei die Ursache sein könnte?
Gruß Rolf
Hi Rolf,
welche Anzeige meinst du? Die mit dem Dummy oder die in der Scrollliste (Screenshot!)? Gibt es Fehlermeldungen? Wenn du den von dir gezeigten Teil auskommentierst, dann geht es sofort wieder?
Gruß
Frank
Hallo Frank,
wenn ich das "Func_TelMon_Show_N" notify lösche
bekomme ich in der Anrufliste "extname" und "extnum" angezeigt.
Mit dem notify wird immer "unkown" gelistet.
Ich vermute mal das Variabelen überschrieben werden, da meine Programmierkenntnisse sehr begrenzt sind kann ich das aber nicht so ganz nachvollziehen :-[
Gruß Rolf
Hm, da bin ich jetzt auch ratlos wie Rudi (Ratlos). ;D
Vieleicht hängt es mit "webtablet ttsSay" zusammen? Ich benutze das TTS- Modul und da geht alles. Kannst das "webtablet ttsSay"- Zeugs ja mal probehalber rausnehmen. Die Variablen sind ja nur lokal ("my") und überschreiben eigentlich nix.
Edit: Ach ich sehe es gerade: Mach das mal so:
fhem("set Dum_TelMon_ShowNa_D $extname");;\
fhem("set Dum_TelMon_ShowNu_D $extnum");;\
Ist ein Fehler von mir! Seltsamerweise geht es bei mir ohne die Klammern. Wenn es bei dir mit den Klammern geht, ändere ich es auch im WIKI.
Hallo Frank,
jetzt scheint es zu funktionieren, zumindest halb :-\
Ich bekomme jetzt jeden 2ten Anruf richtig angezeigt und angesagt, allerdings auch wenn ich das notify wieder raus nehme.
Dies könnte allerdings auch an der Installierten Labor Firmware der Fritzbox liegen,
da im Telefon auch jeder 2te Anrufer unbekant angezeigt wird.
Ich denke das man davon ausgehen kann, dass es nicht mehr an Fhem oder am notify liegt.
Danke
Hallo,
das Auflösen der Anrufernummer erfolgt auf zweierlei Weise:
1. Die Fritzbox selber schaut nur im lokalen Telefonbuch nach.
2. Das fhem-Modul löst die Anrufernummer auf zweierlei Weise auf, wenn das entsprechende Attribut für den reverse lookup eingeschaltet ist:
a) Zuerst im lokalen Adressbuch
2. Dann über den Aufruf diverser Internetseiten.
Gruß
Elektrolurch
Hat das schon jemand mal mit der configdb Variante probiert!
Bekomme immer folgenden Fehler im log, jedoch auf einem anderen System läuft dies so, nur nicht mit der configdb
014.07.15 19:41:57 0: Server shutdown Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 26. Useless use of a variable in void context at ./FHEM/99_myUtilsTelefon.pm line 184. 2014.07.15 19:42:08 1: reload: Error:Modul 99_myUtilsTelefon deactivated: 2014.07.15 19:42:09 3: telnetPort: port 7072 opened 2014.07.15 19:42:10 3: WEB: port 8083 opened 2014.07.15 19:42:10 3: WEBphone: port 8084 opened 2014.07.15 19:42:10 3: WEBtablet: port 8085 opened 2014.07.15 19:42:10 2: eventTypes: loaded 1193 events from ./log/eventTypes.txt 2014.07.15 19:42:10 3: Opening CUL868 device /dev/ttyACM0 2014.07.15 19:42:11 3: Setting CUL868 baudrate to 9600
Hallo Zusammen
Bei mir funktionierte seit ein paar Tagen die Anzeige der letzten 5 Anrufe im Callmonitor nicht mehr. Ich vermute das hing mit dem letzten Update zusammen - merkwürdigerweise scheint niemand anderes das Problem zu haben. Selbst auf meinem Testsystem, wo ich alles noch einmal nach dem WIKI installiert habe, hatte ich das gleich Problem. Die Readings A0 - E0 wurden nicht aktualisiert, und die alten entsprechend nicht verschoben. Ich habe es für mich erst einmal so gelöst, das ich die alte Version der 72_FB_CALLMONITOR.pm 5994 von 2014-05-28 wieder eingespielt habe. Seit dem zeichnet er die Telefonate wieder wie gewünscht auf.
Ich möchte aber auch nicht ausschließen, das ich irgend etwas übersehen habe oder selbst verändert habe - da ich fast täglich irgend welche Dinge verschlimmbessere ;) - aber wenn noch jemand anders ähnliche Erfahrungen hat, kann er sich ja melden und sich ggf. so wie ich erst einmal behelfen.
Viele Grüße
Gigafix
Hi - die Anrufliste wird bei mir seit dem letzten update auch nicht mehr aktualisiert.
Bestätigt bei mir auch nicht! Seit dem 17.07!
Beim FB_CALLMONITOR wurde kürzlich etwas erweitert/verändert. Möglicherweise verursacht das nun die Probleme:
http://forum.fhem.de/index.php/topic,25265.0.html
Entscheidend ist eventuell dies hier?
ZitatGenerell werden nun alle bekannten Daten zu einem Gespräch bei jedem Event erneut getriggert, so das bei jedem Call-Event (call, ring, connect und disconnect) die entsprechenden Daten in den Readings bereitstehen (external_nummer, _name,...)
Vielleicht muss euer Skript diese veränderte Verhaltensweise berücksichtigen?
Hallo zusammen,
ich habe (als Anfänger) das Problem, dass die Anrufliste nicht funktioniert.
Meiner Ansicht nach liegt das Problem darin, dass der FB_Callmonitor keine unique IDs erzeugt.
Zumindest sehe ich keine weder in den readings noch im log.
Hier meine fhem.cfg (nur der Ausschnitt des define):
define Fritz_Box FB_CALLMONITOR 192.168.178.1:1012
attr Fritz_Box reverse-search internal|search.ch|dasoertliche.de|klicktel.de
attr Fritz_Box reverse-search-phonebook-file ./log/FRITZ_Box_Telefonbuch.xml
attr Fritz_Box room Telefon
attr Fritz_Box unique-call-ids 1
attr Fritz_Box 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 Fritz_Box verbose 3
Und der Ausschnitt des entsprechenden Logs:
2014-07-20_10:55:00 Fritz_Box event: ring
2014-07-20_10:55:00 Fritz_Box direction: incoming
2014-07-20_10:55:00 Fritz_Box external_name: unknown
2014-07-20_10:55:00 Fritz_Box external_number: 0787616131
2014-07-20_10:55:00 Fritz_Box external_connection: ISDN
2014-07-20_10:55:00 Fritz_Box internal_number: 7558900
2014-07-20_10:55:04 Fritz_Box event: disconnect
2014-07-20_10:55:04 Fritz_Box external_name: unknown
2014-07-20_10:55:04 Fritz_Box missed_call_line: 7558900
2014-07-20_10:55:04 Fritz_Box external_number: 0787616131
2014-07-20_10:55:04 Fritz_Box internal_number: 7558900
2014-07-20_10:55:04 Fritz_Box call_duration: 0
2014-07-20_10:55:04 Fritz_Box direction: incoming
2014-07-20_10:55:04 Fritz_Box missed_call: 0787616131
2014-07-20_10:55:04 Fritz_Box external_connection: ISDN
Ein event CallID taucht nicht auf!
Was mache ich falsch?
Danke für Eure Hilfe
Frank
Das ist ein Bug im FB_CALLMONITOR Modul. Ich bin bereits drann das zu fixen ;-)
Gruß
Markus
Fix ist im SVN eingecheckt. Gibts ab morgen via update.
Gruß
Markus
Super, Danke!!!!!!
Zitat von: Markus Bloch am 20 Juli 2014, 11:26:48
Fix ist im SVN eingecheckt. Gibts ab morgen via update.
Gruß
Markus
Klasse eben ausprobiert! klappt wieder! Prima Danke Markus!
Bin auf den raspberry umgestiegen und habe nach demWiki den Callmonitor eingerichtet und die IP der Fritzbox angepasst.
Die Anrufliste wird mir allerdings immer nur als leer angezeigt und ich kann nicht sagen, woan das liegt.
Ein Logereignis wird gespeichert (my_callmonitor-2014.log)
2014-07-20_16:22:12 my_callmonitor event: ring
2014-07-20_16:22:12 my_callmonitor direction: incoming
2014-07-20_16:22:12 my_callmonitor external_name: unknown
2014-07-20_16:22:12 my_callmonitor external_number: 01577-----
2014-07-20_16:22:12 my_callmonitor external_connection: ISDN
2014-07-20_16:22:12 my_callmonitor internal_number: 999-----
2014-07-20_16:22:14 my_callmonitor event: disconnect
2014-07-20_16:22:14 my_callmonitor external_name: unknown
2014-07-20_16:22:14 my_callmonitor missed_call_line: 999-----
2014-07-20_16:22:14 my_callmonitor external_number: 01577-----
2014-07-20_16:22:14 my_callmonitor internal_number: 999-----
2014-07-20_16:22:14 my_callmonitor call_duration: 0
2014-07-20_16:22:14 my_callmonitor direction: incoming
2014-07-20_16:22:14 my_callmonitor missed_call: 01577-----
2014-07-20_16:22:14 my_callmonitor external_connection: ISDN
Auszug aus dem fhem.log
2014.07.20 16:22:11 4: FB_CALLMONITOR: my_callmonitor using klicktel.de for reverse search of 01577-----------
2014.07.20 16:22:11 4: FB_CALLMONITOR: my_callmonitor using dasoertliche.de for reverse search of 01577-----------
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:12 5: Triggering Func_TelMon_N
2014.07.20 16:22:12 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
2014.07.20 16:22:14 5: Triggering Func_TelMon_N
2014.07.20 16:22:14 4: Func_TelMon_N exec {
TelefonMonitor ($EVENT);;
}
Hat jemand einen Tipp, warum das nicht geht, oder geht das gar nicht, wenn fhem nicht auf der FB installiert ist?
Mache morgen einfach ein Update, dann geht das!
Alles klar. Danke.
EDIT: Beitrag gelöscht, funktioniert jetzt. Danke.
Seit dem letzten Update (heute) bekomme ich folgende Fehler im Log bei einem Anruf:
ZitatArgument "16c97c08e421cb46f798cf51ff096ec4" isn't numeric in array element at ./FHEM/99_myFritzUtils.pm line 210.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myFritzUtils.pm line 184.
Use of uninitialized value $ab in string eq at ./FHEM/99_myFritzUtils.pm line 178.
Use of uninitialized value $intCallDuration in string eq at ./FHEM/99_myFritzUtils.pm line 173.
Argument "7df08624278618e79f172d40cafcac37" isn't numeric in array element at ./FHEM/99_myFritzUtils.pm line 101.
Die Liste wird auch nur dahingehend aktualisiert, dass alle weiteren Einträg außer dem aktuellen (A0...) neu geschrieben werden. Der letzte Eintrag bleibt immer der, bei dem die sub noch funktioniert hat.
Gibt es Ideen dazu?
@karl0123: Das liegt daran, dass du die ein-eindeutigen Call-ID's verwendest. Diese werden von der Anrufliste nicht unterstützt, da als Call-Id hier eine reine Ganzzahl erwartet wird, die als Array-Index verwendet wird.
Btw. einen Hinweis an die Autoren dieser Anrufliste:Die Anrufliste kann mit dem letzten Update viel einfacher generiert werden. Man muss nur noch alle disconnect-Events verarbeiten, da nun alle Events alle zu Verfügung stehenden Daten immer mit triggern:
Zitat von: Eventmonitor
Events:
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox event: ring
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox direction: incoming
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox external_name: Handy
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox external_number: 0170XXXXXX
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox external_connection: SIP0
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox internal_number: 84XXXXX
2014-07-21 18:48:53 FB_CALLMONITOR FritzBox call_id: 0
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox event: connect
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox direction: incoming
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox internal_connection: DECT_1
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox external_name: Handy
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox external_number: 0170XXXXXX
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox external_connection: SIP0
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox internal_number: 84XXXXX
2014-07-21 18:48:58 FB_CALLMONITOR FritzBox call_id: 0
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox event: disconnect
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox direction: incoming
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox internal_connection: DECT_1
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox external_name: Handy
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox external_number: 0170XXXXXX
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox external_connection: SIP0
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox internal_number: 84XXXXX
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox call_duration: 7
2014-07-21 18:49:04 FB_CALLMONITOR FritzBox call_id: 0
Mit Hilfe des neuen Readings direction kann man die Richtung ermitteln (incoming oder outgoing) und auch sonst stehen alle notwendigen Daten für eine Anrufliste mit drin.
Man kann also ein Notify nach "event:disconnect" machen und dann dort mittels Perl-Funktion alle Reading-Values extrahieren (zum Zeitpunkt des Events stehen alle entsprechenden Werte definitiv in den Readings) und in die Anrufliste schreiben + Liste rotieren.
Das sollte die Anrufliste erheblich vereinfachen.
Viele Grüße
Markus
Hallo Zusammen,
mir ist gerade aufgefallen, dass meine ReadingsGroup seit 15.07. nicht mehr upgedated wird.
Letzter Eintrag ist vom 15.07., obwohl Anrufe raus und rein gingen.
Die Readings im Callmonitor gehen aber wohl:
call_duration
189
2014-07-21 20:52:01
call_id
0
2014-07-15 07:32:32
direction
incoming
2014-07-21 20:52:01
event
disconnect
2014-07-21 20:52:01
external_connection
SIP3
2014-07-21 20:52:01
external_name
Max Mustermann
2014-07-21 20:52:01
external_number
123456789
2014-07-21 20:52:01
internal_connection
DECT_3
2014-07-21 20:52:01
internal_number
987654321
2014-07-21 20:52:01
Der Fehler wurde ja hier schon auf der Seite 13 von anderen festgestellt und mit dem heutigen Update angeblich gefixed.
Leider ist er bei mir immer noch vorhanden.
Hallo,
der Fehler lag wohl daran, dass die "CallID" nicht mehr übertragen wurde. Ohne die CallID kann mein Call-Monitor die Anrufe und die Events nicht richtig zuordnen. Ich habe den Call-Monitor so programmiert, dass er auch dann funktioniert, wenn mehrere Anrufe gleiczeitig passieren.
Nach dem letzten Update funktionierte aber wieder alles korrekt.
Hast Du nach dem Update einen Restart durchgeführt?
Gruß
Elektrolurch
Ja, habe einen Restart von fhem durchgeführt.
Sonst wurde nichts geändert.
EDIT: seit jetzt geht es wieder? Wieder ohne Änderung?
Kann man das Telefonbuch der FritzBox automatisch auf den RaspberryPi downloaden und mit dem Callmonitor ohne Konvertierung verwenden?
Was ich mir vorstelle, ist einen CRON Job auf dem RSPI einzustellen, der per (?) das Telefonbuch abholt und in einem bestimmten Verzeichnis für den Callmonitor bereitstellt.
Hat sowas schon jemand am Laufen?
Grüße,
Michael
Bin auch gerade dabei mir so etwas zu "basteln":
Linux Server mit FHEM holt jede Nacht das Telefonbuch.xml von der Fritte.
Bis jetzt habe ich dazu ein php Tool gefunden: https://github.com/mypikachu/fritzbox_api_php (https://github.com/mypikachu/fritzbox_api_php)
Funktionier leider (noch) nicht. Siehe auch her, gleiches Problem: http://www.ip-phone-forum.de/showthread.php?t=270384 (http://www.ip-phone-forum.de/showthread.php?t=270384)
Sowas hat bestimmt noch keiner. ;) Du kannst für die Fritzbox- API (Suche hier oder im IP- Phone Forum) eine Funktion schreiben, die das Tel.Buch exportiert. Sollte also nicht unmöglich sein.
Gruß
Frank
Edit: Genau die von Mitch erwähnte meine ich. Man muss sich da etwas in regex einfummeln. 8)
Edit2: Gibts ja alles schon fast: (http://www.ip-phone-forum.de/showthread.php?t=196309&highlight=fritzbox_api_php)
Zitatchanged fritzbox_get_foncallslist.php to work with new firmwares, moved old method to fritzbox_get_foncallslist_xml.php
Dieses Script könnte man als Vorlage zum Anpassen nehmen.
Wieso umwandeln???
Exportiert die XML und hinterlegt den Pfad als Attribut im CALLMONITOR. Dann mit dem Set Befehl das File neu einlesen. Der CALLMONITOR parst das XML direkt so wie es ist.
Steht alles in der commandref
Umwandeln?
Hat ja niemand gesagt.
Es geht darum,automatisiert das XLM von der Fritte zu holen und auf dem FHEM Server zu speicher und dann neu ein zu lesen.
Siehe fiedels letzter Post.
Guten Abend,
ich habe mich nun auch an den Callmonitor herangewagt und bis jetzt hat alles funktioniert. Ich stelle die Anruferliste auf einem Infodisplay (kleines billigesTablet) über Webviewcontrol auf dem Dashboard dar. Allerdings aktualisiert sich die Anzeige bei Änderung der Anrufliste nicht.
Bei Änderungen von Lichtern (auch wenn diese nicht über fhem direkt geschalten werden) o.ä. sehe ich sofort die Änderung am Dashboard.
Was muss ich tun, damit dies auch bei Anrufen so ist.
Vielen Dank schon einmal.
Grüße
mrabdip
Hi mrabdip,
eigentlich sollte Longpoll dafür sorgen, dass sofort aktualisiert wird. Allerdings scheint bei dir Longpoll schon aktiv zu sein, sonst wäre das mit den Lichtern nicht so. Was auf jeden Fall geht: Mit der "Pageswap- Funktion (http://www.fhemwiki.de/wiki/Browsersteuerung,_Seiten_per_JS_autom._aufrufen)" einen Aufruf der gleichen Seite (=eventgesteuerter Refresh) ausführen.
Gruß
Frank
Hallo,
schau mal in den Code des CallMonitors und suche mal nach "readingsBulkUpdate".
Damit wird zeilen- und spaltenweisekopiert und die vorhandenen Eintragungen nach unten verschoben.
Wenn ich mich recht erinnere, habe ich für den letzten Parameter eine 0 angegeben, damit nicht für jedes einzelne Kopieren ein Event in den fhem-Baum geschoben wird. Ersetze mal das durch eine 1. Vielleicht wird dann die Anzeige ja aktualisiert.
Und kurz darauf wird dann noch readingsEndUpdate(..,1) aufgerufen. Da muss dann auch eine 1 statt einer 0 stehen.
Gruß
Elektrolurch
Hallo,
also bei readingsBulkUpdate finde ich ein paar Zeilen, jedoch keine 0.
readingsBulkUpdate($hash, "event", lc($array[1]));
readingsBulkUpdate($hash, "external_number", (defined($external_number) ? $external_number : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
readingsBulkUpdate($hash, "external_name",(defined($reverse_search) ? $reverse_search : "unknown")) if($array[1] eq "RING" or $array[1] eq "CALL");
readingsBulkUpdate($hash, "internal_number", $array[4]) if($array[1] eq "RING" or $array[1] eq "CALL");
readingsBulkUpdate($hash, "external_connection", $array[5]) if($array[1] eq "RING");
readingsBulkUpdate($hash, "external_connection", $array[6]) if($array[1] eq "CALL");
readingsBulkUpdate($hash, "internal_connection", $connection_type{$array[3]}) if($array[1] eq "CALL" or $array[1] eq "CONNECT" and defined($connection_type{$array[3]}));
readingsBulkUpdate($hash, "call_duration", $array[3]) if($array[1] eq "DISCONNECT");
readingsBulkUpdate($hash, "missed_call", $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{NUMBER});
readingsBulkUpdate($hash, "missed_call_line", $hash->{helper}{MISSED_CALL_DETECTION}{$array[2]}{LINE})
readingsBulkUpdate($hash, "call_id", $hash->{helper}{CALLID}{$array[2]});
readingsBulkUpdate($hash, "call_id", $array[2]);
Und bei readingsEndUpdate steht bereits eine 1.
readingsEndUpdate($hash, 1);
Ich tappe da gerade etwas im Dunkeln
Grüße
mrabdip
Hallo,
wo hast Du denn da nachgeschaut?
Ich meine den Code, der in einer 99_myUtils... steht und von dem notify des Call-Monitors aufgerufen wird.
Das ist so eine Schleife mit for(....
und da werden $A[$i]...$E[$i] umkopiert.
Leider weiß ich natürlich nicht, was aus dem von mir hier ursprünglich mal eingestellten Code geworden ist.
Gruß
Elektrolurch
Hallo,
ich war leider in der 72_FB_CALLMONITOR.pm. Nun in der richtigen. Also readingsEndUpdate ist auf 1
readingsEndUpdate( $my_callmonitor, 1 );
bei readingsBulkUpdate finde ich keine 1 und weiß auch nicht wo man die setzen muss
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'E' ) {
# $defs{"my_callmonitor"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "my_callmonitor", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $my_callmonitor, "A0", $A[$callID] );
readingsBulkUpdate( $my_callmonitor, "B0", $B[$callID] );
readingsBulkUpdate( $my_callmonitor, "C0", $C[$callID] );
readingsBulkUpdate( $my_callmonitor, "D0", $D[$callID] );
readingsBulkUpdate( $my_callmonitor, "E0", $E[$callID] );
Gruß
mrabdip
foreach $j ( 'A' .. 'E' ) {
# $defs{"my_callmonitor"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "my_callmonitor", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt,1 );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $my_callmonitor, "A0", $A[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "B0", $B[$callID] ,1);
readingsBulkUpdate( $my_callmonitor, "C0", $C[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "D0", $D[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "E0", $E[$callID],1 );
Ob dann wirklich der Bildschirm auch aktualisiert wird, kann ich nicht sagen.
Was aber leider passiert, ist das für jedes der aktualisierten readings ein Event generiert wird.
Gruß
Elektrolurch
Hi,
Ich habe (versucht) den Callmonitor und die Anrufbeantworterfunktion von hier http://forum.fhem.de/index.php/topic,16370.msg113765.html#msg113765 (http://forum.fhem.de/index.php/topic,16370.msg113765.html#msg113765) zu verheiraten (Ausschnitt aus der fhem.cfg):
define FritzBox FB_CALLMONITOR 192.168.6.1:1012
attr FritzBox local-area-code 09931
attr FritzBox event-on-change-reading missed_call
attr FritzBox reverse-search all
attr FritzBox reverse-search-cache 1
attr FritzBox reverse-search-cache-file ./log/FritzBox_Cache.txt
attr FritzBox reverse-search-phonebook-file ./log/FritzBox_Telefonbuch.xml
#attr FritzBox room Telefon
attr FritzBox 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 F0 F1 F2 F3 F4
attr FritzBox verbose 0
attr FritzBox unique-call-ids 1
#attr FritzBox sortby A01
define FileLog_FritzBox FileLog ./log/FritzBox-%Y.log FritzBox
attr FileLog_FritzBox logtype text
# Normale Anrufe
define not.FBCallNotify notify FritzBox:.* { FB_TelefonMonitor ($EVENT);; }
attr not.FBCallNotify room Telefon
attr not.FBCallNotify sortby C01
# Anrufbeantworter
define not.FBCallNotify.AB notify FritzBox:missed_call.* { FB_ABCall( );; }
attr not.FBCallNotify.AB room Telefon
attr not.FBCallNotify.AB sortby C02
Die Folge ist jetzt, dass gar keine Anrufe mehr in der Anrufliste erscheinen. In der Definition der Anrufliste habe ich jedoch nichts verändert.
Ich gehe davon aus, dass die Ursache hier
attr FritzBox event-on-change-reading missed_call
liegt und somit das Notify
define not.FBCallNotify notify FritzBox:.* { FB_TelefonMonitor ($EVENT);; }
nicht mehr aufgerufen wird.
Wenn dem so ist, wie müsste die Definition für attr FritzBox event-on-change-reading missed_call
korrekt lauten damit sowohl "normale" als auch Anrufe am AB aufgezeichnet bzw. getriggert werden? Oder kann ich die Anweisung event-on-change-reading auch weglassen?
Noch eine andere Frage zum Anrufbeantworter: Zum Zeitpunkt als mein Testanruf durch den AB angenommen wurde, hätte ich auch einen Eintrag im Log der Fritzbox erwartet. Das Log ist wie folgt definiert define FileLog_FritzBox FileLog ./log/FritzBox-%Y.log FritzBox
attr FileLog_FritzBox logtype text
aber es wird dort keine Aufzeichnung für den AB geloggt.
Was bedeutet eigentlich ganz genau die Angabe von missed_call
bei dem o.g. Attribut? Sollte dieser Text im Log der FritzBox erscheinen?
Weder dort noch in meiner 99_MyUtilsTelefon.pm konnte ich diesen Text finden. Also entweder wir der nicht ins Log geschrieben, oder durch die vielen Versionen von Coding hier das ich versucht habe zu sortieren und an meine FBF anzupassen, ist da etwas ein klein wenig durcheinander geraten :-\
Grüße,
Michael
Ich glaube ich antworte mir mal selbst ;)
Also das was ich ursprünglich vor hatte, die Aufzeichnungen des ABs darzustellen war wohl 'ne Ente. Das Coding das ich gefunden hatte ist wohl eine andere Art, eine Anrufliste darzustellen. Die habe ich aber schon definiert, mit Hilfe diverser Postings hier und als readingsGroup gelöst.
Nichtsdestotrotz werden aber Aufzeichnungen des ABs nicht in der readingsGroup dargestellt.
Das Protokoll das während eines Anrufs mit Einschaltung des AB aufgezeichnet wurde ich bei mir wie folgt:
Zitat2014-08-22_21:40:24 FritzBox event: ring
2014-08-22_21:40:24 FritzBox direction: incoming
2014-08-22_21:40:24 FritzBox external_name: Handy Papa
2014-08-22_21:40:24 FritzBox external_number: 015xxxxxx
2014-08-22_21:40:24 FritzBox external_connection: POTS
2014-08-22_21:40:24 FritzBox internal_number:
2014-08-22_21:40:24 FritzBox call_id: e092ecc9d19f78ab55d78851a591d8c2
2014-08-22_21:40:29 FritzBox event: connect
2014-08-22_21:40:29 FritzBox direction: incoming
2014-08-22_21:40:29 FritzBox internal_connection: Answering_Machine_1
2014-08-22_21:40:29 FritzBox external_name: Handy Papa
2014-08-22_21:40:29 FritzBox external_number: 015xxxxxx
2014-08-22_21:40:29 FritzBox external_connection: POTS
2014-08-22_21:40:29 FritzBox internal_number:
2014-08-22_21:40:29 FritzBox call_id: 54009df7ff0f26e71c7722c3fa4891b8
2014-08-22_21:40:47 FritzBox event: disconnect
2014-08-22_21:40:47 FritzBox direction: incoming
2014-08-22_21:40:47 FritzBox internal_connection: Answering_Machine_1
2014-08-22_21:40:47 FritzBox external_name: Handy Papa
2014-08-22_21:40:47 FritzBox external_number: 015xxxxxx
2014-08-22_21:40:47 FritzBox external_connection: POTS
2014-08-22_21:40:47 FritzBox internal_number:
2014-08-22_21:40:47 FritzBox call_duration: 19
2014-08-22_21:40:47 FritzBox call_id: 622a5b820ee5362f355b2b3d638938fe
So wie ich das Coding in der 99_MyUtilsTelefon.pm deute, müsste eigentlich eigene Readings auch für den AB erstellt werden. Nur irgendwie erscheinen diese Art von Einträge nicht in der readingsGroup, die bei mir wie folgt definiert ist:
define FritzBox FB_CALLMONITOR 192.168.6.1:1012
attr FritzBox local-area-code 09xxx
attr FritzBox reverse-search all
attr FritzBox reverse-search-cache 1
attr FritzBox reverse-search-cache-file ./log/FritzBox_Cache.txt
attr FritzBox reverse-search-phonebook-file ./log/FritzBox_Telefonbuch.xml
#attr FritzBox room Telefon
attr FritzBox 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 F0 F1 F2 F3 F4
attr FritzBox verbose 0
attr FritzBox unique-call-ids 1
#attr FritzBox sortby A01
define FileLog_FritzBox FileLog ./log/FritzBox-%Y.log FritzBox
attr FileLog_FritzBox logtype text
# Normale Anrufe
define not.FBCallNotify notify FritzBox:.* { FB_TelefonMonitor ($EVENT);; }
attr not.FBCallNotify room Telefon
attr not.FBCallNotify sortby C01
define Anrufliste readingsGroup FritzBox:A0,B0,C0,D0,E0 FritzBox:A1,B1,C1,D1,E1 FritzBox:A2,B2,C2,D2,E2 FritzBox:A3,B3,C3,D3,E3 FritzBox:A4,B4,C4,D4,E4
attr Anrufliste mapping  
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Telefon
attr Anrufliste sortby A02
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_ring_out@green', 'A0.in_connected' => 'phone_ring_in@green', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A0.in_notconnected' => 'phone_ring_in@red', 'A0.out_notconnected' => 'phone_ring_out@red', 'A1.out_connected' => 'phone_ring_out@green', 'A1.in_connected' => 'phone_ring_in@green', 'A1.AB' => 'audio_volume_mid@lightgreen', 'A1.in_notconnected' => 'phone_ring_in@red', 'A1.out_notconnected' => 'phone_ring_out@red', 'A2.out_connected' => 'phone_ring_out@green', 'A2.in_connected' => 'phone_ring_in@green', 'A2.AB' => 'audio_volume_mid@lightgreen', 'A2.in_notconnected' => 'phone_ring_in@red', 'A2.out_notconnected' => 'phone_ring_out@red', 'A3.out_connected' => 'phone_ring_out@green', 'A3.in_connected' => 'phone_ring_in@green', 'A3.AB' => 'audio_volume_mid@lightgreen', 'A3.in_notconnected' => 'phone_ring_in@red', 'A3.out_notconnected' => 'phone_ring_out@red', 'A4.out_connected' => 'phone_ring_out@green', 'A4.in_connected' => 'phone_ring_in@green', 'A4.AB' => 'audio_volume_mid@lightgreen','A4.in_notconnected' => 'phone_ring_in@red', 'A4.out_notconnected' => 'phone_ring_out@red', }
Ich habe meine 99_MyUtilsTelefon.pm mal angefügt, der Vollständigkeithalber.
Ich habe aktuell zwei Probleme: die fehlende Anzeige von AB Aufzeichnungen und zweitens was auch andere schon geschrieben haben, die readingsGroup aktualisiert sich nicht automatisch, wenn der Anruf beendet(?) wurde. Erst ein F5 im Browser (Firefox) aktualisiert die Anzeige.
Hat hier jemand eine Funktionierende Anrufbeantworter-Lösung. Ich stelle mir erstens vor, dass die Aufzeichnungen in der readingsGroup erscheinen und dass man dann die Aufzeichnung auch über fhem abhören kann.
Grüße,
Michael
Das liegt daran, dass die Call-ID's nicht gleich sind. Das ist ein Bug im FB_CALLMONITOR. Habe ich aber soeben gefixt und ist via update ab morgen verfügbar.
Viele Grüße
Markus
Hast du dann noch eine Idee, warum bei einem beendeten Anruf die readingsGroup nicht umgehend aufgefrischt wird. Habe gerade einen neuen Test hinter mir, bei dem ich erst nach einem Refresh mit F5, die aktuellste Anzeige bekam...
Nach dem Update steht jetzt zumindest der Anruf, der auf den AB umgeleitet wurde in der Anzeige.
NUR es gab offensichtlich keinen Hinweis darauf, dass es ein "AB"-Event war. Das Symbol, das ich für eine AB Aufzeichnung verwende habe, wird nicht dargestellt. Stattdessen das "normale" Anrufsymbol.
Wieder das Protokoll dazu mit den jetzt korrekten Call-IDs:
Zitat2014-08-23_10:22:47 FritzBox event: ring
2014-08-23_10:22:47 FritzBox direction: incoming
2014-08-23_10:22:47 FritzBox external_name: Handy Papa
2014-08-23_10:22:47 FritzBox external_number: 0151xxxxx
2014-08-23_10:22:47 FritzBox external_connection: POTS
2014-08-23_10:22:47 FritzBox internal_number:
2014-08-23_10:22:47 FritzBox call_id: 9aafed0dc142c3e91b99717c1280305c
2014-08-23_10:22:53 FritzBox event: connect
2014-08-23_10:22:53 FritzBox direction: incoming
2014-08-23_10:22:53 FritzBox internal_connection: Answering_Machine_1
2014-08-23_10:22:53 FritzBox external_name: Handy Papa
2014-08-23_10:22:53 FritzBox external_number: 0151xxxxx
2014-08-23_10:22:53 FritzBox external_connection: POTS
2014-08-23_10:22:53 FritzBox internal_number:
2014-08-23_10:22:53 FritzBox call_id: 9aafed0dc142c3e91b99717c1280305c
2014-08-23_10:23:12 FritzBox event: disconnect
2014-08-23_10:23:12 FritzBox external_name: Handy Papa
2014-08-23_10:23:12 FritzBox external_number: 0151xxxxx
2014-08-23_10:23:12 FritzBox internal_number:
2014-08-23_10:23:12 FritzBox call_duration: 20
2014-08-23_10:23:12 FritzBox direction: incoming
2014-08-23_10:23:12 FritzBox internal_connection: Answering_Machine_1
2014-08-23_10:23:12 FritzBox external_connection: POTS
2014-08-23_10:23:12 FritzBox call_id: 9aafed0dc142c3e91b99717c1280305c
Die valueIcons werden folgendermassen definiert:
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_ring_out@green', 'A0.in_connected' => 'phone_ring_in@green', 'A0.AB' => 'audio_volume_mid@lightgreen'...
Erwartet hätte ich jetzt das audio_volume_mid Symbol. Angezeigt wird jedoch phone_ring_in.
Irgendetwas im Utility Modul scheint nicht ganz so zu funktionieren wie gewünscht (Auszug):
} elsif ( $ab eq "AB" )
{
$A[$callID] = "AB";
$F[$callID] = "audio_volume_mid\@lightgreen";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
$intCallDuration = undef;
} elsif ($intCallDuration gt 0 )
{
$A[$callID] = "in_connected";
$F[$callID] = "phone_ring_in\@green";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war,
# der angenommen wurde
$intCallDuration = undef;
}
}
# hier notieren was generell passieren soll, sobald ein Anruf beendet wurde
# (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" )
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($my_callmonitor);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'F' ) {
# $defs{"my_callmonitor"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "FritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $my_callmonitor, "A0", $A[$callID] );
readingsBulkUpdate( $my_callmonitor, "B0", $B[$callID] );
readingsBulkUpdate( $my_callmonitor, "C0", $C[$callID] );
readingsBulkUpdate( $my_callmonitor, "D0", $D[$callID] );
readingsBulkUpdate( $my_callmonitor, "E0", $E[$callID] );
readingsBulkUpdate( $my_callmonitor, "F0", $F[$callID] );
readingsEndUpdate( $my_callmonitor, 1 );
$stat = "";
return( true );
} # end if callid
Ich habe mir an der Stelle des Coding, bei der der AB registriert wird einen Log Eintrag erstellt:
} elsif ( $ab eq "AB" )
{
$A[$callID] = "AB";
$F[$callID] = "audio_volume_mid\@lightgreen";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
Log(3,"!!! AB angenommen !!!");
$intCallDuration = undef;
Dieser wird im Log aufgezeichnet:
Zitat2014.08.23 10:32:50 3: !!! AB angenommen !!!
So, jetzt bin ich ratlos. AB geht ran, Anruf wird in der readingsGroup angezeigt (wenn auch kein Refresh stattfindet), aber das Symbol wechselt nicht.
Michael
Hallo,
zu 2:
...hatte ich weiter oben auch schon geschrieben:
Bei den readingsBulkUpdate noch einen Parameter vor der schliessenden Klammer anhängen: ,1)
Damit werden (leider) die ganzen Events, die durch das Umkopieren der Zeilen/Zellen entstehen in den fhem-Baum gepushed, vielleicht gibt es dann aber auch eine sofortige Aktualisierung des Bildschirms.
readingsEndUpdate muss dann natürlich auch mit 1 aufgerufen werden.
Zum AB:
ok. Nochmals hingeschaut. Saudummer Fehler:
} elsif ( $ab eq "AB" )
weiter oben wird aber $ab = 'ab'; gesetzt!
Leider sagt mein Screenreader nicht Groß- und Kleinschreibung an, wenn ich nicht explizit danach frage.
Also in dem elsif 'ab' schreiben und dann soltte es gehen.
Man verzeihe mir den Anfängerfehler, war so mein erster Code für fhem... vor einem Jahr.
Gruß
Elektrolurch
Zitat von: Elektrolurch am 23 August 2014, 11:23:15
Bei den readingsBulkUpdate noch einen Parameter vor der schliessenden Klammer anhängen: ,1)
Damit werden (leider) die ganzen Events, die durch das Umkopieren der Zeilen/Zellen entstehen in den fhem-Baum gepushed, vielleicht gibt es dann aber auch eine sofortige Aktualisierung des Bildschirms.
readingsEndUpdate muss dann natürlich auch mit 1 aufgerufen werden.
Da habe ich jetzt zu wenig Hintergrundwissen um zu beurteilen welchen Vor- oder Nachteil dies hat.
Das mit der Groß-Kleinschreibweise ist bei mir nicht der Fall. Ich glaube ich habe dies, wie ich mir den Code angesehen habe, bereits geändert:
sub FB_TelefonMonitor($)
{
our $extnum;
our $intnum;
our $extname;
our $callID;
our $callDuration;
# Anrufdauer als Integervariable speichern
our $intCallDuration;
our $stat;
our @lastPhoneEvent;
my $i;
my $j;
our $ab;
my $my_callmonitor = $defs{"FritzBox"};
my ( $event, $arg ) = split( ':', $_[0] );
$arg = ltrim($arg);
#Log(3,"TM: event: $event arg: $arg");
if ( $event eq "event" ) {
$stat = $arg;
return;
} # end if event
if ( $stat eq "ring" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "internal_number" ) {
$intnum = $arg;
return;
} # end if intnum
if ( $event eq "call_id" ) {
$callID = $arg;
$lastPhoneEvent[$callID] = $stat;
# hier koennen wir eine anrufgesteuerte Aktion starten
FB_TelefonAktion( $extname, $intnum );
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$F[$callID] = "phone_ring";
return;
} # end if callid
return;
} # end if ring loop
if ( $stat eq "connect" ) {
if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
{
$ab = "AB";
} # end if internal_connection
} # end if connect
if ( $stat eq "call" ) {
if ( $event eq "external_number" ) {
$extnum = $arg;
return;
} # if external number
if ( $event eq "external_name" ) {
$extname = $arg;
return;
}
if ( $event eq "call_id" ) {
$callID = $arg;
$B[$callID] = EventZeit();
$C[$callID] = $extname;
$D[$callID] = $extnum;
$lastPhoneEvent[$callID] = $stat;
return;
} # end if callid
return;
} # end if callloop
if ( $stat eq "disconnect" ) {
if ( $event eq "call_duration" ) {
$intCallDuration = $arg;
$callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
return;
} # if call_duration
if ( $lastPhoneEvent[$callID] eq "call" )
{
if ( $intCallDuration eq 0 )
{
$A[$callID] = "out_notconnected";
$F[$callID] = "phone_ring_out\@red";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war,
# der nicht angenommen wurde
} elsif ( $intCallDuration gt 0 )
{
$A[$callID] = "out_connected";
$F[$callID] = "phone_ring_out\@green";
# hier notieren was passieren soll, wenn es ein eingehender Anruf war,
# der angenommen wurde
}
} elsif ( $lastPhoneEvent[$callID] eq "ring")
{
if ( $intCallDuration eq 0 )
{
$A[$callID] = "in_notconnected";
$F[$callID] = "phone_call\@red";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war,
# der nicht angenommen wurde
$intCallDuration = undef;
} elsif ( $ab eq "AB" )
{
$A[$callID] = "AB";
$F[$callID] = "audio_volume_mid\@lightgreen";
$ab = undef;
# hier notieren was passieren soll, wenn der AB dranging
#Log(3,"!!! AB angenommen !!!");
$intCallDuration = undef;
} elsif ($intCallDuration gt 0 )
{
$A[$callID] = "in_connected";
$F[$callID] = "phone_ring_in\@green";
# hier notieren was passieren soll, wenn es ein ausgehender Anruf war,
# der angenommen wurde
$intCallDuration = undef;
}
}
# hier notieren was generell passieren soll, sobald ein Anruf beendet wurde
# (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)
if ( $event eq "call_id" )
{
$callID = $arg;
# shiften der alten Inhalte
my $tt;
readingsBeginUpdate($my_callmonitor);
for ( $i = 4 ; $i > 0 ; $i-- ) {
foreach $j ( 'A' .. 'F' ) {
# $defs{"my_callmonitor"}{READINGS}{$j.($i-1)}{VAL};
$tt = ReadingsVal( "FritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $my_callmonitor, "A0", $A[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "B0", $B[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "C0", $C[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "D0", $D[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "E0", $E[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "F0", $F[$callID],1 );
readingsEndUpdate( $my_callmonitor, 1 );
$stat = "";
return( true );
} # end if callid
} # end if disconnect
} #end sub FB_TelefonMonitor
Dies würde aber nach wie vor bedeuten, dass ich keine AB Event bekomme, weil die Schreibweise bei mir schon immer korrekt ist, es muss an etwas anderem liegen - Funktioniert dies bei dir korrekt?
Michael
Hallo,
AB geht jetzt, nachdem ich die Schreibweise korrigiert hatte. Da wurde bezüglich meiner ursprünglichen Version ein wenig umgestellt (!), so dass ich das jetzt so auf die schnelle nicht nachvollziehen kann, warum es bei Dir immer noch nicht geht.
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt );
da gehört auch noch eine 1 in die Klammer
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt,1 );
sonst wird nur die erste Zeile aktualisiert und man sieht nicht, wie die anderen Zeilen nach unten geschoben werden.
Gruß
Elektrolurch
Wärst du so nett und hängst mal dein aktuellstes Modul rein, so dass ich mal vergleichen kann?
Nochmals nachgefragt, zur Sicherheit, bevor wir uns beide die Mühe machen: bei dir werden AB-Aufzeichnungen angezeigt?
Danke,
Michael
Ich habe die Änderungen nun ergänzt bzw. überprüft
$tt = ReadingsVal( "FritzBox", $j . ( $i - 1 ), "-" );
readingsBulkUpdate( $my_callmonitor, $j . $i, $tt,1 );
} # end j
} # end i
$E[$callID] = $callDuration;
readingsBulkUpdate( $my_callmonitor, "A0", $A[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "B0", $B[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "C0", $C[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "D0", $D[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "E0", $E[$callID],1 );
readingsBulkUpdate( $my_callmonitor, "F0", $F[$callID],1 );
readingsEndUpdate( $my_callmonitor, 1 );
aber um ehrlich zu sein das hat gar nichts gebracht. Ich hatte die Seite mit den aktuellen Anrufen offen und erneut einen Anruf (ausgehend) getätigt. Die Seite hat sich nicht automatisch aktualisiert - erst wieder nach F5.
MIchael
Hallo fhem-Gemeinde,
ich habe am Wochenende mein "Erstlingswerk" von 2013 überarbeitet.
Ergebnis:
Nach den events ring | call | connect | disconnect werden die Daten nun in einen hash %mem geschrieben.
Wenn das Event "call_id" kommt werden die Daten in einen hash %callmem{$callID} überführt (sub TM_Store).
Je nach Einstellung der globalen Variable:
# TelefonMonitor type: all | incoming | outgoing | missed_call | all_after_disconnect
# use sub TM_MonitorType('all'); for setting type
my $monitor_type = 'all';
werden nun alle,nur eingehende, nur ausgehende oder verpasste Anrufe in den Speicher übernommen.
Die Symbole für eingehende oder ausgehende Anrufe können im Modul (Bereich Adaption) auch geändert werden.
Die zuordnung der Werte erfolgt in TM_Store (Spalten A ... E). Die Übertragung der Werte in den Speicher, und damit das Update der Anzeige, erfolgt in Abhängigkeit der Variable $monitor_type mit TM_UpdateTable.
Da die Anzeige bei $monitor_type = all @ incoming | outgoing sofort erfolgt, wird die Aktivierung des Anrufbeantworters und der Gesprächslänge beim "disconnect" nachträglich in die Anzeige geschrieben.
Anrufbeantworter: answering_machine_1 " wird als "AB" dargestellt, alle weiteren ABs mit ihrer Nummer hinter dem AB (getestet und funktioniert).
Aktualisierung der Anzeige:
Variable des Moduls: $update = 1
Alle Änderungen der readings werden an fhem übertragen. Damit sollte eigentlich ein Update der Anzeige sichergestellt sein. Für die web-Instanz muss natürlich das Attr. longpoll auf 1 gesetzt sein.
Allerdings hatte ich nach Klingeln des Anrufs auch kein Update der Anzeige (Firefox). longpoll aktualisiert wohl nur im Zeitintervall (?).
Der Code ist jedenfalls so programmiert ($update = 1), dass die Anzeige gem. fhem aktualisiert werden müsste.
Nachteil ist, das bei Anrufen fhem durch die erzeugten Events für eine kurze Zeit (ziemlich) belastet" ist.
Wer das vermeiden will, setzt $update auf 0.
Beim Neuaufbau einer Seite (F5) werden natürlich alle Werte weiterhin korrekt angezeigt.
Also: Das Problem "der sofortigen Aktualisierung der Anzeige" liegt nicht beim TelefonMonitor", sondern bei der verwendeten readingsGroup oder bei fhem.
So, viel Spaß beim testen. Der Code möge die Neueinsteiger auch dazu animieren, sich etwas mehr mit perl zu beschäftigen.
Gruß
Elektrolurch
Servus,
du kannst davon ausgehen, dass du es zumindest bei mir bereits erreicht hast, sich mit Perl zu beschäftigen, obwohl ich es am Anfang erst gar nicht vor hatte.
Aber im Zusammenhang mit fhem kommt man der Sache halt nicht aus. Das ist halt kein Produkt von der Stange, dafür aber flexibel. Nun, dann kommt jetzt zu Objekt Pascal, C#, Abap, Javascript... halt noch Perl dazu - was solls ::)
Ich werde mir heute, spätestens morgen dann die Neufassung mal ansehen. Vielen Dank auf jeden Fal schon Mal vorab für die tolle Leistung!
Grüße,
Michael
Servus,
ich hatte gerade etwas Zeit und bin das neu geschriebene Modul durchgegangen. Was mit aufgefallen ist, beziehungsweise was meines Erachtens neu drin ist sind die folgenden Zeilen
Log3($meineFB,3,"TM: event: $event arg: $arg");
Wird dadurch ein eigenes Sub Log3() aufgerufen das in der von dir angefügten Datei nicht enthalten ist?
Wo oder wie muss ich $meineFB definieren. Im alten Coding war dort noch die folgende Zeile zu finden
my $my_callmonitor = $defs{"FritzBox"};
Hier finde ich lediglich diese Zeile,
my ($meineFB,$ev) = @_;
die würde vielleicht passen, nur wo schreibe ich den Namen meines Gerätes (FritzBox) jetzt rein? Muss ich dort $meineFB, oder generell im ganzen Coding, durch $FritzBox ersetzen?
Muss ich deiner Meinung nach in meiner vorhandenen readingsGroup noch etwas anpassen. Ich habe bisher im Coding von 99_MyUtilsTelefon nur in dieser Zeile my $maxlines = 5;
von vier auf fünf erhöht, da ich bisher immer die letzten fünf Anrufe angezeigt habe.
Ich gehe davon aus, dass ich in dieser Zeile meiner FritzBox Gerätedefinition dann noch die Variable F0 bis F4 ergänzen muss:
attr FritzBox 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 F0 F1 F2 F3 F4
Ganz sicher bin ich mir nicht, weil in der F Variablen eine ID gespeichert wird. Aber ich denke die Frage kannst du sicher sofort klären ;)
Danke und Grüße,
Michael
Hallo,
Log3($meineFB,3,"TM: event: $event arg: $arg");
ist eine fhem-Funktion und nicht von mir.
maxlines, siehe auch den Kommentar, geht von 0...4, also 5 Zeilen.
sub TelefonMonitor($$)
{
my ($meineFB,$ev) = @_;
my $hash = $defs{$meineFB};
Über das notify, siehe auch Kommentar im Modul, wird der Gerätename ja übergeben:
notify FritzBox:.* {TelefonMonitor($NAME,$EVENT);}
Daher ist im code auch nichts anzupassen.
Achtung: Weil ich heute einen früheren Beitrag gelesen hatte. Intern geht das Feld nun von A...F (nicht nur bis E).
In F speichere ich die CalllID, um nachträglich die Gesprächsdauer bzw. die Info, dass das Gespräch auf dem AB gelandet ist, noch dem Gespräch korrekt zuordnen zu könnnen.
Das Teil ist so programmiert, dass es auch bei beliebig vielen gleichzeitig geführten Gesprächen noch funktioniert.
Gruß
Elektrolurch
Danke Dir für die Antwort!
ich muss aber trotzdem nochmals nachfragen: Bei dir heist das Gerät in der fhem.cgh meineFB? Bei mir habe ich das Gerät als FritzBox benannt. Somit muss ich wohl im deinem Coding das meinFB durch FritzBox ersetzen. Oder liege ich hier falsch?
Ich könnte es jetzt einfach ausprobieren, aber dann muss ich es gegebenenfalls wieder rückgängig machen und die Arbeit möchte ich mir sparen ;)
Grüße,
Michael
Hallo,
wenn du das notify richtig definierst und das regexp passt dann ist es doch egal wie eine Variable heisst :o
Zitatund die Arbeit möchte ich mir sparen
Aufruf auf die neue sub umstellen und im Logfile die Fehlermeldungen durchlesen - jep, jede Menge Arbeit.
Grüße
P.S.: Lies dir mal die Sig von Elektrolurch durch - vielleicht fällt dir was auf ;)
Hi,
ich kenne seine Sig. Wenn du den ersten Teil meinst, dann gebe ich dir Recht, ich könnte es selbst probieren, nur weiß ich zuwenig über Perl, als dass ich in dem Coding eine RegEx erkennen könnte, die von meiner Gerätedefinition mit dem Namen FritzBox auf...ja, auf was genau kommen könnte.
Wenn ich es dann probiert habe und es funktioniert nicht, dann muss ich euch auch wieder belästigen. Also liber gleich gefragt und die Unklarheiten aus dem Weg geräumt.
Bei Elektrolurchs Coding finde ich einfach keinen Verweis auf die Gerätedefinition der FritzBox/des Callmonitors.
So, ich war jetzt so experimentierfreudig und habe das Coding einfach in meine vorhandenen 99_MyUtilsTelefon.pm kopiert und gespeichert.
Es sind dabei eine Reihe von Fehlern aufgetreten, die wohl ein Konvertierungsproblem als Ursache haben.
Die von dir, Elektrolurch, angehängte Datei hat ein paar Zeilen drin, die meines Erachtens nicht korrekt sind. Statt -> (Bindestrich Pfeil) wurde dort ein HTML Code gespeichert:
my $incoming = '->';
my $outgoing = '<-';
eingefügt. Auch hier:
$rhash->{A} = $dir;
$rhash->{B} = sprintf("%02d:%02d %02d.%02d.%4d",$hour,$min,$mday,($mon+1),($year+1900));
$rhash->{C} = $mem{"external_name"};
$rhash->{D} = $mem{"external_number"};
$rhash->{E} = "0:00"; # default call_duration, set after disconnect
$rhash->{F} = $ID;
Ich denke das soll wohl eher $rhash->{B}
heißen, oder? Es gibt noch weitere Fälle dazu. Ich habe die Datei genommen, im Editor (Notepad++) geöffnet und diese Stellen gefunden, die fhem jetzt beim Speichern anmahnt.
Grüße,
Michael
So, jetzt habe ich es gewagt und das Coding reinkopiert.
Es scheint soweit zu funktionieren, bis auf dass die Anzeige wieder nicht aufgefrischt wird. Neustart habe ich zur Sicherheit durchgeführt.
Was dann dummerweise noch hinzukommt ist, dass ich bisher aufgrund der Anrufereignisse in_connected, out_connected usw. das Attribut valueIcon gesetzt habe:
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_ring_out@green', 'A0.in_connected' => 'phone_ring_in@green', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A0.in_notconnected' =>...
Das funktioniert jetzt leider nicht mehr, es wird ja nur mehr -> beziehungsweise <- zurückgegeben :(
Wäre es möglich das irgendwie wieder ins Coding mit aufzunehmen? Ich möchte ja nicht nur die Richtung angezeigt bekommen, sondern auch ob angenommen wurde oder nicht. Bisher war dies kein Problem...
Grüße,
Michael
Zum Thema Auffrischen in der readingsGorup steht in der Anleitung
ZitatFor internal values and attributes longpoll update is not possible. Refresh the page to update the values
Bedeutet dies, dass ich hier warten kann bis ich schwarz werde? Gibt es möglicherweise gar kein Refresh? Das wäre Schade, denn wenn ich die readingsGroup für ein Dashboard verwenden möchte, das sich automatisch bei Ereignissen aktualisiert, dann kann ich das Ganze wohl vergessen.
Obwohl, ich verwende eine readingsGroup auch für die Zustandsanzeige der Batterien meiner Fensterkontakte und die aktualisieren sich fast minütlich...
Also ich weiß jetzt auch nicht mehr was Sache ist...
Michael
Nach einigen Missversuchen, die Ereignisse out_connected, in_connected und so weiter wieder einzubauen, habe ich jetzt das alte Coding wieder reinkopiert.
Da funktionierte wenigstens die Anzeige der Symbole wie ich mir das vorstelle. Der Refresh funktioniert bei beiden nicht, also habe ich keinen Nachteil mit dem alten Coding. Den Anrufbeantworter habe ich dann auch nicht mehr getestet,
Danke jedenfall für das Update!
Michael
Hallo,
soviel ich weiß, habe ich extra auf die Kommentare zu Beginn meiner Datei verwiesen.
# adaptions
# please change values for your own apllication
#
# for using this code, define:
# define #TelefonMonitor_not notify <yourFritzbox>:.* {TelefonMonitor($NAME,$EVENT);}
# change to 0 to avoid call of undef subs
my $Elektrolurch = 1;
# Symbols for call direction
my $incoming = '->';
my $outgoing = '<-';
Da kannst Du die Symbole so setzen, wie Du möchtest, ohne Deine rg abzuändern.
Die Werte werden mit readingsBulkUpdate(...,1) und readingsEndUpdate(...,1) in readings geschrieben, sind also keine "internal" values. Warum die Aktualisierung nicht sofort angezeigt wird, verstehe ich auch nicht, denn in den readings stehen sie sofort, wenns klingelt.
Und die fhem-WEB Instanz hat bei mir auch das gesetzte Attribut longpoll.
Meine Datei ist korrekt, vermutlich ist der Fehler bei Dir beim Kopieren (copy,paste) passiert.
Gruß
Elektrolurch
Servus,
Ich habe die Datei herunterladen und im Notepad++ geöffnet. Da hatte ich noch gar kein Copy und Paste angewandt.
Den Anfang zu Beginn deines Codings habe ich natürlich gelesen, und könnte dort auch Anpassungen vornehmen. Nur sind dann immer lediglich zwei Events möglich: in und out. Esgab aber in der alten Version noch in_connected, out_connected, in_notconnected, out_notconnected und so weiter. Dementsprechend habe ich dann mehrerer Symbole verwenden können umd diese Zustände simulieren zu können
Es wäre prima, wenn dies auch wieder so möglich wäre, eventuell als weiteres Reading im Buchstaben G?
Ich habe gesehen dass du wegen des Refresh im Thread der readingsGroup nachgefragt hast. Ich werde mal Firebug bemühen und mir auch das HTML mal reinziehen. Mal sehen, ob ich das was justme geschrieben hat bei mir feststellen kann.
Mal eine Frage noch am Rande:wie programmiert ihr eigentlich in Perl? Ich meine ich versuche das so gut es geht im Notepad++, kopiere das Ganze dann nach fhem in dessen Editor und hoffe dass es läuft. Ziemlich mühsam das Vorgehen.
Grüße,
Michael
Ok, das mit den fehlerhaften Zeichen ist ein Notepad Problem! Habe die Datei nun auf meinem Android Tablet geöffnet und das Coding stimmt jetzt.
Michael
Zitat von: Roaster am 26 August 2014, 19:13:02
Mal eine Frage noch am Rande:wie programmiert ihr eigentlich in Perl? Ich meine ich versuche das so gut es geht im Notepad++, kopiere das Ganze dann nach fhem in dessen Editor und hoffe dass es läuft. Ziemlich mühsam das Vorgehen.
Mir reicht meist das hier:
http://www.fhemwiki.de/wiki/Konfiguration#Syntaxhervorhebung
Aber wenn es richtig komplex wird, benutze ich auch auch schon mal Notepad++ via Cut&Paste.
Das habe ich auch bereits eingeschaltet, aber das "Programmieren" im Notepad++ ist ja mehr ein Try and Error.
Ich kann mir nicht vorstellen dass es da nichts anderes gibt um vernünftig in Perl zu programmieren und zu debuggen.
Hallo,
Ich mach alles in Notepad++ , wenn es nur ein paar Zeilen sind wandern die direkt über die Befehlszeile in die Konfig sonst wird eine eigene pm daraus.
Warum sollte es try&error sein?
Die Befehle sind immer die selben - die Werte sind immer die selben - die Geräte sind immer die selben - FHEM ist immer das selbe.
Irgendwann mal sollten die Befehle sitzen und wenn nicht kann man immer noch auf vorhandenen Code zurück greifen und diesen abändern.
Grüße
P.S.: Den Code von Elektrolurch habe ich gestern abend mal in meine Konfig kopiert (ohne Notepad++) und klappt einwandfrei.
Nene, fhem und die Geräte sind immer dasselbe - die Anforderung was und wie etwas gesteuert, geloggt, die Daten beschafft werden und so weiter, per Perl wohl gemerkt, ist immer was anderes. Ich meine man sieht es ja bereits, dass man den Code für den Callmonitor auch anders schreiben kann im Vergleich zur Erstfassung. Ein paar Zeilen sind vielleicht identisch, aber der Rest schon nicht mehr.
Deshalb, und vor allem für Neulinge in Sachen fhem und Perl, ist es erst Mal Try&Error und das ist ganz schön mühselig, den Code Offline zu schreiben, zu kopieren und hoffen, dass fhem alles syntaktisch akzeptiert. Und dann weiß man noch nicht Mal, ob man nicht doch logische Fehler drin hat, die man irgendwie beseitigen möchte.
Michael
Hallo,
"Neulinge" sollten auch auf bereits vorhandene Module zurückgreifen und werden kaum solche oder ähnliche Programme schreiben.
Und wenn doch würde ich nichtmehr Neuling sagen.
Grüße
PS.: Ich benutze für neue Codes auch eine Testumgebung.
Zitat von: Puschel74 am 27 August 2014, 12:07:06
PS.: Ich benutze für neue Codes auch eine Testumgebung.
Ha! - auf das Stichwort habe ich gewartet ;)
Jetzt wird's zwar OT aber ich frage jetzt doch nochmals nach: Du hast einen weiteren Raspberry Pi als Testserver und darauf schreibst du dein Coding? Aber auch hier gibt es jetzt wohl keine direkte Möglichkeit den Code, ich sage Mal, im Browser oder am Raspberry zu debuggen, oder?
Also, Code im Editor schreiben, ins fhem rüberkopieren und mit Log Einträgen oder Javascript Alerts (auch möglich?) sich einen Überblick über korrekt ausgeführten Code zu schaffen.
Michael
Perl debuggen:
http://www.perlboard.de/perlguide/Kap12.html
http://www.thomas-fahle.de/talks/Einfuehrung_Perl_Debugger.pdf
http://de.perlmaven.com/debuggen-von-perl-skripten
Aber mir reicht auch notepad++ (Sprache "Perl" einstellen! / es gibt sogar eine Sprachregel für FHEM)
und das Kommando "Log 1" zum ausgeben von Variablen usw. ins normale FHEM- Log.
Gruß
Frank
Hallo,
ZitatDu hast einen weiteren Raspberry Pi als Testserver und darauf schreibst du dein Coding?
So ist es - wobei anfangs auch die FritzBox genügt hat.
Aber irgendwann ist für ein Modul ein Paket zu installieren und das wird dann recht mühsam (bis unmöglich).
Daher ein weiterer RasPi.
ZitatAber auch hier gibt es jetzt wohl keine direkte Möglichkeit den Code, ich sage Mal, im Browser oder am Raspberry zu debuggen, oder?
Debuggen wirst du den Code wohl nur können wenn du ihn in einer passenden Umgebung laufen lässt.
Sprich - du brauchst mindestens Perl.
Und das hast du ja auf einem RasPi mit FHEM ;D
Sonst, wie fiedel schon geschrieben hat:
ZitatAber mir reicht auch notepad++ (Sprache "Perl" einstellen! / es gibt sogar eine Sprachregel für FHEM)
und das Kommando "Log 1" zum ausgeben von Variablen usw. ins normale FHEM- Log.
Grüße
Zitat von: Roaster am 27 August 2014, 12:26:33
Jetzt wird's zwar OT aber ich frage jetzt doch nochmals nach: Du hast einen weiteren Raspberry Pi als Testserver und darauf schreibst du dein Coding? Aber auch hier gibt es jetzt wohl keine direkte Möglichkeit den Code, ich sage Mal, im Browser oder am Raspberry zu debuggen, oder?
Es muss nicht mal unbedingt Extra-Hardware sein. Man kann sich auch einen RaspberryPi als Virtuelle Maschine am PC aufsetzen und seinen echten Raspi da quasi reinklonen. Hat natürlich seine Grenzen, wenn es um den Zugriff auf Hardware wie CUL & Co. geht. Aber das wäre bei einem "echten" Zweit-Raspi ja nicht anders.
Wenn man jetzt noch die Hardware des physischen Raspberry in der virtuellen Umgebung mit nutzen könnte, dann wäre es perfekt :) So etwas wie USB über LAN, mal laut gedacht...
Ha! so etwas beispielsweise http://store.raspberrypi.com/projects/virtualhere (http://store.raspberrypi.com/projects/virtualhere).
Zitat
Any device you plug into your Raspberry PI USB ports becomes directly accessable on a Windows/OSX/Linux machine over the network.
The Raspberry Pi USB ports become a direct extension of your desktop USB port
Schon Mal jemand daran gedacht und eventuell getestet?
Michael
Servus Elektrolurch,
gibt es möglicherweise schon etwas Neues im Bezug auf den Refresh der readingsGroup bei ankommenden und ausgehenden Anrufen?
Grüße,
Michael
Hallo Roaster,
ja, es gibt etwas Neues:
Meiner Meinung nach tut readingsBulkUpdate nicht das, was es soll. Es aktualisiert zwar die readings, aber nicht den Screen, wenn es mehrmals hintereinander aufgerufen wird.
Folgendes habe ich nämlich gemacht:
Den CallMonitor nun zu einem eigenen Modul gemacht. Symbole für eingehende, ausgehende, verpasste Anrufe usw. sind nun über Attribute einstellbar und noch ein paar Sachen mehr.
Dabei können nun eingehnde Anrufe auch schon angezeigt werden, wenn es klingelt.
Da ich aber erst nach dem disconnect wweiß, wie lange der Anruf gedauert hat, muss ich dann in der angezeigten Tabelle den Anruf suchen, um die Anrufdauer nachträglich dort zu aktualisieren. Das mache ich, da ja nur ein Wert, mit readingsSingleUpdate - und siehe da, das klappte nämlich, die Anzeige wurde ohne Drücken von F5 aktualisiert.
Das hat mich auf die Idee gebracht, das Verschieben der Zeilen bei einem neuen Anruf und die Ausgabe der ersten Zeile mal anders zu programmieren:
Bisher war das so aufgebaut:
readingsBeginUpdate($hash);
# Die Schleife zum shiften der Inhalte
for(my $i..
{
readingsBulkUpdate($hash,..,1)
}
readingsEndUpdate($hash,1);
Obwohl da ja update auf 1 gesetzt wird, wird die Anzeige nicht aktualisiert.
Nun neu:
For(my $i...
{
readingsSingleUpdate($hash,..,1)
}
d.h. kein readingsBeginUpdate und readingsEndUpdate.
Und siehe da, nun wird die Anzeige korrekt aktualisiert.
Schaut man nun in die fhem.pl rein, sieht man, dass readingsSingleUpdate nichts anderes als drei Aufrufe sind:
readingsBeginUpdate
readingsBulkUpdate
readingsEndupdate
Für mich folgt daraus, dass die "Sammlung" von "Aktualisierungsereignissen" von readings irgendwo in der fhem.pl oder in der readingsGroup nicht korrekt abgearbeitet wird.
Da das Verschieben der Zeilen und Zellen zu 30 Aufrufen von readingsSingleUpdate nun führt, wird dadurch ein ziemlicher Rechenoverhead produziert, aber nur so funktioniert es derzeit, dass die Anzeige direkt aktualisiert wird, ohne F5 drücken zu müssen.
Andre (Autor der readingsGroup) hatte zwar angeboten, sich das Mal anzusehen, er hat aber keine Fritzbox um das nachzustellen. Ich müsste also erst einmal ein Codebeispiel bauen, damit er sich das Verhalten der readingsGroup bei mehrfachem Aufruf von readingsBulkUpdate mal ansehen kann.
Mein Modul (TM = TelefonMonitor) läuft, muss aber noch ein paar Sachen testen. Jedenfalls dürfte die Anwendung von Nicht-Programmierern einfacher sein. Außerdem kann man nun beliebge viele Instanzen von Anruflisten (z.B. nur eingehende und eine zweite für alle Anrufe) erzeugen.
Außerdem kann man auch noch per Attribut Namen von perl-Routinen hinterlegen, die beim Ereignis ring und disconnect aufgerufen werden können.
(z.B. Signalisierung von Anrufen für Schwerhörige, durch Einschalten einer Lampe)
Gruß
Elektrolurch
Hey Danke für die Antwort!
Kann das neue Modul auch noch oder wieder die anderen Ereignisse wie in_notconnected oder out_notconnected, damit ich entsprechende Icons zuweisen kann?
Edit: was mir mit dem alten Modul noch aufgefallen ist: aktuelle Anrufe/aktuell geführte Telefonate führen trotz F5 nicht zu einer Aufnahme in der readingsGroup. Ich gehe Mal davon aus, dass dies erst dann geschieht, wenn das Telefonat beendet ist.
Kann man dies auch abändern, so dass diese Ereignisse ebenfalls prompt angezeigt werden. Ziel ist ja, zumindest bei mir, dass man am Tablet an der Wand umgehend über ankommende Anrufe informiert wird, damit man entscheiden kann den Anruf anzunehmen oder nicht.
Michael
Hallo,
nachdem mein fhem jetzt auf einen Raspberry umgezogen ist (auf der Fritte hatte es ja keine Zukunft)
zieht sich der Callmonitor das Telefonbuch aus der Fritzbox nicht mehr.
Ist reverse-search-phonebook-file
./log/Fritz_Box_Telefonbuch.xml richtig oder ist der Pfad falsch (Davon gehe ich jetzt mal aus)
Mirco
Das Telefonbuch musst du nun von der FritzBox Web Oberfläche exportieren. Die XML Datei die du dabei erhälst musst du dann auf deinem Raspberry ablegen und den Pfad zu dieser Datei im Attribut reverse-search-phonebook-file eintragen.
Gruß
Markus
Habe eine identische Config wie coolice (FHEM auf dem Rasp) und habe das Telefonbuch dort per Hand abgelegt.
Laut Logfile hat das Einlesen auch erfolgreich funktioniert:
2014.09.13 20:06:35 3: my_callmonitor device opened
2014.09.13 20:06:35 3: FB_CALLMONITOR: loading cache file /opt/fhem/callmoncache.txt
2014.09.13 20:06:35 2: FB_CALLMONITOR: my_callmonitor read no contacts from Cache
2014.09.13 20:06:35 2: FB_CALLMONITOR: my_callmonitor found FritzBox phonebook /opt/fhem/telefonbuch.xml
2014.09.13 20:06:36 2: FB_CALLMONITOR: my_callmonitor read 93 contacts from FritzBox phonebook
Nur leider funktioniert die Namensauflösung in der Anrufliste immer noch nicht (unknown).
Muss die Telefonnummer in einem bestimmten Format sein?
Bsp.:
0160 1234567
01601234567
0049 160 1234567
Vielen Dank schon mal für eure Antwort & Hilfe :)
Viele Grüße,
Basti
Es sollte nach möglich folgendes Format sein:
0160 1234567
01601234567
Ansonsten mal in der FHEM WEB Oberfläche ein "list my_callmonitor" ausführen, dann sieht man welche Nummern er aus dem Telefonbuch erkannt hat. Und dann evtl. mal mit "get my_callmonitor search 01601234567" probieren.
Gruß
Markus
Danke für die schnelle Antwort :)
Leider bisher ohne Erfolg...
bei List kommt folgendes:
Internals:
DEF 192.168.3.1:1012
DeviceName 192.168.3.1:1012
FD 13
NAME my_callmonitor
NR 169
PARTIAL
STATE opened
TYPE FB_CALLMONITOR
Readings:
2014-09-13 20:25:02 A0 in_connected
2014-09-13 20:25:02 B0 20:18:13 13.09.2014
2014-09-13 20:25:02 C0 unknown
2014-09-13 20:25:02 D0 01234567
2014-09-13 20:25:02 E0 6:33
2014-09-13 20:25:01 call_duration 393
2014-09-13 20:25:01 call_id 0
2014-09-13 20:25:01 direction incoming
2014-09-13 20:25:01 event disconnect
2014-09-13 20:25:01 external_connection SIP2
2014-09-13 20:25:01 external_name unknown
2014-09-13 20:25:01 external_number 01234567
Helper:
Cache:
01234567 unknown
Phonebook:
01234567 Muster Mann
Also die Nummer steht genau so im Telefonbuch, wird aber trotzdem nicht angezeigt...
Kann man ein Rechteproblem ausschließen? Sonst würde er das Telefonbuch ja nicht einlesen, oder?
PS:
bei "get my_callmonitor search 01234567" erscheint auch ein "unknown" ...
Welche Attribute hast du denn genau gesetzt bei deinem Callmonitor?
Ich habe die Config aus dem Wiki übernommen.
und folgende Punkte abgeändert:
# Callmonitor mit rollierender Anruferliste:
define my_callmonitor FB_CALLMONITOR 192.168.3.1:1012
attr my_callmonitor local-area-code 12345
attr my_callmonitor reverse-search-cache-file /opt/fhem/callmoncache.txt
attr my_callmonitor reverse-search-phonebook-file /opt/fhem/telefonbuch.xml
attr my_callmonitor reverse-search internal|klicktel.de|dasoertliche.de
Die Rechte für das Telefonbuch sind die folgenden:
-rw-r--r-- 1 fhem root 25037 Sep 13 11:24 telefonbuch.xml
und für die myUtils:
-rw-rw-rw- 1 fhem dialout 7165 Sep 12 09:35 99_myUtilsTelefon.pm
Daran sollte es aber eigentlich nicht liegen, da das Einlesen ja funktioniert...
Zitat von: basti1986 am 13 September 2014, 20:16:36
habe das Telefonbuch dort per Hand abgelegt.
Könntest Du mir wohl erklären wie Du das gemacht hast und wie ich den Pfad angeben muss?
Zitat von: coolice am 16 September 2014, 09:16:17
Könntest Du mir wohl erklären wie Du das gemacht hast und wie ich den Pfad angeben muss?
Aber na klar.
Folgende Schritte:
1. Export des Telefonbuches der Fritzbox als xml über das Webinterface(Telefonie->Telefonbuch->sichern)
2. Diese Datei auf den Raspberry kopieren via SFTP/SCP o.ä. (der Pfad ist abhängig von deinem FHEM Installationsverzeichnis, bei mir ist das der Ordner "/opt/fhem/"
3. ggf. die Recht der telefonbuch.xml anpassen.
4. Einbinden in der cfg. --> attr my_callmonitor reverse-search-phonebook-file /opt/fhem/telefonbuch.xml
Hilft dir die grobe Vorgehensweise weiter? Oder hast du eine genaue Frage zu einem dieser Punkte?
Nach anfänglichen Problemen funktioniert diese Lösung inzwischen auch bei mir, nachdem ich die cfg. noch einmal neu angelegt hatte :)
@ Elektrolurch und alle Anderen, die an diesem Modul ständig arbeiten und den Anrufmonitor verbessern und weiterentwickeln.
Ich habe alle 18 Seiten des Threads durchgearbeitet und auch selbst einige eigene Anpassungen in der fhem.cfg gemacht, aber eine Frage habe ich trotzdem: Es wird immer von neueren Versionen in diesem Thread geschrieben, aber welche sind denn die letzten Ausführungen mit den Änderungen und vor allem wo finde man mal eine komplette "Anrufmonitor fhem.cfg" und die letzte Version des 99_myUtilsTelefon.pm? Vielleicht kann man die beiden Files mal hier posten zum download.
Dann wäre ich wenigstens mal auf dem letzten Stand und könnte dann meine Anpassungen vornehmen.
Gruß aus "Kölle"
Norbert
Hallo,
ein wenig Geduld noch. Habe aus der SW ein eigenes Modul gemacht, bei dem man die Symbole und noch einiges mehr per Atribut nun setzen kann. Teste es noch ein wenig. Ich mache dann für die Veröffentlichung einen eigenen thread auf.
Gruß
Elektrolurch
Hallo,
wenn ich dir beim testen irgendwie helfen kann dann immer her damit.
Grüße
Nun die neue Version des "Callmonitors" als Modul "TM" unter:
http://forum.fhem.de/index.php?board=8.0
Gruß
Elektrolurch
Guten Morgen, bin nun mit der Ursprünglichen Version also nicht als Modul aktuell dabei auf den Raspberry um zu ziehen da er auf der Fritte keine Zukunft hat.
Soweit habe ich auch alles wieder zum laufen bekommen bis auf das Log. Wenn ich den Raspberry neustarre sind alle bisherigen Anrufe futsch. Ich meine das das auf der Fritte nicht so war.
Anbei ein Bild der jetzigen Konfig.
Könnte mir einer sagen wie und wo ich auf dem Raspberry ein Logfile anlege?
Grüße
Mirco
Hallo,
ZitatKönnte mir einer sagen wie und wo ich auf dem Raspberry ein Logfile anlege?
Logfiles sind mehr oder weniger Plattformunabhängig und können über die FHEM-Befehlszeile angelegt werden.
Du kannst aus der Konfig ein bestehendes kopieren und die benötigten Daten anpassen.
Im Einsteiger.pdf müsste das beschrieben sein und in der commandref natürlich auch.
Aber auch im Forum findet sich der eine oder andere Hinweis ;)Ich würde dir ja gerne eines meiner Logfile-Definitionen posten aber ich hab ausser das FHEM-Logfile keine mehr da ich alles in eine Datenbank schreiben lasse.
Grüße
Edith: Bei den Events des Gerätes hilft dir der EventMonitor - öffnen und warten bis das Device was schickt.
Hallo,
die Daten des CallMonitors werden in readings geschrieben.
Solange Du kein "save" machtst, werden sie auch nicht gesichert und gehen nach einem Neustart, wie bei allen readings übrigens, verloren.
Ich habe mir dafür ein at definiert:
define fhem_save_at at +*02:22:22 {fhem('save');
return undef; }
hm, komisch - ich dachte das übernimmt das Statefile...
beim sonos modul kommt nach einem fhem neustart die meldung das diverse readings nicht aus dem statefile benutzt werden.
Aber von selbst aus schreibt sich das statefile doch nicht!
Da muss schon jemand "save" eingeben....
Es muss kein komplettes save gemacht werden. Ein {WriteStatefile} reicht auch.
Guten Morgen zusammen,
habe gestern mal ein Update gemacht und seit dem habe ich folgende Fehler im Log
2014.10.09 08:27:51 1: PERL WARNING: Use of uninitialized value $intCallDuration in string gt at ./FHEM/99_myUtilsTelefon.pm line 203.
2014.10.09 08:27:51 3: stacktrace:
2014.10.09 08:27:51 3: main::__ANON__ called by ./FHEM/99_myUtilsTelefon.pm (192)
2014.10.09 08:27:51 3: main::TelefonMonitor called by (eval 239) (2)
2014.10.09 08:27:51 3: (eval) called by fhem.pl (896)
2014.10.09 08:27:51 3: main::AnalyzePerlCommand called by fhem.pl (915)
2014.10.09 08:27:51 3: main::AnalyzeCommand called by fhem.pl (848)
2014.10.09 08:27:51 3: main::AnalyzeCommandChain called by ./FHEM/91_notify.pm (87)
2014.10.09 08:27:51 3: main::notify_Exec called by fhem.pl (2906)
2014.10.09 08:27:51 3: main::CallFn called by fhem.pl (2829)
2014.10.09 08:27:51 3: main::DoTrigger called by fhem.pl (3569)
2014.10.09 08:27:51 3: main::readingsEndUpdate called by ./FHEM/72_FB_CALLMONITOR.pm (296)
2014.10.09 08:27:51 3: main::FB_CALLMONITOR_Read called by fhem.pl (2906)
2014.10.09 08:27:51 3: main::CallFn called by fhem.pl (595)
hat das noch jemand?
Hallo,
nein aber es gibt bereits x Einträge im Forum.
Und nein - es ist KEIN Fehler sondern eine Meldung die ... ich verlink lieber als immer wieder alles neu zu schreiben:
http://forum.fhem.de/index.php/topic,27662.0.html (http://forum.fhem.de/index.php/topic,27662.0.html)
In diesem Beitrag ist irgendwo die Erklärung von Rudi drinnen.
Grüße
Ich habe den Callmonitor installiert und in Betrieb genommen, allerdings nicht die letzte Version, aber es funktioniert echt gut. Meine Frage: Ich habe hier im Haus/geschäft/privat ingesamt 5 Telefonnummern. Bei einem eingehendem Anruf sehe ich nicht, ob mich jemand privat oder geschäftlich erreichen will, und kann den Anruf außerhalb der Geschäftszeiten nicht immer entgegennehmen. Ist es möglich die "internal_number" mit auszugeben und anzuzeigen? Denn auch bei einem verpassten Anruf weiß ich nicht wo er gelandet war und ich kann keinen Rückruf machen ohne zB. am Sonntag plötzlich einen Kunden in der Leitung zu haben.
Gruß aus Köln
Norbert
Hallo,
ZitatIst es möglich die "internal_number" mit auszugeben und anzuzeigen?
Öh bei mir wird die internal_number mit übergeben und sollte, da Reading, in einem notify ausgewertet werden können.
Zitatallerdings nicht die letzte Version,
Ah, ok.
Dann würd ich mal die letzte Version versuchen und, wenn etwas nicht klappt, danach! posten ;)
Grüße
@Puschel74
Ich habe jetzt die 99_myUtilsTM Vers.1.54 installiert, und habe die fhem.cfg soweit ich die Beiträge verstanden habe, bearbeitet.
Die readingsGroup wird im floorplan nicht angezeigt, lediglich die Spalten Übersicht.
So sieht das bei mir aus:
Zitatdefine FileLog_Fritz_Box FileLog ./log/Fritz_Box-%Y-%m.log Fritz_Box
attr FileLog_Fritz_Box logtype text
attr FileLog_Fritz_Box room Test
define my_TM FB_CALLMONITOR 192.168.115.1:1012
attr my_TM local-area-code 0221
attr my_TM reverse-search all
attr my_TM reverse-search-cache 1
attr my_TM reverse-search-cache-file ./log/Fritz_Box-%Y-%m.log Fritz_Box
attr my_TM room Test
attr my_TM 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 my_TM verbose 0
#attr my_TM reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
# Anrufliste generieren und Telefonevents für Anrufliste abfangen:
#define Call_Notify notify Fritz_Box:.* { TelefonMonitor ($EVENT);;}
#attr Call_Notify room Test
# Anzeige der Anrufliste generieren:
#define Anrufliste readingsGroup Fritz_Box:A0,B0,C0,D0,E0,D0 Fritz_Box:A1,B1,C1,D1,E1 Fritz_Box:A2,B2,C2,D2,E2 Fritz_Box:A3,B3,C3,D3,E3 Fritz_Box:A4,B4,C4,D4,E4
define Anrufliste readingsGroup <Art>,<Datum>,<Name>,<Nummer>,<Dauer> TM:A0,B0,C0,D0,E0 TM:A1,B1,C1,D1,E1 TM:A2,B2,C2,D2,E2 TM:A3,B3,C3,D3,E3 TM:A4,B4,C4,D4,E4
attr Anrufliste fp_Info 20,370,0,
attr Anrufliste mapping {'TM' => '{sprintf("%d.",$ROW-1);;}'}
attr Anrufliste nameStyle style="text-align:left;;color:;;font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Test
attr Anrufliste style style="font-size:12px;;color:white;;background-color:blue"
Trotz mehrfachen Durchlesens deiner Anleitung und der Beiträge habe ich keinen Plan was daran falsch ist, guck mal bitte drüber wo mein Fehler ist.
Übrigens, hätte diesen Beitrag in den neuen Callmonitor Thread schreiben sollen?
Gruß aus Köln Norbert
Hallo,
meine Anleitung?
Wusste garnicht das ich eine Anleitung für den Callmonitor geschrieben habe.
In der ReadingsGroup musst du TM natürlich gegen den Namen deines Callmonitor ersetzen bei dir my_TM.
Grüße
Edith: Ich rate immer noch davon ab die fhem.cfg direkt zu bearbeiten
Sorry,
ich meine diese Anleitung von Elektrolurch hier: http://forum.fhem.de/index.php/topic,27218.0.html
sofort im ersten Thread. Habe alles das gemacht was da stand, meine ich zumindest.
und habe auch die von dir verbesserte die Änderung in der readingsGroup gemacht, funktioniert aber immer noch nicht.
define Anrufliste readingsGroup <Art>,<Datum>,<Name>,<Nummer>,<Dauer> my_TM:A0,B0,C0,D0,E0,D0 my_TM:A1,B1,C1,D1,E1 my_TM:A2,B2,C2,D2,E2 my_TM:A3,B3,C3,D3,E3 my_TM:A4,B4,C4,D4,E4
so viel kann man doch da nicht falsch machen, oder doch?
Gruß
Norbert aus "Kölle"
Servus Norbert,
ich kann dir Mal eine (bei mir) funktionierende Definition geben:
define CallMon TM FritzBox
attr CallMon disable 0
attr CallMon maxlines 4
attr CallMon monitor-type all
attr CallMon symbol-answering-machine AB
attr CallMon symbol-connected connected
attr CallMon symbol-incoming incoming
attr CallMon symbol-incoming-noconnect incoming_noconnect
attr CallMon symbol-outgoing outgoing
attr CallMon symbol-outgoing-noconnect outgoing_noconnect
attr CallMon update 0
define Anrufliste2 readingsGroup <Pos>,<Art>,<Datum>,<Name>,<Nummer>,<Dauer> CallMon:A0,B0,C0,D0,E0 CallMon:A1,B1,C1,D1,E1 CallMon:A2,B2,C2,D2,E2 CallMon:A3,B3,C3,D3,E3 CallMon:A4,B4,C4,D4,E4
attr Anrufliste2 mapping {'CallMon' => '{sprintf("%d.",$ROW-1);;}'}
attr Anrufliste2 nameStyle style="font-weight:bold"
attr Anrufliste2 noheading 0
attr Anrufliste2 nolinks 1
attr Anrufliste2 nostate 1
attr Anrufliste2 notime 1
attr Anrufliste2 room Telefon2
attr Anrufliste2 style style="font-size:20px"
attr Anrufliste2 valueFormat { if ( $READING =~ m/B./ ) { return substr($VALUE,6,10)." um ".substr($VALUE,0,5);;}}
attr Anrufliste2 valueIcon { CallMonIcon($VALUE);; }
Die vorletzte Zeile formatiert das Datum und die Uhrzeit des Anrufs um und die letzte Zeile sucht sich mit Hilfe einer Perl-Funktion die passenden Symbole raus, die ich in meiner 99_myUtils.pm gespeichert habe:
######## Symbole für die Anrufe festlegen ########
sub CallMonIcon($)
{
my($value) = @_;
#Log 3, $value;
my $icon = "" ;
my $color = "";
my $result = "";
if ( $value =~ /incoming/ )
{
$icon = "phone_ring_in";
$color = "green";
}
elsif( $value =~ /outgoing/ )
{
$icon = "phone_ring_out";
$color = "green";
}
elsif( $value =~ /connected/ )
{
$icon = "phone_ring";
$color = "yellow";
}
elsif( $value =~ /AB/ )
{
$icon = "phone_answersing";
$color = "blue";
};
#Log 3, $icon ."@". $color;
if( $icon )
{
return $icon ."@". $color;
}
}
Du musst genau aufpassen, wo du welche Gerätebezeichnung verwendet hast, wie in meinem Fall: CallMon.
HTH,
Michael
Ich habe mal angefangen Zeile für Zeile für define CallMon umzuändern und zu übernehmen. Bereits bei der Eingabe der Zeile "define my_TM TM Fritzbox und deinen anschließenden "attrs", ebengfalls in my_TM geändert, gibt es schon Errors. In der Anleitung von Elektrolurch steht das aber eben so:
define myTM TM <Fritzbox>
<Fritzbox> ist vom Typ type FB_CALLMONITOR
Das meldet FHEM:
TM_Define: FritzBox does not exists or ist not of type FB_CALLMONITOR Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please define my_TM first Please
define my_TM first
Ich muß doch irgendwo angeben die Fritzbox vom Typ FB_CALLMONITOR ist und die Adresse und den Port für "Fritzbox" angeben? so etwa wie vorher: define my_TM FB_CALLMONITOR 192.168.115.1:1012
das geht aber auch nicht mit deinen attrs. die kennt die Device FB_CALLMONITOR nicht.
Gruß
Norbert
OK, mein Fritz!Box Device heißt, FritzBox und ist vom "Typ" her FB_CALLMONITOR:
define FritzBox FB_CALLMONITOR 192.168.6.1:1012
attr FritzBox local-area-code <DEINE VORWAHL HIER REIN>
attr FritzBox reverse-search all
attr FritzBox reverse-search-cache 1
attr FritzBox reverse-search-cache-file ./log/FritzBox_Cache.txt
attr FritzBox reverse-search-phonebook-file ./log/FritzBox_Telefonbuch.xml
attr FritzBox unique-call-ids 1
attr FritzBox 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 F0 F1 F2 F3 F4
attr FritzBox verbose 5
define FileLog_FritzBox FileLog ./log/FritzBox-%Y.log FritzBox
attr FileLog_FritzBox logtype text
Hilft dir das weiter?
Michael
Ja Michael,
jetzt habe ich es verstanden und habe deine Datei mal 1:1 übernommen und meine Definationen angepasst.
Eine readingsgroup erscheint jetzt auch, jedoch in der Pos Spalte steht die Berechnungsformel der mappings und in der letzten Spalte sollte doch "internal_number" stehen, da steht aber auch die angerufene Nummer. valueFormat und valueIcon habe ich vorerst mal weggelassen.
Gruß
Norbert
Hi,
also dass in der ersten Spalte die Formel statt der Wert steht lag damals bei mir daran, dass ich eine alte Version des Callmonitors hatte (akt. Download siehe 1. Posting hier im Thread). Es kann aber auch sein, dass du das ein oder andere Zeichen, wie geschweifte Klammer oder fehlender Strichpunkt(e), vergessen hast.
In der letzten Spalte steht eigentlich nur mehr die Dauer des Gespächs, wie bei dir jetzt in der vorletzten Spalte. Du solltest nochmals die Definition der readingsGroup, insbesondere die erste Zeile mit define Anrufliste2 readingsGroup ... kontrollieren.
Ob der Callmonitor auch interne Nummern in einer eigenen Spalte anzeigt, wage ich zu bezweifeln, es sei denn ich habe eine Version übersehen. Hast du da selbst eine Spalte hinzugefügt?
<Pos>,<Art>,<Datum>,<Name>,<Nummer>,<Dauer> CallMon:A0,B0,C0,D0,E0
Die Überschrift "Dauer" ist die letzte Spalte, der Wert dazu kommt aus E0-E4, in meinem Fall - ich zeige fünf Zeilen an.
Michael
Hi,
Ich habe nochmals deine Datei kopiert und bei mir eingefügt. Die Spalte hinter "Dauer" ist weg. Aber die Programmierzeichen stehen immer noch unter der "Pos" . Die letzte neuste Version (V1.54 vom.5.10.14) habe ich auch.
So sieht sie aus:
define Anrufliste readingsGroup <Pos>,<Art>,<Datum>,<Name>,<Nummer>,<Dauer> CallMon:A0,B0,C0,D0,E0 CallMon:A1,B1,C1,D1,E1 CallMon:A2,B2,C2,D2,E2 CallMon:A3,B3,C3,D3,E3 CallMon:A4,B4,C4,D4,E4
attr Anrufliste mapping {'CallMon' => '{sprintf("%d.",$ROW-1);;}'}
attr Anrufliste fp_Info 20,370,0,
attr Anrufliste nameStyle style="text-align:left;;color:;;font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room Test
attr Anrufliste style style="font-size:12px;;color:white;;background-color:blue;;font-weight:bold"
Gruß Norbert
Hm, Gute Frage...
Bei mir sieht's korrekt aus, mir dem Coding:
attr Anrufliste2 mapping {'CallMon' => '{sprintf("%d.",$ROW-1);;}'}
Eine Idee habe ich noch, warum es bei dir nicht so will: ich verwende möglicherweise eine Beta Version der readingsGroup, von hier http://forum.fhem.de/index.php/topic,27218.msg202305.html#msg202305 (http://forum.fhem.de/index.php/topic,27218.msg202305.html#msg202305). Ich weiß nicht, ob die schon offiziell eingecheckt und per fhem Update verfügbar ist.
Gruß,
Michael
Hallo,
also ich hab grad spasseshalber nach Anleitung von Elektrolurch den Telefonmonitor inkl. der angepassten Version der readingsGroup von justme auf meiner Versuchinstallation definiert und ... siehe Screenshot.
Grüße
Hallo, konnte mich erst jetzt melden, wir waren übers Wochenende weg.
@Roaster
klasse Idee, das war es, die Betaversion der readingsGroup funktioniert einwandfrei. Wäre man da ein bischen eher drauf gekommen, hätte es wahrscheinlich von vorne an funktioniert. Evtl. müßte die mal beim nächsten Update mit dabei sein, sonst stolpern bestimmt noch andere über das Problem.
@Puschel
In deiner Antwort zu meinen Fragen hast du mir am 9.10. geschrieben:
ZitatÖh bei mir wird die internal_number mit übergeben und sollte, da Reading, in einem notify ausgewertet werden können.
Meine Frage nun, wo muß ich dazu was ändern? Muß ich dazu Änderungen in der 33_readingsGroup.pm machen oder einfach diese 2 Zeilen ändern:
attr FritzBox 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
define Anrufliste readingsGroup <Pos>,<Art>,<Datum>,<Name>,<Nummer>,<Dauer> CallMon:A0,B0,C0,D0,E0 CallMon:A1,B1,C1,D1,E1 CallMon:A2,B2,C2,D2,E2 CallMon:A3,B3,C3,D3,E3 CallMon:A4,B4,C4,D4,E4
Gruß
Norbert
Hallo,
mMn musst du garnichts ändern.
Einfach mal im device vom Type FB_CALLMONITOR nachschauen.
Grüße
Ja damit habe ich schon mal gearbeitet bei der Auswertung für die Steuerung eines FS20 SIG2 zur AB Meldung.
Aber ich muß doch in den Fritzbox userReadings angeben welchen Wert ich an welcher Stelle haben möchte, zb. als eing5 und dann jeweils F0,F1,F2,F3,F4,F5 usw zuordnen.
Und bei den readingsGroup erstmal das Feld <Intern> zufügen und dann für jede Ausgabezeile A0,B0,C0,D0,E0,F0 usw...angeben.
Aber wie bekomme ich den Wert von internal_number eing5 und dann dem Feld F0-F5 zugeordnet.
Oder denke ich in die falsche Richtung und es geht einfacher und ganz anders?
Gruß
Norbert
Hallo,
ah, ich steh manchmal echt auf dem Schlauch - sorry.
Du möchtest die internal_number in der Anrufliste anzeigen lassen um zu sehen auf welcher Nummer der Anruf reingekommen ist.
Ich vermute mal du brauchst dann noch ein zusätzliches Feld A5 - F5 um dorthin dann die internal_number mappen zu lassen.
Wie das allerdings geht darfst du mich nicht fragen.
Grüße
gibt es schon eine Lösung zu der Anzeige internal_number ?, habe grad auch keine Idee wie es umgesetzt werden könnte >:(
Moin,
ich arbeite noch mit 99_myUtilsTelefon.pm in der Version
Zitat$Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
und habe folgendes dort eingefügt:
15a16
> our @F;
134a136
> $F[$callID] = $intnum;
156a159,162
> if ( $event eq "internal_number" ) {
> $intnum = $arg;
> return;
> } # end if intnum
162a169
> $F[$callID] = $intnum;
220c227
< foreach $j ( 'A' .. 'E' ) {
---
> foreach $j ( 'A' .. 'F' ) {
234c241
<
---
> readingsBulkUpdate( $my_callmonitor, "F0", $F[$callID] );
Userreadings Callmonitor anpassen:
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 F0 F1 F2 F3 F4
Dann noch die Readingsgroup ändern:
DEF my_callmonitor:A0,B0,C0,D0,E0,F0,eing0 my_callmonitor:A1,B1,C1,D1,E1,F1,eing1 my_callmonitor:A2,B2,C2,D2,E2,F2,eing2 my_callmonitor:A3,B3,C3,D3,E3,F3,eing3 my_callmonitor:A4,B4,C4,D4,E4,F4,eing4
Eine Übertragung ins TM-Modul sollte für einen Perl-Kundigen (was ich nicht bin) nicht unmöglich sein.
Das Ganze geht mit Sicherheit schöner/besser/sauberer aber für mich funktioniert das einwandfrei.
Gruß
Reimund
Hallo,
da das ganze in die 99_myUtilsTelefon.pm muss werde ich Elektrolurch im zugehörigen Beitrag (Neues Modul Telefonmonitor -- siehe Codeschnippsel) mal darauf aufmerksam machen.
Die 99_myUtilsTelefon.pm ist ja immerhin sein Werk.
Grüße
Edith: Ich habe bewusst keine Kreuz- und Querverlinkung der beiden Beiträge gemacht.
Edith2: Elektrolurch ist bereits weiter 8)
Hallo zusammen,
ich hatte auch das Problem, daß ab 17.07. meine Anrufliste nicht mehr aktualisiert wurde.
Ein update hat keine Verbesserung gebracht.
Habe mich jetzt dem Problem gewidmet und fhem.cfg und 99_myUtilsTelefon.pm laut
fhemwiki "Callmonitor mit Anruferliste" nochmal beabeitet, funzt trotzdem nicht.
Im Logfile stehen folgende Fehler ( Name und Nummer ausgeblendet ):
2014.11.18 14:27:44.567 1: readingsUpdate(,A4,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.568 1: readingsUpdate(,B4,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.568 1: readingsUpdate(,C4,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.568 1: readingsUpdate(,D4,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.569 1: readingsUpdate(,E4,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.569 1: readingsUpdate(,A3,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.570 1: readingsUpdate(,B3,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.570 1: readingsUpdate(,C3,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.570 1: readingsUpdate(,D3,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.571 1: readingsUpdate(,E3,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.571 1: readingsUpdate(,A2,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.571 1: readingsUpdate(,B2,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.572 1: readingsUpdate(,C2,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.572 1: readingsUpdate(,D2,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.573 1: readingsUpdate(,E2,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.573 1: readingsUpdate(,A1,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.573 1: readingsUpdate(,B1,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.574 1: readingsUpdate(,C1,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.574 1: readingsUpdate(,D1,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.574 1: readingsUpdate(,E1,-) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.575 1: readingsUpdate(,A0,-> ) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.575 1: readingsUpdate(,B0,14:01:34 18.11.2014) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.575 1: readingsUpdate(,C0,xxxxxxxxxxxxx) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.576 1: readingsUpdate(,D0,xxxxxxxxxxxxx) missed to call readingsBeginUpdate first.
2014.11.18 14:27:44.576 1: readingsUpdate(,E0,25:58) missed to call readingsBeginUpdate first.
Jemand eine Idee ?
Gruß bytebold
hallo
bin nun auf cubie umgezogen, bzw fahre im Moment parallel
Alles mit Funk geht noch über die Fritte, der Rest auf beiden Geräten.
Habe gestern alles aus dem Thread callmonitor für Anfänger in meien cfg und in die 99_myUtilsTelefon.pm eingebuat
Es klappt auch das meiste auf dem cubie nur das Telefonbuch das ich aus der Fritte kopiert habe noch nicht
Elektrolurch hat ja nun ein Modul daraus gemacht.
Kann man beides parallel machen ?
Langfristig scheint ja die lösung von Elektrolurch besser ?!
Hallo zusammen,
bei mir läuft die Anrufliste wieder. Mein Fehler.
Ich hatte mir ein Backup von der 99_myUtilsTelefon.pm gemacht und als 99_myUtilsTelefon_2014_11_25.pm in das gleiche Verzeichnis gepackt.
Das kann wohl nicht funktionieren,weil die Subroutinen dann doppelt vorhanden sind. Nach dem Löschen des Backup-Files ist wieder alles ok.
Gruß, bytebold
Hallo,
ich habe mal eine Frage zum FB_Callmonitor bzw. zum Telefonmonitor.
Bei mir werden die Namen aus dem Telefonbuch nicht aufgelöst. Auch die Revers-Suche scheint nicht zu funzen. Folgende Attribute sind gesetzt:
reverse-search phonebook,klicktel.de,dasoertliche.de
reverse-search-cache 1
Die Namen sind aber im Telefonbuch der Fritte hinterlegt. Wenn nicht, so habe ich verstanden, werden die Namen über dasoertliche.de, etc. aufgelöst.
Es wird aber immer "unknown" zurückgegeben
fhem läuft nicht auf der Fritzbox sondern auf dem pi. Muss fhem auf der Fritte laufen um die namen aufzulösen, oder an welcher Stelle läuft hier etwas schief bei mir?
Spartacus.
NACHTRAG:
ich denke, der FB_Callmonitor kann nur auf das phonebook zugreifen, wenn fhem lokal läuft. Nun nutze ich auch noch das google Telefonbuch, besteht hier nicht die Möglichkeit, sich aus dem FB-Callmonitor mit dem google Dienst zu verbinden?
reverse-search-phonebook-file <Dateipfad>
Mit diesem Attribut kann man optional den Pfad zu einer Datei angeben, welche ein Telefonbuch im FritzBox-Format (XML-Struktur) enthält. Dadurch ist es möglich ein FritzBox-Telefonbuch zu verwenden, ohne das FHEM auf einer FritzBox laufen muss. Sofern FHEM auf einer FritzBox läuft (und nichts abweichendes angegeben wurde), wird das interne File /var/flash/phonebook verwendet. Alternativ kann man das Telefonbuch in der FritzBox-Weboberfläche exportieren und dieses verwenden
Ich schließe mich diesem Thread mal an, da auch ich mit dem CB-Monitor Probelme habe und keinen Zugriff auf mein Telefonbuch auf der FB bekomme. FHEM läuft auf einem Raspi und alles ist aktuell.
hier meine fhem.cfg
define Fritz_Box FB_CALLMONITOR 192.168.178.1
attr Fritz_Box icon icoWelt
attr Fritz_Box local-area-code 04101
attr Fritz_Box reverse-search all
attr Fritz_Box reverse-search-cache 1
attr Fritz_Box reverse-search-cache-file ./log/Fritz_Box-%Y.log Fritz_Box
attr Fritz_Box reverse-search-phonebook-file /var/flash/phonebook
attr Fritz_Box room Telefon
Die Fehlermeldung lautet immer "Could not read FritzBox phonebook file: /var/flash/phonebook" oder auch wenn ich es auf den Raspi exportiere.
"Could not read FritzBox phonebook file: /opt/fhem/FRITZ.Box_Telefonbuch_30.11.14_1845"
Mit einem xml-Editor sieht alles normal aus.
Wo kann der Fehler sein. Sind auf der FB bestimmte Recht zu setzen.
Danke für die Antworten.
Gruß Michael
Hallo,
wenn ich Pauls Zitat aus der CommandRef richtig deute, dann funzt das mit dem phonebook nur, wenn fhem auf der Fritte läuft!
Das hilft mir jedoch nicht, da fhem bei mir auf einem pi läuft. Ein Export des phonebooks macht auch keinen Sinn, da die Fritte mit google synchronisiert und somit auf den pi nicht aktuell wäre.
Schön wäre es deshalb, wenn der Callmonitor auch mit dem google Adressbuch synchronisieren würde, oder auf das Telefonbuch in der Fritte zugreifen könnte. Habe aber keine Ahnung, ob das technisch geht.
Christian
Hallo,
eine Nutzung der Google-Kontakte online ist so direkt ohne weiteres nicht möglich.
Das Problem besteht hier weniger in der technischen Natur, als eher in der rechtlichen. Die Rahmenbedingungen sind hier aufgrund von Datenschutz nicht ganz so einfach. Man muss eine Applikation bei Google registrieren und beschreiben, welche Schnittstellen sie nutzen möchte (z.B. Contacts-API). Dazu gehört dann ein Applikationsnahme, sowie Verantwortlicher inkl. Email + Nutzungsbedingungen/Datenschutzerklärung.
Diese Sachen kann ich aber selbst nicht so ohne weiteres machen, da ich nicht der Eigentümer dieses Projektes bin. Hier müsste eine generelle Regelung gefunden werden.
Daher wird aktuell nur das FritzBox Telefonbuch lokal unterstützt. Dieses wird (sofern FHEM auf der FritzBox läuft) sofort erkannt, oder man macht einen export des Telefonbuchs im XML Format und hinterlegt es auf dem FHEM System (Pfadangabe durch reverse-search-phonebook-file)
Viele Grüße
Markus
Hallo Markus,
danke für die Aufklärung! War ja nur so eine Idee. Und der Zugriff des Moduls auf das phonebook derFritte via Telnet ist dann offenbar auch nicht möglich, oder? Ich meine mal von einem Contact Connection Wizard gelesen zu haben. Aber keine Ahnung, ob man dazu etwas auf der Fritte installieren muss...
Gruß,
Christian.
Dazu noch meinen Senf ;)
Meine Kontakte sitzen weder auf der FBF noch bei Google, sondern auf einem lokalen Cardav Server, den ich lieber (zusätzlich) mit einbeziehen würde.
Weiß nicht ob da in Zukunft noch etwas machbar ist.
Apropos Google. Bei den Google-Kalendern kann man doch irgendwo eine URL kopieren, die Zugriff auf die Kalender erlaubt und zwar ohne Authentifizierung, wenn ich mich richtig erinnere. Ist dies vielleicht auch mit den Kontakten möglich? In jedem Fall wird der Callmonitor wohl CalDav bzw. hier Cardav unterstützen müssen um die Kontakte abzugreifen.
Michael
Ich habe gerade mal einen Blick in meine Google Contacts geworfen. So wie es bei Google Calender möglich ist eine URL freizugeben ist bei Contacts leider nicht möglich.
Man kann als angemeldeter User einen einmaligen Export aller Kontakte zum aktuellen Zeitpunkt machen (z.B. im vCard Format). Was möglich wäre, ist ein solches *.vcf File via Attribut an FB_CALLMONITOR zu geben um dort die Rufnummernauflösung zu machen.
Allerdings kann man so dennoch nicht auf die aktuelle Google Kontaktliste zugreifen. Dies geht nur über den komplizierten Weg, den ich weiter oben beschrieben habe.
Die Google CardDAV API setzt wie bereits oben beschrieben die Registrierung der Applikation in der DevConsole vorraus, so dass man sich dann mit OAuth2 an den Google Servern authentifizieren kann.
Viele Grüße
Markus
Hallo Markus,
ist ok! So genau kenne ich mich damit auch nicht aus.
Aber irgendwie schafft das der Contact Connection Wizard (http://software.nv-systems.net/ccw) Der kann auch die Kontakte von der Fritzbox holen...
Vielleicht ist das ein Ansatzpunkt!
Christian
Zitat von: Spartacus am 04 Dezember 2014, 14:04:43
Aber irgendwie schafft das der Contact Connection Wizard (http://software.nv-systems.net/ccw) Der kann auch die Kontakte von der Fritzbox holen...
Vielleicht ist das ein Ansatzpunkt!
Wenn man das jetzt noch irgendwie automatisiert (per CRON Job) auf dem Raspberry zum Laufen bekommt, wäre das Spitze! Soweit ich verstanden habe, wäre dies auch mittels Mono auf einem Linux Rechner möglich...
Jemand schon Erfahrung damit?
Michael
Hallo zusammen,
generell wäre das möglich, sowas zu integrieren. Wie das ganze funktioniert ist auch soweit verständlich. Mir fehlt nur leider die Zeit es umzusetzen.
Viele Grüße und einen spendablen Nikolaus
Markus
Zitat von: Spartacus am 04 Dezember 2014, 14:04:43
Aber irgendwie schafft das der Contact Connection Wizard (http://software.nv-systems.net/ccw) Der kann auch die Kontakte von der Fritzbox holen...
Hi, ich wüsste nicht, dass der CCW das kann. Jedenfalls sehe ich nirgendwo einen entsprechenden Menüpunkt. Selbst JFritz, dass ja die Telefonliste von der Fritte holen kann, kann nicht das Telefonbuch holen.
Grüße Jörg
ZitatSelbst JFritz, dass ja die Telefonliste von der Fritte holen kann, kann nicht das Telefonbuch holen.
Die Fritzbox (https://github.com/carlos22/fritzbox_api_php)- API (http://www.ip-phone-forum.de/showthread.php?t=196309)kann das.
Aber kann der Konverter Shellkommandos?
Zitat von: fiedel am 06 Dezember 2014, 15:10:52
Die Fritzbox (https://github.com/carlos22/fritzbox_api_php)- API (http://www.ip-phone-forum.de/showthread.php?t=196309)kann das.
Die kann auch "nur" die PhoneCallList.
Grüße Jörg
Hallo,
ich habe mal eine Problem zur Revers-Suche - FB_Callmonitor bzw. zum Telefonmonitor.
Bei mir werden die Namen aus dem Telefonbuch nicht immer aufgelöst. Auch die Revers-Suche scheint mit "search.ch" nicht immer zu funktionieren.
reverse-search search.ch
reverse-search-cache 1
Die Namen sind aber in "search.ch" zu finden. Dabei ist mir aufgefallen, wenn es eine einzelne Person/privat Person ist die gesucht wird, da geht es.
Wenn es eine Firma ist die gesucht wird, dann kommt immer - "unknown" zurückgegeben
Folgende Nummer geht nicht: 044 432 89 59
Folgende Nummer wird gefunden : 044 431 31 34
Güsse
Eric
Hallo Eric,
in der Tat. Ich hatte es nur mit einer Privat-Nummer getestet. Jetzt funktionieren auch Firmen.
Gibt es ab morgen via update.
Ein schönes Wochenende
Gruß
Markus
Hallo zusammen. Könnte einer so nett sein und mal eine funktionierende 99_myUtilsTelefon mit Icons für eingehend angenommen, eingehend nicht angenommen, abgehend angenommen, abgehend nicht angenommen und Ab posten.
Bin auf einen Raps umgestiegen und die RG läuft nicht.
Danke vorab
Mirco
Hallo Mirco,
bei mir klappt es mit dieser 99_myUtilsTM
################################## # $Id: 99_myUtilsTM.pm 2014-8 by Elektrolurch $
# Version 1.6 15/10/2014 by Elektrolurch
# change: call information are stored in a hash, not in an array
# callID: can be anything
# answering_machine_1 is mapped to 'AB
# anwering_machine_2..n is mapped to AB2 ...ABn
# table is now updated during ring | call and not after disconnect
#
# events are handled:
# 1. ring | call
# 2. external_number | external | name ... -> stored in hash
# 3. call_id stores infos in %callmem{$callID} and updates table
#
# disconnect
# call_duration updates the appropriate line in table
#
# Version 1.2 now as Modul TM
# define myTM TM <fritzbox>
# <fristzbox must be of type FB_CALLMONITOR
# a seperate notify is now not necessary!
# for visualization:
# values of calls are stored in A0..E0,...A4...E4
# use a readingsGroup for displaying values
# version 1.3
# methods for using calls to event "ring" and disconnect"
# acdepts perl-code and calls to fhem
# attr myTM method-ring set Lampe1 on
# attr myTM1 method-disconnect {TelefonAction($EXTERNAL_NAME);;;;}
# intern values for fhem: %EXTERNAL_NAME, %EXTERNAL_NUMBER, %INTERNAL_NUMBER
# for perl
# $EXTERNAL_NAME, $EXTERNAL_NUMBER, $INTERNAL_NUMBER
# Version 1.4
# added: set command
# set name [clear | monitor-type [all|incoming|outgoing|missed-call|all-after-disconnect]]
# Version 1.51 (26.10.2014 18:00)
# Bugfix: AB in TM_SetValue -> requires eq not ==
# attrList added room
# Version 1.52 30.09.2014
# Bugfix: TM_UpdateValue: readingsSingleUpdate -> $update replaced 1
# Version 1.53
# alias to attrlist added
# Version 1.54
# smaller corrections handling monitor-type = 'missed-call'
# Version 1.6
# added: attr line-filter accepts a list of ',' seperated incoming calling line numbers for filtering incoming or outgoing calls by calling line
# or a hash for mapping lines to text
# example
# attr myTM line-filter 304050,304060
# or
# attr myTM line-filter {'304050' => 'geschftl.', '304060' => 'priv'}
# line-information is stored in G0...G4
#
# added:
# $INTERNAL_CONNECTION / %INTERNAL_CONNECTION as variables for calling methods
# added: method-connect
package main;
use strict;
use warnings;
use POSIX;
use FritzBoxUtils;
##################################
# Symbols for call direction
# used as defaults, if appropiate Attributes are not defined
my $incoming = '->';
my $outgoing = '<-';
my $incoming_noconnect = '0>';
my $outgoing_noconnect = '<0';
my $ab = 'AB';
my $connected = 'con';
# there is a poosible bug in updating scrren
# values are experimentell
# update = 0, use readingsBulkUpdate for all lines
# update = 1 use readingsSingleUpdate for first line
# update = 2 use readingsSingleUpdate for all lines, causes a lot of traffic in fhem!!!
my $update = 0;
# 0...4 = 5 lines
# dont forget adapting definition of your readingsGroup!
my $maxlines = 4;
my $monitor_type = 'all';
# end default attributes
##################################
my %sets = (
'monitor-type' => 'all,incoming,outgoing,missed-call,all-after-disconnect',
'clear' => ''
);
sub myUtilsTM_Initialize($$)
{
TM_Initialize($_[0],$_[1]);
}
################################################################
sub TM_Initialize($$)
{
$modules{TM}{LOADED} = 1;
my $hash = $modules{TM};
$hash->{SetFn} = "TM_Set";
$hash->{DefFn} = "TM_Define";
$hash->{UndefFn} = "TM_Undef";
$hash->{NotifyFn} = "TM_Notify";
$hash->{AttrFn} = "TM_Attr";
$hash->{AttrList} = "alias disable:0,1 line-filter maxlines monitor-type:all,incoming,outgoing,missed-call,all-after-disconnect room icon group symbol-incoming symbol-incoming-noconnect symbol-outgoing symbol-outgoing-noconnect symbol-answering-machine symbol-connected update:0,1,2 method-connect method-call method-ring method-disconnect method-AB verbose:0,1,2,3,4,5,6";
return undef;
} # end sub TM_initialize
########################
sub TM_Define($$)
{
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
my $retval = undef;
my $name = $a[0];
if(!defined($a[2]))
{
$retval = "TM_define: you must specify a FB_CallMonitor object for using TM";
return $retval;
}
if (!defined($defs{$a[2]}) || ($defs{$a[2]}->{TYPE} ne 'FB_CALLMONITOR'))
{
$retval = "TM_Define: $a[2] does not exists or ist not of type FB_CALLMONITOR";
return $retval;
}
$hash->{FB} = $a[2];
$hash->{STATE} = 'initialized';
return undef;
} # end sub TM_Define
###############################
sub TM_Undef($$)
{
my ( $hash, $arg ) = @_;
return undef;
} # end TM_Undef
################################
sub TM_Set($@)
{
my ($hash, @a) = @_;
my ($name,$rd,$val) = @a;
return "\"TM set\" no set value specified" if((int(@a) < 2) && ($rd ne '?'));
$val = 0 if ($rd eq '?');
if ($rd eq 'monitor-type')
{
my %clist;
foreach my $k (split(',',$sets{$rd})) {$clist{$k} = ''; }
return "TM set monitor-type: $val must be of ".$sets{$rd} if(!exists($clist{$val}));
readingsSingleUpdate($hash,$rd,$val,1);
$attr{$name}{'monitor-type'} = $val;
}
elsif ($rd eq 'clear')
{
my ($i,$j);
my $rhash = $hash->{READINGS};
for ($i=AttrVal($name,"maxlines",$maxlines); $i>=0; $i--)
{
foreach $j ('A'..'F')
{
delete($rhash->{$j.$i});
} # end j
} # end i
} # if clear
else
{
my @cList;
foreach my $k (sort keys %sets)
{
my $opts = undef;
$opts = $sets{$k};
if (defined($opts))
{
push(@cList,$k . ':' . $opts);
}
else
{
push (@cList,$k);
}
} # end foreach
return "Unknown argument $rd, choose one of " . join(" ", @cList);
} # end else -> error handling
return undef;
} # end sub TM_set
############################
sub TM_Store($)
{
my ($hash) = @_;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
my $ID = $hash->{callID};
my $name = $hash->{NAME};
my $linefilter = AttrVal($name,'line-filter',undef);
Log3($name,4,"TM_Store: linefilter $linefilter");
if($linefilter)
{
if( $linefilter =~ m/^{.*}$/ )
{
my $lf = eval $linefilter;
if( $lf &&(ref($lf) eq 'HASH'))
{
$linefilter = $lf ;
Log3($name,4,"TM_Store: filter as hash: $linefilter");
} # if valid
else
{
Log3($name,2,"TM_Store: $linefilter (line-filter) is not a valid hash");
$linefilter = undef;
} # not a valid hash
}
else # list of filters
{
my %lines;
foreach my $l ( split("[ \t,][ \t,]*",$linefilter)) {$lines{$l} = $l; }
$linefilter = \%lines;
Log3($name,4,"TM_Store: linefilter as list $linefilter");
} # list of lines
} # if $linefilter
# linefilter is undef, if no filter or
# hash contains valid internal_number
my $innumber = $hash->{mem}{"internal_number"};
if(!defined($linefilter) || exists($linefilter->{$innumber}))
{
$hash->{callmem}{$ID} = {};
my $rhash = $hash->{callmem}{$ID};
my $dir = ($hash->{mem}{"direction"} eq 'incoming') ? AttrVal($name,'symbol-incoming',$incoming) : AttrVal($name,'symbol-outgoing',$outgoing);
$rhash->{A} = $dir;
$rhash->{B} = sprintf("%02d:%02d %02d.%02d.%4d",$hour,$min,$mday,($mon+1),($year+1900));
$rhash->{C} = $hash->{mem}{"external_name"};
$rhash->{D} = $hash->{mem}{"external_number"};
$rhash->{E} = (defined($hash->{mem}{"call_duration"})) ? $hash->{mem}{"call_duration"}: AttrVal($name,'symbol-connected',$connected);
# default call_duration, set after disconnect
$rhash->{F} = $ID;
if($linefilter)
{
$rhash->{G} = $linefilter->{$innumber};
}
else
{
$rhash->{G} = $innumber;
}
delete($hash->{mem});
return 1; # valid call
} # if linefilter
else
{
Log3($name,3,"TM_Store: calls from $innumber are not store, not in attr line-filter");
delete($hash->{mem});
return undef;
} # if filtered out
return undef;
} # end sub TM_Store
############################################
sub TM_UpdateTable($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
my $ID = $hash->{callID};
my $up = AttrVal($name,'update',$update);
Log3($name,4,"TM_UpdateTable: ID $ID");
# shiften der alten Inhalte
my $tt;
my ($i,$j);
my $rhash = $hash->{READINGS};
if($up <= 1)
{
readingsBeginUpdate($hash);
for ($i=AttrVal($name,"maxlines",$maxlines); $i>0; $i--)
{
foreach $j ('A'..'G')
{
my $k = $j . ($i-1);
$tt = undef;
$tt = $rhash->{$k}{VAL} if(exists($rhash->{$k}));
next if(!defined($tt));
readingsBulkUpdate($hash,$j.$i,$tt,1);
} # end j
} # end i
readingsEndUpdate($hash,1);
} # if BulkUpdate
else
{
for ($i=AttrVal($name,"maxlines",$maxlines); $i>0; $i--)
{
foreach $j ('A'..'G')
{
my $k = $j . ($i-1);
$tt = undef;
$tt = $rhash->{$k}{VAL} if(exists($rhash->{$k}));
next if(!defined($tt));
readingsSingleUpdate($hash,$j.$i,$tt,1);
} # end j
} # end i
} # else SingleUpdate
# first line with new values
if($up> 0)
{
foreach my $k ('A'..'G')
{
readingsSingleUpdate($hash,$k."0",$hash->{callmem}{$ID}{$k},1);
}
} # if SingleUpdate
else
{
readingsBeginUpdate($hash);
foreach my $k ('A'..'G')
{
readingsBulkUpdate($hash,$k."0",$hash->{callmem}{$ID}{$k},1);
}
readingsEndUpdate($hash, 1);
} # if BulkUpdate
return undef;
} # end TM_update
###########################
sub TM_UpdateValue($$$$)
{
my ($hash,$ID,$col,$val) = @_;
my $name = $hash->{NAME};
my $rhash = $hash->{READINGS};
Log3($name,5,"TM_UpdateValue: args callID: $ID col: $col val: $val");
for (my $i = 0; $i < AttrVal($name,'maxlines',$maxlines);$i++)
{
my $rdid= 'F' . $i; # stored callID
Log3($name,6,"TM_updateValue: in loop i: $i callID: $rhash->{$rdid}{VAL}");
if(defined($rhash->{$rdid}) && $rhash->{$rdid}{VAL} eq $ID)
{
my $rd = $col . $i;
Log3($name,4,"TM_UpdateValue: updateingindex $rdid $rd $val");
if(($col eq 'A') && ($val eq '0'))
{
$val = ($rhash->{$rd}{VAL} eq AttrVal($name,'symbol-incoming',$incoming)) ? AttrVal($name,'symbol-incoming-noconnect',$incoming_noconnect) : AttrVal($name,'symbol-outgoing-noconnect',$outgoing_noconnect);
}
readingsSingleUpdate($hash,$rd,$val,1);
return undef;
} # if update
} # end i
Log3($name,1,"TM_updateValue: not found col $col id $ID val $val");
return "TM_UpdateValue: Error - ID not found";
} # end TM_UpdateValue
##########################
sub TM_Notify($$)
{
my ($hash,$d) = @_;
return "TM_notify: hash not defiened" if (!defined($hash));
my $name = $hash->{NAME};
return undef if(AttrVal($name, "disable", undef));
# Abbruch wenn das Attribut disable gesetzt
my $fb = $d->{NAME};
if ($fb ne $hash->{FB})
{
return undef;
} # if not fb
my $rhash = $d->{CHANGED};
my $max = int(@$rhash);
# number of events / changes
for (my $i = 0; $i < $max; $i++)
{
my $s = $d->{CHANGED}[$i];
TM_Monitor($hash,$s);
} # end for i
} # end sub TM_Notify
#####################################
sub TM_Proc($$)
{
my ($hash,$proc) = @_;
my $name = $hash->{NAME};
my $external_name = $hash->{mem}{'external_name'};
my $external_number = $hash->{mem}{'external_number'};
my $internal_number = $hash->{mem}{'internal_number'};
my $internal_connection = $hash->{mem}{'internal_connection'};
my $EXTERNAL_NAME = $external_name,
my $EXTERNAL_NUMBER = $external_number;
my $INTERNAL_NUMBER = $internal_number;
my $INTERNAL_CONNECTION = $internal_connection;
$proc =~s/\%EXTERNAL_NAME/$external_name/g;
$proc =~s/\%EXTERNAL_NUBER/$external_number/g;
$proc =~s/\%INTERNAL_NUMBER/$internal_number/g;
$proc =~s/\%INTERNAL_CONNECTION/$internal_connection/g;
if($proc =~ m/^{.*}$/)
{
$proc =~s/\$EXTERNAL_NAME/"$external_name"/g;
$proc =~s/\$EXTERNAL_NUMBER/"$external_number"/g;
$proc =~s/\$INTERNAL_NUMBER/"$internal_number"/g;
$proc =~s/\$INTERNAL_CONNECTION/"$internal_connection"/g;
} # if perl
Log3($name,3,"TM_Proc: action $proc");
fhem($proc);
} # end sub TM_Proc
########################
sub TM_Monitor($$)
{
my ($hash,$Ev) = @_;
my $name = $hash->{NAME};
if(!defined($hash))
{
Log(1,"TM_Monitorhash nicht gefunden");
return "TM: $hash not found";
} # if error
my ($event,$arg) = split (':',$Ev);
$arg = rtrim(ltrim($arg));
$event = ltrim(rtrim($event));
my $proc;
if ($event eq "event")
{
$hash->{stat} = $arg;
Log3($name,3,"\nTM_Monitor: status: $arg");
return undef;
} # end if event
Log3($name,4,"TM_Monitor: stat: $hash->{stat} event: $event arg: $arg");
# store all subevents
$hash->{mem}{$event} = $arg;
if ($hash->{stat} eq "ring")
{
if ($event eq "call_id")
{
$hash->{callID} = $arg;
Log3($name,3,"Anruf (ring) von $hash->{mem}{'external_name'} $hash->{mem}{'external_number'} callID: $arg");
# hier koennen wir eine anrufgesteuerte Aktion starten
$proc = AttrVal($name,'method-ring',undef);
if($proc)
{
TM_Proc($hash,$proc);
} # end method-ring
my $mot = AttrVal($name,'monitor-type',$monitor_type);
Log3($name,5,"Ring vor TM_UpdateTable mot $mot");
if(($mot eq 'all') || ($mot eq 'incoming'))
{
TM_UpdateTable($hash) if(TM_Store($hash));
} # if mode
} # end if callid
return undef;
} # end if ring events
if ($hash->{stat} eq "connect")
{
# handle answering machine
if (($event eq"internal_connection") &&
($arg =~m/Answering_Machine_.*/))
{
$proc = AttrVal($name,'method-AB',undef);
if($proc)
{
TM_Proc($hash,$proc);
} # end method-AB
my (undef,undef,$abnr) = split('_',$arg);
$hash->{mem}{ab} = $abnr;
Log3($name,3,"Anrufbeantworter Nr. $abnr angesprochen");
return undef;
} # end if internal_connection
if ($event eq "call_id")
{
$hash->{callID} = $arg;
# method-connect
$proc = AttrVal($name,'method-connect',undef);
if($proc)
{
TM_Proc($hash,$proc);
} # end method-connect
if (exists($hash->{mem}{ab}) && $hash->{mem}{ab} > 0)
{
$hash->{callmem}{$arg}{A} = AttrVal($name,'symbol-answering-machine',$ab);
$hash->{callmem}{$arg}{A} .= $hash->{mem}{ab} if ($hash->{mem}{ab} > 1);
if(AttrVal($name,'monitor-type',$monitor_type) =~m/(all|incoming)/)
{
# update value in table
TM_UpdateValue($hash,$arg,'A',$hash->{callmem}{$arg}{A} );
Log3($name,3,"in/out symbol in table change to Answering Machine");
} # update AB,
} # if A set to AB
delete($hash->{mem}{ab});
} # end if callID
return undef;
} # end if connect
if ($hash->{stat} eq "call")
{
$hash->{mem}{$event} = $arg;
# method-call
$proc = AttrVal($name,'method-call',undef);
if($proc)
{
TM_Proc($hash,$proc);
} # end method-call
if ($event eq "call_id")
{
$hash->{callID} = $arg;
my $mot = AttrVal($name,'monitor-type',$monitor_type);
Log3($name,5,"Call vor TM_UpdateTable mot $mot");
if(($mot eq 'all') | ($mot eq 'outgoing'))
{
TM_UpdateTable($hash) if(TM_Store($hash));
} # if mode
} # end if callid
return undef;
} # end if call event
if ($hash->{stat} eq "disconnect")
{
if ($event eq "call_duration")
{
$hash->{mem}{"call_duration"} = sprintf("%02d:%02d", ($arg/60),$arg%60);
return undef;
} # if call_duration
if ($event eq "call_id")
{
$hash->{callID} = $arg;
$hash->{callmem}{$arg}{E} = $hash->{mem}{"call_duration"};
$proc = AttrVal($name,'method-disconnect',undef);
if($proc)
{
TM_Proc($hash,$proc);
} # end method-disconnect
my $mot = AttrVal($name,'monitor-type',$monitor_type);
Log3($name,5,"Disconnect vor TM_UpdateTable mot $mot");
if($mot eq 'missed-call')
{
if(TM_Store($hash))
{
my $aktsym = $hash->{callmem}{$arg}{A};
my $aktdur = $hash->{callmem}{$arg}{E};
Log3($name,5,"TM_Monitor: $mot aktsym: $aktsym aktdur: $aktdur");
if( ( ($aktsym eq AttrVal($name,'symbol-incoming',$incoming)) && ($aktdur eq '00:00')) || ($aktsym eq AttrVal($name,'symbol-answering-machine',$ab)) )
{
# korrekt incoming symbol
$hash->{callmem}{$arg}{A} = AttrVal($name,'symbol-incoming-noconnect',$incoming_noconnect) if($aktdur eq '00:00');
Log3($name,5,"mode = missed-call callID: $arg connnection in mem: $hash->{callmem}{$arg}{A} duration: $hash->{callmem}{$arg}{E} ");
TM_UpdateTable($hash);
} # if TM_Store / line-filter
delete($hash->{callmem}{$arg});
delete($hash->{mem});
return undef;
}
} # if missed-call
elsif($mot eq 'all_after_disconnect')
{
Log3($name,5,"disconnect mode: all_after_disconnect");
if(TM_Store($hash))
{
TM_UpdateTable($hash);
delete($hash->{callmem}{$arg});
delete($hash->{mem});
} # if TM_Store / line-filter
} # all_after_disconnect
else
{
# update value call_duration in table
TM_UpdateValue($hash,$arg,'E',$hash->{callmem}{$arg}{E} );
# update symbols for in/outgoing with no connections
TM_UpdateValue($hash,$arg,'A',0 ) if($hash->{callmem}{$arg}{E} =~m/(<->|00:00)/);
} # update table for duration
delete($hash->{callmem}{$arg});
delete($hash->{mem});
return undef;
} # end if callid
} # end if disconnect
return undef;
} #end sub TM_Monitor
#####################################
sub TM_Attr(@)
{
my ($cmd,$name,$aName,$aVal) = @_;
my $hash = $defs{$name};
return "\n TM_Attr: " .$name . " does not exits" if (!defined($hash));
# $cmd can be "del" or "set"
# $name is device name
# aName and aVal are Attribute name and value
if ($cmd eq "set")
{
if ($aName eq 'disable')
{
$hash->{STATE} = ($aVal == 0)?'initialized':'disabled';
}
if ($aName eq 'monitor-type')
{
return TM_Set($hash,$name,$aName,$aVal);
} # monitor-type
else
{
my @attrs = split(' ',$modules{TM}->{AttrList});
my %ats;
for(my $i = 0; $i < int(@attrs); $i++)
{
my ($a,$v) = split(':',$attrs[$i]);
$ats{$a} = $v;
} # end i
if(!exists($ats{$aName}))
{
return "TM_Attr: $aName must at least one of: ".join(',',sort keys %ats);
} # error handling
} # if else
} # end if set
return undef;
} # end ssub TM_Attr
######################
1;
und diesen Einträgen in der fhem.cfg
######################################################################################################
##################################### Anrufmonitor Callmonitor #######################################
######################################################################################################
define FB7390 FB_CALLMONITOR 192.168.1.1
attr FB7390 local-area-code 0241
attr FB7390 reverse-search all
attr FB7390 reverse-search-cache 1
attr FB7390 reverse-search-cache-file /opt/fhem/callmoncache.txt
attr FB7390 reverse-search-phonebook-file ./log/Fritz_Box_Telefonbuch.xml
attr FB7390 room System
attr FB7390 verbose 0
#
define CallMon TM FB7390
attr CallMon maxlines 4
attr CallMon monitor-type all
attr CallMon room System
attr CallMon symbol-answering-machine AB
attr CallMon symbol-connected connected
attr CallMon symbol-incoming incoming
attr CallMon symbol-incoming-noconnect incoming_noconnect
attr CallMon symbol-outgoing outgoing
attr CallMon symbol-outgoing-noconnect outgoing_noconnect
attr CallMon update 2
#
#
define Anrufliste readingsGroup <Pos>,<Art>,<Datum>,<Name>,<Nummer>,<Dauer>\
CallMon:A0,B0,C0,D0,E0 CallMon:A1,B1,C1,D1,E1 CallMon:A2,B2,C2,D2,E2 CallMon:A3,B3,C3,D3,E3 CallMon:A4,B4,C4,D4,E4
attr Anrufliste mapping {'CallMon' => '{sprintf("%d.",$ROW-1);;;;}'}
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste room Telefon
attr Anrufliste valueIcon { 'A0.incoming' => 'phone_ring_in@green', 'A0.incoming_noconnect' => 'phone_ring_in@red', 'A0.outgoing' => 'phone_ring_out@green', 'A0.outgoing_noconnect' => 'phone_ring_out@red', 'A0.AB' => 'phone_answersing@blue', 'E0.connected' => 'phone_ring@yellow', 'A1.incoming' => 'phone_ring_in@green', 'A1.incoming_noconnect' => 'phone_ring_in@red', 'A1.outgoing' => 'phone_ring_out@green', 'A1.outgoing_noconnect' => 'phone_ring_out@red', 'A1.AB' => 'phone_answersing@blue', 'E1.connected' => 'phone_ring@yellow', 'A2.incoming' => 'phone_ring_in@green', 'A2.incoming_noconnect' => 'phone_ring_in@red', 'A2.outgoing' => 'phone_ring_out@green', 'A2.outgoing_noconnect' => 'phone_ring_out@red', 'A2.AB' => 'phone_answersing@blue', 'E2.connected' => 'phone_ring@yellow', 'A3.incoming' => 'phone_ring_in@green', 'A3.incoming_noconnect' => 'phone_ring_in@red', 'A3.outgoing' => 'phone_ring_out@green', 'A3.outgoing_noconnect' => 'phone_ring_out@red', 'A3.AB' => 'phone_answersing@blue', 'E3.connected' => 'phone_ring@yellow', 'A4.incoming' => 'phone_ring_in@green', 'A4.incoming_noconnect' => 'phone_ring_in@red', 'A4.outgoing' => 'phone_ring_out@green', 'A4.outgoing_noconnect' => 'phone_ring_out@red', 'A4.AB' => 'phone_answersing@blue', 'E4.connected' => 'phone_ring@yellow' }
Hoffe das hilft weiter
Hat es. sieht besser als vorher aus. Danke
Recht herzlichen Dank,
für Eure "Arbeit" und Euer gutes Wiki !
Hat mir als Anfänger sehr gut geholfen.
Jetzt muss ich nur noch an Details arbeiten und lesen... (Was den Callmonitor angeht, z.B. Telefonliste integrieren...)
[edit1: 23.01.2015 um 14:16 Habe die "fb_phonebook.xml" von der Fritzbox gespeichert, mit WinSCP in das Verzeichniss /opt/fhem/ kopiert und mit chmod g+w fb_phonebook.xml die Rechte verändert. Jetzt werden die "Namen" auch angezeigt. :) ]
[edit2: 24.01.2015 um 19:30 Habe da doch noch mal eine Frage:
Könnte mir bitte jemand erklären, wie ich die Anrufliste auf z.B. 10 erweitern kann?
Folgendes hat zu keinem Erfolg geführt:########################################################################################
## Fritzbox Anruferliste Anfang ##
# Logfile der Anrufe (Fritzbox)
define FileLog_my_callmonitor FileLog /opt/fhem/log/my_callmonitor-%Y.log my_callmonitor
attr FileLog_my_callmonitor logtype text
attr FileLog_my_callmonitor room 4_Logdaten,Fritzbox
# Callmonitor mit rollierender Anruferliste:
define my_callmonitor FB_CALLMONITOR 192.168.2.1:1012
attr my_callmonitor group Connections
attr my_callmonitor icon phone_call
attr my_callmonitor local-area-code 040
attr my_callmonitor reverse-search all
attr my_callmonitor reverse-search-cache 1
attr my_callmonitor reverse-search-cache-file /opt/fhem/callmoncache.txt
attr my_callmonitor reverse-search-phonebook-file /opt/fhem/fb_phonebook.xml
attr my_callmonitor room 5_System,Fritzbox
attr my_callmonitor userReadings eing0 eing1 eing2 eing3 eing4 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
attr my_callmonitor verbose 0
# Anrufer Anzeigen:
#########################
# Dummy zur Anzeige des Namen:
define Dum_TelMon_ShowNa_D dummy
attr Dum_TelMon_ShowNa_D group Programm
attr Dum_TelMon_ShowNa_D room 5_System,Fritzbox
#attr Dum_TelMon_ShowNa_D fp_9_Telefon 23,209,0,Eingehender Anruf von:
# Dummy zur Anzeige der Nummer:
define Dum_TelMon_ShowNu_D dummy
attr Dum_TelMon_ShowNu_D group Programm
attr Dum_TelMon_ShowNu_D room 5_System,Fritzbox
#attr Dum_TelMon_ShowNu_D fp_9_Telefon 165,278,0,Telefonnummer:
# Wenn Telefon klingelt, wechsle zum FP "Telefon",zeige und sage Anrufer an:
#attr Func_TelMon_Show_N group Programm
#attr Func_TelMon_Show_N room 5_System,Fritzbox
# Wenn Telefon aufgelegt, wechsle zum Haupt-FP:
#attr Func_TelMon_Back_N group Programm
#attr Func_TelMon_Back_N room 5_System,Fritzbox
# Anrufliste generieren:
#########################
# Telefonevents für Anrufliste abfangen:
define Func_TelMon_N notify my_callmonitor:.* { \
TelefonMonitor ($EVENT);; \
}
attr Func_TelMon_N group Programm
attr Func_TelMon_N room 5_System,Fritzbox
# Anzeige der Anrufliste generieren:
define Anrufliste readingsGroup my_callmonitor:A0,B0,C0,D0,E0 my_callmonitor:A1,B1,C1,D1,E1 my_callmonitor:A2,B2,C2,D2,E2 my_callmonitor:A3,B3,C3,D3,E3 my_callmonitor:A4,B4,C4,D4,E4 my_callmonitor:A4,B4,C4,D4,E4 my_callmonitor:A5,B5,C5,D5,E5 my_callmonitor:A6,B6,C6,D6,E6 my_callmonitor:A7,B7,C7,D7,E7 my_callmonitor:A8,B8,C8,D8,E8 my_callmonitor:A9,B9,C9,D9,E9
attr Anrufliste nameStyle style="font-weight:bold"
attr Anrufliste noheading 0
attr Anrufliste nolinks 1
attr Anrufliste nonames 1
attr Anrufliste nostate 1
attr Anrufliste notime 1
attr Anrufliste room 0_Überblick,Fritzbox
attr Anrufliste style style="font-size:20px"
attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'A5.out_connected' => 'phone_call_out@lightgreen', 'A5.out_notconnected' => 'phone_call_out@red','A5.in_connected' => 'phone_call_in@lightgreen','A5.in_notconnected' => 'phone_call_in@red', 'A5.AB' => 'audio_volume_mid@lightgreen','A6.out_connected' => 'phone_call_out@lightgreen', 'A6.out_notconnected' => 'phone_call_out@red','A6.in_connected' => 'phone_call_in@lightgreen','A6.in_notconnected' => 'phone_call_in@red', 'A6.AB' => 'audio_volume_mid@lightgreen','A7.out_connected' => 'phone_call_out@lightgreen', 'A7.out_notconnected' => 'phone_call_out@red','A7.in_connected' => 'phone_call_in@lightgreen','A7.in_notconnected' => 'phone_call_in@red', 'A7.AB' => 'audio_volume_mid@lightgreen','A8.out_connected' => 'phone_call_out@lightgreen', 'A8.out_notconnected' => 'phone_call_out@red','A8.in_connected' => 'phone_call_in@lightgreen','A8.in_notconnected' => 'phone_call_in@red', 'A8.AB' => 'audio_volume_mid@lightgreen','A9.out_connected' => 'phone_call_out@lightgreen', 'A9.out_notconnected' => 'phone_call_out@red','A9.in_connected' => 'phone_call_in@lightgreen','A9.in_notconnected' => 'phone_call_in@red', 'A9.AB' => 'audio_volume_mid@lightgreen','}
#attr Anrufliste fp_9_Telefon 370,206,0,Anrufliste
#attr Anrufliste mapping  
## Fritzbox Anruferliste Ende ##
########################################################################################
Danke schon mal ]
Gruss Sunny
Moin,
ich habe eine Frage zum fritzbox-remote-phonebook, heißt das jetzt der zieht sich das Phonebook selber von der Fritze? Er sagt zwar er macht das im Log und hat auch alles bekommen aber Namen sehe ich im Callmonitor trotzdem nicht. Ist das besser das mit der XML zu machen?
Gruß
Daniel
@Sunny
Auf jeden Fall ist die Zeile falsch:
attr my_callmonitor userReadings eing0 eing1 eing2 eing3 eing4 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
müsste so lauten:
attr my_callmonitor userReadings eing0 eing1 eing2 eing3 eing4 eing5 eing6 eing7 eing8 eing9 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
diese Zeile habe ich auch nicht gesehen, ob überhaupt wichtig? glaube nicht:
attr CallMon maxlines 10
Vielleicht war es das schon und ich konnte dir helfen
Gruß
nobbi
Moin,
also irgendwie haut da was nicht hin bei mir. Ich habe das fritzbox-remote-phonebook gesetzt und der läd es auch runter, wenn ich ein list Callmonitor mache sehe ich auch alle Daten:
Helper:
Phonebook:
0152xxxxxxxx Monxxx Wixxxlm
0157xxxxxxxxx Juxxx Thxxxe
0170xxxxxxxxxx Daxxxl Wxxxxxx
Aber es steht bei jedem Call external_name unknown da. Wenn ich ein Search mache kommt auch nichts zurück obwohl die Nummer unter dem Datensatz ist.
Was mache ich den da falsch?
Gruß
Daniel
OK ich hab mein Fehler, man muss noch:
reverse-search phonebook
setzen.
Hallo Markus
Die search.ch Seite hat sich geändert, seither funktioniert die Abfrage nichtmehr.
Vllt. wenn Du mal zeit hättest, könntest Du es anschauen?
Beste Grüsse
Eric
Hallo Eric,
ist gefixt und ab morgen via update verfügbar.
@alle: Ich würde euch bitten, diesen Thread nicht mehr für diverse Themen zum Callmonitor zu nutzen. Es wird nur noch voller und es werden viele unterschiedliche Probleme in einem Thread behandelt.
Bitte öffnet für neue Probleme auch einen neuen Thread
Dieses Forum ist genau dafür da um Probleme getrennt zu diskutieren. Dieser Thread behandelt unterschiedliche Themen und Probleme und nennt sich "Callmonitor für Anfänger". Der gesamte Thread-Inhalt passt leider nicht wirklich mehr zum Titel.
Daher möchte ich diesen Thread gerne schließen.
Neue Probleme => Neuer Thread, da haben alle was von.
Gruß
Markus