FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: coolice am 25 Januar 2014, 13:07:36

Titel: Callmonitor für Anfänger
Beitrag von: coolice am 25 Januar 2014, 13:07:36
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 26 Januar 2014, 15:53:49
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
Titel: Antw:Callmonitor für Anfänger
Beitrag 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)  ;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 27 Januar 2014, 07:34:52
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 27 Januar 2014, 08:45:01
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 27 Januar 2014, 17:31:45
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 27 Januar 2014, 20:05:17
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 28 Januar 2014, 06:39:10
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 28 Januar 2014, 19:14:47
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 29 Januar 2014, 08:33:35
Ha,  ;) in der Utils- Datei musste auch noch dein "Fritz_Box" engesetzt werden, anstatt meinem "Callmon..."
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 29 Januar 2014, 18:02:27
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 29 Januar 2014, 19:25:24
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"'}
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 29 Januar 2014, 19:55:15
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 29 Januar 2014, 21:19:40
Tja.leider kein Erfolg. Wenn es wenigstens eine Fehlermeldung gäbe. :(
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 29 Januar 2014, 21:25:07
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 30 Januar 2014, 08:23:23
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 30 Januar 2014, 13:07:40
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... ;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 30 Januar 2014, 14:58:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 04 Februar 2014, 20:53:46
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Mitch am 05 Februar 2014, 09:30:28
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.'}
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 05 Februar 2014, 18:25:48
Hallo Mitch,

war oder ist komplett angepasst gewesen.  :'(
Ich werde jetzt alles löschen. Dat bekomm i net hin.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 05 Februar 2014, 20:08:09
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 06 Februar 2014, 17:34:09
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



Titel: Antw:Callmonitor für Anfänger
Beitrag von: Oli_t am 06 Februar 2014, 18:33:55
Hallo,

kann mir Jemand sagen wie man die Funktion "TelefonAktion" verwendet ?

Danke,

Oli
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 07 Februar 2014, 08:48:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Oli_t am 07 Februar 2014, 09:14:59
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 07 Februar 2014, 15:54:40
@ 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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 07 Februar 2014, 16:43:03
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 14 Februar 2014, 00:02:50
geht dieses alles nur wenn Fhem auf der Fritzbox läuft..? Ich habe Fhem auf dem Raspberry...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 14 Februar 2014, 07:15:13
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 14 Februar 2014, 12:03:42
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 14 Februar 2014, 12:37:05
Mal Updates machen und wenn es dann nicht geht, meine Minimalkonfig von ein paar Posts weiter oben nehmen.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 14 Februar 2014, 13:23:16
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 14 Februar 2014, 16:06:54
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 14 Februar 2014, 16:25:01
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 14 Februar 2014, 16:32:29
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;


Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 14 Februar 2014, 16:58:45
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)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 14 Februar 2014, 17:30:36
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 14 Februar 2014, 17:44:50
@ moonsorrox:
hast Du den Monitor mit #96*5* (am Telefon) aktiviert?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 14 Februar 2014, 17:48:52
@ 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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 14 Februar 2014, 17:53:07
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 14 Februar 2014, 18:29:59
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)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 14 Februar 2014, 18:33:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 14 Februar 2014, 18:44:11
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 14 Februar 2014, 19:56:15
so bis auf das er mir bei Anrufen (einmal nicht) unknown anzeigt habe ich das jetzt auch mit den Icons hinbekommen.
Titel: Antw:Callmonitor für Anfänger
Beitrag 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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 14 Februar 2014, 23:58:37
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 15 Februar 2014, 09:06:57
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'}


Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 15 Februar 2014, 11:06:59
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 15 Februar 2014, 21:30:29
Hallo zusammen,

