Moin zusammen,
ich habe jetzt den FB_Callmonitor und der wirft mir als Reading "external_number" die letzte Rufnummer raus die angerufen hat.
Ist es irgendwie möglich das ich, sobald sich die ändert (z.b. neuen Anruf) eine Telegram Message bekomme?
vielen Dank schonmal
Grüße aus Wolfsburg
Matze
Klar ist das möglich.
Ich denke der einfachste Weg ist ein notify auf das Reading.
Eventuell sollte dann noch ein "event-on-change" auf das Fritzbox Device gesetzt werden.
In dem Notify kannst du dir dann relativ einfach per
fhem "set TelegramBot @deine_Nummer message Text"
Dir eine Nachricht zukommen lassen :)
Gruß
Mathze
Okay, also ich hab ja jetzt den CallMonitor:
defmod CallMonitor FB_CALLMONITOR 192.168.2.1
attr CallMonitor event-on-change-reading external_number.*
attr CallMonitor room Telefonie
setstate CallMonitor opened
setstate CallMonitor 2019-07-03 09:55:56 call_duration 7
setstate CallMonitor 2019-07-03 09:55:56 call_id 0
setstate CallMonitor 2019-07-03 09:55:56 direction incoming
setstate CallMonitor 2019-07-03 09:55:56 event disconnect
setstate CallMonitor 2019-07-03 09:55:56 external_connection SIP4
setstate CallMonitor 2019-07-03 09:55:56 external_name unknown
setstate CallMonitor 2019-07-03 09:55:56 external_number 123456854
etstate CallMonitor 2019-07-03 09:55:56 internal_connection Answering_Machine_1
setstate CallMonitor 2019-07-03 09:55:56 internal_number 9853168
setstate CallMonitor 2019-06-29 09:47:07 state opened
Sowie ein Notify:
defmod notifyneueranruf notify CallMonitor.external_number set Telegram message neuer Anruf erkannt
attr notifyneueranruf room Telefonie
setstate notifyneueranruf active
setstate notifyneueranruf 2019-07-03 09:49:43 state active
Eigdl. sollte er mir ja schon eine Nachricht schicken oder? Weil kommen tut nix.
Ist es eigdl. möglich sich in der Nachricht die Nummer mitschicken zu lassen die da angerufen hat?
Hi,
ich denke dafür gibt es keinen Event:
CallMonitor.external_number
Ich mache das so:defmod nty_AnrufKlingelt notify FBMon:.*ring { \
my $number = ReadingsVal("FBMon","internal_number",99);;\
my $Anrufer = ReadingsVal("FBMon","external_number",99);;\
my $AnruferName = ReadingsVal("FBMon","external_name",'');;\
if (($number == xxxxxx) and Value("VUPLUS1") eq "on"){ \
fhem "set VUPLUS1 showtext Anruf von $AnruferName $Anrufer";;\
} \
}
Da wird auch die angerufene Nummer geprüft. Ich will keine Nachricht wenn ein Fax kommt :)
Dazu gehört ein paar attr und UserReading im Callmonitor:
attr FBMon fritzbox-remote-phonebook 1
attr FBMon fritzbox-remote-phonebook-via tr064
attr FBMon reverse-search phonebook,dasoertliche.de
attr FBMon userReadings AnrufExtern {ReadingsVal("FBMon","external_name","").' '.ReadingsVal("FBMon","external_number","") }
Gruß Otto
Ayayayy, da ist aber einiges im Argen.
Zuerst wären mal ein list von deinem CallMonitor gut.
Zuerst sollte das event-on-change vermutlich so ausschauen:
attr CallMonitor event-on-change external_number
Nichts mit wildcard.
Das notify könnte evtl. so ausschauen:
define n_CallMonitor notify CallMonitor:external_number:.* { fhem "set Telegram message @deine_Nummer Neuer Anruf erkannt $EVENT" }
Am leichtesten kannst du natürlich das notify direkt über den EventMonitor anlegen.
Einfach den EventMonitor öffnen, einen neuen Anruf simulieren, dass Event direkt markieren und ein Notify daraus erstellen lassen.
In der Nachricht kannst du Dir auch die Nummer mitschicken lassen, meistens funktioniert dies über $EVENT, $EVTPART0, $EVTPART1, usw.
Ich glaube Dir fehlen einige Basic's noch.
Gruß
Mathze
Super, das hat geklappt :) Vielen Dank euch für die Hilfe :)
Hallo nochmal zu dem notify kan mir ewiner erklären warum die Meldeung 2 mal ankommt und beim beenden noch mal 2mal ?
habs mal so probiert.
define n_CallMonitor notify CallMonitor:external_number:.* { fhem "set teleBot _msg Neuer Anruf erkannt $EVENT" }
Gruß Otto
Da mach doch einfach mal den Event Monitor auf und gib dort als Filter das ein.
CallMonitor:external_number:.*
Ich denke event-on-change-reading hilft :)
Gruß Otto
Hallo zusammen,
bei habe ich es mit zwei Notifies gelöst ...
gibt jeden eingehenden und jeden ausgehenden Anruf als Telegram aus
ZUHAUSE:.*ring {if(ReadingsVal("ZUHAUSE","Verbindung","default") eq "Anruf") {fhem("set Hallo_bot message Der Teilnehmer [ZUHAUSE:external_name] mit der Telefonnummer [ZUHAUSE:external_number] hat angerufen !")} }
ZUHAUSE:.*call {if(ReadingsVal("ZUHAUSE","Verbindung","default") eq "Anruf") {fhem("set Hallo_bot message Der Teilnehmer [ZUHAUSE:external_name] mit der Telefonnummer [ZUHAUSE:external_number] wurde angerufen !")} }
Anmerkung:
ZUHAUSE = FB_CALLMONITOR
Greetz
Peter
Hallo,
wo liegt der Fehler.. hab das vom Otto123 so übernommen und auf meine geräte abgeändert.
Internals:
CFGFN
DEF 192.168.178.2
DeviceName 192.168.178.2:1012
FD 15
FUUID 5e52cb8b-f33f-5016-f8f1-81e1bf9d1f66c18d
NAME Anrufliste
NOTIFYDEV global
NR 46289
NTFY_ORDER 50-Anrufliste
PARTIAL
STATE opened
TYPE FB_CALLMONITOR
READINGS:
2020-02-25 20:35:00 AnrufExtern unknown 0*******
2020-02-25 20:35:00 call_duration 33
2020-02-25 20:35:00 call_id 0
2020-02-25 20:35:00 direction incoming
2020-02-25 20:35:00 event disconnect
2020-02-25 20:35:00 external_connection SIP0
2020-02-25 20:35:00 external_name unknown
2020-02-25 20:35:00 external_number 02*****
2020-02-25 20:35:00 internal_connection DECT_1
2020-02-25 20:35:00 internal_number 9387548
2020-02-25 19:58:58 missed_call 01607*****
2020-02-24 22:10:08 state opened
helper:
CACHE:
secret
PHONEBOOKS:
0:
500@hd-telefonie.avm.de AVM Ansage (HD)
nummers...
PHONEBOOK_NAMES:
0 Telefonbuch
1 Zuhause
TEMP:
TR064:
SECURITY_PORT 56783
Attributes:
DbLogExclude .*
apiKeySearchCh 55e8ae6db725afd3633108145630bb4df
event-on-change-reading .*
fritzbox-remote-phonebook 1
fritzbox-remote-phonebook-via tr064
local-area-code 02454
reverse-search textfile,dasoertliche.de
reverse-search-cache 1
reverse-search-cache-file /opt/fhem/log/reverse_search.txt
room Geräte->LAN
sendKeepAlives 10m
userReadings AnrufExtern {ReadingsVal("Anrufliste","external_name","").' '.ReadingsVal("Anrufliste","external_number","") }
mein notify sieht so aus :
Internals:
CFGFN
DEF defmod nty_AnrufKlingelt notify Anrufliste:.*ring {
my $number = ReadingsVal("Anrufliste","internal_number",99);;
my $Anrufer = ReadingsVal("Anrufliste","external_number",99);;
my $AnruferName = ReadingsVal("Anrufliste","external_name",'');;
if (($number == xxxxxx) and Value("VUPLUS") eq "on"){
fhem "set VUPLUS showtext Anruf von $AnruferName $Anrufer";;
}
}
FUUID 5e543558-f33f-5016-8cbd-76868bdf699ee28d
NAME nty_AnrufKlingelt
NR 103274
NTFY_ORDER 50-nty_AnrufKlingelt
REGEXP defmod
STATE active
TYPE notify
Helper:
DBLOG:
state:
LOG_Db:
TIME 1582576984.58533
VALUE active
READINGS:
2020-02-24 22:05:41 state active
Attributes:
DbLogExclude .*
room System->Logik
danke für die Hilfe
Sorry - aber was ist der Fehler? Ach ja jetzt gesehen: Du hast deinen Kopf vergessen (Zwischen Copy und Paste)
Poste mal ein list VUPLUS ;)
Du hast die Raw Def in die DEF geschrieben. 🙈
ZitatSorry - aber was ist der Fehler? Ach ja jetzt gesehen: Du hast deinen Kopf vergessen (Zwischen Copy und Paste)
Poste mal ein list VUPLUS ;)
Du hast die Raw Def in die DEF geschrieben. 🙈
upps.. sorry, wie gesagt..neuling.
was muss ich ändern damit es funktioniert ?
ich gelobe besserung :-[
Was Du ändern musst? Ich würde sagen Grundlagen anlesen :)
Mein Beispiel aus #3 ist aus meiner Umgebung, da ist lediglich die zu prüfende Telefonnummer anonymisiert.
Der Code ist für die Raw Definition, defmod ändert ein Gerät, ist es nicht vorhanden wird es angelegt.
FBMon ist mein Callmonitor: Musst Du anpassen. Hast Du zwar gemacht - aber Du hast das Prinzip vom notify nicht verstanden.
VUPLUS ist mein Satreceiver, auf dem will ich ausgeben und prüfe ob er an ist.
Du kannst den Code von mir nehmen, in die Raw Def kopieren, Deine Geräte ändern die Telefonnummer eintragen und auf execute drücken.
Ja.. das hab ich mir auch schon gedacht.. ich muss auf jedenfall mehr lesen.. danke..
vuplus ist klar.. hab ne Duo2.. das funktioniert auch.. bis auf dass ich keine Nachricht bekomme. [emoji3] danke dir
Gesendet von iPhone mit Tapatalk Pro
warum postest Du dann kein neues list? ;)
sorry für die verspätung und danke für die ausdauer..
Internals:
CFGFN
DEF Anrufliste:.*ring {
my $number = ReadingsVal("Anrufliste","internal_number",99);
my $Anrufer = ReadingsVal("Anrufliste","external_number",99);
my $AnruferName = ReadingsVal("Anrufliste","external_name",'');
if (($number == 02454) and Value("VUPLUS") eq "on"){
fhem "set VUPLUS showtext Anruf von $AnruferName $Anrufer";
}
}
FUUID 5e543558-f33f-5016-8cbd-76868bdf699ee28d
NAME nty_AnrufKlingelt
NOTIFYDEV Anrufliste
NR 103274
NTFY_ORDER 50-nty_AnrufKlingelt
REGEXP Anrufliste:.*ring
STATE active
TYPE notify
Helper:
DBLOG:
state:
LOG_Db:
TIME 1582576984.58533
VALUE active
READINGS:
2020-02-25 22:32:07 state active
Attributes:
DbLogExclude .*
room System->Logik
bei $number welche kommt da hin ? meine eigene ? oh man.. sorry :-\ :-[
Zitat$number = ReadingsVal("Anrufliste","internal_number"
Damit habe ich bewirkt, das nur beim Anruf einer bestimmten, eigenen Nummer die Nachricht kommt. Kannst Du einfach weglassen, wenn es immer benachrichtigen soll.
VUPLUS musst Du noch in den Namen deines FHEM Satbox Gerätes ändern.
Okay, dann lasse ich es erstmal weg.
Meine heißt jetzt auch VUPlus [emoji41]
Kurze Frage die etwas offtopic ist.
macht es Sinn bei YouTube oder wo immer mal mehr Perl Kenntnisse zu ergattern . Sinn macht es ja bestimmt. Dann wird FHEM im allgemeinen sicherlich einfacher zu verstehen.
Danke [emoji4]
edit:
Internals:
CFGFN
DEF Anrufliste:.*ring {
my $number = ReadingsVal("Anrufliste","internal_number",99);
my $Anrufer = ReadingsVal("Anrufliste","external_number",99);
my $AnruferName = ReadingsVal("Anrufliste","external_name",'');
if (Value("VUPLUS") eq "on"){
fhem "set VUPLUS showtext Anruf von $AnruferName $Anrufer";
}
}
FUUID 5e543558-f33f-5016-8cbd-76868bdf699ee28d
NAME nty_AnrufKlingelt
NOTIFYDEV Anrufliste
NR 103274
NTFY_ORDER 50-nty_AnrufKlingelt
REGEXP Anrufliste:.*ring
STATE active
TYPE notify
Helper:
DBLOG:
state:
LOG_Db:
TIME 1582576984.58533
VALUE active
READINGS:
2020-02-25 22:47:34 state active
Attributes:
DbLogExclude .*
room System->Logik
Gesendet von iPhone mit Tapatalk Pro
ich lese immer hier nach:
https://perldoc.perl.org/index.html
Ich habe den Code mal etwas "normalisiert" der Code stand schon ewig so, man lernt ja dazu :)
Jetzt hat man bloß zwei Stellen am Anfang zum konfigurieren. $patt ist ein regEx Pattern, so wie jetzt reagiert es auf alle internen Nummern die mit 123456 beginnen. Wenn Du dort bloß .* einsetzt reagiert er auf alle Nummern.
Der Code ist jetzt für die DEF !
FBMon:.*ring {
my $box="VUPLUS1";
my $patt="123456.*";
my $number = ReadingsVal($NAME,"internal_number",99);
if (($number =~ m/$patt/) and Value($box) eq "on"){
fhem ("set $box showtext Anruf von [$NAME:external_name] [$NAME:external_number]")
}
}
Danke dir. Echt top. Ich hätte noch ne Frage zu Enigma.. aber da mach ich lieber einen neuen thread auf.
Gesendet von iPhone mit Tapatalk Pro
Also ich muss nochmal nachfragen...ich nervensäge..^^
also die nachricht bekomm ich am tv angezeigt.
leider steht als beispiel.
AnrufExtern unknown 016065651561
missed_call 016065651561
obwohl meine Telefonbuch diese nummer als beispiel hinterlegt ist.
woran kann es noch liegen ?
Internals:
CFGFN
DEF 192.168.178.2
DeviceName 192.168.178.2:1012
FD 8
FUUID 5e52cb8b-f33f-5016-f8f1-81e1bf9d1f66c18d
NAME Anrufliste
NOTIFYDEV global
NR 46289
NTFY_ORDER 50-Anrufliste
PARTIAL
STATE opened
TYPE FB_CALLMONITOR
READINGS:
2020-02-26 16:04:54 AnrufExtern unknown 016065****561
2020-02-26 16:04:54 call_duration 0
2020-02-26 16:04:54 call_id 0
2020-02-26 16:04:54 direction incoming
2020-02-26 16:04:54 event disconnect
2020-02-26 16:04:54 external_connection SIP0
2020-02-26 16:04:54 external_name unknown
2020-02-26 16:04:54 external_number 016065651561
2020-02-26 15:54:07 internal_connection DECT_1
2020-02-26 16:04:54 internal_number 758473
2020-02-26 16:04:54 missed_call 016065651561
2020-02-26 16:28:53 state opened
helper:
CACHE:
0245****0451 unknown
PHONEBOOKS:
0:
500@hd-telefonie.avm.de AVM Ansage (HD)
1:
016065651561 Marcell ********
8175 Schule
PHONEBOOK_NAMES:
0 Telefonbuch
1 Zuhause
TEMP:
TR064:
SECURITY_PORT 49443
Attributes:
DbLogExclude .*
apiKeySearchCh 55e8ae6db7%&%$15a10bb4df
event-on-change-reading .*
fritzbox-remote-phonebook 1
fritzbox-remote-phonebook-via tr064
fritzbox-user Marcell*****
local-area-code 02***
reverse-search textfile,dasoertliche.de
reverse-search-cache 1
reverse-search-cache-file /opt/fhem/log/reverse_search.txt
room Geräte->LAN
sendKeepAlives 10m
userReadings AnrufExtern {ReadingsVal("Anrufliste","external_name","").' '.ReadingsVal("Anrufliste","external_number","") }
Also es liegt ja am Telefonbuch.
wie bekomm ich denn hin, dass fhem das telefonbuch (500@hd-telefonie.avm.de AVM Ansage (HD)
kA was da passiert ist.
Gruss Marcell
FHEM neu gestartet, nachdem du das Telefonbuch-xml in das FHEM-Verzeichnis kopiert hast? FHEM liest das xml-File bei jedem Start neu ein.
Dir fehlt das Attribut reverse-search-text-file, denke ich.
Du hast remote-phonebook gesetzt,, aber im reverse-search fehlt es?
Wo meinst Du denn steht die Nummer drin?
Hast Du eins oder mehrere Telefonbücher auf der Box?
jap, das war es.. hatte reverse-search fürs phonebook vergessen.. jetzt läuft es. danke euch
Hallo nochmal ...
mit dieser Funktion kommt bei jeden Anruf eine Meldung egal ob ich auf Nummer xxx1,xxx2 oder xxx3 anrufe
my_callmonitor:.*ring {if(ReadingsVal("my_callmonitor","incoming","xxx1") eq "xxx1") {fhem("set teleBot message _msg Anruf von [my_callmonitor:external_name] : [my_callmonitor:external_number] !")} }
Was mach ich schon wieder Falsch
Gruß Otto
Was soll dabei rauskommen?
(ReadingsVal("my_callmonitor","incoming","xxx1") eq "Anruf")
teste selbst (FHEM Kommandozeile):
{ReadingsVal("my_callmonitor","incoming","xxx1")}
Oder list my_callmonitor incoming
Ich habe doch oben ein funktionierendes Beispiel? :o
Gruß Otto
?
warum hab ich kein:
list my_callmonitor incoming
kommt nichts
Gruß Otto
was zu erwarten war ;) Du hast kein Reading incoming :)
Warum willst Du also ein Reading abfragen was es nicht gibt? Wie kommst Du auf diese Idee?
Wenn Du auf eine bestimmte angerufenen Nummer (also Deine Eigene) reagieren willst musst Du das Reading internal_number abfragen. Beispiel zum Test in der FHEM Kommandozeile
{ReadingsVal("my_callmonitor","internal_number",99)}
my_callmonitor:.*ring {
my $number = ReadingsVal("my_callmonitor","internal_number",99);;
my $Anrufer = ReadingsVal("my_callmonitor","external_number",'');;
my $AnruferName = ReadingsVal("my_callmonitor","external_name",'');;
{
fhem "set teleBot message _msg Anruf von $AnruferName $Anrufer";;
}
}
aber ich ja mehrere Nummen komm aber so nicht auf die anderen ?
reagiert so auf alle MSN´s
Gruß Otto
Zitataber ich ja mehrere Nummen komm aber so nicht auf die anderen ?
Vielleicht beschreibst Du erstmal was du eigentlich willst, dann was Du probiert hast und dann was davon nicht funktioniert.
Hallo,
dachte das "internal_number",99 eigentlich bedeutet das es auf einen Anruf auf die "99" reagiert
und dan mir "external_number"auslest und mir dan über Telegram sendet wer anruft
wenn auf eine andere MSN angerufen wird soll es auf ein anderes Handy gesendet werden.
(set teleBot message @HandyA oder set teleBot message @HandyB)
Gruß Otto
Was willst du eigentlich erreichen?
Wozu liest du die interne Nummer aus und verarbeitest sie nicht?
Habs falsch angegriffen ??
So hab ich nun die 2 getrennt.
define 1_callmonitor notify my_callmonitor:internal_number:.xxx1 {fhem("set teleBot message \@Handy1 Anruf von [my_callmonitor:external_name] : [my_callmonitor:external_number] !")}
define 2_callmonitor notify my_callmonitor:internal_number:.xxx2 {fhem("set teleBot message \@Handy2 Anruf von [my_callmonitor:external_name] : [my_callmonitor:external_number] !")}
Danke fürs auf die Sprünge helfen.;) :D
Gruß Otto
Zitat von: otto am 28 Februar 2020, 23:14:44
Hallo,
dachte das "internal_number",99 eigentlich bedeutet das es auf einen Anruf auf die "99" reagiert
Gruß Otto
Moin,
Du darfst Dir doch nichts ausdenken wie etwas funktioniert, Du musst nachlesen oder fragen wie es geht. ;)
ReadingsVal() liest von einem Gerät ein Reading aus und liefert den Wert zurück. Die 99 ist völlig frei gewählt und wird quasi als Fehler zurück gegeben wenn das Reading oder Gerät gar nicht funktioniert.
So wie Du es jetzt gemacht hast, brauchst Du den Wechsel nach Perl nicht. Nur mal so. Und verwende in Zukunft bitte Codetags, Deine Posts sind echt schlecht lesbar. Dein geposter Code ist auch fehlerhaft!
Zitatdefine 1_callmonitor notify_callmonitor
define 1_callmonitor notify callmonitor:internal_number:.xxx1 set teleBot message @Handy1 Anruf von [my_callmonitor:external_name] : [my_callmonitor:external_number] !
Bin gerade nur wegen dem Schützen des Klammeraffen \@ unsicher. Da Du dann innerhalb FHEM bist, braucht der @ keinen Schutz. Den braucht man eigentlich innerhalb von perl und da nur innerhalb von "". Bei fhem('set willi @handy') geht es auch ohne ;)
Aber egal Du kannst es auch so lassen.
Man kann es auch wieder in ein notify bringen. Vorschlag (ungetestet)
define 3_callmonitor notify my_callmonitor:.*ring {\
my $number = ReadingsVal($NAME,"internal_number",99);;\
my $handy="";;\
if ($number == xxxx1) {$handy="Handy1"}\
if ($number == xxxx2) {$handy="Handy2"}\
fhem("set teleBot message \@$handy Anruf von [my_callmonitor:external_name] : [my_callmonitor:external_number] !")\
}
Gruß Otto