Callmonitor für Anfänger

Begonnen von coolice, 25 Januar 2014, 13:07:36

Vorheriges Thema - Nächstes Thema

Invers

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.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

ulli

#106
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

Aeroschmelz

#107
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.

Michi240281

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
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

mi.ke

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;
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Michi240281

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.
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

der-Lolo

#111
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...

Michi240281

#112
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
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Michi240281

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.
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

linuxq

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

Zephyr

#115
Hallo zusammen,

ich habe meinerseits die 99_myUtilsTelefon auch noch ein bisschen aufgebohrt. Was mit vor allem gestört hat war, dass es nicht möglich war anhand der Icons zu unterscheiden, ob ein Anruf angenommen wurde oder nicht. Dass die Icons für ausgehende bzw. eingehende Anrufe rot bzw. grün waren hat zum Verständnis auf einen Blick auch nicht gerade beigetragen.
Also habe ich die Datei umgestrickt. Im Groben gibt es ja drei Teile:

  • den Teil, der aufgerufen wird wenn ein eingehender Anruf erfolgt
  • den Teil, der aufgerufen wird wenn ein ausgehender Anruf erfolgt
  • den Teil, der aufgerufen wird wenn ein Anruf beendet wird

Mein Gedanke war, dass ich eigentlich Aktionen auslösen möchte wenn ich jemanden anrufe (Musik ausschalten beispielsweise) oder ich angerufen werde (ebenfalls Musik aus und per Lautsprecher die Ansage, dass ein Anruf erfolgt). Und zum Schluss möchte ich nach Ende des Telefonates evtl. wieder Musik einschalten oder wenn ich nicht zu Hause war eine Nachricht über den verpassten Anruf auf mein Handy bekommen.

Dazu gibt für die ersten beiden Fälle die Bereiche "if ( $stat eq "ring" )" und "if ( $stat eq "call" )". Die habe ich noch ein bisschen aufgeräumt, so dass sie für jeden sofort nutzbar werden.