hat einer von euch das mit dem AB getestet? Bei mir wir kein "AB" Reading geschrieben.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Paul am 15 Februar 2014, 22:08:02
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 15 Februar 2014, 22:28:11
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 15 Februar 2014, 22:33:53
Danke! Jetzt passt es!  ;D
Titel: Antw:Callmonitor für Anfänger
Beitrag von: der-Lolo am 16 Februar 2014, 07:46:37
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...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 08:59:15
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: der-Lolo am 16 Februar 2014, 09:08:02
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...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 09:41:59
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 16 Februar 2014, 10:35:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 11:42:58
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 16 Februar 2014, 12:38:50
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: dirkbn am 16 Februar 2014, 12:46:23
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 16 Februar 2014, 12:48:13
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 16 Februar 2014, 13:21:18
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 16 Februar 2014, 13:30:22
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 16 Februar 2014, 14:21:40
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 16 Februar 2014, 14:44:50
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 15:04:32
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 16 Februar 2014, 15:58:45
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 17:25:03
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 16 Februar 2014, 17:58:36
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 16 Februar 2014, 18:01:16
Natürlich die Vorwahl!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 16 Februar 2014, 18:08:20
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),

;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 16 Februar 2014, 19:47:42
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 16 Februar 2014, 23:21:42
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..!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 17 Februar 2014, 08:58:58
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 ?!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 17 Februar 2014, 09:32:21
Meine Fritzbox stromlos gemacht, Neustart, aber immer noch:
FB_CALLMONITOR: could not open cache file

Hat noch jemand eine Idee?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 17 Februar 2014, 09:59:29
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! 
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 17 Februar 2014, 11:13:46
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 17 Februar 2014, 11:49:14
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 17 Februar 2014, 11:56:17
probier mal ohne sudo
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 17 Februar 2014, 12:24:21
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...!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 17 Februar 2014, 12:24:44
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag 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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 17 Februar 2014, 12:33:36
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 ;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 17 Februar 2014, 12:57:54
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 17 Februar 2014, 14:59:08
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)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 17 Februar 2014, 15:53:30
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 17 Februar 2014, 18:36:05
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 17 Februar 2014, 18:42:47
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!!!

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 18 Februar 2014, 15:42:22
Aber die Datei ist und bleibt 0 Bytes groß, egal wie viel ich telefoniere...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 18 Februar 2014, 16:14:36
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 18 Februar 2014, 19:11:32
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  :)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 18 Februar 2014, 23:40:12
Siehe dazu: http://forum.fhem.de/index.php/topic,20419.0.html
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 18 Februar 2014, 23:41:48
ja da bin ich grad am lesen... vielen Dank
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 19 Februar 2014, 11:10:54
@ 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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 19 Februar 2014, 21:43:46
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 &nbsp;
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Absolute Beginner am 20 Februar 2014, 17:26:25
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 &nbsp;

Danke, das funktioniert! So sieht die Anrufliste 1A aus.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Axel.K am 17 März 2014, 23:19:33
Habe heute den Callmonitor installiert
Die Anrufliste hat sofort funktioniert

Klasse Arbeit hier
Danke

