Seite 1 von 2

Gelöst: Fritz!Box Port 1012 "abhören"

Verfasst: Mi 18. Sep 2019, 11:14
von herz4
Hallo verehrte Forennutzer,

ich möchte den Stream des Ports 1012 der Fritz!Box im LAN aus LOBasic heraus lesen, auf dessen Ereignismeldungen reagieren können.

Es ist ein unkodierter, zeilenweiser, etwa der Form "18.09.19 10:25:06;CALL;...", oder auch "...RING...", "...[DIS]CONNECT..." mit weiteren Angaben zu den Nummern usw.

Ich lasse meinen PC aus einem Formular einer Datenbank heraus die gewünschte Nummer anwählen und muss dann den Hörer abnehmen für das Gespräch; zum Beispiel könnte mir der eingelesene Stream das Abheben bei Besetzt ersparen.

(Ich lese den Stream auf einem RaspberryPi aus und logge diesen auch. Auch kann ich auf diese Log-Datei zugreifen. Jedoch ist mir diese für meinen Zweck notwendig ständige Abfrage der Datei nach neuen Einträgen zu sehr Resourcen belastend.)

Habe keine Idee, wie ich mit LOBasic-Mitteln auf den Port der Fritz!Box "hören" kann, - listen - ?!

Bin gespannt auf Anregungen!

Mit bestem Gruß
herz4

Re: Fritz!Box Port 1012 auslesen

Verfasst: Do 19. Sep 2019, 07:50
von gogo
Da musst Du Bordmittel Deines OS nutzen - LO ist Bürosoftware und kein Betriebssystem (auch wenn's in einer JVM läuft ;) )
Dein OS kann vermutlich auch aus der Überwachung des Ports heraus ein LO-Makro starten um LO -was-auch-immer- mitzuteilen.

Re: Fritz!Box Port 1012 auslesen

Verfasst: Do 19. Sep 2019, 08:11
von Wanderer
Hallo,

Du müsstest eine Möglichkeit finden einen Socket von Basic aus zu öffnen, also IP:1012 wobei IP die Adresse Deiner Fritzbox ist.

Das jemand eine entsprechende Bibliothek in Basic für OO oder LO eingebaut hat wäre mir neu.

Bei LibreOffice kann ich da nur empfehlen bei Python zu schauen. Ich würde da sogar eher versuchen die Box mit einem externen Python-Programm zu überwachen und dann bei Bedarf das entsprechende Office-Dokument zu öffnen, bzw ferngesteuert von Python mit Daten zu füllen.

Mfg, Jörn

Re: Fritz!Box Port 1012 auslesen

Verfasst: Do 19. Sep 2019, 08:24
von herz4
Guten Morgen Jörn und gogo.

Ich hatte mittlerweile hier https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf etwas gelesen von "10.14.4. Streams, Pipes und Sockets" und daraus Hoffnung geschöpft. Ist die völlig(!) vergeblich?

Jedoch ist mir der Hinweis auf Python gefällig. Da gibt es ganz sicher Möglichkeiten, um an dem Port zu lauschen. Nur ich weiß noch nicht, wie ich dann aus Python ein Makro in LO anschubse? Oder anders, ist es möglich, ein LO-Basic-Macro ein Python-Script abarbeiten und auf - dessen - Antwort warten zu lassen?

MbG, herz4

Re: Fritz!Box Port 1012 "abhören"

Verfasst: Do 19. Sep 2019, 10:51
von gogo
mach' Dich mit dem Befehl

Code: Alles auswählen

shell
vertraut - das ist das os.system("...") Pendant.

Re: Fritz!Box Port 1012 "abhören"

Verfasst: Do 19. Sep 2019, 12:08
von herz4
Ja, gogo.

Mit shell habe ich bereits per "gnome-terminal --command='/bin/nc -w 60 fritz.box 1012'" ein Terminalfenster eingeblendet, in dem mir nun CALL und CONNECT etc. gelistet werden. Diese muss ich aber selber lesen ...

Nur ich kann damit nicht LOBasic anstoßen. Der Stream "kommt" ja immer nur, wenn Fritz!Box ein IP-Telefon-Ereignis zu vermelden hat, eben dann eine neue Zeile. Mir reichte es streng genommen, wenn LOBasic registrierte, - dass - da ein IP-Telefon-Ereignis gemeldet wurde. Dieses selbst für LOBasic bestimmen kann ich per erwähntem Log. Nur muss LOBasic dazu angestoßen werden!

Ich zweifle, ob ich mich verständlich ausgedrückt habe. Bitte sagt mir, wenn ich "auf'm Schlauch stehe"!

MdG, herz4

Re: Fritz!Box Port 1012 "abhören"

Verfasst: Fr 20. Sep 2019, 18:08
von gogo

Code: Alles auswählen

gnome-terminal --command='/bin/nc -w 60 fritz.box 1012' >> /tmp/MeinFritzboxLog.log
schreibt was da so kommt in das logfile (/tmp/MeinFritzboxLog.log). Das musst Du dann überwachen, LO eignet sich dazu, besser wäre aber mit inotify zu arbeiten. Programme die auch an Hardwareports lauschen/senden können (ähnlich wie nc) sind z.B. stty oder cutecom - sind glaub' ich beide in den Repos.
Schau' mal auf wiki.ubuntuusers.de/ - da gibt's jede Menge Infos zu Linux die weit über das hinausgehen was man täglich so braucht ;)

