Skip to content

[DE] Konfigurationsdatei

motom001 edited this page Dec 30, 2014 · 2 revisions

Konfiguration mit Konfigurationsdatei

Beim Start von DoorPi ist der Parameter --configfile erforderlich und muss mit absoluten Pfad auf eine Konfigurationsdatei verweisen. Wenn dieser Parameter fehlt, oder die Konfigurationsdatei nicht lesbar ist, wird DoorPi mit entsprechender Fehlermeldung beendet.

Konfigurationsdatei

DoorPi wird über eine Konfigurationsdatei nach dem Schema einer Windows-INI-Datei konfigurtiert. Es gibt Sektionen und Parametern. Sektionen sind von [ und ] eingeschlossen. Parameter bestehen aus einem Schlüssel und einem Wert, getrennt von einem Gleichheitszeichen "=" Beispiel:

[Sektionsname]
Schlüssel1 = Wert1
Schlüssel2 = Wert2

[Sektion2]
Schlüssel = Wert mit Sonderzeichen (; - . +) und [ sowie ]

Die Konfigurationsdatei besteht aus den optionalen und erforderlichen Abschnitten und manche Abschnitte können optionale Schlüssel enthalten. Alle optionalen Sektionen und Schlüssel werde ich in diesem Wiki kursiv markieren.

Sektionen werden in der Überschrift h2 (Beispiel) und Schlüssel in h3 (Beispiel) dargestellt.

In der Konfigurationsdatei wird (neben der Grundkonfiguration) festgelegt, wie (= Aktionen) auf Ereignisse (= Events) reagiert werden soll.

####Übersicht der erforderlichen Sektionen

  • DoorPi** (Grundkonfiguration DoorPi selbst)
  • InputPins (Eingangskanäle, z.B. Klingeltaster)
  • SIP-Phone (VoIP Kommunikationskanal zu den Telefonen)

