Callmonitor für Anfänger

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

Vorheriges Thema - Nächstes Thema

Invers

Danke für die Antwort, suche ich mir raus und bastel es rein (hoffe ich).
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

linuxq

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?

Franz Tenbrock

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'}
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

limats

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
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

Zephyr

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
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

limats

Hallo Zephyr,

hoffe, man kann die Unterschiede erkennen.

Gruß
Leo
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

linuxq

@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

limats

@linuxq:
Dann vielleicht doch meine Version der sub TelefonMonitor() (3 Posts weiter oben) probieren. Vielleicht hast du ja das selbe Problem wie ich.

Leo
Fhem auf BBB:
HM-CFG-USB für div. HM-Sensoren, CUL+WMBUS für EnergyCam, Nanocul für IT, Arduino Mega 2560 als 1-wire-Gateway und für div. digitale Ein-/Ausgänge, Volkszähler-USB-IR-Lesekopf mit SMLUSB, Solarsteuerung über VBUS

linuxq

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

Zephyr

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
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Zephyr

Ooooookay,

zwei Probleme wurden angesprochen.


  • im Log tauchen Meldungen mit "undefined Variable" auf
  • Zitat von: limats am 07 Mai 2014, 22:07:25sagt mal, bin ich eigentlich der einzige, bei dem der letzte Code nicht unverändert funktioniert? Ich musste die Methode folgendermaßen ändern:


Zum ersten Punkt:

Anstatt die Variable $intCallDuration mit $intCallDuration = undef zurückzusetzen, damit sie beim nächsten Anruf kein Fehlergebnis liefert, kann man sie auch mit einer leeren Zeichenkette füllen: $intCallDuration = ""

Zum zweiten Punkt:
linuxq, Du hattest Änderungen gemacht, die ich auch schon mal so drin hatte. Leider gibt es dann Probleme. Zum Beispiel beim Wechsel zwischen ausgehenden und eingehenden Anrufen mit/ohne connect/disconnect.
Weil einfach in der Variable noch ein alter Wert gespeichert wurde. Daher ist es nicht egal ob man ein einfaches else oder ein elsif mit einer Prüfung benutzt.
Die Daten aus deinem Log, linuxq, kommen bei mir ganz exakt gleich rein. Daran, dass Du die FB per FHEM2FHEM anbindest liegt es ebenfalls nicht. Denn das mache ich genau so.
Den Namen des Callmonitors hast Du auch korrekt gesetzt. Das Script neu geladen?
Könntest Du evtl. in Zeile 103 das # Zeichen rausnehmen, ein paar Testanrufe machen und dann die Ausgabe aus dem Log posten? Vielleicht hilft das ja weiter. Versprechen kann ich aber nix.

Für alle anderen hier die aktuellen Änderungen:

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

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

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


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

    #...

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

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

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

sub FBCall ($$) {

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

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

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

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

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

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

sub TelefonAktion($$) {

    # es wird der Name und die interne angerufene Nummer uebergeben

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

    my $intern = $_[1];

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

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

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

}    # end sub TelefonAktion

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

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


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

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

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

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

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

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

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

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

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

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

    if ( $stat eq "disconnect" ) {

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

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

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

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

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

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

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

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

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

            return;
        }    # end if callid

    }    # end if disconnect

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

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


1;


P.S. Ich beginne heute mal im Wiki mit einer entsprechenden Seite auf meinem privaten Namespace. Und dann geht irgendwann die Änderung auf die richtige Seite. Dann kann jeder mal am Code "rumprobieren". ;OD

LG
Zephyr
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

hyper2910

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;



Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

hyper2910

Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

hyper2910

Schade das hier keiner Weiterhelfen kann.


:'(
Cubietruck mit FHEM, CUL V3 443MHz, 2 x CULV3 868MHz, Milights, Max Heizungssteuerung, Homematic, IT,

Zephyr

Du hast den Namen deiner FritzBox in den beiden notwendigen Zeilen nicht angepasst.
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433