Modul 72_AsteriskCM.pm: Asterisk Callmonitor via Asterisk Manager Interface

Begonnen von marvin78, 30 September 2015, 20:52:54

Vorheriges Thema - Nächstes Thema

marvin78

Das Thema wurde geschlossen, da das Modul nicht mehr weiter entwickelt wird und auch der Support eingestellt wurde.

Da ich aus diversen Gründen die FritzBox langsam aber sicher ablösen, aber auf gewisse Dinge in meiner Hausautomation, welche durch Anrufe ausgelöst werden, nicht verzichten möchte, habe ich mich ein wenig mit Asterisk (PBX) beschäftig (wohl gemerkt "ein wenig"). Es gibt viele Wege, Events aus Asterisk an FHEM zu übermitteln. Zunächst bin ich den Weg über einen dummy gegangen, der über entsprechende Skriptaufrufe aus der extensions.conf mit Readings gefüllt wurde. Da ich mich aber ein wenig mit Perl beschäftigen und etwas über die Modulentwicklung in FHEM lernen wollte, habe ich mich irgendwann dazu entschlossen, ein FHEM-Modul zu bauen, das eine Verbindung zum Asterisk Manager Interface aufnimmt und die Call-Events in Readings schreibt, die auch mit der FB_CALLLIST kompatibel sind.

Vorab: Ich werde hier keinerlei Support für Asterisk bieten. Abgesehen davon, dass ich in dem Bereich als absoluter Anfänger zu bezeichnen bin, gibt es viele Anlaufstellen für die Asterisk-Themen im Netz. Das Forum hier ist nicht der richtige Ort dafür.

Auch kann ich nicht dafür garantieren, dass das Modul mit jeder Asterisk Umgebung funktioniert. Bei mir tut es seinen Dienst. Es kann gut sein, dass es bei niemand anderem ohne Änderung funktioniert. Ich werde das Modul aber vermutlich nicht für jeden umbauen.

Es wird die gleiche Rückwärtssuche verwendet, die auch im FB_CALLMONITOR verwendet wird (mit dem Autor abgesprochen). Nur ein Fritzbox Telefonbuch wird natürlich nicht abgefragt. Die API-Keys sind natürlich andere, als in FB_CALLMONITOR. Die Doku wurde in Bezug auf Rückwärtssuche ebenfalls aus FB_CALLMONITOR übernommen. Die Readings und Attribute entsprechen ebenfalls weitesgehend denen im FB_CALLMONITOR. Die FB_CALLLIST funktioniert auch mit AsteriskCM.

Die Dokumentation befindet sich im Modul. Bitte erwartet von mir hier keinen umfassenden Live-Support oder sehr schnelle Fehlerkorrekturen. Meine Zeit ist sehr eng und es kann alles immer etwas länger dauern. Das Modul wird auch aller Voraussicht nach nicht eingecheckt.

Damit das ganze funktioniert muss das Asterisk Manager Interface aktiviert und ein User angelegt werden. Wie das geht, findet man an vielen Stellen im Netz.

Ein AsteriskCM-Device kann folgendermaßen definiert werden:

define <name> AsteriskCM <server> [<user> <port>]

Wird kein User angegeben, wird "admin" verwendet. Wird kein Port angegeben wird der Standardport 5038 verwendet. Server kann auch localhost sein. Das entsprechende Passwort wird über set gesetzt und verschlüsselt abgelegt.

Die Attribute contextIncoming und contextOutgoing sollten gesetzt werden. Die Standardwerte werden wohl bei keiner Installation stimmen.

Falls es bei euch so gut funktioniert, wie bei mir: Viel Spaß damit.

Installation:

update all https://raw.githubusercontent.com/marvin78/FHEM-AsteriskCM/master/controls_AsteriskCM.txt

Download: https://github.com/marvin78/FHEM-AsteriskCM

Markus Bloch

Hi,

sieht gut aus ;-)

Ich habe leider keine Asterisk-Anlage und kann es demzufolge schlecht testen. Eine Frage habe ich aber. Wieso verwendest du nicht DevIo.pm (ähnlich wie in FB_CALLMONITOR) um die Verbindung zu Asterisk zu öffnen, Daten zu schreiben und zu lesen? Das ist deutlich einfacher, als das manuelle erstellen des Sockets und der Pflege dessen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

marvin78

Sehr gute Frage ;) DevIO habe ich erst recht spät entdeckt und leider noch nicht ganz verstanden, weil ich noch keine Zeit hatte, mich damit intensiv auseinander zu setzen. Ich habe mir FB_CALLMONITOR erst angesehen, als ich die Rückwärtsuche realisieren wollte. Die Socket Geschichte war zu dem Zeitpunkt schon eingebaut und lief gut.

Edit: Im ersten Beitrag befindet sich nun eine Version mit Verwendung von DevIo.

Markus Bloch

Die Funktion DevIo_Open funktioniert folgendermaßen:

DevIo_OpenDev($hash, $reopen, $initfn)

$reopen sollte auf 1 stehen, wenn die Verbindung wieder neu aufgebaut wird (in ReadyFn) ansonsten auf 0 (in DefineFn). Die Variable $initfn enthält einen Funktionsnamen, welcher ausgeführt werden soll, wenn die Verbindung erfolgreich aufgebaut wurde. Damit kann man ein evtl. Login durchführen oder andere Kommandos um die Gegenstelle entsprechend zu initialisieren. Hier könntest du deine Funktion AsteriskCM_Login angeben. Der initFn wird immer nur $hash übergeben.

Damit kannst du dir den eigenen Timer sparen für den Login.

Da ich in FB_CALLMONITOR einen solchen Initialisierungsvorgang nicht benötige, setze ich da undef, da die FritzBox sofort anfängt, alle Events zu melden.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

marvin78

Danke für die Info. Gut zu wissen. Es kann alles so einfach sein, wenn man's richtig macht ;)

linuzer

Vielen Dank für dieses tolle Modul!

Für meinen Asterisk 14.6 mit PJSIP-channel musste ich ein paar Kleinigkeiten anpassen, damit er die Events richtig erkennt. Ich hänge die Version mal an, falls es jemandem hilft...

su.puk

Hallo,

ich würde gerne das Modul nutzen, jedoch scheitere ich schon beim eingeben des Passworts...

Wie/Wo muss ich das PW angeben? Im Device kann ich nur ein neues setzen, zumindest gibt es den Eintrag im Pulldown Menü...
Wenn ich es eintrage und SET drücke erhalte ich nur die Meldung: "New password is mandatory"

Wo genau liegt die Doku für das Modul?

PS: Das Passwort sollte passen, denn per Telnet kann ich mich damit anmelden...

marvin78

Diese Meldung kommt nur dann, wenn du bereits ein Passwort gesetzt hast und ein neues setzen möchtest. In dem Fall werden 2 Passwörter erwartet in der form

<oldPWd> <newPwd>

Falls du das alte Passwort nicht mehr kennst, bearbeite das uniqueID File in <fhemroot>/FHEM/FhemUtils manuell. Dabei ist Vorsicht geboten.

commandref befindet sich im Modul. (help)

su.puk

Super, Danke das war`s...
Hatte mit tcpdump gesehen das ein falsches gesedet wird ... :o

Jetzt hat er connected  :)


Was ist noch sinnvoll an Attribute zu setzen?

Das verstehe ich nicht:
Zitatcommandref befindet sich im Modul. (help)

marvin78


su.puk

Das geht hier ja schneller als bei der Feuerwehr!


Peinlich, das kannt ich noch nicht....

Zitathelp AsteriskCM


oder

Device specific help in der Detailansicht.


Vielen Dank

linuzer

Aus Eigenbedarf habe ich noch eine Funktion ergänzt um globale Dialplan-Variablen zu setzen.
Damit lässt sich der Dialplan dynamisch verändern (z.B. in Ab- oder Anwesenheit eines Presence-device Weiterleitung auf das Handy aus- bzw. einschalten  8) )

Benutzung:
set <devName> variable <varName> <newValue>

Wer es brauchen kann...

Commander

Hallo :)
erstmal vielen Dank für deine Arbeit.
Ich hab selber Asterisk installiert und das AMI ist schonmal aktiviert und das Redings state sagt mir auch connected.
Leider passiert weiter nix im Eventmonitor wenn bei Asterisk was passiert. Per Telnet direkt mit der AMI wird mir ja jede Menge ausgespuckt.
Versteh ich abber richtig dass unter Readings dann die AMI`s angezeigt werden sollten?

Zitat von: marvin78 am 30 September 2015, 20:52:54
Die Attribute contextIncoming und contextOutgoing sollten gesetzt werden. Die Standardwerte werden wohl bei keiner Installation stimmen.

Kannst du mir einen Tip geben auf was ich die Werte setzen sollte? Ein einfache .* wird vermutlich nicht richtif sein oder?

Viele Grüße
Pascal
FHEM5.6 auf Intel NUC NUC5PPYH
HM-CFG-USB-2 / HMLAN
CUL 433 CUL 868 / WMBus_T (Techem) JeeLink
MAX! Cube,Logitech Harmony Hub,Philips Hue

marvin78

Ich bin leider aus Asterisk seit Jahren raus. Welchen Context verwendest du denn jeweils in der Config?

Commander

Zitat von: marvin78 am 08 Dezember 2019, 08:51:05
Welchen Context verwendest du denn jeweils in der Config?
Welchen Context? Welche Config meinßt du?  ???
FHEM5.6 auf Intel NUC NUC5PPYH
HM-CFG-USB-2 / HMLAN
CUL 433 CUL 868 / WMBus_T (Techem) JeeLink
MAX! Cube,Logitech Harmony Hub,Philips Hue