Alles was das Ende eines Anrufs angeht habe ich unter dem Bereich "if ( $stat eq "disconnect" )" zusammengefasst. In Form eines Kommentars (beginnt mit einem #) habe ich auf die Stellen hingewiesen, an denen man Aktionen für das Ende eines Anrufs auslösen kann. Einfach unter der Kommentarzeile eine neue Zeile einfügen und die Aktionen reinschreiben. Es gibt einen großen If-Block mit mehreren elsif-Verzweigungen, die spezifisch für die verschieden Aktionen in Abhängigkeit der Telefonatstatus' ausgeführt werden sollen.
Nach diesen Blöcken sollte man dann Aktionen ausführen, die generell für jede Art beendeten Anrufs stehen.

Das geänderte Script sieht dann so aus:

99_myUtilsTelefon

#################################################
# $Id: 99_myUtilsTelefon.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;

use strict;
use warnings;
use POSIX;
use FritzBoxUtils;

# fuer Telefonanrufe
our @A;
our @B;
our @C;
our @D;
our @E;
our %TelefonAktionsListe;


sub myUtilsTelefon_Initialize($$) {
    my ($hash) = @_;

    #...

}
################################################################

sub SendSMS ($$) {
    my $adress = $_[0] . '@sms.kundenserver.de';
    my $body   = $_[1];
    Log( 3, "SendSMS: $adress - $body" );
    FB_mail( $adress, "", $body );

    # end sub SendSMS
}
#####################################
# Anruffunktionen ueber Fritzbox

sub FBCall ($$) {

    my $callnr   = $_[0];
    my $duration = $_[1];

    Log( 3, "FBCall: $callnr mit Dauer $duration" );

    $callnr = "ATDT" . $callnr . "#";
    my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
    InternalTimer( gettimeofday() + $duration, "FBHangOn", "", 0 );
    return;
}

sub FBHangOn () {
    Log( 3, "FBCallHangOn aufgerufen" );

    my $ret = " ATH: " . `echo "ATH" | nc 127.0.0.1 1011`;
    $ret =~ s,[\r\n]*,,g;
    return;
}

######################################

sub TelefonAktion($$) {

    # es wird der Name und die interne angerufene Nummer uebergeben

    my ($caller) = split( '\(', $_[0] );
    $caller = ltrim( rtrim($caller) );

    my $intern = $_[1];

    # Log(3,"TelefonAktion: $caller $intern");
    # Sound ausgeben

    my $com = $main::TelefonAktionsListe{$caller};

    if ($com) {
        Log( 3, "TelefonAktion: commando: $com" );
        sig2_repeat( $com, 5, 4 );
    }    # falls commando vorhanden

}    # end sub TelefonAktion

######################################

sub TelefonMonitor($) {
    our $extnum;
    our $intnum;
    our $extname;
    our $callID;
    our $callDuration;
    # Anrufdauer als Integervariable speichern
    our $intCallDuration; 
    our $stat;
    our @lastPhoneEvent;
    my $i;
    my $j;
    our $ab;
    my $meineFB = $defs{"fb_cmFritzBox"};


    my ( $event, $arg ) = split( ':', $_[0] );
    $arg = ltrim($arg);

    # Log(3,"TM: event: $event arg: $arg");
    if ( $event eq "event" ) {
        $stat = $arg;
        return;
    }    # end if event

    if ( $stat eq "ring" ) {
        if ( $event eq "external_number" ) {
            $extnum = $arg;
            return;
        }    # if external number

        if ( $event eq "external_name" ) {
            $extname = $arg;
            return;
        }
        if ( $event eq "internal_number" ) {
            $intnum = $arg;
            return;
        }    # end if intnum

        if ( $event eq "call_id" ) {
            $callID = $arg;
           
            $lastPhoneEvent[$callID] = $stat;
           
            # hier koennen wir eine anrufgesteuerte Aktion starten
            TelefonAktion( $extname, $intnum );

            $B[$callID] = EventZeit();
            $C[$callID] = $extname;
            $D[$callID] = $extnum;
            return;
        }    # end if callid
        return;
    }    # end if ring loop

    if ( $stat eq "connect" ) {
        if ( ( $event eq "internal_connection" ) && ( $arg =~ m/Answering_Machine_.*/ ) )
        {
            $ab = "AB";
        }    # end if internal_connection
    }    # end if connect

    if ( $stat eq "call" ) {
        if ( $event eq "external_number" ) {
            $extnum = $arg;
            return;
        }    # if external number

        if ( $event eq "external_name" ) {
            $extname = $arg;
            return;
        }
        if ( $event eq "call_id" ) {
            $callID     = $arg;

            $B[$callID] = EventZeit();
            $C[$callID] = $extname;
            $D[$callID] = $extnum;
           
            $lastPhoneEvent[$callID] = $stat;
            return;
        }    # end if callid
        return;
    }    # end if callloop

    if ( $stat eq "disconnect" ) {

        if ( $event eq "call_duration" ) {
            $intCallDuration = $arg;
            $callDuration = sprintf( "%2d:%02d", ( $arg / 60 ), $arg % 60 );
            return;
        }    # if call_duration
       
        if ( $lastPhoneEvent[$callID] eq "call" ) {
            if ( $intCallDuration eq 0 ) {
                $A[$callID] = "out_notconnected";
                # hier notieren was passieren soll, wenn es ein eingehender Anruf war, der nicht angenommen wurde
            } elsif ( $intCallDuration gt 0 ) {
                $A[$callID] = "out_connected";
                # hier notieren was passieren soll, wenn es ein eingehender Anruf war, der angenommen wurde
            }
        } elsif ( $lastPhoneEvent[$callID] eq "ring") {
            if ( $intCallDuration eq 0 ) {
                $A[$callID] = "in_notconnected";
                # hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der nicht angenommen wurde

                $intCallDuration = undef;
            } elsif ( $ab eq "AB" ) {
                $A[$callID] = "AB";
                $ab = undef;
                # hier notieren was passieren soll, wenn der AB dranging

                $intCallDuration = undef;
            } elsif ($intCallDuration gt 0 ){
                $A[$callID] = "in_connected";
                # hier notieren was passieren soll, wenn es ein ausgehender Anruf war, der angenommen wurde
               
                $intCallDuration = undef;
            }
        }
       
        #hier notieren was generell passieren soll, sobald ein Anruf beendet wurde (egal ob angenommen, nicht angenommen, aus- oder eingehend oder der AB dranging)

        if ( $event eq "call_id" ) {
            $callID = $arg;

            # shiften der alten Inhalte
            my $tt;
            readingsBeginUpdate($meineFB);

            for ( $i = 4 ; $i > 0 ; $i-- ) {
                foreach $j ( 'A' .. 'E' ) {

                    #   $defs{"meineFB"}{READINGS}{$j.($i-1)}{VAL};

                    $tt = ReadingsVal( "fb_cmFritzBox", $j . ( $i - 1 ), "-" );
                    readingsBulkUpdate( $meineFB, $j . $i, $tt );
                }    # end j
            }    # end i
            $E[$callID] = $callDuration;
            readingsBulkUpdate( $meineFB, "A0", $A[$callID] );
            readingsBulkUpdate( $meineFB, "B0", $B[$callID] );
            readingsBulkUpdate( $meineFB, "C0", $C[$callID] );
            readingsBulkUpdate( $meineFB, "D0", $D[$callID] );
            readingsBulkUpdate( $meineFB, "E0", $E[$callID] );

            readingsEndUpdate( $meineFB, 1 );
            $stat = "";

            return;
        }    # end if callid

    }    # end if disconnect

##############################
}    #end sub TelefonMonitor

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


1;



Um auf die Icons zurückzukommen: Das Script merkt sich, womit ein Anruf begonnen hat (eingehend oder ausgehend) und wie lange die Anrufdauer war (0 oder >=0) und prüft ob der AB dranging (da war in meiner Version ein kleiner Fehler: "AB" statt "ab"). In den Readings steht nun folgendes:
[ul]
  • in_connected # für eingehende Anrufe, die angenommen wurden
  • in_notconnected # für eingehende Anruf, die nicht angenommen wurden
  • out_connected # für ausgehende Anrufe, die angenommen wurden
  • out_notconnected # für ausgehende Anrufe, die nicth angenommen wurden
  • AB # für Anrufe, die auf dem AB gelandet sind.
[/ul]

Daran muss natürlich noch das Attribut valueIcon angepasst werden:

attr Anrufliste valueIcon {'A0.out_connected' => 'phone_call_out@lightgreen', 'A0.out_notconnected' => 'phone_call_out@red','A0.in_connected' => 'phone_call_in@lightgreen','A0.in_notconnected' => 'phone_call_in@red', 'A0.AB' => 'audio_volume_mid@lightgreen', 'A1.out_connected' => 'phone_call_out@lightgreen', 'A1.out_notconnected' => 'phone_call_out@red','A1.in_connected' => 'phone_call_in@lightgreen','A1.in_notconnected' => 'phone_call_in@red', 'A1.AB' => 'audio_volume_mid@lightgreen','A2.out_connected' => 'phone_call_out@lightgreen', 'A2.out_notconnected' => 'phone_call_out@red','A2.in_connected' => 'phone_call_in@lightgreen','A2.in_notconnected' => 'phone_call_in@red', 'A2.AB' => 'audio_volume_mid@lightgreen','A3.out_connected' => 'phone_call_out@lightgreen', 'A3.out_notconnected' => 'phone_call_out@red','A3.in_connected' => 'phone_call_in@lightgreen','A3.in_notconnected' => 'phone_call_in@red', 'A3.AB' => 'audio_volume_mid@lightgreen','A4.out_connected' => 'phone_call_out@lightgreen', 'A4.out_notconnected' => 'phone_call_out@red','A4.in_connected' => 'phone_call_in@lightgreen','A4.in_notconnected' => 'phone_call_in@red', 'A4.AB' => 'audio_volume_mid@lightgreen'}


Und am Ende sieht es dann so aus wie auf dem Screenshot unten.

Gibt es eigentlich schon jemanden, der sich draum kümmert diesen Thread mal in's Wiki zu stellen? Es ist für jeden, der den Callmonitor implementieren möchte schon arg aufwändig, sich durch den gesamten Thread zu kämpfen. Wenn nicht, würde ich damit gern beginnen. Aber ich denke nicht, dass ich die Berechtigung habe gleich einen neuen Artikel anzulegen, oder?

Viele Grüße
Zephyr


edit: noch einen Fehler gefunden und behoben
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

coolice

Jetzt ist es perfekt.


Gesendet von meinem iPhone mit Tapatalk

holzwurm83

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?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Paul

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.


Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

holzwurm83

Das habe ich bereits so umgesetzt, allerdings trifft das wohl nicht für die Änderung von Zephyr zu?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN