aus Fhem Telefonnummern an Asterisk übrgeben

Begonnen von pinkfloyd66, 11 April 2016, 15:42:48

Vorheriges Thema - Nächstes Thema

pinkfloyd66

Hallo,

ich habe folgende Frage, ich habe einen Raspberry mit FHEM und Asterisk (dient als Wählgerät und Funktioniert auch). Ich würde gerne ein Eingabefeld erstellen, in dem ich dann eine Telefonnummer eintragen kann. Diese sollte dann irgendwie an den Asterisk Server übergeben werden und dann sollte dieser telefonieren.
Der Asterisk Server kann mit der Berkeley DB arbeiten und das ist auf "http://das-asterisk-buch.de/1.6/asterisk-datenbank.html" auch gut beschrieben, nur hätte ich gerne in FHEM ein Eingabefeld und darunter eine Tabelle in dem der Eintrag erscheint.

Ich wäre dankbar für jede Anregung in welcher Richtung ich suchen muss, denn ich finde dazu nichts


FranzB94

Hi pinkfloyd66!

Dein Text liest sich mMn noch sehr ungenau und an Fakten erkennt man eher: "in China fällt ein Sack Reis um..."
Das Asterisk Buch ist zwar eine mögliche Informationsquelle aber die aktuelle Version von Asterisk ist: 13.8.0!
Hier beschäftigen sich auch eher wenige User mit Asterisk, aber im Wiki gibt es einen mittlerweile historischen Artikel http://fhemwiki.de/wiki/VoIP_to_fhem der sich aber eher mit der Gegenrichtung beschäftigt. Vielleicht ist es aber für Dich hilfreich.

pinkfloyd66

Hi FranzB94,

Entschuldigung wenn ich mich nicht glücklich ausgedrückt habe.
Also mein Ziel ist es das ich aus FHEM mehrere Telefonnummern an Asterisk übergeben möchte.
Diese mittels Variablen in die extensions.conf einfügen möchte aber es scheitert schon daran das ich es nicht schaffe ein vernünftiges Eingabefeld oder eine editierbare Tabelle zu erstellen.
Denn später soll FHEM beim auslösen eines Fensterkontaktes oder der des Bewegungsmelder eine oder mehrere Telefonummern anrufen. Natürlich könnte ich jedes Mal die extensions.conf anpassen oder verschiedene Context anlegen und diese dann mit einem Call-File aufrufen aber ich würde es gerne flexibel gestalten, um spontan Telefonnummern hinzu zu fügen oder zu ändern. Ich möchte ja keine fertige Lösung sondern eine Richtung an der ich noch nicht gedacht habe.

Der Asterisk-Server funktioniert auch, zumindest  mit dem Call-File.


LG
Manfred


Ellert

Du könntest einen Dummy anlegen und folgende Attribute nutzen, dann hast Du im WEB-Frontend ein Eingabefeld, siehe http://fhem.de/commandref_DE.html#dummy und http://fhem.de/commandref_DE.html#FHEMWEB

setList <deinDummy> state:textField
webCmd <deinDummy> state


Elektrolurch

Oder den Dummy in einer readingsGroup darstellen, dann kann man auch mehrere Nummern anzeigen:

define Nummernliste dummy
attr Nummernliste setList Nummer1:textField Nummer2:textField
define Nummernliste_rg readingsGroup Nummernliste:Nummer1 Nummernliste:Nummer2
attr Nummernliste_rg commands {'Nummer1' => 'Nummer1:', 'Nummer2' => 'Nummer2:'}

Elektrolurch
configDB und Windows befreite Zone!

FranzB94

Hi pinkfloyd66!

Du brauchst Dich nicht zu entschuldigen, nur eine konkrete Beschreibung des Vorhabens ist natürlich für Interessierte besser. Die gleiche Problematik wollte ich auch schon angehen, auch mit einem laufenden Asterisk und mit verschiedenen Callfiles. Leider habe ich es nicht in den Griff bekommen.   

pinkfloyd66

Wenn ich es raus kriege dann melde ich, versprochen

FranzB94

Hi pinkfloyd66!

Hier im Forum könnte meiner Kenntnis nach der user betateilchen bei der Lösung des Problems am besten weiterhelfen. Er kennt sich sowohl mit Asterisk als auch mit FHEM bestens aus. Um ihn auf die Thematik aufmerksam zu machen, müßtest Du aber unbedingt die Überschrift des Threads ändern!

pinkfloyd66

#8
Hallo  FranzB94,

ich habe zwar eine Lösung die nicht optimal ist aber sie funktioniert und ich muß nicht über putty, in der extensions.conf, Telefonnummern ändern.
Mein Weg ist so, wenn ich Tel-Nummern ändern muß dann gehe ich ins Fhem -> Edit Files und unter "Own modules and helper files" habe ich eine Datei mit dem Namen 1Telefonummer.cfg. Im Ordner /opt/fhem/FHEM habe ich einen symbolischen Link angelegt der auf die Datei telefonnummer.conf im Verz. /etc/asterisk/ verweist.
Mit folgendem Inhalt

Nummer1=Telefonnummer
Nummer2=Telefonnummer
Nummer3=0
Nummer4=Telefonnummer
Nummer5=0
Nummer6=0
Nummer7=0
Nummer8=0
Nummer9=0
Nummer10=0

