Das Programm liest die von der Tk-Anlage über die V24-Schnittstelle ausgegebenen Gebührendaten und schreibt die aufgearbeiteten Daten in eine SQL-Datenbank. Ebenso wird für jeden Datensatz auch eine Meldung via syslog() ausgegeben. Die Verbindung zur Datenbank, die sich auch auf einem anderen Rechner im Netz befinden kann, wird automatisch bei Bedarf aufgebaut und, falls eine gewisse Zeit keine Einträge mehr eingefügt wurden, auch wieder abgebaut. Sollte die Datenbank genau zu dem Zeitpunkt wenn Daten eingefügt werden müssen, nicht erreichbar sein, schreibt das Programm die Daten in eine Datei. In regelmäßigen Abständen wird versucht, die Verbindung zum DBMS herzustellen. Sobald dies gelungen ist, werden die fehlenden Datensätze in die Tabelle geschrieben.
Zur Zeit unterstützte DMBS sind: PostgreSQL, mSQL und MySQL
Das Programm liest die Gebühreninformationen, die am Druckerausgang einer Ackermann Euracom 18{0,1,2} Tk-Anlange ausgegeben werden. Nachbauten der Anlage (z.B. QUANTE IS-{0,1,2}) werden ebenfalls unterstützt. Es können alle Firmware-Releases bis einschließlich 3.02d eingesetzt werden.
Der Druckerport der Anlage (bei F/W <= 1.11B ist das defaultmäßig der Port V24-2) muß mit einem freien RS232 Port des Rechners verbunden werden. Benutzen Sie ein Verbindungskabel bei dem die Leitungen RX, TX, DTR, DSR, RTS, CTS und GND 1:1 durchgeschaltet sind (kein Null-Modem Kabel!). Wenn Sie auf der sicheren Seite seien möchten, verwenden Sie ein 9-poliges 1:1 Kabel. Falls Ihr Rechner noch einen 25 polige DSub Anschluß hat, so benötigen Sie ein anderes Verdrahtungsschema. Ich verweise da auf das Kapitel PC/Drucker an den RS232-C Anschlüssen installieren (4.8) im Handbuch der Euracom-Anlage. Für den Eingang auf Seiten des PC reicht ein Port mit 82450, 8250 oder 16450 UART vollkommen aus. Auf der anderen Seite, wenn natürlich ein 16550A oder eine intelligente serielle Interfacekarte vorhanden ist -- umso besser. (Beachten Sie dazu bitte den Punkt Bugs).
Zusätzlich zu diesem Programm benötigen Sie noch folgende Software:
Nach dem Entpacken der Sourcen starten Sie ./configure
. Auf
jeden Fall muß der Parameter --with-area-code=x
angegeben
werden. Ersetzen Sie x durch Ihre Vorwahl (ohne die 0). Für eine Liste
aller unterstüzten Parameter rufen Sie ./configure
mit
--help
auf.
Werfen Sie danach einen Blick in das erzeugte Makefile
. Die
Umstellung auf autoconf
ist noch nicht völlig abgeschlossen,
so daß evtl. noch einige Anpassungen im Makefile
vorgenommen werden müssen (Pfade zum DBMS).
Danach sollte ein make
alle benötigten Programme erzeugen. Auf
einem Linux/GNU System wird die Kompilierung mit großer Wahrscheinlichkeit
ohne Probleme ablaufen, bei anderen Unices kann es sein, daß einige
Include-Files nicht vorhanden sind, oder andere (kleinere)
Kompatibilitätsprobleme auftreten. In so einem Fall bitte ich um eine
Mail an mich, so daß ich die Möglichkeit
habe, die Programme portabler zu gestalten.
Meldete make
keine Probleme bei der Kompilation, so können wir
nun den nächsten Punkt angehen, der Erstellung der Datenbank, in der das
Programm die Gebühreninformationen schreiben wird.
Zuerst ist mittels createdb isdn
eine neue Datenbank Namens
isdn anzulegen. Theoretisch ist natürlich auch ein anderer Name
möglich, aber besonders auf Linux-Systemen, die isdn4linux verwenden,
bietet sich isdn besonders an, da auch das Programm isdnlog
defaultmäßig diesen Namen als Datenbank verwendet (wenn man isdnlog mit
PostgreSQL-Unterstützung kompiliert hat).
Mit make database
werden alle benötigten Tabellen erzeugt,
wobei für die reine Gebührenerfassung nur die Tabelle euracom
von Bedeutung ist. Dem Benutzer, unter dessen Kennung "euracom" abläuft,
muß (INSERT) Zugriff auf die Tabelle erlaubt werden (falls der Benutzer
nicht identisch mit dem DBA ist). Evtl. muß dieser Benutzer vorher mit
createuser <username>
eingerichtet werden.
GRANT INSERT ON euracom TO Benutzer;
???
Für diesen Schritt werden Sie in den meisten Fällen root-Rechte benötigen.
Ein make install
nimmt Ihnen lästige Arbeit ab, indem es alle
benötigten Files an die richtige Stelle kopiert. Defaultmäßig wird das
Hauptprogramm euracom
nach /usr/local/sbin
, die
Manual-Page nach /usr/local/man/man8
und das shared object für
PostgreSQL nach PGBASE/obj
kopiert.
Falls Sie euracom
nicht als root starten wollen oder können (die
Option --run-as-user
ist davon nicht betroffen), dann
müssen Sie darauf achten, daß sie Schreib- und Lesezugriff auf die
Verzeichnisse haben, die in config.h
unter PIDFILE
und LOCKPATH
aufgeführt sind. Natürlich brauchen Sie ebenfalls
RW-permission auf das serielle Device.
Wenn in der config.h
das Makro DEF_LOGFAC
nicht
geändert wurde, schreibt euracom syslog-Ausgaben in die syslog Facility
local0. Es ist sinnvoll, in der /etc/syslog.conf
einen
Eintrag zu machen, daß alle local0 Messages separat geloggt werden sollen, was
durch folgenden Eintrag bewerkstelligt wird:
local0.* /var/log/telephone.log
Verbinden Sie nun den Druckerausgang der Tk-Anlage mit einem freien V24-Port Ihres Rechners und aktivieren Sie die Gebührendruckfunktion der Anlage. Die folgende Befehlsfolge, die sie an jedem Master-fähigen Telefon der Anlage eingeben können aktiviert die Gebührenauswertung für jeden internen Anschluß (mit Anzeige der kompletten Rufnummer), und erfaßt auch kommende Verbindungen (mit und ohne Verbindung):
# * 7 3 1 0 0 #
# * 7 0 1 1 #
# * 7 0 2 1 #
# * 7 1 1 0 0 #
Das sollte es eigentlich gewesen sein!
Starten Sie das Programm mit euracom [-options]
device
. device
ist hier die verwendete serielle
Schnittstelle. Das Programm versucht als erstes das Device zu locken, um
Kollisionen mit anderen Programmes auszuschließen. Sollte ein anderer
Prozeß diesen Port bereits benutzen (und kennzeichnet dies durch die
Verwendung eines Locks), so bricht euracom
mit einer
Fehlermeldung ab. Das gleiche gilt, wenn bereits ein euracom
Prozeß aktiv ist.
Alle Fehler während der Initialisierung werden via syslog() geloggt (Ausnahme sind Fehler in den Kommandozeilenparametern, die auf STDERR ausgegeben werden). Sobald die Meldung "Euracom vx.x.x listening on /dev/xxx" erscheint" ist das Programm bereit, eingehende Gebührendaten zu empfangen und zu verarbeiten. Wenn Sie so weit gar nicht kommen, hilft vielleicht ein Blick in die Bugs-Section.
Um Fehlern besser auf die Spur zu kommen, können sie das Programm mit der
Option --no-daemon
starten. Damit bleibt das Programm im
Vordergrund und gibt alle Ausgaben auf STDERR aus. Ebenfalls hilfreich ist
die Option --debug
(optional mit Angabe des debugging-Levels),
welche erweiterte Logging-Informationen ausgibt. Falls Sie erweiterte
Debugging-Ausgaben haben möchten, das Programm aber weiterhin als daemon (also
im Background) abgearbeitet werden soll, ist die Angabe eines Logging Files
mit --log-file=file
zwingend erforderlich.
Für weitere Kommandozeilen-Optionen rufen Sie einfach euracom mit dem
Switch --help
auf. Ansonsten verweise ich hier auf die
mitgelieferte Manual page von
Volker Schmidt.
Am sinnvollsten ist es, wenn Sie das Programm euracom
automatisch
beim Hochfahren des Systems starten. Ein Beispiel für eine SysV-like
Startup-Prozedur, die dies bewerkstelligt ist z.B.:
#!/bin/sh PATH=/usr/local/sbin:/bin:/usr/bin case "$1" in start) echo -n "Starting EURACOM accounting..." euracom --protocol-file=/var/log/euracom.protocol \ --log-file=/var/log/euracom.log \ --db-host=dbserver \ --run-as-user=phone /dev/ttyS3 echo "o.k." ;; stop) echo -n "Shutting down EURACOM accounting: " kill -TERM `cat /var/run/euracom.pid` echo ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
Im Prinzip können wir jetzt aufhören. Etwas Optimismus vorausgesetzt, läuft
bei Ihnen jetzt ein Programm, daß die Verbindungsdaten aller ein- und
ausgehenden Gespräche, die über die Anlage geführt, mitprotokolliert, via
syslog() ausgibt und dauerhaft in eine Datenbank schreibt. Mit rudimentären
SQL92 Kenntnissen können Sie sich z.B. eine Liste der zuletzt geführten
Gespräche ausgeben lassen, Monats-, Wochen- oder Tagessummen der
Gesprächsgebühren berechnen lassen, etc. pp. Mit dem mitgelieferten
Perl-Skript charger.pl
geht man noch einen kleinen Schritt
weiter. Man erhält einen Einzelverbindungsnachweis für einen, vom Benutzer
festgelegten Zeitraum, in dem Zeitpunkt des Gespräches, Zielnummer,
und Gebühren, sowie die Summe der Gebühren
aufgeführt sind. Optional wird noch der Ortsnetzname der Nummer, sowie der
Inhaber der Nummer ausgegeben, falls diese Werte in der Datenbank vorhanden
sind.
Für die Gebührenauswertung sind 2 weitere Tabellen nötig, die sich ebenfalls
in der DB "isdn" befinden müssen. Beide Tabellen sind bereits durch
make database
erzeugt und mit Beispielwerten gefüllt worden.
Die Tabelle avon enthält das Verzeichnis der Vorwahlen (Attribut "nummer" hat die Form "+49vorwahl-ohne-null", also, z.B. "+49228" für Bonn), die zweite Tabelle wkn kann vom Benutzer mit Telefonnummern (in internationaler Schreibweise (in diesem Fall allerdings ohne irgendwelche Trennzeichen), also die Felder
Der Benutzer, der die Gebührenauswertung vornimmt, benötigt 'SELECT' Zugriff auf alle Tabellen (avon, wkn und euracom)!
Als Eingabedaten für die "avon"-Tabelle empfehle ich die OKZ-Datei aus dem isdnlog Paket.
Für die Auswertung ist es erforderlich, PostgreSQL um 2 Funktionen zu erweitern, nämlich prefix_match(text,text) und length(text). Dazu müssen Sie folgende PostgreSQL statements absetzen:
CREATE FUNCTION prefix_match (text, text) RETURNS bool AS '/opt/postgreSQL/obj/prefixmatch.so' LANGUAGE 'c'; CREATE FUNCTION length (text) RETURNS int2 AS '/opt/postgreSQL/obj/prefixmatch.so' LANGUAGE 'c';
Wenn im Makefile PGBASE
angepaßt wurde, so müssen Sie natürlich
/opt/postgreSQL/obj/prefixmatch.so
durch den korrekten Pfad von
prefixmatch.so
ersetzen.
Für eine komplette Übersicht sämtlicher unterstützter Kommandozeilen-Parameter
starten Sie charger.pl
mit dem Switch -h
. Aber Sie
werden das Programm ohnehin noch anpassen müssen, denn ich bezweifele, daß Sie
in Ihrer Kostenabrechnung gerne meinen Namen in der Fußzeile haben möchten...
Die Zeit/Datumsangaben, die den Optionen -v
und -b
als Argument mit übergeben werden, können in jedem Format vorliegen, welches
PostgreSQL unterstützt.
bus@goliath [108] =>./charger.pl -v'24.09.1997'
Anschluß | Datum | Rufnummer | Einheiten | Betrag |
---|---|---|---|---|
24.09.1997 03:05 | Vergeblicher Anruf von 0228 941234-0 Mustereintrag; Zentrale (Bonn) | |||
21 | 24.09.1997 11:53 | 02364 98765 Testuser, Werner (Haltern Westf) | 13 | 1.56 DEM |
11 | 26.09.1997 08:59 | 0228 941234-361 Mustereintrag; Durchwahl 2 (Bonn) | 6 | 0.72 DEM |
42 | 26.09.1997 09:04 | Eingehender Anruf | ||
11 | 26.09.1997 09:09 | Eingehender Anruf von 0228 941234-361 Mustereintrag; Durchwahl 2 (Bonn) | ||
2 Gespräche | 19 | 2.28 DEM | ||
Grundgebühr | 18.00 DEM | |||
GESAMT: | 20.28 DEM |
do_charger
ist das Programm, das bei mir jeden 1. des Monats per
cron aufgerufen wird, um die monatliche Gebührenauswertung/Telefonrechnung
zu erstellen. Starten Sie es bitte nicht, ohne entsprechende
Anpassungen an Ihre lokale Situation vorzunehmen!
Dieses kleine Progrämmchen dient dazu, eine Telefonnummer (in internationaler Schreibweise (wieder ohne Trennzeichen)) in einen formatierten String umzuwandeln, der die Nummer in Ortsnetz, Basisnummer + Durchwahl unterteilt und Ortsnetzname und Anschlußinhaber auflistet. Dies setzt natürlich voraus, daß die Tabellen avon und wkn entsprechend gefüllt sind.
Auch hier erhalten Sie eine komplette Übersicht der
Kommandozeilen-Parameter durch Angabe der Option -h
.
Nach dem Start erwartet das Programm auf STDIN eine Telefonnummer und gibt dann auf STDOUT den aufgearbeiteten String aus. Die Eingabe EOF (^D) beendet das Programm.
Auch wenn man mit charger.pl
eine mehr oder minder schön
aufgearbeitete Verbindungsliste in HTML bekommt, ist es doch zuweilen
einfacher und schneller ein paar SQL-Statements direkt abzusetzen, z.B. wenn
man mal eben so auf die Schnelle eine Übersicht der bis dato angelaufenen
Kosten braucht. Hier also mal ein paar (na gut, im Moment nur ein) Beispiele
für solche Statements:
Natürlich bekannte Bugs; wenn hier unbekannte Bugs ständen,
wären Sie wohl bald gefixt. Nein, dann wären es keine unbekannten Bugs
mehr...
Wie auch immer, bevor ich mich hier verrenne: Mir liegen zur Zeit folgende
Bugreports vor:
Euracom did not raise CTS. Check
connection
./configure --disable-cts-check
.
Euracom did not unset CTS
./configure --disable-cts-check
übersetzen.
charger.pl
verbraucht der postgres
-Prozeß sehr viel
Speicherplatz.
-DTBL_FREE_CMD_MEMORY
. (Ab PostgreSQL 6.3 ist dies
die Defaulteinstellung.)
Wenn Sie irgendwelche Bugs, Verbesserungsvorschläge, Kritik haben (oder mir
einfach nur sagen wollen, daß Sie das Programm benutzen), zögern Sie nicht und
schreiben mir. Die Adresse finden Sie im Abschnitt
Kontaktadresse. Falls Sie Bugs entdecken, ist es
sinnvoll, mir ebenfalls die Logs zukommen zu lassen. Starten Sie dazu das
Programm mit --debug
(und evtl. --log-file=file
bzw.
--no-daemon
). Bei coredumps bitte ich von der Zusendung des core
files abzusehen :-), dafür könnte sich der Stack-Trace als zweckmäßiger
erweisen.
Falls Probleme bei der Installation oder während des Betriebes auftreten, so werde ich gerne versuchen zu helfen. Ebenso würde es mich natürlich interessieren, bei wem die Software tatsächlich im Einsatz ist. Also, Bugreports, Lob, Tadel, Kommentare, etc. nach bus@mb-net.net. Weitere Kontaktmöglichkeiten finden Sie hier.