SIP-Protokoll / Fritzbox Callmonitor / netcat

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von jogo »

Moin :)
vielleicht hat sich jemand schonmal mit diesem Thema beschäftigt.

Wenn es klingelt, schickt mein KlingelPaul (https://www.uk-intech.de/index.php/prod ... lingelpaul) das Signal als Anruf auf Fon1 der FritzBox. Diese meldet dann diesen Anruf an alle angeschlossenen FritzFons und auch an Linphone (SIP-Client) als Anruf Türklingel. Das läuft seit vielen Jahren perfekt.

Nun möchte ich folgendes erweitern:
Ich brauche dieses Klingelsignal (oder später auch eingehende Anrufe) auf meine(n) PCs über das lokale Netzwerk, um je nach Szenario speziell darauf reagieren zu können (loggen, Schnappschuss, weitere Aktionen). Das möchte ich mit PureBasic lösen.

Die erste Idee, mich einfach mit den Netzwerkfunktionen in PB als SIP-Client anzumelden, ist gescheitert. Obwohl ich diesen Client ja "nur" zum Empfangen eines Klingelsignals benötige (also ohne den ganzen Telefoniefunktionen für Ton, Gesprächsaufbau, etc.), war ich fachlich überfordert und hab aufgegeben.

meine zweite Idee:
für die Signalerkennung ein Kommandozeilentool verwenden, dessen Ausgabe ich dann in PB mit RunProgramm() verarbeiten kann.
Beim Suchen fand ich in ein Debianforum den Hinweis, das die FritzBox einen CallMonitor hat, der über ein DectMobilteil mit #96*5* aktiviert werden kann (mit #96*4* wird er wieder deaktiviert).
Dieser Callmonitor liefert über Port 1012 dann pro eingehenden Anruf die Nummer und andere Infos. Dies soll mit dem Kommandozeilentool netcat (ist in LMDE bereits vorhanden) dann abgefragt werden können. Wäre ja ein perfekter Ansatz & Basis für mein PB-Projekt gewesen :)

also im FritzFon #96*5* aufgerufen.Das wird auch auf Display gemeldet, das Callmonitor aktiviert ist.
Und dann im Terminal:

netcat 192.168.178.1 1024

dann läuft netcat auch - und es passiert... nix
egal, ob ich klingel oder intern Anrufe tätige - netcat stellt sich tot. Was mach ich da falsch?

Hab mein Vorhaben und meine Lösungsvorstellungen etwas ausführlicher beschrieben, in der Hoffnung, dass jemand in dieser Thematik schon mal was erfolgreich geprobt hat oder einen (für mich) brauchbaren Ansatz für 1. oder 2. Idee nennen kann.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von jogo »

ok - hab was wichtiges herausgefunden:
der Callmonitor liefert nur externe Anrufe. Habe die ganze Zeit nur die Klingel und interne Anrufe getestet.

netcat 192.168.178.1 1024 funktioniert also. Alternativ kann ich die Logs in eine Textdatei schreiben:
netcat 192.168.178.1 1024 > textdatei.txt
Da hätte ich mit PB dann 2 Ansätze, die Ausgaben zu verarbeiten.

KlingelPaul wird also demnach als interner Anruf interpretiert. So ein Mist.
Jetzt werd ich mal schauen, ob ich direkt in der Fritzbox dies ändern kann (hab aber nicht viel Hoffnung)
Ich müßte der Fritzbox irgendwie vorgaukeln, das der Anruf von KlingePaul ein externer Anruf ist. Allerdings soll das mit der Signaliserung auf den FritzFons weiter so gut funktionieren, wie bisher. Muß also aufpassen, das ich nix "ver(schlimm)bessere" :)

Edit: Wäre der Versuch, einen Mini-SIP-Clienten zu bauen realistisch (als Laie)? Möglicherweise wird das nur über eine externe API gehen...
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von dige »

Ich finde dein Projekt sehr spannend, da ich so etwas änliches immer schon mal realsieren wollte. Ist denn das KlingelPaul Modul dafür geeinet, dieses mit einer SSS Siedle Audiosprechanlage in einem Mietsobjekt zu koppeln?
"Papa, ich laufe schneller - dann ist es nicht so weit."
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von jogo »