Die Geschichte mit den Nullen ist schnell erklärt ich habe in der waehlgeraet.conf eine Abfrage eingebunden die abfragt ob eine 0 in der Variable ist wenn nicht dann Telefoniere wenn doch dann geh ein Schritt weiter. Irgendwann werde ich das mal richtig mit einer Schleife machen aber momentan funktioniert es auch so.
Diese Datei lässt sich aus Fhem bearbeiten und deshalb habe ich in der extensions.conf folgendes eingebunden

[general]

[globals]
#include /etc/asterisk/telefonnummern.conf
#include /etc/asterisk/waehlgeraet.conf

Die waehlgeraet.conf muss nicht sein aber für mich ist es übersichtlicher, man hätte es auch direkt in die extensions.conf eintragen können

[Rufnummer]
exten => rundruf,1(Anfang),Dial(SIP/DTAG-IP/${Nummer1},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)
same => n,GotoIf($[${Nummer2}="0]"?Nr3)
same => n(Nr2),Dial(SIP/DTAG-IP/${Nummer2},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer3}="0]"?Nr4)
same => n(Nr3),Dial(SIP/DTAG-IP/${Nummer3},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer4}="0]"?Nr5)
same => n(Nr4),Dial(SIP/DTAG-IP/${Nummer4},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer5}="0]"?Nr6)
same => n(Nr5),Dial(SIP/DTAG-IP/${Nummer5},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer6}="0]"?Nr7)
same => n(Nr6),Dial(SIP/DTAG-IP/${Nummer6},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer7}="0]"?Nr8)
same => n(Nr7),Dial(SIP/DTAG-IP/${Nummer7},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer8}="0]"?Nr9)
same => n(Nr8),Dial(SIP/DTAG-IP/${Nummer8},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer9}="0]"?Nr10)
same => n(Nr9),Dial(SIP/DTAG-IP/${Nummer9},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,GotoIf($[${Nummer10}="0]"?Anfang)
same => n(Nr10),Dial(SIP/DTAG-IP/${Nummer10},5)
same => n,GotoIf($[${DIALSTATUS}=ANSWER]?fertig)

same => n,Goto(Anfang)
same => n,(fertig),Hangup()

exten => alarm,1,Answer()
same => n,Background(/var/lib/asterisk/sounds/custom/haupt_ansage1)
same => n,Hangup()


exten => 1,1,Playback(/var/lib/asterisk/sounds/custom/1.auswahl)
exten => 1,n,Hangup()

exten => 2,1,Background(/var/lib/asterisk/sounds/custom/2.auswahl)
exten => 2,n,System(/home/pi/sip-tools/alarmruf.sh)
exten => 2,n,Hangup(



In der fhem.cfg habe ich folgendes eingetragen

define anruf dummy
attr anruf room test
attr anruf alias Anruf
attr anruf group Anruf
attr anruf webCmd on:off

define ntfy_anruf notify anruf:on {\
{system('sudo /home/pi/sip-tools/alarmruf.sh');;}\
}



Wenn ich jetzt in den Raum test wechsle und auf on klicke dann ruft mich das System an.
Falls noch jemand noch Verbesserungsvorschläge immer her damit
LG
Manfred

pinkfloyd66

#9
Noch einer kleiner Nachtrag, natürlich muss nach ändern der Telefonnummern der Asterisk-Server neu gestartet werden.
Mache ich mit:

define Telspeichern dummy
attr Telspeichern room test
attr Telspeichern alias Telspeichern
attr Telspeichern group Telspeichern
attr Telspeichern webCmd on:off

define ntfy_Telspeichern notify Telspeichern:on {\
{system('sudo service asterisk restart');;}\
}


Ich hoffe ich konnte jemand damit helfen.

betateilchen

#10
Zitat von: pinkfloyd66 am 13 April 2016, 15:16:36
Noch einer kleiner Nachtrag, natürlich muss nach ändern der Telefonnummern der Asterisk-Server neu gestartet werden.

nein, muss er nicht. Du musst nur ein reload auf den dialplan machen, das geht viel schneller und beendet auch keine laufenden Gespräche :)

Ich würde übrigens eine direkte Verbindung von fhem über die Manager-Schnittstelle des Asterisk bevorzugen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

FranzB94

Hi!
Zitat von: betateilchen am 13 April 2016, 19:59:27
Ich würde übrigens eine direkte Verbindung von fhem über die Manager-Schnittstelle des Asterisk bevorzugen.

Auf betateilchen ist halt Verlass. Diese Antwort hatte ich, ehrlich gesagt, in etwa erwartet und sie bereits vor einiger Zeit hier von betateilchen bekommen. Aber von mir Danke dafür, daß Du Dich gemeldet hast. Problem an der Sache ist, das ich mit AMI noch keine positiven Efahrungen habe machen können. Das liegt sicher auch daran, das ich mich in der letzten Zeit eher mit FHEM als mit Asterisk befasst habe (außer der Aktualisierung der Software).

@ pinkfloyd66: Falls Du die Info-Quelle noch nicht kennst, habe ich schon mal den Link raugesucht:  http://www.voip-info.org/search_results/?cref=http%3A%2F%2Fwww.voip-info.org%2Fcref_cse.xml&cof=FORID%3A11&q=ami&sa=Search&siteurl=www.voip-info.org%2F&ref=&ss=264j68648j3. Ich werde in den nächten Tagen Deinen Code mal testen. Danke.