####Übersicht der optionalen Sektionen

  • OutputPins (Ausgangskanäle, z.B. Türöffner)
  • AdminNumbers (Telefonnummern die als Admin interpretiert werden = vertrauenswürdige Telefonnummern)
  • DTMF (DTMF = Mehrfrequenzwahlverfahren = Telefontaste drücken um Aktionen auszulösen, z.B. Türöffner betätigen wenn # gedrückt wird)
  • SMTP (SMTP = Simple Mail Transfer Protocol = Konfiguration, wenn E-Mail-Versand genutzt werden soll, z.B. Aktion mailto:)

####Sektionen für Events (immer optional) Es gibt innerhalb von DoorPi verschiedene Events, auf die reagiert werden kann. Um ein Event zu nutzen und Aktionen zu hinterlegen reicht es aus, eine Sektion mit dem Namen des Events einzutragen. Die dazugehörigen Schlüssel dienen der Sortierung beim Ausführen und die Werte enthalten Aktionen, die seriell abgearbeitet werden. Beispiel für das Event OnCallIncomming:

[OnCallIncomming]
10 = mailto:[email protected],Incoming call from !remote_uri!,DoorPi wurde von der Nummer !remote_uri! angerufen.
20 = sleep:1

Das Event OnCallIncomming ruft also 2 Aktionen nacheinander auf. Zuerst wird eine Mail an [email protected] versendet und danach wird 1 Sekunde gewartet.

  • OnStartup (DoorPi wird gestartet, reagiert aber noch nicht auf InputPins)
  • BeforeKeyPressed (es wurde ein Signal von einem InputPin erkannt aber noch keine dafür definierte Aktion ausgeführt)
  • AfterKeyPressed (es wurde ein Signal von einem InputPin erkannt und alle dafür definierten Aktion ausgeführt)
  • OnShutdown (DoorPi wird gestoppt, reagiert schon nicht mehr auf InputPins)
  • OnCallMediaStateChange (MediaState von pjsua hat sich während eines Telefonats geändert - wird vermutlich nicht benötigt)
  • OnCallStateChange (der Status eines Telefonats hat sich geändert, z.B. calling zu connected)
  • OnCallStateConnect
  • AfterCallStateConnect
  • OnCallStateDisconnect
  • AfterCallStateDisconnect
  • OnDTMFAction
  • BeforeCallIncoming
  • OnCallReconnect
  • AfterCallReconnect
  • AfterCallBusy
  • OnCallIncomming
  • AfterCallIncomming
  • OnCallReject
  • AfterCallReject

[SIP-Phone]

Einstellung die den SIP-Server beschreiben. Das kann entweder ein lokaler (z.B. Asterisk) oder ein entfernter (z.B. FritzBox) sein. Wie eine Fritzbox dafür genutzt werden kann findet man hier: http://avm.de/nc/service/fritzbox/fritzbox-7490/wissensdatenbank/publication/show/42_IP-Telefon-an-FRITZ-Box-anmelden-und-einrichten/

Es können folgende Sektionen und Parameter vorhanden sein (kursiv = optional):

sipphonetyp

Aktuell baut DoorPi nur auf dem Modul pjsua auf und somit ist "pjsua" auch der einzige mögliche Parameter. Zukünftig können hier weitere Auswahlmöglichkeiten kommen. Mehr Infos zu pjsua gibt es hier: http://www.pjsip.org/pjsua.htm

server

Der SIP-Server (idealerweise die IP-Adresse)

username

Der Benutzername um sich am SIP-Server anzumelden.

password

Das Passwort für die Anmeldung am SIP-Server.

realm

Der Domänenname des SIP-Servers.

[DTMF]

Mit Hilfe von DTMF (Mehrfrequenzwahlverfahren) ist es möglich, während eines Gespräches Aktionen auszulösen. Beispiel: An der Türsprechanlage drückt jemand den Klingelknopf. Darauf hin klingelt das Telefon und beim Abheben wird eine Gesprächsverbindung zwischen Türsprechanlage und Telefon hergestellt. Wenn jetzt am Telefon die Taste # gedrückt wird, soll der automatische Türöffner betätigt werden. Das Drücken der Taste # wird mittels DTMF realisiert und von DoorPi ausgewertet.

Ein Parameter sollte nicht in anderen Parametern vorkommen. Wenn z.B. # zum Öffnen der Tür genutzt wird, sollten die anderen Parameter keine # enthalten (z.B. *#01# wird dann zweimal den Türöffner betätigen).

Es gibt folgende Konfigurationsmöglichkeiten:

restart

Starte den Dienst DoorPi neu ('sudo /etc/init.d/doorpi restart'). Beispiel *7378278 steht für T9-Schreibweise von *restart

reboot

Starte den Server neu ('sudo reboot') Beispiel *732668 steht für T9-Schreibweise von *reboot

out:[output_key],[start_value],[end_value],[timeout]

Die letzte Konfigurationsmöglichkeit ist z.B. für den Türöffner geeignet. Mit der Zeile: "#" = out:6,1,0,3 wird folgendes erreicht: Warte auf DTMF # und steuere Output-Pin 6 von Wert 1 auf Wert 0 und warte dazwischen 3 Sekunden. Es wird also der elektrische Türöffner für 3 Sekunden betätigt.

[InputPins]

Welche Tasten gibt es und welche Funktion haben diese. Die Inputpins werden beim Start von DoorPi geprüft. Wenn eine Abfrage des Status nicht möglich ist (z.B. Fehlkonfiguration von GPIO oder außerhalb des Bereiches bei PiFace) wird DoorPi mit einer Fehlermeldung beendet. Für PiFace gibt es InputPins 0 bis 7. Für GPIO müssen die Pins eingetragen werden, z.B. Pin 11 ist GPIO 17. Also muss auch die 11 eingetragen werden. Es gibt als Parameter:

break

Stoppt DoorPi (egal ob als Anwendung oder als Dienst)

call:[PhoneNumber]

Rufe die angegebene Nummer an. Dabei muss es sich um eine Nummer handeln, die der SIP-Server erreichen kann. Somit können unter Umständen auch die internen Telefonnummern angerufen werden (z.B. **610 bei FritzBox).

[OutputPins]

Welche Ausgänge gibt es und welche Funktion haben diese. Die Outputpins werden beim Start von DoorPi geprüft. Wenn eine Abfrage des Status nicht möglich ist (z.B. Fehlkonfiguration von GPIO oder außerhalb des Bereiches bei PiFace) wird DoorPi mit einer Fehlermeldung beendet.

Die Vergabe eines Namens ist optional und kann frei gestaltet werden. Der Name dies Outputpins wird in der Logdatei ausgegeben, wenn der Ausgang angesteuert wird und kann so zur Nachverfolgung im Fehlerfall oder zur Auswertung genutzt werden.

[DoorPi]

DoorPi ist (noch) eine Sammlung von Konfigurationsparametern, die ich keinem anderen Bereich zuordnen konnte. Parameter sind:

is_alive_led

Bestimmt einen Ausgang (der auch bei Outputpins definiert sein muss) der im Sekundentakt blinkt und somit anzeigt, dass DoorPi noch aktiv ist.

dialtone

Ein optionaler Wählton, der an der Türstation gespielt wird, nachdem ein Klingelknopf gedrückt wurde und während das Telefon noch klingelt. Das Abspielen Wird sofort beendet, wenn ein Gespräch zu Stande kommt.

Leer lassen damit kein Ton abgespielt wird. Beliebigen gültigen Pfad zu einer Datei eintragen, die als Wählton genutzt wird. Wenn diese Datei nicht existiert, wird eine Wählton-Datei erzeugt und genutzt.

records

Ein optionaler Parameter zu einem gültigen Dateinamen, unter dem die Gespräche aufgezeichnet werden. Wenn der Parameter leer ist, werden keine Gespräche aufgezeichnet. Der Parameter wird zur Erstellung der Record-Datei mit strftime geparst und kann somit z.B. folgende Platzhalter enthalten:

  • %Y - Jahr vierstellig
  • %m - Monat zweistellig
  • %d - Tag zweistellig
  • %H - Stunde im 24-Stundenformat
  • %M - Minute zweistellig
  • %S - Sekunde zweistellig

Zusätzlich gibt es den Platzhalter %LastKey%, der durch die Pin-Nummer ersetzt wird, die gedrückt wurde. So lässt sich erkennen, wann wo geklingt wurde. Zusätzlich sind diese Angaben natürlich auch in der Log-Datei zu finden.

Mehr Platzhalter unter: https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

record_while_dialing

Ein optionaler Parameter der true oder false annehmen kann. Bei true wird die Aufnahme von records bereits mit dem Drücken der Klingeltaste gestartet. Bei False wird erst begonnen, wenn das Gespräch hergestellt wurde. Beides natürlich nur, wenn records überhaupt gesetzt ist.

[AdminNumbers]

Unter AdminNumbers sind Telefonnummern ausgeführt, die den DoorPi anrufen können. DoorPi kann im SIP-Server eine Telefonnummer zugewiesen werden, die entweder von intern oder von extern angerufen werden kann. Nur Telefonnummern, die hier aufgelistet sind und den Wert "activ" haben, werden auch wirklich durchgestellt. Alle anderen Nummern werden abgewiesen. Somit kann ich z.B. vom Handy aus die Türsprechanlage anrufen und "hören" was da los ist. An der Türsprechanlage wird keine separate Benachrichtigung ausgegeben, die anzeigt, dass eine Verbindung hergestellt wurde. Es ist also eine Art Bybyphone-Modus.

Beispieldatei

Ein immer aktuelles Beispiel ist hier zu finden: https://github.com/motom001/DoorPi/blob/master/conf/doorpi.cfg