KlingelPaul braucht einfach nur einen Spannungsimpuls, um diesen dann als Anrufsignal an der FritzBox in Fon1 oder Fon2 zu schicken.
Ich habe eine normale Klingel, da hab ich den KlingelPaul einfach parallel an die Wechselstromkontakte der Klingel geklemmt. Es gibt aber mehrere Schaltungsmöglichkeiten. Meiner ist ca. 20 Jahre im Betrieb.
Wenn du an deiner Türsprechanlage irgendwo eine Möglichkeit findest, an die Kontake des Lautsprechers den KlingelPaul zu klemmen/löten, sollte das reichen. Kann auch eine andere Spannung sein, die beim Klingeln an deiner Tür erzeugt wird. Hauptsache, der Impuls reicht zum Erzeugen des Anrufsignals. Gibt verschiedene Ausführungen und Klemmvarianten von KlingelPaul. Möglicherweise wurde er im laufe der Zeit etwas verändert.
Hab den Eindruck, er ist teurer geworden :)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von HeX0R »

Ich finde das ein wenig zu viel Gebastel (nur meine Meinung, was Spaß macht ist erlaubt).
Ich nutze NUKI Opener (plus Smart Lock) zu Hause, das optional in Verbindung mit openHab(ian) wäre vielleicht auch eine Option für dige.
Wenn's klingelt melden manche meiner Alexas, dass es geklingelt hat (im Büro im oberen Stock, würde ich das sonst nicht hören).
Haus/Wohnungstür lässt sich auch per Smartphone öffnen, was für die Kinder natürlich "cool" ist.
Da kann man dann gerade mit Openhab (ioBroker, Home Assistant, ...) noch viel mehr draus machen.
Was mich stört ist, dass die Gegensprechanlage nicht auch über die App zugänglich ist, dann könnte ich vom Büro, mit dem Heini vor der Tür reden.
Da gäbe es aber auch was, vielleicht teste ich das mal:
https://www.amazon.de/dp/B0CKGQ5913/
(Das Nukizeug ist auch nicht gerade billig!)
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von jogo »

Ok - wenn man das mit der Klingel-Weiterleitung komplett neu aufziehen möchte, wäre das ein Weg, in den man aber auch "reinwachsen" muß ;)
Nun hab ja schon länger eine brauchbare Lösung im Einsatz und will diese "nur" etwas erweitern.

Habe mal AVM kontaktiert und nachgefragt, ob es eine Möglichkeit gibt, Anrufe von der Haustürklingel optional über den Callmonitor zu loggen. Warte auf Antwort...

Inzwischen hab ich mich mal nach einen Kommandozeilen-SIP-Clienten umgeschaut (an SIP-Telefone leitet die Fritzbox die Klingel ja weiter) und bin auf baresip gestoßen. Gibt es in den offz. Paketquellen. Hab die baresip core Version installiert.
dann im Terminal mit baresip 1x starten und mit Strg+c wieder beenden, damit der Ordner ~/.baresip mit den config-Dateien erzeugt wird.

Erstaunlicher Weise brauchte ich am Ende nur in ~/.baresip/accounts ganz unten diese Zeile die Kommentierung entfernen und an so anpassen:
<sip:benutzername@192.168.178.1>;auth_pass=passwort
Das passende IP-Telefon hab ich schnell in der FB mit den entsprechenden benutzername & passwort angelegt.

Dann im Terminal wieder mit baresip gestartet und hat sich auf Anhieb mit der FB verbunden. Jeder Anruf (also auch Intern & Klingel) wird dann im Terminal kurz und knapp angezeigt. Also genau, wie ich das brauche. Mehr will ich ja damit (erstmal) nicht tun. Um die restlichen Funktionalitäten kümmere ich mich also vorerst nicht.

Nun werde ich beginnen mit PB den baresip-Aufruf über Runprogram() zu öffnen und dessen Textausgaben zu empfangen. Wenn mir das gelingt, kann ich die Anrufe verarbeiten und nach meinen Befindlichkeiten beliebig darauf reagieren - mit allem, was mit PureBasic möglich ist. :)

