Hotdesking Manager

Der Hotdesking Manager (HDM) ist ein Programm, um eine automatische Hotdesking Lösung für Innovaphone Telefonanlagen abzubilden. Dabei werden die Registrierungen von definierten Userobjekten überwacht und anschließend in Abhängigkeit der Konfiguration automatisch an Endgeräten abgemeldet.

Grundsätzlich ist der HDM ein zentrale Server in einer von mehreren Betriebsarten, der einerseits Zugriff auf die PBX hat, andererseits Zugriff auf alle Telefone haben muss, die sich mit dieser PBX regisrieren und der HDM ggf. HTTP Requests schicken können muss.

Eine HDM Instanz stellt dabei eine Funktion für eine PBX für eine Gruppe von Nutzern da. Ist der Betrieb an mehreren PBXen gewünscht, oder innerhalb einer PBX Gruppen mit Unterschiedlicher Betriebsart gewünscht, können mehrere Instanzen parralel gestartet werden.

../../../../../_images/hotdeskingmanager.png

Voraussetzungen

Docker Host

  • Docker >= 1.13

  • docker-compose >= 1.17

oder

  • VoipioOS

PBX

  • Innovaphone PBX >= V10

  • Zugriff via 192.168.178.71 über HTTPS Port 443

  • Zugriff mit Username admin und Password pbx_admin_password, readonly reicht.

  • Name der PBX PBX-Master

  • Name der Gruppe der zu überwachenden Userobjekte HOTDESKING

Telefone

  • Zugriff über IP des Telefons über HTTPS Port 443

  • Zugriff auf PBX mit Username phoneadmin und Password passwordwebinterface, volle Admin Berechtigung nötig.

Betriebsarten

Classic

Meldet sich ein Nutzer an einem Telefon an, ohne sich vorher an einem vorherigem Telefone abzumelden, werden automatisch seine anderen Registrierungen gelöscht.

  • der HDM läd alle Registrierungen an der PBX über https via HOTDESKING_PBX_HOST

  • der HDM läd die Liste der Userobjecte in der Gruppe HOTDESKING_PBX_GROUP der PBX HOTDESKING_PBX_NAME

  • der HDM sucht Userobjecte mit mehr als einer Registrierung.

  • hat ein Userobject mehrere Registrierungen, werden alle Registrierungen bis auf die jüngste gelöscht.

Time

Alle Registrierungen von Nutzern werden zu einer bestimmten Tageszeit gelöscht.

  • Der HDM pollt die PBX und sucht Userobjekte mit mehr als einer Registrierung.

  • Ist ein Nutzer zu der konfigurierten Zeit an einem Endgerät angemeldet, wird er dort abgemeldet.

Installation

erstellen des Installationsordner (der Ordnername wird Bestandteil der Containernamen):

mkdir hotdeskingmanager

in den Installationsordner wechseln:

cd hotdeskingmanager

erstellen der Datei docker-compose.yml mit bspw. nano (Speichern mit STRG-x und STRG-y):

nano docker-compose.yml

anschließen sieht die docker-compose.yml so aus:

version: '3.1'
services:
   master:
       image: tri2/hotdeskingmanager:latest
       ports:
           - 1700:80
       restart: always
       environment:
           - HOTDESKING_PBX_HOST=192.168.178.71
           - HOTDESKING_PBX_PORT=443
           - HOTDESKING_PBX_HTTP_USER=admin
           - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
           - HOTDESKING_PBX_NAME=PBX-Master
           - HOTDESKING_PBX_GROUP=HOTDESKING
           - HOTDESKING_ENDPOINT_USER=phoneadmin
           - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface

       volumes:
           - ./data/master/hotdesking/:/data/:rw

Konfiguration und Parameter

Die gesamte Konfiguration des HDM geschieht über Umgebungsvariablen im resultierendem Container. mit dem Vorteil, das mehrere Instanzen über eine docker-compose.yml erstellt werden können oder über einen Docker swarm via Stack verteilt werden können.

Pflichtparameter

Hostname oder IP Adresse der PBX:

HOTDESKING_PBX_HOST=pbx.example.com
HOTDESKING_PBX_PORT=443

Zertifikat der PBX, um die TLS Verbindung zu verifizieren. Derzeit unbenutzt:

HOTDESKING_PBX_HTTP_CERTIFICATEFILE=

Username und Passwort um auf die PBX zuzugreifen. Benötigt nur lesenden Zugriff.:

HOTDESKING_PBX_HTTP_USER=admin
HOTDESKING_PBX_HTTP_PASSWORD=ipva

