NEWS
IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox
-
@ewc sagte in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
Der gedachte Ablauf ist/soll folgender sein:
GPIO x1 Eingang -closed- "Alarm scharf/unscharf
wenn -closed- "scharf" warte 5 Minuten
wenn "nach 5 Minuten" und GPIO x1 "closed"
und GPIO x2 Eingang closed (Alarmtrigger über NVR)
warte 3 Minuten
danach starte Anruf über Asterisk (und ggfls. noch einen Shelly) wenn GPIO x1 noch closedHi, sorry, ich hab leider Informatik und nicht Kunst studiert.
Das Problem ist, dass der X2 beim Schalten und nach 5min geprüft werden sollte, daher hab ich ihn mal in eine Funktion ausgelagert.
Ach, die Timer müssen auf Minuten gestellt werden.<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="qyH7wq!-AOqe;Qn?*$Gv">5Min</variable> <variable id="c)53FM(#B:Y8tLluj7R$">value_x2</variable> <variable type="timeout" id="Timer2">Timer2</variable> <variable type="timeout" id="Timer1">Timer1</variable> </variables> <block type="variables_set" id="oQOKs5dy#o7YDnO3|y8(" x="38" y="-162"> <field name="VAR" id="qyH7wq!-AOqe;Qn?*$Gv">5Min</field> <value name="VALUE"> <block type="logic_boolean" id="^8ec%``[UR5J?TyvP9(]"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="on_ext" id="2gvtvw$D1+B:Z@R[%DF_"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="nJ$?z|g=p*]H^;.KG=^d"> <field name="oid">0_userdata.0.test.x1</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="$o38w*m;c1XZxq5V1`B4"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="uA0v_VPCj:mQ-0a;qNig"> <field name="TEXT">X2 Wurde geschltet auf </field> </shadow> <block type="text_join" id="g6XE|gOKiPN:7}MU(cuc"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="/_jmk]!$*S!5kRvAsc2G"> <field name="TEXT">X1 auf </field> </block> </value> <value name="ADD1"> <block type="on_source" id="_J#ZG%TUaWB?ovCRfv1M"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="variables_set" id="YY_aE0gJG2}tkTWXn9U_"> <field name="VAR" id="qyH7wq!-AOqe;Qn?*$Gv">5Min</field> <value name="VALUE"> <block type="logic_boolean" id="R8UDaE+rD%`FdX-B]h({"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_cleartimeout" id="mR.h{lWQ*@vbf?cKPc|B"> <field name="NAME">Timer1</field> <next> <block type="controls_if" id="jdZ#9-?#2,uM|0rOZ.f["> <value name="IF0"> <block type="logic_compare" id="kCw4.M:y@Va*xw7G`|+;"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="1E,MF]#w+WD|*6H!JPRc"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="vHPo`yGUH}=u]EG%++P#"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_settimeout" id="oo/O`w1ZsesGO]icT}AR"> <field name="NAME">Timer1</field> <field name="DELAY">5</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="variables_set" id="i~$Fw}}{Nul/|Y4r|^]f"> <field name="VAR" id="qyH7wq!-AOqe;Qn?*$Gv">5Min</field> <value name="VALUE"> <block type="logic_boolean" id="(_kkv=vlk^kTZh~Id``1"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="procedures_callnoreturn" id="v5#2OA-d8k6RqoKQz:y`"> <mutation name="pruefex2"> <arg name="value_x2"></arg> </mutation> <value name="ARG0"> <block type="get_value" id="KGEORwpvzoO4.j12dPJT"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.test.x2</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="wai*:bt|e9q(lAxJM`a_"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="=/!kt2t]ElWK9maLUztN"> <field name="oid">0_userdata.0.test.x2</field> </shadow> </value> <statement name="STATEMENT"> <block type="procedures_callnoreturn" id="21@Y/BL:gABG4mapP/)G"> <mutation name="pruefex2"> <arg name="value_x2"></arg> </mutation> <value name="ARG0"> <block type="on_source" id="?7(5#`WG{#YXB%WaU74e"> <field name="ATTR">state.val</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> <block type="procedures_defnoreturn" id="*W|1t#%2V5b_nS=#HxJ9" x="488" y="-162"> <mutation> <arg name="value_x2" varid="c)53FM(#B:Y8tLluj7R$"></arg> </mutation> <field name="NAME">pruefex2</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="debug" id="WDygLdRg|(8i;BQWvUvR"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="uA0v_VPCj:mQ-0a;qNig"> <field name="TEXT">X2 Wurde geschltet auf </field> </shadow> <block type="text_join" id="QX9Iwnb{`k!b))9!2dPu"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="0KUyAetb|p,kj_7Hccc+"> <field name="TEXT">X2 auf </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="8xz=_N*rz/Y+kZ%v~Y?F"> <field name="VAR" id="c)53FM(#B:Y8tLluj7R$">value_x2</field> </block> </value> </block> </value> <next> <block type="timeouts_cleartimeout" id="5zO];g+_5U`2h(I@2ncl"> <field name="NAME">Timer2</field> <next> <block type="controls_if" id="H7_oemVk_S+G]SXrjC|B"> <value name="IF0"> <block type="logic_operation" id="JM%+9${v_@7J^a$_7NMH"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="*Bp!z}c68`wx=prHp{)M"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="rFZyNB6uz9Ht]MOjK/r4"> <field name="VAR" id="c)53FM(#B:Y8tLluj7R$">value_x2</field> </block> </value> <value name="B"> <block type="logic_boolean" id="c]f9FE`a2KN#CW2hlfk;"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="[7a~rI3zgMIU]Xt%9NW;"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="/^s{NjlA?et)bx`?|zF1"> <field name="VAR" id="qyH7wq!-AOqe;Qn?*$Gv">5Min</field> </block> </value> <value name="B"> <block type="logic_boolean" id="3}~2dDE=Kn9?t+TQ(@gy"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_settimeout" id="qmcn.*U%kAOcz,WRN91,"> <field name="NAME">Timer2</field> <field name="DELAY">3</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="debug" id="Z14OvO~D^,Mqz-8B%;ir"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="]T6$/aN1yu0Ht.RQ(UE{"> <field name="TEXT">Jetzt Anruf</field> </shadow> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </xml>
Ich hab es noch mal überarbeitet, hatte nicht gelesen, das X2 aus sein soll.
Ich hab nur in der Funktion die Abfrage value_x2= von true auf false geändert.
Jetzt hats du ja zwei beispiele, viel Spaß. -
@plchome-0
Vielen Dank für deine Mühen.Ich habe da noch einen Wurm drin, ich pfusche mal ein wenig rum…
-
@ewc Mach mal
-
@plchome-0
Servus....
Also, ich bekomme das Script ums Verrecken nicht zum Laufen.
Erste Konfiguration war ein Pi4-8GB, "Buster", interne Pullups auf GPIO16 und 26... kein Anruf, schlechte/unzureichende GPIO Umschaltung true/false visaverse.
Externe PullUps (10k) das gleiche Schauspiel.
Anderen Pi, auch 4 und 8GB genommen, keine Änderung.
Gestern neues OS aufgesetzt (Bookworm), da scheitert es dann mit der Installation von Asterisk. (haha)Meine Frau fragt mich schon, wie weit ich bin, worauf ich antworte: ich bin nahe der Verzweiflung
ich setze nochmal Buster auf -(
-
@ewc sagte in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
Servus....
Also, ich bekomme das Script ums Verrecken nicht zum Laufen.
Erste Konfiguration war ein Pi4-8GB, "Buster", interne Pullups auf GPIO16 und 26... kein Anruf, schlechte/unzureichende GPIO Umschaltung true/false visaverse.
Externe PullUps (10k) das gleiche Schauspiel.
Anderen Pi, auch 4 und 8GB genommen, keine Änderung.
Gestern neues OS aufgesetzt (Bookworm), da scheitert es dann mit der Installation von Asterisk. (haha)Uff, jetzt bin ich verwirrt.
Am besten fangen wir mal vorne an.
Kannst du den Status in den Objekten sehen?
Kannst du den Anruf über die Objekte ohne Script absetzen? -
Moin
Vorab nochmals herzlichen Dank für deine Unterstützung!!!über Objekte Anrufe abzusetzen ging problemlos.
Auch über einen GPIO den Anruf auszulösen ging halbwegs erfolgreich.
Das Script von Dir habe ich gar nicht zum Laufen gebracht.
Da die beiden GPIO´s auch nicht zuverlässig "gearbeitet" haben, habe ich einen Versuch über externe PullUp´s versucht. Ging auch nicht zufriedenstellend. Der Austausch des Raspi Boards brachte keine Besserung.
Der Ratschlag von vorne anzufangen ist daher nicht schlecht.
Was meinst Du, welches OS ich nutzen sollte.
Buster habe ich noch beide Versionen (lite und desktop), damit würde auch die Asterisk Installation wie hier im Thread aufgezeigt funktionieren. Bei Bookworm müsste die Installation über die tar.gz gehen.
Blöde Frage: welches OS würdest Du mir empfehlen?
Dann setze ich neu auf und wir sehen weiter -
@ewc sagte in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
Blöde Frage: welches OS würdest Du mir empfehlen?
Oh sorry, da bin ich der Falsche...
Ich hab einen NUC mit Debian und dadrauf 14 Docker Container ... Einer davon hat den Namen ioBroker
Davor hatte ich einen PI4 mit Raspian und einen Docker Container mit Raspian ...
Mit Gipos hab ich noch nie was gemacht, da ich eine SPS habe. Sorry -
Ich teste mal mit Bookworm und schaue als erstes aufs GPIO Verhalten im ioBroker
wenn das anständig funtioniert nehme ich mal die aktuelle Asterisk Version.
Vielleicht kriege ich es ja noch gebacken -
Moin Moin...
sodele, nach unzähligen Installationen unterschiedlichster OS Versionen und weiteren "Versuchen" ein einwandfrei lauffähiges Asterisk auf die Platine zu bekommen, bin ich nun weiter.
Sowohl GPIO´s, als auch Asterisk machen dann endlich, was sie sollen.
Dein Script ist klasse, wobei ich einen Knoten im Kopf habe, worüber darin der Anruf ausgelöst wird!? -
@ewc Das fehlt da ... Das musst du selber dazu dichten. Die Stelle ist aber ersichtlich, da wird jetzt Anruf in das Log geschrieben.
Für den Anruf musst den Text un, Telefonnummer setzen und das Objekt mit true beschreiben.
Am besten kann man das dirket in den Objekten testen. -
@plchome-0
Moin Moin... ich habs mittlerweile "gepeilt" und bin auf dem Durchbruch zur Raketentechnik^^Alarmierung, Gartenbeleuchtung und auch externe Abschaltung durch die vis (z.B. Alarmanlage vom Haus scharf, aber Gärtner im Garten) funzt nun einwandrei. Ein Manko ist noch die zeitliche Verzögerung (Timer) für die Alarmauslösung, für die ich mir noch eine intelligentere Logik einfallen lassen muss.
Aktuell versuche ich mich mit DTMF zur Anrufquittierung, sodass ich eine Schleife auf mehrere Nummern stoppen kann
-
@ewc sagte in IoBroker und VOIP / SIP Calls mit Asterisk + Fritzbox:
bin auf dem Durchbruch zur Raketentechnik^^
-
Zur Info für Nutzer einer aktuellen RaspberryPi OS Version / Debian 12 und Asterisk. Nachdem Asterisk unter Debian 12 aus den Paketquellen geflogen ist, bleibt nur ein selbst kompilieren. Über nachfolgende Anleitung lässt sich eine lauffähige Version (16.30.1) erzeugen, die mit dem iobroker-asterisk kompatibel ist. Tests mit neueren Versionen (20.5) waren jedoch nicht erfolgreich (Manager zwar verbunden, jedoch Fehlermeldung beim Aufruf der Call-Funktion). Der Asterisk-Adapter sollte zudem aus den Github-Quellen installiert werden, da nur dort Änderungen vorhanden sind, die in der npm-Version fehlen. Konfiguration nach Installation wie in der Adapter-Doku beschrieben. Noch ein Hinweis: Weitere Updates für die 16er Version sind nicht zu erwarten, die letzte Änderung ist von Mitte 2023. Ich teste ggf. noch die 18er-Version, diese wird bis 2025 unterstützt.
Anleitung Asterisk unter Debian 12 Bookworm:
-
@plchome-0
Moin Moin... habs dank Dir incl. Vis Steuerung und RFID-Leser für den Hausmeister gerockt bekommen!Jetzt suche ich mir einen Ast, wie ich nacheinander oder von mir aus auch gleichzeitig mehrere Nummern anrufen kann
-
Moin
der Thread ist zwar schon alt, aber vielleicht findet sich ja ein asterisk Profi der mir helfen kann.
Ich habe den iobroker asterisk adapter auf einem anderen host wie den asterisk server und alles entsprechend https://github.com/schmupu/ioBroker.asterisk/blob/master/docs/SSH_DE.md eingerichtet.
Der iobroker meldet sich korrekt am remote asterisk an und schickt auch via ssh/scp die generierten audio files rüber.
Leider scheint dort irgend was mit er Konfiguration schief zu laufen.
Der asterisk adapter im iobroker meldet dann "Originate failed:
Error while dialing (1). Error: {"response":"Error","actionid":"ee1bb6cf-1fe7-80ae-252c-8ba913a0d052","message":"Originate failed"}, Result: {"parameter":{"callerid":"**620","telnr":"017643282951","text":"Hallo!","extension":"Smarthome","audiofile":"/tmp//audio_1234","delete":"delete"},"options":{"action":"originate","channel":"SIP/Smarthome/1234","context":"ael-ansage","exten":"1234","priority":1,"timeout":60000,"variable":{"repeat":5,"file":"/tmp//audio_1234","del":"delete"},"callerid":"**620"},"guid":"ee1bb6cf-1fe7-80ae-252c-8ba913a0d052","result":{"response":"Error","actionid":"ee1bb6cf-1fe7-80ae-252c-8ba913a0d052","message":"Originate failed"}}
Der asterisk sagt im debug mode dies:
asterisk -rvvvvv Asterisk 18.24.3, Copyright (C) 1999 - 2022, Sangoma Technologies Corporation and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 18.24.3 currently running on mediau (pid = 8597) mediau*CLI> core set debug 10 Core debug was OFF and is now 10. == Manager 'manager' logged on from 10.0.0.3 [Sep 21 13:23:14] WARNING[8682]: channel.c:6332 request_channel: No channel type registered for 'SIP' -- Executing [failed@ael-ansage:1] Answer("OutgoingSpoolFailed", "") in new stack -- Executing [failed@ael-ansage:2] Wait("OutgoingSpoolFailed", "1") in new stack -- Executing [failed@ael-ansage:3] Read("OutgoingSpoolFailed", "dtmf,/tmp//audio_1726924993523&beep,0,s,5,1") in new stack -- Executing [failed@ael-ansage:4] GotoIf("OutgoingSpoolFailed", "0?5:6") in new stack -- Goto (ael-ansage,failed,6) -- Executing [failed@ael-ansage:6] NoOp("OutgoingSpoolFailed", "Finish if_ael-ansage_1") in new stack -- Executing [failed@ael-ansage:7] Hangup("OutgoingSpoolFailed", "") in new stack == Spawn extension (ael-ansage, failed, 7) exited non-zero on 'OutgoingSpoolFailed' -- Executing [h@ael-ansage:1] GotoIf("OutgoingSpoolFailed", "1?2:4") in new stack -- Goto (ael-ansage,h,2) -- Executing [h@ael-ansage:2] NoOp("OutgoingSpoolFailed", "/bin/rm /tmp//audio_1726924993523.*") in new stack -- Executing [h@ael-ansage:3] System("OutgoingSpoolFailed", "/bin/rm /tmp//audio_1726924993523.*") in new stack -- Executing [h@ael-ansage:4] NoOp("OutgoingSpoolFailed", "Finish if_ael-ansage_2") in new stack -- Executing [h@ael-ansage:5] SayDigits("OutgoingSpoolFailed", "") in new stack -- Executing [h@ael-ansage:6] NoOp("OutgoingSpoolFailed", "Finish if_ael-ansage_1") in new stack -- Executing [h@ael-ansage:7] Hangup("OutgoingSpoolFailed", "") in new stack == Spawn extension (ael-ansage, h, 7) exited non-zero on 'OutgoingSpoolFailed'
ich habe keine Ahnung was der Asterisk Channel ist, der hier fehlt.
Meine sip.com
[general] ; Do not change port = 5060 ; Do not change bindaddr = 0.0.0.0 ; Do not change context = default ; Do not change subscribecontext = default ; Do not change register => 62162162:pw****@10.0.0.1/1000 ; Username, Password and IP address of Fritzbox WLAN/LAN telephone [62162162] ; Change to username of Fritzbox WLAN/LAN telephone type = friend ; Do not change username = 62162162 ; Change to username of Fritzbox WLAN/LAN telephone host = 10.0.0.1 ; Change hostname / IP address of Fritzbox secret = pw****** ; Change password of Fritzbox WLAN/LAN telephone fromdomain = 10.0.0.1 ; Change hostname / IP address of Fritzbox fromuser = 62162162 ; Change username of Fritzbox WLAN/LAN telephone context = default
der 62162162 ist der username des SIP accounts in meine Fritzbox
extentions.ael ist die oben beschrieben datei:context default { 1000 => { Goto(ael-antwort,s,1); } } context ael-ansage { _. => { Answer(); Wait(1); Read(dtmf,${file}&beep,0,s,${repeat},1); if ("${dtmf}" != "") { SayDigits(${dtmf}); } Hangup(); } h => { if ("${del}" = "delete") { NoOp(/bin/rm ${file}.*); System(/bin/rm ${file}.*); } } } context ael-antwort { s => { Answer(); Wait(1); Set(repeat=5); Read(dtmf,/tmp//asterisk_dtmf&beep,0,s,${repeat},1); if ("${dtmf}" != "") { SayDigits(${dtmf}); } Hangup(); } _. => { Goto(ael-antwort,s,1); } }
Die extenstions.conf ist der standard den die 1000 definiert
... exten => 1000,1,Goto(default,s,1) ...
Irgend wie scheint in der asterisk config was faul zu sein.
Kann jemand helfen?
Lieben Dank
Stefan -
@stefanried
the issue is resolved.
There was something wrong with files in the /etc/asterisk folder.Der folder stammt aus einer aktuellen 18.24.3 installation.
Auf einem älteren iobroker war ein asterisk 16.2.1 mit dem es lief.
Ich habe einfach alle files aus dem /etc/asterisk von der alten version auf die neu installiert und siehe da. das Problem war weg.