Re: Fritz!Box Port 1012 "abhören"

Verfasst: Fr 20. Sep 2019, 19:19
von herz4
Danke, gogo, für Deine Anregung.

Ich schrieb schon oben, dass ich genau so - ständig - eine Logdatei erstelle, via RaspberryPi.

Nur müsste ich diese Datei auch ständig auslesen, und noch dazu in der letzten Zeile, die neueste. Dieses ständige Lesen scheint mir unverhältnismäßig.

Gerade heute habe ich eine bessere Möglichkeit gefunden. Mit

Code: Alles auswählen

nc -W 1 fritz.box 1012 > /home/.../test.txt
wird nur eine Zeile geschrieben. Dies stoße ich aus LOBasic an (im shell-Befehl ganz hinten ein "True", damit das Basic-Makro so lange wartet), diese Zeile lese ich gleich danach ein, analysiere sie, um hernach wieder neu mit gleichem nc-Befehl den Port zu scannen, usw. usf.

Basic ist trotz der analysierenden Schleife so schnell(!), dass selbst zwei kurz hintereinander kommende Fritz!Box-Meldungen wie etwa "CALL" und noch in gleicher Sekunde "DISCONNECT" bei "Besetzt" - bisher - einwandfrei ausgelesen werden. Ich bin damit dem Anrufmonitor so weit näher gekommen, dass ich ihn in den nächsten Tagen damit zum Laufen bringen möchte.

Kleiner Wermutstropfen: Den obigen nc-Befehl bekomme ich nicht - direkt - erfolgreich per shell-Befehl abgesetzt, sondern ich musste ihn in eine Bash-Datei "verpacken". Das direkte geht noch mit Terminalfenster, aber nicht mehr ohne und mit(!) der Ausgabeumleitung in die Datei. Zumindest hört da mein "Latein" auf. Auch bei "inotify", "stty" und "cutecom" muss ich mich erst noch belesen; möchte ich aber noch vor "meiner Weiterentwicklung" verstehen, weil mutmaßlich noch besser ;-)

Nochmals dankend
herz4

Re: Fritz!Box Port 1012 "abhören"

Verfasst: Sa 21. Sep 2019, 22:59
von gogo
Die Umleitung ist eine Shell-Funktion, geht also nur in einer solchen, daher musst Du eine shell (welche auch immer) aufrufen. Den Prozess musst Du dann von der shell trennen, der läuft ja sonst als child der shell nur solange diese existiert - das erledigst Du indem Du ein & an den Befehl hängst.

Code: Alles auswählen

nc -W 1 fritz.box 1012 > /home/.../test.txt &
Nur müsste ich diese Datei auch ständig auslesen, und noch dazu in der letzten Zeile, die neueste. Dieses ständige Lesen scheint mir unverhältnismäßig.
... und dann macht Dein Basic-Code genau das ;) ???

Code: Alles auswählen

while true; do inotifywait -e modify /pfad/zur/Datei && /usr/bin/libreoffice macro:///standard.module1.macro_x; done
überwacht Änderungen an der Datei "/pfad/zur/Datei" und führt bei einer Änderung das Makro standard.module1.macro_x aus...

Re: Fritz!Box Port 1012 "abhören"

Verfasst: So 22. Sep 2019, 08:39
von herz4
Danke gogo. Deine Erklärung zu Deinem ersten Script verhalf mir dazu, ohne externes Bash-Script auszukommen.

Code: Alles auswählen

shell("/bin/bash",6,"-c 'nc -W 1 fritz.box 1012 > "+aFile+"'",True)
Allerdings musste ich da auf das "&" am Ende verzichten. Es soll der Prozess - bei meiner Anforderung - ja gerade nicht abgekoppelt werden, sondern auf die nc-Ausgabe in die referenzierte Datei gewartet werden. Hernach geht es im Basic-Macro weiter ...

Das zweite Bash-Script eröffnet mir die Möglichkeit, von der Systemebene ein LO-Macro ausführen zu lassen. Diese prinzipielle Möglichkeit kannte ich bisher noch gar nicht. Geht das so weit, dass ich diesem Macro auch noch einen Parameter, hier wünschenswert die von nc gelesene Zeile mit übergeben kann, vielleicht etwa so oder ähnlich?

Code: Alles auswählen

nc -W 1 fritz.box 1012 | /usr/bin/libreoffice macro:///standard.module1.macro_x