23.6. Gezielte Ansteuerung der LEDs
Wie man über Hints Extensions mit dem Status von SIP-Benutzern
verknüpfen kann, haben Sie schon gelernt. Zur Erinnerung:
extensions.conf | extensions.ael |
---|
exten => 21,hint,SIP/21 | hint(SIP/21) 21 => {} |
Tabelle 23.6. Hints für SIP-Benutzer
Seit Asterisk 1.6 kann man über Hints aber Extensions auch mit dem
Status von MeetMe
-Konferenzräumen verbinden:
extensions.conf | extensions.ael |
---|
exten => 881,hint,MeetMe:885
exten => 881,1,MeetMe(885) | hint(MeetMe:885) 881 => {
MeetMe(885);
} |
Tabelle 23.7. Hints für MeetMe-Konferenzräume
Der Hint im Beispiel oben schafft die Verknüpfung zwischen der
Extension 881
mit dem Status des
MeetMe
-Konferenzraums 885
. Die Nummern
sind hier mit Absicht unterschiedlich gewählt; in Wirklichkeit werden sie
häufig gleich sein. Man könnte jetzt am Telefon eine Taste mit der
Nebenstelle 881
belegen. Dann würde die LED den Status des
Konferenzraums anzeigen.
Das aber nur als kleiner Exkurs, da es gerade thematisch passt. Noch
interessanter ist, dass man ab Asterisk 1.6 über Hints Extensions auch mit
eigenen, „virtuellen Geräten“ assoziieren kann. Die
Schreibweise ist fast genauso:
extensions.conf | extensions.ael |
---|
exten => 99,hint,Custom:mein-status | hint(Custom:mein-status) 99 => {} |
Tabelle 23.8. Hints für virtuelle Geräte
Den Status dieser „Custom
Devices“ kann man ganz frei mit der Funktion
DEVICE_STATE()
[] von einer beliebigen anderen Stelle im Dialplan aus
festlegen.
Set(DEVICE_STATE(Custom:mein-status)=INUSE);
An ein Telefon, das den Status der Extension abonniert hat, wird
dann die jeweilige Benachrichtigung geschickt. Die möglichen Werte und die
übliche Anzeige am Telefon sind:
Wert | Bedeutung | LED[] |
---|
UNKNOWN | unbekannt, nicht angemeldet | aus |
UNAVAILABLE | nicht erreichbar | aus |
NOT_INUSE | frei | aus |
INUSE | im Gespräch | leuchtet dauerhaft |
BUSY | im Gespräch bzw. besetzt | leuchtet dauerhaft |
RINGING | klingelt | blinkt |
RINGINUSE | im Gespräch und klingelt (anklopfen) | blinkt |
ONHOLD | auf „halten“ | blinkt langsam |
INVALID | ungültig | aus |
Tabelle 23.9. Device States
Nach einem Restart von Asterisk, wenn der Status eines
Custom
-Devices noch
nicht gesetzt wurde, hat das Device initial den
Status UNKNOWN
.
Nachdem ein Telefon über die obige beispielhafte Extension
99
den Status von Custom:mein-status
abonniert
hat, kann man, um die Funktionsweise zu testen, den Wählplan z. B. um
folgenden Code erweitern:
hint(Custom:mein-status) 99 => {}
*91 => {
Set(DEVICE_STATE(Custom:mein-status)=RINGING);
}
*92 => {
Set(DEVICE_STATE(Custom:mein-status)=INUSE);
}
*93 => {
Set(DEVICE_STATE(Custom:mein-status)=NOT_INUSE);
}
*94 => {
if ("${DEVICE_STATE(Custom:mein-status)}" = "INUSE") {
Set(DEVICE_STATE(Custom:mein-status)=NOT_INUSE);
}
else {
Set(DEVICE_STATE(Custom:mein-status)=INUSE);
}
}
Nun können die verschiedenen Device-States getestet werden, z. B.
kann man die LED mit *91
blinken oder mit *92
dauerhaft leuchten lassen sowie mit *93
wieder deaktivieren
oder mit *94
abwechselnd an- und ausschalten. Ist die
Funktionsweise einmal sichergestellt, sind der sinnvollen (oder
unsinnigen) Anwendung dieses Features keine Grenzen mehr gesetzt; man
könnte damit z. B. anzeigen, ob man gerade als Mitglied in eine Queue
eingeloggt ist oder ob der Rasensprenger gerade läuft.
Natürlich taucht der Hint auch in der Ausgabe von
core show hints
zusammen mit den
anderen Hints auf:
*CLI> core show hints
-= Registered Asterisk Dial Plan Hints =-
99@test : Custom:mein-status State:InUse Watchers 0
21@interne-benutzer : SIP/21 State:Unavailable Watchers 0
22@interne-benutzer : SIP/22 State:Unavailable Watchers 0
----------------
- 1 hints registered
Hilfreich ist auch der CLI-Befehl devstate
list
, mit dem man den Status aller gesetzten
Custom
-Hints ausgeben kann:
*CLI> devstate list
---------------------------------------------------------------------
--- Custom Device States --------------------------------------------
---------------------------------------------------------------------
---
--- Name: 'Custom:mein-status' State: 'INUSE'
---
---------------------------------------------------------------------
---------------------------------------------------------------------
Mit devstate change
device
state
lässt sich der Status vom CLI
aus setzen:
*CLI> devstate change Custom:mein-status RINGING
Changing mein-status to RINGING
*CLI> devstate list
---------------------------------------------------------------------
--- Custom Device States -------------------------------------------
---------------------------------------------------------------------
---
--- Name: 'Custom:mein-status' State: 'RINGING'
---
---------------------------------------------------------------------
---------------------------------------------------------------------