Natürlich werde ich auch die anderen Optionen im Auge behalten. Die netcat Variante hat auch ihren Charme, weil das in Linux bereits vorhanden ist und ich für mein Programm keine Vorbereitungen treffen muß.

Edit:
Die Idee, die SIP-Anmeldung direkt mit PB zu realisieren (also das, was baresip für mich erledigt) habe ich wegen Inkompetenz verworfen ;)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von dige »

HeX0R hat geschrieben: 31.01.2025 00:06 [..]
Ich nutze NUKI Opener (plus Smart Lock) zu Hause, das optional in Verbindung mit openHab(ian) wäre vielleicht auch eine Option für dige.
[..]
Da gäbe es aber auch was, vielleicht teste ich das mal:
https://www.amazon.de/dp/B0CKGQ5913/
Mega!! :D Danke HeX0R .. da muss ich heute gleich mal prüfen, ob meine Anlage Ring Intercom kompatibel ist. Das wäre eine super Lösung. :allright: :bounce:
"Papa, ich laufe schneller - dann ist es nicht so weit."
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: SIP-Protokoll / Fritzbox Callmonitor / netcat

Beitrag von jogo »

habe mal einen ersten Prototypen fertiggestellt. Ich kann baresip starten und dessen Konsolenausgaben lesen und auch Kommandos senden. So sieht der Aufruf aus:

Code: Alles auswählen

barsip = RunProgram("baresip", "", "",#PB_Program_Open | #PB_Program_Read | #PB_Program_Write)
Und so lese ich den Kram ein:

Code: Alles auswählen

Procedure sip_lesen()
  ;prüft, ob baresip daten gesendet hat // wird durch timer in ereignisschleife ausgelöst
  While AvailableProgramOutput(barsip) ;läuft so lange, wie daten vorliegen
    output = ReadProgramString(barsip) ; output ist global, weil ich den Inhalt in weiteren Procs verarbeite...
    nfl = 1 ; globales nachrichtenflag setzen // wird in ereignisschleife wieder auf 0 gesetzt
  Wend  
EndProcedure
Ist doch richtig, dass ich zum lesen einen Timer brauch? Hab jedenfalls nix gefunden, was ein Event auslöst, wenn barsip was in die Ausgabe schreibt.
und so sende ich Daten:

Code: Alles auswählen

Procedure sip_ende()
  ;beendet baresip und trennt die Datenverbindung //aufruf über button oder x 
  timer1(0)						;timer1 beenden
  If IsProgram(barsip)				;Programrunning() würde sonst abstürzen falls barsip nicht mehr läuft   
    While ProgramRunning(barsip)		;wenn baresip noch läuft
      WriteProgramString(barsip, "q")	;baresip-befehl q zum beenden schicken 
      Delay(70)						;tick warten, damit baresip die endmeldung erzeugen kann
      sip_lesen()					;quit-meldung wird nach erfolgreichen q von baresip gesendet       
    Wend     
    CloseProgram(barsip)			;datenverbindung trennen    
  EndIf 
EndProcedure
ok - bisher hab ich nur das "q" zum beenden gesendet. Also funktioniert es grundsätzlich.

Der Vorteil bei baresip gegenüber netcat ist, das baresip bei Calls genau eine Zeile Zeile sendet, die ich relativ einfach verarbeiten kann.
Bei netcat kommt ein ganzer Schwall an Text, den ich erstmal nach brauchbaren Infos filtern muß.

Bin soweit ganz zufrieden und beginne jetzt, meinen Monitor weiter auszubauen. Gibt natürlich noch viel zu Forschen. ZB. ist baresip portabel - ich könnte ihn also auch in meinem Programmverzeichnis einnisten. Habs aber erstmal so gelassen, wie ich ihn aus der regulären LMDE-Quelle installiert habe.
Also falls jemand einen SIP-Clienten nach eigenen Geschmack programmieren möchte, und sich nicht mit dem ganzen Protokoll usw. nicht auskennt (so wie ich) wäre dieses Tool die perfekte Basis.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Antworten