callmonitor bei "raus"ruf einer bestimmten Nummer eine Aktion ausführen

Begonnen von kblc, 25 Februar 2015, 18:44:58

Vorheriges Thema - Nächstes Thema

kblc

Hallo ich habe mal eine Frage.
Leider fand ich nichts im Forum oder bei google zu meiner Frage.
Darum frage ich hier einmal in die Runde.

Ich habe einen Raspberry Pi mit FHEM und eine CCU und eine FritzBox 7390.
Wenn ich einen Anruf auf meine Fritzbox bekomme, reagiert callmonitor von FHEM auf die Nummer und der MP3-Gong von HomeMatic sagt, wer anruft. Ich möchte nun auch informiert werden wenn ein Anruf einer bestimmten Nummer von der Fritzbox rausgeht. Kann mir da jemand helfen.

Nochmal im klardeutsch:
Ich rufe mit Telefon 1 (0123-45678) eine beliebige Nummer an. Mein MP3 Gong sagt mir: "Anruf gestartet".
Wenn ich allerdings mit Telefon 2 aus anrufe (mit der Nummer 0123-87654) dann soll das Gerät schweigen.

Hier der Codeansatz ich frag mich wo ich anfangen soll.
so der alte Code wenn ich die Nummer 09876-8765 anrufe
define HaustüreAnruf2 notify FritzBox:event.*ring {if(ReadingsVal("FritzBox","external_number","") eq "09876-8765") {GetFileFromURL 'http://192.168.78.111:8181/fhem2ccu.exe?Status=dom.GetObject("CUxD.CUX2801006:13.STATE").State(1)'} }

define HaustüreENDEAnruf2 notify FritzBox:event.*disconnect {if(ReadingsVal("FritzBox","external_number","") eq "09876-8765") {GetFileFromURL 'http://192.168.78.111:8181/fhem2ccu.exe?Status=dom.GetObject("CUxD.CUX2801006:13.STATE").State(0)'} }


muss ich meine Nummer hier reinschreiben?

define HaustüreAnruf2 notify FritzBox:event.*ring {if(ReadingsVal("FritzBox","external_number",


"0123-45678"   <---Hier hin???


) eq "") {GetFileFromURL 'http://192.168.78.111:8181/fhem2ccu.exe?Status=dom.GetObject("CUxD.CUX2801006:13.STATE").State(1)'} }

define HaustüreENDEAnruf2 notify FritzBox:event.*disconnect {if(ReadingsVal("FritzBox","external_number",


"0123-45678" <-- und hier hin?


) eq "") {GetFileFromURL 'http://192.168.78.111:8181/fhem2ccu.exe?Status=dom.GetObject("CUxD.CUX2801006:13.STATE").State(0)'} }



Wäre toll. wenn mir jemand antworten könnte.

Vielen Dank

Kai aus Oberfranken
SPS, Arduino, Controllino, Sensortechnik, Elektronik

jojoja

Hallo Kai,

das dritte Argument in ReadingsVal ist das "Format" (oder wie auch immer). Das ist da schon ok (könnte auch "0000-00000" lauten), aber der Vergleich passt in diesem Fall nicht:

define HaustüreAnruf2 notify FritzBox:event.*ring {if(ReadingsVal("FritzBox","external_number","0123-45678") eq "0123-45678")

also bei der ersten "Nummer" handelt es sich um das "Format", bei der zweiten um den Wert mit dem verglichen werden soll. Die erste kann in diesem Fall immer gleich bleiben, die zweite muss immer auf den Fall angepasst werden.

Gruß Johannes
FHEM 6.0 @ IntelNUC6CAYH;  Unifi USG, Switch, AP AC Pro; HM-MOD-UART;  Sonos Play 1 & 3, One, Beam; Philips Hue

nesges

Zitat von: jojoja am 25 Februar 2015, 19:41:54
das dritte Argument in ReadingsVal ist das "Format" (oder wie auch immer).

Eher "wie auch immer". Das dritte Argument ist der Defaultwert, siehe http://fhem.de/commandref.html#perl.

Die ursprüngliche Frage verstehe ich nicht ganz. Warum ersetzt du nicht einfach die Nummer "09876-8765" durch "0123-45678"? Hint: Egal warum du das nicht getan hast - tu's.

kblc

Hallo

Vielen Dank, ich habe mich wohl etwas durcheinander ausgedrückt.

Es geht um folgendes:

Ich möchte eine Benachrichtigung bekommen, wenn auf meiner FritzBox eine bestimmte Nummer angerufen wird.
Ich habe fünf.
Beispielnummern:

  • 01234/12345
  • 01234/12346
  • 01234/12347 auf die Nummer soll reagiert werden
  • 01234/12348
  • 01234/12349

Wenn ich mit folgenden Code arbeite, dann reagiert mein "Jemand_ruft_an"-Dummy bei jeder "meiner" Nummern. Also bei allen Rufnummern, die in meiner FritzBox gespeichert ist. Ich möchte aber, dass es nur bei einer der fünf Nummern reagiert. Welche Nummer mich dann anruft ist egal. Das soll dann ruhig bei jeder reagieren.

define AnrufKaiLudschwa notify FritzBLS:event.*ring set Jemand_ruft_an on

define AnrufendeKaiLudschwa notify FritzBLS:event.*disconnect set Jemand_ruft_an off



Beispiel: Anrufer1 mit der Nummer 0000000 ruft meine Nummer "01234/12345" auf meiner FritzBox an. Mein Telefon klingelt.
Das Jemand_ruft_an - Dummy soll nicht angehen

Anrufer1 mit der Nummer 0000000 ruft aber meine Nummer  "01234/12347" auf meiner FritzBox an. Mein Telefon klinget ebenfalls. Aber ich möchte zusätzlich, dass mein "Jemand_ruft_an"-Dummy angeht.

Wie kann ich das realisieren?

Das ist meine Frage.

Wäre toll, wenn mir jemand eine Antwort geben kann.

Kai aus Oberfranken

SPS, Arduino, Controllino, Sensortechnik, Elektronik

nesges

Die rausrufende Nummer steht im Reading "internal_number" und beim rausrufen wird das Event "call" erzeugt (siehe http://fhem.de/commandref.html#FB_CALLMONITOR). Wirf den Event-Monitor an und schau was passiert, wenn du einen Anruf startest. So ähnlich wird's aussehen:

2015-03-02 16:19:17 FB_CALLMONITOR FritzBox event: call
2015-03-02 16:19:17 FB_CALLMONITOR FritzBox internal_number: 12347
2015-03-02 16:19:26 FB_CALLMONITOR FritzBox event: disconnect


Dann baust du ein notify, dass auf "event: call" reagiert und fragst darin das Reading "internal_number" ab. Grundsätzliches zu notify findest du im Einsteigerhandbuch ab Seite 26.

kblc

(http://fritzbox)
Hallo nochmal.

Im Bild sieht man den Anrufer. Der ruft nacheinander MSN3, MSN2 und MSN1 an. Wenn er MSN2 anruft, soll nichts passieren. Wenn er MSN3 anruft soll etwas passieren. Wenn er MSN1 anruft, soll wieder nichts passieren.
Ich kann das ja nicht auslesen. Ich kann nur auslesen, wer anruft. Diese Nummer kann ich dann weiterverarbeiten. Das will ich an dieser Stele nicht machen. Ich möchte, wenn ein Anrufer bei mir eine meiner bestimmten Nummern anruft eine Aktion ausführen.

FHEM soll eine Aktion ausführen, wenn eine bestimmte Nummer angerufen wird. z.B die Kaffeemaschine soll angehen. Die Nummer ist nur mir bekannt und wird nicht veröffentlicht oder weitergegeben. Wenn also jemand, von wo auch immer, die Nummer bei mir anruft, soll die Kaffeemaschine angehen. Welche Nummer der Anrufer hat ist mir egal.

Vielen lieben Dank für die Geduld.

Kai aus Oberfranken
SPS, Arduino, Controllino, Sensortechnik, Elektronik

Paul

Na so wie es Nesges geschrieben hat nur das notify muss auf ring reagieren.

Aber du solltest schon wissen ob du auf ankommende Gespräche oder ausgehende reagieren willst (siehe Überschrift)
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

nesges

Dann willst du auf das Event "ring" reagieren und gegen das Reading "internal_number" prüfen. D.h. du musst dein AnrufKaiLudschwa notify lediglich noch um eine Bedingung (IF: http://fhem.de/commandref.html#IF) erweitern, die auf internal_number ([FritzBLS:internal_numer] eq "12347", siehe ebenfalls http://fhem.de/commandref.html#IF) prüft.

Steht aber auch alles in den bereits verlinkten, bzw. genannten Dokus. Der Tipp mit dem Eventmonitor gilt ebenso immer noch.

kblc

Ahhha

Das war wieder einer der Momente, wo man spürbar merkte, wie bei mir wieder ein Licht aufging.

Danke schön.

Wieder um etwas reicher.

Vielen vielen Dank

Kai aus Oberfranken :D
SPS, Arduino, Controllino, Sensortechnik, Elektronik

kblc

Hallo nochmal,

bin schon den ganzen Tag drüber. Aber es geht nichts. Ich habe schon folgende Codes ausprobiert:

define AnrufKaiLudschwa notify FritzBLS:event.*ring  IF ([FritzBLS:ring] eq "0123412347") set Kai_ruft_an on
define AnrufKaiLudschwa notify FritzBLS:event.*ring  IF ([FritzBLS:internal_number] eq "0123412347") set Kai_ruft_an on
define AnrufKaiLudschwa notify FritzBLS:event.*ring  IF ([FritzBLS:internal_number] eq "12347") set Kai_ruft_an on
define AnrufKaiLudschwa notify FritzBLS:event.*ring  IF ([FritzBLS:ring] eq "12347") set Kai_ruft_an on

Bin ich auf dem Holzweg? Es klappt nicht.
Wenn ich die IF - Bedingung raus lasse, dann klappt es. Aber dann auch bei allen anderen MSN - Nummern und das will ich ja nicht

Wäre echt super, wenn nochmal jemand drüber schauen könnte.

Vielen Dank.
SPS, Arduino, Controllino, Sensortechnik, Elektronik

JoWiemann

Hallo,

habe das Ganze bei mir so gelöst:

define FBCall notify FBTel {FBNotify()}

und in der 99_myUtils.pm

sub
FBNotify() {
  my $extNr   = ReadingsVal("FBTel", "external_number", "none");
  my $intNr   = ReadingsVal("FBTel", "internal_number", "none");
  my $intName = ReadingsVal("FBTel", "internal_name", "none");
  my $extName = ReadingsVal("FBTel", "external_name", "none");
  my $dauer   = ReadingsVal("FBTel", "call_duration", "none");
  my $event   = ReadingsVal("FBTel", "event", "none");

  my $call_id = ReadingsVal("FBTel", "call_id", "0");
  my $call_sv = ReadingsVal("FB_Tel_Call_ID", "call_id", "0");

  fhem("set FB_Tel_Call_ID warten...");

  Log3 "FBNotify", 4, "FB_CALLMONITOR (FBNotify) - enventhandling";

  # Bei mir wird das Notify, warum auch immer, bei jedem Klingeln aufgerufen.
  # Mit dieser Abfrage wird die Aktion nur einmal ausgeführt
  if( $call_id != $call_sv) {
 
    fhem("setreading FB_Tel_Call_ID call_id $call_id");

    my $Start="<html><head><title>Notruf ergangen</title></head><body>";
    my $Ende="</body></html>";
    my $MeldText="";
    my $MeldBetreff="";

    if($intNr eq "Hier Deine Nummer"){
       if($event eq "disconnect"){
         fhem("set FB_Tel_Call_ID warten...");
         fhem("set AlarmGong off");
         $MeldBetreff="Notruf aufgelegt: ".strftime("%d.%m.%Y um %H:%M",localtime());
         $MeldText="Notruf: aufgelegt.<br>Meldung FHEM-Server";
       } else {
         fhem("set FB_Tel_Call_ID aktiv...");
         fhem("set AlarmGong on");
         $MeldBetreff="Notruf angewaehlt: ".strftime("%d.%m.%Y um %H:%M",localtime());
         $MeldText="Notruf: angewählt.<br>Meldung FHEM-Server";
       }
       $MeldText=$Start.$MeldText.$Ende;
       DebianMail('name@provider',$MeldBetreff,$MeldText);
       sendWhatsApp("49...",$MeldBetreff);
    }
  }
}


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

nesges

Dein IF ist syntaktisch falsch und das Rumgestochere könntest du durch einen einfachen Blick in den Eventmonitor abkürzen.

kblc

Hallo,

ich danke für die tollen Hinweise. Das hilft mir in jedem Fall weiter, da ich gerade die ganze Materie erlernen will. Nach mehrmaligem "verschlingen" von Commandref und den Anfängerbuch von Uli Maaß, bin ich dennoch nicht weiter gekommen. Ich verstehe einfach so manche Sachen noch nicht ganz.

@nesges
Ich habe in den Eventmonitor geschaut. Aber da passiert nicht wirklich viel Spektakuläres.2015-03-04 23:26:10 FB_CALLMONITOR FritzBLF event: call
2015-03-04 23:26:11 FB_CALLMONITOR FritzBLS event: ring
2015-03-04 23:26:12 FB_CALLMONITOR FritzBLF event: disconnect
2015-03-04 23:26:12 FS20 Kai_ruft_an off
2015-03-04 23:26:12 FB_CALLMONITOR FritzBLS event: disconnect


mehr leider nicht. Ich habe mittlerweile versucht, die IF Bedingung in Perl zu schreiben. Aber dennoch ohne Erfolg.
Wo muss ich ansetzen? Wie kann ich weitermachen?

Vielen Dank auch an JoWiemann ich habe es getestet und versucht umzuschreiben, dennoch klappte es nicht.

Vielern Dank
SPS, Arduino, Controllino, Sensortechnik, Elektronik

nesges

Beim IF hast du die Klammern um den Ausführungsteil (command) übersehen: IF ( condition ) ( command )
In der Ausgabe deines Eventmonitors fehlt das Event für internal_number; hast du evtl. mit event-change-on-reading gespielt und damit das Event unterdrückt? Zeig mal die Definitionen deiner beiden (wieso zwei?) FB_CALLMONITOR.

kblc

Ja gerne.

Ja ich habe mehrere Raspberry Pi´s mit FHEM. Einer ist bei mir. Einer ist bei einem anderen Teil meiner Familie. Dort ist ein Notrufhandy. Das Notrufhandy ruft bei Tastendruck (Notruftaste) eine Nummer der Fritzbox meiner Familie an(die Nummer ist in der Öffentlichkeit nicht bekannt - ruft also i.d.R. keiner an). Der Raspberry Pi den ich gerade versuche zu programmiere, steht bei meiner Familie. Über VPN sind unsere Netzwerke miteinander verbunden. Wenn CallMonitor einen Anruf meldet, soll auf meinem Raspberry Pi ebenfalls ein Dummy angehen, der dann wiederum meinen MP3 Gong ansteuert. Ich verstehe schon, dass man auch ohne zweiten Raspberry Pi den CallMonitor auf meinen Raspberry Pi die Fritzbox meiner Familie "abhören kann". Aber da der Raspberry Pi bei meiner Familie noch mehrere Aufgaben erledigen soll, die nichts mit mir zu tun haben, aber mit der Notruftaste, ist das besser, wenn das dennoch getrennt ist.

Ich hoffe das war etwas verständlich erklärt.

Gerne sende ich die FHEM.cfg
attr global userattr devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd SecurityCheck:\
\
WEB,WEBphone,WEBtablet has no basicAuth attribute.\
telnetPort has no password/globalpassword attribute.\
\
Restart FHEM for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\

attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 3

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global
attr WEB editConfig 1

define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen

define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad

# 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

####
#### bis hier ist die normale Anfangskonfiguration
#### ab hier beginnen dann die Einstellungen an FHEM
#### Zeilen, die mit einer Raute beginnen, werden nicht als Systemcode gelesen



###---ANFANG---##################---FritzBoxen werden integriert---####################
###
### hier werden die Fritzboxen integriert. Es sind unterschiedliche Boxen an unterschiedlichen
### Standorten. Einige können ggf. nicht verbunden werden.

### integration des Callmonitor bei der Fritzbox Kai (daher LF = Kai)

define FritzBLF FB_CALLMONITOR 192.168.78.1:1012
attr FritzBLF event-on-change-reading event
attr FritzBLF reverse-search internal

### integration des Callmonitor bei der Fritzbox Erni und Sabine

define FritzB2 FB_CALLMONITOR 192.168.78.2:1012
attr FritzB2 event-on-change-reading event
attr FritzB2 reverse-search internal

### integration des Callmonitor bei der Fritzbox Familie Schwb. (LS=Familie-Schwb.)

define FritzBLS FB_CALLMONITOR 192.168.79.9:1012
attr FritzBLS event-on-change-reading event
attr FritzBLS reverse-search internal

### integration des Callmonitor bei der Fritzbox Kathrin (KS=Kathrin)

define FritzBKS FB_CALLMONITOR 192.168.178.1:1012
attr FritzBKS event-on-change-reading event
attr FritzBKS reverse-search internal

###---ENDE---##################---FritzBoxen werden integriert---####################



###---ANFANG---##################---Integrationen---####################

include ./FHEM/Telefon.cfg
include ./FHEM/Notruf.cfg

###---ENDE---##################---Text---####################


Die Box
192.168.78.1 bin ich (Kai)
192.168.79.9 Meine Familie
Der Rest wird im Moment nicht gebraucht.


Mit event-change-on-reading habe ich nichts gemacht. Ich habe auf den Raspberry Pi Raspbian instaliert, Remote Desktop aktiviert, FHEM und Perl installiert, und die Codeschnipsel (Siehe oben) eingefügt.  Mehr habe ich an diesem RPi nicht gemacht.

Im Moment schaut meine Notruf.cfg noch so aus.

###---ANFANG---##################---Text---####################

define AnrufKaiLudschwa notify FritzBLS:event*ring {if(ring("FritzBLS","internal_number") eq "123457") {fhem("set Kai_ruft_an on") }

define AnrufendeKaiLudschwa notify FritzBLS:event.*disconnect set Kai_ruft_an off

###---ENDE---##################---Text---####################


Ich habe versucht in Perl zu schreiben.

Es tut mir echt leid, wenig mich etwas anstelle, aber ich bin gerade am Anfang meiner Künste und lerne die Materie von Grund auf. Daher kommt es vor, dass ich noch wie vor böhmischen Dörfern stehe und nichts verstehe, oder nicht so viel. Ich bin echt für jede Hilfe sehr dankbar und nutze nicht nur meine Fehler zum lernen, sondern jeden Tipp und Hinweis. Vielen Dank dafür an dieser Stelle.

Nachtrag-Frage:
Benötige ich in der Formel die Telefonnummer mit Vorwahl oder ohne?
SPS, Arduino, Controllino, Sensortechnik, Elektronik