Der Name der PBX in dem sie die Gruppe HOTDESKING_PBX_GROUP befindet (PBX-Master, Slave-Sindelfingen):

HOTDESKING_PBX_NAME=PBX-Master

Name der Gruppe der zu überwachenden Userobjekte. Bei mehreren Instanzen (classic und gleichzeitig time) empfiehlt es sich für die time Gruppe bspw. HOTDESKINGTIME zu wählen.:

HOTDESKING_PBX_GROUP=HOTDESKING

Zugangsdaten auf das Webinterface der Telefone/Endgeräte. Es muss überall der gleiche Nutzer vorhanden sein.:

HOTDESKING_ENDPOINT_USER=admin
HOTDESKING_ENDPOINT_PASSWORD=ip222

Betriebsart

die Parameter in HOTDESKING_MODUS widersprechen sich, wenn beide gewählt. Der letzte gewinnt. Bitte eine zweite Instanz konfigurieren.

classic (Standart, maximal 1 Registrierung pro Nutzer ):

HOTDESKING_MODUS='classic'

time (alle Registrierungen werden an Uhrzeit abgemeldet):

HOTDESKING_MODUS='time'

Ist Betriebsart time gewählt, ist dies der Zeitpunkt in HH:MM, an dem Telefone abgemeldet werden:

HOTDESKING_TIME_SCHEDULE='00:00'

optionale Parameter

Interval in Sekunden in dem die PBX gepollt wird nach Registrierungen und Usern. Im classic Modus die Zeit, bis merkt wird, ob ein User eine zweite, neue Registrierung eröffnet hat.:

HOTDESKING_INTERVAL=60

Logfile Einstellungen, siehe https://docs.python.org/3/library/logging.html:

HOTDESKING_LOGLEVEL=20
HOTDESKING_LOGFORMAT="%(asctime)s %(name)-12s %(levelname)-8s %(message)s"

Pfad innerhalb des Containers. Pfad auf dem Host ergibt sich aus der volumes Einstellung in der docker-compose.yml:

HOTDESKING_LOGFILE=/data/hotdeskingmanager.log

max. Größe einer Logdatei:

HOTDESKING_LOGFILE_SIZE=1000000

Anzahl an historischen, rollenden Logdateien:

HOTDESKING_LOGFILE_BACKUPCOUNT=2

nicht benutzt derzeit, mal gedacht, um das eigene Log wohin zu melden:

HOTDESKING_SYSLOG_HOST=
HOTDESKING_SYSLOG_UDPPORT=0

Wichtig für den betrieb von Telefonen mit Softwarestand <= Innovaphone V10. Änderung im WebInterface ab V11. Parrallelbetrieb von <= 10 und >=11 Endgeräten nicht möglich. Dazu jeweils getrennte Instanzen anlegen.:

HOTDESKING_LEGACY_V10_ENDPOINT=false

Webinterface

Jede HDM Instanz hat eine eigene Weboberfläche. Der HTTP Port über den sie erreichbar ist hängt von der Konfiguration in der docker-compose.yml ab. Im Standart ist es 1700. Damit die Oberfläche leichter via Reverse Proxy einbinden kann in eine Oberfläche, ist der Webroot auf /hotdesking eingestellt. Die Anmeldedaten lauten im Standart User admin und Passwort hotdesking.

Webinterface Passwort ändern

Beim ersten Start desContainers wird eine Datei mit Standart Zugangsdaten erstellt. Das Paswort für das Webinterface wird aus Sicht des Containers in der Datei /data/ssl/passwd.digest. Diese findet sich über das Sharing zwischen Host und Container im Installationsordner ebenfalls unter ./data/. Erzeugen sie ein neues Password mit dem Befehl htpaswd:

htpasswd /data/ssl/passwd.digest <username> <pass>
htpasswd /data/ssl/passwd.digest admin neuespasword

Das Programm htpasswd ist im HDM Container installiert, der Aufruf lautet entsprechend:

docker-compose exec <containername> htpasswd /data/ssl/passwd.digest <username> <pass>
docker-compose exec master htpasswd /data/ssl/passwd.digest admin neuespasword

Beim nächsten Start des Containers wird die Änderung übernommen.:

docker-compose down && docker-compose up -d --build

Beispiele

Time Modus an einer PBX

Alle Nutzer in der PBX PBX-Master in der Gruppe HOTDESKING werden um 23:00 abgemeldet:

version: '3.1'
services:
   master:
       image: reg.cloud.trizwo.it/hdm/hotdeskingmanager:amd64-latest
       ports:
           - 1700:80
       restart: always
       environment:
           - HOTDESKING_PBX_HOST=192.168.178.71
           - HOTDESKING_PBX_PORT=443
           - HOTDESKING_PBX_HTTP_USER=admin
           - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
           - HOTDESKING_PBX_NAME=PBX-Master
           - HOTDESKING_PBX_GROUP=HOTDESKING
           - HOTDESKING_ENDPOINT_USER=phoneadmin
           - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface
           - HOTDESKING_MODUS='time'
           - HOTDESKING_TIME_SCHEDULE='23:00'
       volumes:
           - ./data/master/hotdesking/:/data/:rw

Time Modus an Master und einer Slave PBX

Alle Nutzer in der PBX PBX-Master in der Gruppe HOTDESKING2300 werden um 23:00 abgemeldet, die in Berlin in Gruppe HOTDESKING2200 der PBX-Berlin schon um 22:00:

version: '3.1'
services:
  hamburg:
    image: reg.cloud.trizwo.it/hdm/hotdeskingmanager:amd64-latest
    ports:
      - 1700:80
    restart: always
    environment:
      - HOTDESKING_PBX_HOST=192.168.178.71
      - HOTDESKING_PBX_PORT=443
      - HOTDESKING_PBX_HTTP_USER=admin
      - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
      - HOTDESKING_PBX_NAME=PBX-Master
      - HOTDESKING_PBX_GROUP=HOTDESKING2300
      - HOTDESKING_ENDPOINT_USER=phoneadmin
      - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface
      - HOTDESKING_MODUS='time'
      - HOTDESKING_TIME_SCHEDULE='23:00'
    volumes:
      - ./data/hamburg/hotdesking/:/data/:rw

  berlin:
    image: reg.cloud.trizwo.it/hdm/hotdeskingmanager:amd64-latest
    ports:
      - 1701:80
    restart: always
    environment:
      - HOTDESKING_PBX_HOST=192.168.138.71
      - HOTDESKING_PBX_PORT=443
      - HOTDESKING_PBX_HTTP_USER=admin
      - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
      - HOTDESKING_PBX_NAME=PBX-Berlin
      - HOTDESKING_PBX_GROUP=HOTDESKING2200
      - HOTDESKING_ENDPOINT_USER=phoneadmin
      - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface
      - HOTDESKING_MODUS='time'
      - HOTDESKING_TIME_SCHEDULE='22:00'
    volumes:
      - ./data/berlin/hotdesking/:/data/:rw

Mischbetrieb Classic und Time Modus an einer PBX

Alle Nutzer in der Gruppe HOTDESKING2300 werden um 23:00 abgemeldet, die in Gruppe HOTDESKING haben max. eine Registrierung:

version: '3.1'
services:

  time:
    image: reg.cloud.trizwo.it/hdm/hotdeskingmanager:amd64-latest
    ports:
      - 1700:80
    restart: always
    environment:
      - HOTDESKING_PBX_HOST=192.168.178.71
      - HOTDESKING_PBX_PORT=443
      - HOTDESKING_PBX_HTTP_USER=admin
      - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
      - HOTDESKING_PBX_NAME=PBX-Master
      - HOTDESKING_PBX_GROUP=HOTDESKING2300
      - HOTDESKING_ENDPOINT_USER=phoneadmin
      - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface
      #  time
      - HOTDESKING_MODUS='time'
      - HOTDESKING_TIME_SCHEDULE='23:00'
    volumes:
      - ./data/time/hotdesking/:/data/:rw

  classic:
    image: reg.cloud.trizwo.it/hdm/hotdeskingmanager:amd64-latest
    ports:
       - 1701:80
    restart: always
    environment:
      - HOTDESKING_PBX_HOST=192.168.178.71
      - HOTDESKING_PBX_PORT=443
      - HOTDESKING_PBX_HTTP_USER=admin
      - HOTDESKING_PBX_HTTP_PASSWORD=pbx_admin_password
      - HOTDESKING_PBX_NAME=PBX-Master
      - HOTDESKING_PBX_GROUP=HOTDESKING
      - HOTDESKING_ENDPOINT_USER=phoneadmin
      - HOTDESKING_ENDPOINT_PASSWORD=passwordwebinterface
      # classic, the default, so can be left out, if not set to time
      - HOTDESKING_MODUS='classic'
    volumes:
      - ./data/classic/hotdesking/:/data/:rw