Axel

Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 19 März 2014, 00:23:51
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: der-Lolo am 19 März 2014, 00:41:06
hast Du mal die rechte des Files geprüft?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 19 März 2014, 11:26:44
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: moonsorrox am 19 März 2014, 11:56:38
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...!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 24 März 2014, 09:25:12
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 24 März 2014, 11:58:49
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Aeroschmelz am 05 April 2014, 10:15:08
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 05 April 2014, 10:59:35
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: ulli am 05 April 2014, 20:39:05
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Aeroschmelz am 06 April 2014, 11:21:03
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Michi240281 am 15 April 2014, 10:42:35
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: mi.ke am 15 April 2014, 10:49:35
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 &nbsp;
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Michi240281 am 15 April 2014, 22:39:05
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: der-Lolo am 15 April 2014, 23:01:07
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...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Michi240281 am 16 April 2014, 09:33:55
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 &nbsp;;
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
Titel: Antw:Callmonitor für Anfänger
Beitrag 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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 24 April 2014, 12:07:55
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 27 April 2014, 19:34:19
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:

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]
[/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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 28 April 2014, 14:16:20
Jetzt ist es perfekt.


Gesendet von meinem iPhone mit Tapatalk
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 28 April 2014, 19:46:47
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Paul am 28 April 2014, 19:54:28
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.


Titel: Antw:Callmonitor für Anfänger
Beitrag 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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Paul am 28 April 2014, 20:22:03
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: holzwurm83 am 28 April 2014, 20:52:54
Danke! Jetzt geht das auch!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 28 April 2014, 22:19:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 28 April 2014, 23:37:24
Einträge ins Wiki sind generell und auf jeden Fall immer gewollt...  ;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 29 April 2014, 11:19:34
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: locodriver am 04 Mai 2014, 17:38:15
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 04 Mai 2014, 17:58:31
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: locodriver am 04 Mai 2014, 19:18:06
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: locodriver am 05 Mai 2014, 12:40:00
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 05 Mai 2014, 13:46:05
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: locodriver am 05 Mai 2014, 13:59:39
Nur die Ruhe - die Anrufe werden in der Liste ja korrekt dargestellt :-)
Titel: Antw:Callmonitor für Anfänger
Beitrag 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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 05 Mai 2014, 15:39:32
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 05 Mai 2014, 15:54:33
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 05 Mai 2014, 21:11:02
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 05 Mai 2014, 21:15:56
Danke für die Antwort, suche ich mir raus und bastel es rein (hoffe ich).
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 07 Mai 2014, 16:09:06
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 &nbsp
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?
Titel: ich versuchs mal
Beitrag von: Franz Tenbrock am 07 Mai 2014, 18:42:44
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 &nbsp
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 &nbsp
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'}
Titel: Antw:Callmonitor für Anfänger
Beitrag 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:
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 08 Mai 2014, 10:30:40
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: limats am 08 Mai 2014, 14:56:18
Hallo Zephyr,

hoffe, man kann die Unterschiede erkennen.

Gruß
Leo
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 08 Mai 2014, 16:39:10
@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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: limats am 08 Mai 2014, 16:42:58
@linuxq:
Dann vielleicht doch meine Version der sub TelefonMonitor() (3 Posts weiter oben) probieren. Vielleicht hast du ja das selbe Problem wie ich.

Leo
Titel: Antw:Callmonitor für Anfänger
Beitrag von: linuxq am 08 Mai 2014, 16:54:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 09 Mai 2014, 08:58:59
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 09 Mai 2014, 20:54:07
Ooooookay,

zwei Probleme wurden angesprochen.



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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 11 Mai 2014, 10:56:23
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;



Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 19 Mai 2014, 23:01:54
Keiner eine Idee?  :'(
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 24 Mai 2014, 10:19:08
Schade das hier keiner Weiterhelfen kann.


:'(
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 24 Mai 2014, 22:12:48
Du hast den Namen deiner FritzBox in den beiden notwendigen Zeilen nicht angepasst.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 25 Mai 2014, 09:57:14
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 25 Mai 2014, 13:47:14
In was hast Du es geändert?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 25 Mai 2014, 19:56:15
In Fritz_Box

Gesendet von meinem SGP521 mit Tapatalk

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 26 Mai 2014, 09:24:00
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 26 Mai 2014, 10:44:39
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;
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 26 Mai 2014, 14:41:13
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 26 Mai 2014, 16:10:53
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 26 Mai 2014, 18:31:02
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 26 Mai 2014, 18:41:06
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 27 Mai 2014, 12:44:39
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 27 Mai 2014, 14:24:16
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: micomat am 28 Mai 2014, 18:42:03
Auch auf die Gefahr aus dem Fred gejagt zu werden...  ;D
Welche Modulversion/Config ist denn nun die aktuellste und funktioniert auch noch?

Markus
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 29 Mai 2014, 12:39:05
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: svemo am 31 Mai 2014, 10:40:40
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 31 Mai 2014, 13:23:55
Ein Post höher steht die Datei und die Erklärung!
Die Version ist aktuell.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: svenomatt am 01 Juni 2014, 11:50:38
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 01 Juni 2014, 12:47:46
mittlerweile läuft es bei mir.


