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
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
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.
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
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.
(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
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)
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.
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
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.
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
Dein IF ist syntaktisch falsch und das Rumgestochere könntest du durch einen einfachen Blick in den Eventmonitor abkürzen.
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
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.
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?
Zitat von: kblc am 05 März 2015, 20:55:44
Mit event-change-on-reading habe ich nichts gemacht.
Irgendwer hat aber was mit event-on-change-reading gemacht - ich hatte mich da vertippt. Du hast bei beiden FB_CALLMONITOR-Defs sowas:
attr FritzBLF event-on-change-reading event
Das bewirkt, dass ausschliesslich das Reading "event" ein Event erzeugt. Deshalb ist dein Eventmonitor so leer und deshalb funktionierten deine Versuche auch sämtlich nicht - zumindest auch deshalb. Lösch das Attribut für den Anfang mal ganz raus und schau dann während eines Anrufs nochmal in den Eventmonitor. Die Frage nach der Vorwahl dürfte sich dann von selbst klären und ich bin sicher, du siehst dann auch welcher Versuche funktionieren würde, wenn Fehler Nummer zwei - die IF-Syntax - korrigiert ist.
ZitatEs tut mir echt leid, wenig mich etwas anstelle, aber ich bin gerade am Anfang meiner Künste
Muss dir nicht leid tun. Irgendwann fällt der Groschen und bis dahin helfen wir hier gerne. Schau zwischendurch vielleicht nochmal in http://forum.fhem.de/index.php/topic,16311.0.html rein, da steht u.a., dass niemand die GANZE fhem.cfg braucht ;)
:)
Also erst mal ein großes Lob für so viel Geduld.
Es hat alles funktioniert. Es klappt so wie ich es haben wollte. Alles super, Vielen Dank
Ich bin echt begeistert.
Jetzt hoffen wir dennoch, dass der Notruf nie gebraucht wird. Das wäre trotzdem das beste.
Also nochmal herzlichen Dank
Kai aus Oberfranken