Panasonic telefon központ soros portkimenetelének olvasása

szervusztok!

adot nálunk egy panasonic telefonközpont. eddig rá volt kötve egy tarifa számláló gép és egy taxameter nevű csoda programmal. ezt szeretném lecserélni egy linuxra. a cél az lenne, hogy a telefonközpont üzeneteit kéne olvasni és egy sql adatbázisba pumpálni. azt szeretném kérdezni, hogy valaki foglalkozot-e esetleg valami hasonlóval?

arra gondoltam, hogy egy script figyelné folyamatosan a portot és ha jön infó akkor megfelelő paranccsal egy mysql adatbzisba nyomná.

csak sajna nem tudom a soros port olvasásának a menetét.

Hozzászólások

cséréld az egész központot :>

Core2Duo T7100, 4G, Ubuntu 9.04, 2.6.30

Ezt le kell programoznod.
Nincs mese.
Két dolog, egyrészt a linux hogyan olvassa a soros portját.
Másrészt, a Pana magától kidobja a hívás logot, vagy pedog neked kell egy paranccsal lekérned.
Ez pedig dokumentáció...

alapvetően ha érzékel csatlakozást akkor magától kitolja. ha nem akkor pufferben tárolja az utolsó 1000-t.

kipróbáltam win alatt a hyperes betárcsázással és dobja magától. nem kell külön lekérdezni. így kicsit egyszerübb is mert lényegében csak olvasni kell. illetve elötte felépíteni a csatlakozást

Kicsit későn vettem észre a topicot, de én (részben) megcsináltam.
Nálunk egy KX-TA616 van, abból szedem (szedném) az adatokat MySQL-be.
Gentoo alatt sima csomagként fellelhető cuccokból bash scriptben összeraktam.
Figyeli a soros portot, ki-parse-olja (szép magyar szó :) belőle a szükséges adatokat és betolja az adatbázisba.
Ami még hiányzik - illetve javítandó - hogy a script folyamatos loop-ként fut, folyamatos adatbázis kapcsolattal, amit a mysql bizonyos timeout után lezár, ezért ott megdöglik a logolás. Át kéne alakítani, hogy kapott log-soronként külön nyisson egy sql kapcsolatot, írjon és zárja le, de erre eddig lusta voltam. :( Amúgy lehetne syslog-ba is logoltatni és onnan SQL-be felszívni.

Jelenleg így néz ki:

#!/bin/bash

SQLHOST="" # ertelemszeruen kitoltendok, modositandok
SQLUSER=""
SQLPASS=""
SQLDB=""
SERIAL="/dev/ttyS0"
MYDIR="/opt/panalog"

logserial -t $SERIAL \
| sed --unbuffered -e "s/*/* /" -e "s/\/ /\/0/" -e "s/'/\\\'/g" -e 's/"/\\\"/g' \
| awk -f $MYDIR/rules.awk \
| mysql --user=$SQLUSER --password=$SQLPASS --host=$SQLHOST \
--database=$SQLDB --force -q --reconnect --unbuffered --wait

És a rules.awk:

{
SQLTABLE="panasonic"

if ( NF >= 8 && $1 != "Date" && $1 != "" ) {
DATE=$1
if ( $2 == "*" ) {
TIME=$3
EXT=$4
CO=$5
TRANS="Yes"
if ($6 == "<") {
NUMBER=$7
DURATION=$9
} else {
NUMBER=$6
DURATION=$7
}
} else {
TIME=$2
EXT=$3
CO=$4
TRANS="No"
if ($5 == "<") {
NUMBER=$6
DURATION=$8
} else {
NUMBER=$5
DURATION=$6
}
}
if ( NUMBER == "incoming" ) {
DIRECTION="In"
} else {
DIRECTION="Out"
}
print "INSERT into "SQLTABLE" (date,time,ext,co,direction,number,duration,transferred) values (STR_TO_DATE('"DATE"', '%m/%d/%y'),STR_TO_DATE('"TIME"', '%I:%i%p'),'"EXT"','"CO"','"DIRECTION"','"NUMBER"',STR_TO_DATE('"DURATION"', '%H:%i\\'%s\\\"'),'"TRANS"');"
fflush()
}
}

Bedobom GPL-be :) Ha javítottad, dobd be te is!