Jeodch habe ich jeden Anruf in der Liste 2x.



Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 01 Juni 2014, 15:36:19
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.  :)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Phil__ am 02 Juni 2014, 09:56:51
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 02 Juni 2014, 13:51:00
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Phil__ am 02 Juni 2014, 14:06:30
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Phil__ am 03 Juni 2014, 13:59:36
Ich habe jetzt mal die Konfiguration aus dem Wiki getestet, allerdings werden da bei mir garkeine Icons angezeigt.
Funktioniert das bei euch?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 03 Juni 2014, 14:37:18
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".
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Phil__ am 03 Juni 2014, 14:40:25
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Zephyr am 03 Juni 2014, 14:56:14
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: harry66 am 10 Juli 2014, 21:09:16
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: spooy99 am 10 Juli 2014, 23:14:27
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: ph1959de am 11 Juli 2014, 07:30:59
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 13 Juli 2014, 10:47:25
Habe bei mir alles auf Configdb umgestellt, seit dem funktioniert der Callmon nicht mehr.

Hat jemand das selbe problem?

GRuss Dirk
Titel: Antw:Callmonitor für Anfänger
Beitrag von: harry66 am 13 Juli 2014, 21:12:38
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 14 Juli 2014, 08:43:16
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: harry66 am 14 Juli 2014, 09:40:10
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 14 Juli 2014, 14:25:26
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: harry66 am 14 Juli 2014, 15:26:23
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 15 Juli 2014, 08:14:48
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 15 Juli 2014, 08:34:08
Hat das schon jemand mal mit der configdb Variante probiert!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: hyper2910 am 15 Juli 2014, 19:45:57
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Gigafix am 19 Juli 2014, 22:39:11
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: spooy99 am 20 Juli 2014, 01:50:22
Hi - die Anrufliste wird bei mir seit dem letzten update auch nicht mehr aktualisiert.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: P.A.Trick am 20 Juli 2014, 08:59:12
Bestätigt bei mir auch nicht! Seit dem 17.07!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Brockmann am 20 Juli 2014, 10:31:50
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: frankyb am 20 Juli 2014, 11:03:01
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 20 Juli 2014, 11:18:52
Das ist ein Bug im FB_CALLMONITOR Modul. Ich bin bereits drann das zu fixen ;-)

Gruß
Markus
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 20 Juli 2014, 11:26:48
Fix ist im SVN eingecheckt. Gibts ab morgen via update.

Gruß
Markus
Titel: Antw:Callmonitor für Anfänger
Beitrag von: frankyb am 20 Juli 2014, 11:29:59
Super, Danke!!!!!!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: P.A.Trick am 20 Juli 2014, 15:48:10
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!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 20 Juli 2014, 16:43:32
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: P.A.Trick am 20 Juli 2014, 19:32:02
Mache morgen einfach ein Update, dann geht das!
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 21 Juli 2014, 00:35:50
Alles klar. Danke.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Invers am 21 Juli 2014, 08:55:03
EDIT: Beitrag gelöscht, funktioniert jetzt. Danke.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: karl0123 am 21 Juli 2014, 11:38:19
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 21 Juli 2014, 18:54:28
@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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Mitch am 21 Juli 2014, 21:47:58
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 22 Juli 2014, 09:38:49
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Mitch am 22 Juli 2014, 10:04:30
Ja, habe einen Restart von fhem durchgeführt.
Sonst wurde nichts geändert.

EDIT: seit jetzt geht es wieder? Wieder ohne Änderung?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 20 August 2014, 13:26:02
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Mitch am 20 August 2014, 15:19:51
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)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 20 August 2014, 15:20:59
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 20 August 2014, 15:30:47
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Mitch am 20 August 2014, 15:37:56
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 20 August 2014, 15:42:15
Siehe fiedels letzter Post.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: mrabdip am 20 August 2014, 18:28:25
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 21 August 2014, 06:46:21
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 21 August 2014, 09:42:56
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: mrabdip am 21 August 2014, 20:42:09
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 22 August 2014, 08:23:54
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: mrabdip am 22 August 2014, 09:40:46
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 22 August 2014, 10:25:23
                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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 22 August 2014, 21:14:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 22 August 2014, 22:10:19
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 &nbsp
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 22 August 2014, 22:29:49
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 23 August 2014, 10:09:44
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 23 August 2014, 11:23:15
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 23 August 2014, 14:00:35
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 23 August 2014, 15:06:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 23 August 2014, 15:55:19
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 24 August 2014, 18:08:36
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 25 August 2014, 13:10:36
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 25 August 2014, 15:44:59
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 13:37:34
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 26 August 2014, 14:48:43
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 15:20:42
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 26 August 2014, 15:28:26
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  ;)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 16:04:32
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 = '-&gt;';
my $outgoing = '&lt;-';


eingefügt. Auch hier:
$rhash-&gt;{A} = $dir;
    $rhash-&gt;{B} = sprintf("%02d:%02d %02d.%02d.%4d",$hour,$min,$mday,($mon+1),($year+1900));
    $rhash-&gt;{C} = $mem{"external_name"};
    $rhash-&gt;{D} = $mem{"external_number"};
    $rhash-&gt;{E} = "0:00"; # default call_duration, set after disconnect
    $rhash-&gt;{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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 16:32:50
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 16:48:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 17:06:24
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 26 August 2014, 17:16:38
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 19:13:02
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 26 August 2014, 19:20:38
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Brockmann am 27 August 2014, 08:42:02
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 27 August 2014, 08:45:14
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 27 August 2014, 09:09:37
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 27 August 2014, 11:06:37
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 27 August 2014, 12:07:06
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 27 August 2014, 12:26:33
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 27 August 2014, 13:34:04
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 27 August 2014, 19:38:48
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Brockmann am 28 August 2014, 08:33:46
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 28 August 2014, 15:32:55
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 03 September 2014, 19:01:06
Servus Elektrolurch,

gibt es möglicherweise schon etwas Neues im Bezug auf den Refresh der readingsGroup bei ankommenden und ausgehenden Anrufen?

Grüße,
Michael
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 04 September 2014, 09:06:53
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 04 September 2014, 18:06:06
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 13 September 2014, 14:27:43
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 13 September 2014, 19:17:51
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: basti1986 am 13 September 2014, 20:16:36
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 13 September 2014, 20:22:56
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: basti1986 am 13 September 2014, 20:49:09
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" ...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 13 September 2014, 21:04:29
Welche Attribute hast du denn genau gesetzt bei deinem Callmonitor?

Titel: Antw:Callmonitor für Anfänger
Beitrag von: basti1986 am 14 September 2014, 09:00:08
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...
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 16 September 2014, 09:16:17
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: basti1986 am 16 September 2014, 09:52:27
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 :)

Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 17 September 2014, 16:08:25
@ 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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 20 September 2014, 08:35:27
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 20 September 2014, 08:54:47
Hallo,

wenn ich dir beim testen irgendwie helfen kann dann immer her damit.

Grüße
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 20 September 2014, 14:20:24
Nun die neue Version des "Callmonitors" als Modul "TM" unter:

http://forum.fhem.de/index.php?board=8.0

Gruß

Elektrolurch
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 27 September 2014, 11:43:49
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 27 September 2014, 12:00:18
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 27 September 2014, 15:40:27
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; }

Titel: Antw:Callmonitor für Anfänger
Beitrag von: der-Lolo am 28 September 2014, 18:56:51
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Elektrolurch am 29 September 2014, 09:19:56
Aber von selbst aus schreibt sich das statefile doch nicht!
Da muss schon jemand "save" eingeben....
Titel: Antw:Callmonitor für Anfänger
Beitrag von: marvin78 am 29 September 2014, 09:21:36
Es muss kein komplettes save gemacht werden. Ein {WriteStatefile} reicht auch.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 09 Oktober 2014, 08:30:04
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 09 Oktober 2014, 08:44:41
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
Titel: Frage:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Oktober 2014, 11:33:54
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 09 Oktober 2014, 11:39:27
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Oktober 2014, 16:24:11
@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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 09 Oktober 2014, 16:39:58
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Oktober 2014, 20:20:16
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"
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 09 Oktober 2014, 20:36:41
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Oktober 2014, 21:09:16
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 09 Oktober 2014, 21:13:19
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Oktober 2014, 22:14:13
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


Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 09 Oktober 2014, 23:16:08
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 10 Oktober 2014, 12:51:07
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 10 Oktober 2014, 20:00:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 10 Oktober 2014, 20:14:54
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 12 Oktober 2014, 15:47:28
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 12 Oktober 2014, 15:57:40
Hallo,

mMn musst du garnichts ändern.
Einfach mal im device vom Type FB_CALLMONITOR nachschauen.

Grüße
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 12 Oktober 2014, 17:33:51
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 12 Oktober 2014, 17:48:22
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: salvadore am 15 Oktober 2014, 18:41:52
gibt es schon eine Lösung zu der Anzeige internal_number ?, habe grad auch keine Idee wie es umgesetzt werden könnte  >:(
Titel: Antw:Callmonitor für Anfänger
Beitrag von: skiffin am 16 Oktober 2014, 13:07:18
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Puschel74 am 16 Oktober 2014, 16:42:42
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)
Titel: Antw:Callmonitor für Anfänger
Beitrag von: bytebold am 18 November 2014, 16:03:35
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Franz Tenbrock am 23 November 2014, 18:43:19
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 ?!

Titel: Antw:Callmonitor für Anfänger
Beitrag von: bytebold am 29 November 2014, 19:21:07
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Spartacus am 30 November 2014, 13:57:55
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Paul am 30 November 2014, 15:08:02
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: SmartFan am 30 November 2014, 19:01:28


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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Spartacus am 01 Dezember 2014, 20:03:27
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 01 Dezember 2014, 20:26:15
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Spartacus am 01 Dezember 2014, 20:40:16
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.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 03 Dezember 2014, 21:35:55
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 04 Dezember 2014, 13:49:24
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Spartacus am 04 Dezember 2014, 14:04:43
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Roaster am 06 Dezember 2014, 10:09:05
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 06 Dezember 2014, 14:14:45
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: JoWiemann am 06 Dezember 2014, 14:48:46
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: fiedel am 06 Dezember 2014, 15:10:52
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?
Titel: Antw:Callmonitor für Anfänger
Beitrag von: JoWiemann am 06 Dezember 2014, 16:20:06
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Avatar am 12 Dezember 2014, 07:33:40
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

Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 12 Dezember 2014, 18:12:15
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 28 Dezember 2014, 14:59:28
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: bobby1000 am 28 Dezember 2014, 16:23:39
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: coolice am 29 Dezember 2014, 12:00:00
Hat es. sieht besser als vorher aus. Danke
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Sunny am 22 Januar 2015, 22:16:29
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 &nbsp

## Fritzbox Anruferliste Ende                                                         ##
########################################################################################

Danke schon mal ]

Gruss Sunny
Titel: Antw:Callmonitor für Anfänger
Beitrag von: ext23 am 09 Februar 2015, 09:31:10
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: cocojambo am 09 Februar 2015, 20:45:23
@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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: ext23 am 17 Februar 2015, 08:36:54
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: ext23 am 17 Februar 2015, 11:06:06
OK ich hab mein Fehler, man muss noch:

reverse-search phonebook

setzen.
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Avatar am 19 Februar 2015, 08:44:37
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
Titel: Antw:Callmonitor für Anfänger
Beitrag von: Markus Bloch am 19 Februar 2015, 22:19:25
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