PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SDS2DB schreibt SDS-Nachrichten in eine MySQL-Datenbank



flachrelais_48
01.01.2014, 16:58
Hallo zusammen,

ich habe für den eigenen Verwendungszweck ein kleines Progrämmchen geschrieben, dass auf einem (Debian-)Linux-Rechner läuft und die SDS-Nachrichten, die auf einer oder mehrerer PEI-Schnittstellen empfangen werden, in eine MySQL-Datenbank schreibt.
Das Programm selbst besteht ausschließlich aus Shell-Skripten und muss nicht kompiliert werden.

Evtl. ist es ja auch anderen nützlich.

Achtung! Mit dem Download und/oder der Benutzung von SDS2DB akzeptieren Sie meine Nutzungsbedingungen.

Schöne Neujahrsgrüße

flachrelais_48

evos
01.01.2014, 23:22
Kannst du auch ein Programm schreiben für Windows womit ich auch des versende?Suche sowas noch

Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

flachrelais_48
01.01.2014, 23:57
Das habe ich (momentan) nicht vor. Ich hätte aktuell auch keine Ahnung, wie ich das hinbekommen würde. Wenn ich es bräuchte, würde ich wohl eher den Weg über ein PHP-Webfrontend mit MySQL-DB-Backend wählen.

evos
02.01.2014, 00:34
Ok schade

Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

flachrelais_48
02.01.2014, 16:03
Da fällt mir doch gerade ein, dass ich ja auch noch eine Sammlung von PHP-Funktionen zur Dekodierung von "SDS-TL user data" geschrieben habe.
Möglicherweise ist es dem einen oder anderen eine Hilfe bei dem einen oder anderen Projekt?

Bis jetzt werden nur die Protokolle 0A(LIP) und 82(Text Messaging) ausgewertet. Die Auswertung ist auch noch nicht 100% vollständig. Sie deckt nur Meldungen ab, die in meinem Szenario bis jetzt aufgetreten sind.
Gerne nehme ich fehlende Auswertungen mit auf, wenn sie mir zugetragen werden.

Anwendungsbeispiel:
echo print_r(decode_PDU("0A4DC4000000000000004610A2F42000C0"));

Array ( [StringPos] => 84 [ProtoIdent] => Array ( [value] => 10 [name] => Location Information Protocol ) [PduType] => Array ( [value] => 1 [name] => Location protocol PDU with extension ) [PduTypeExt] => Array ( [value] => 3 [name] => Long location report ) [TimeType] => Array ( [value] => 1 [name] => Time elapsed ) [TimeElapsed] => Array ( [value] => 3 [name] => not known or not applicable ) [LocationShape] => Array ( [value] => 1 [name] => Location point ) [Longitude] => 0 [Latitude] => 0 [VelocityType] => Array ( [value] => 0 [name] => No velocity information ) [AckReq] => Array ( [value] => 0 [name] => No acknowledgement requested ) [TypeOfAddData] => Array ( [value] => 0 [name] => Reason for sending ) [ReasonForSending] => Array ( [value] => 4 [name] => Status ) ) 1

firEmergency
08.01.2014, 13:05
Mit welchem Funkgerät testest du das aktuell?
Läuft das mit verschlüsseltem Tetra und entsprechender SIM, oder unverschlüsselt?

Gesendet von meinem HTC One S mit Tapatalk

flachrelais_48
08.01.2014, 18:32
Produktiv läuft mein Statusserver mit einem Motorola MTM800FuG mit SIM-Karte. Mein Test-System nutzt ein Motorola MTP850 mit SIM-Karte.
Nach meinem derzeitigen Kenntnisstand gibt es aber beim Setzen der Serviceprofile und beim SDS-Empfang keinen Unterschied ob der Kryptomodus benutzt wird, oder nicht.
Die Kommandos im Skript, die - wenn in der Konfig aktiviert - die Empfangsquittungs-SDS versenden, sind so konfiguriert, dass die SDS E2E-verschlüsselt versendet wird.

Gibt es denn ein konkretes Problem?

Ein Tipp:
Für die Registrierung des Serviceprofils Status-SDS zur Verarbeitung ausschließlich durch SDS2DB, muss im Codeplug das senden des Notrufsignals deaktiviert sein.
Wenn man nichts am Codeplug ändern möchte und es nicht stört, dass das FuG die Status-SDS parallel zu SDS2DB empfängt, kann mann in der pei.init, in Zeile 43, das Kommando
printf "AT+CTSP=1,2,20\r" > $writespooldir/$(date +%s).$(($seqnr+1)).$device
durch
printf "AT+CTSP=2,2,20\r" > $writespooldir/$(date +%s).$(($seqnr+1)).$device
ersetzen.

Die Konfiguration (etc/sds2db.conf) ist auf meinen speziellen Anwendungsfall gesetzt und muss unbedingt angepasst werden. Ohne Anpassung der Konfig wird SDS2DB nicht starten!
Eine Hilfe, sollten die Beispiele in den Kommentaren der einzelnen Einstellungen sein:
# Beispiel: serialdev_1="ttyS0" (für die "COM1")
# Beispiel: serialdev_1_init_1="$sttybin -F /dev/$serialdev_1 0:0:80000cbd:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0" (für 9600 Baud, 8 bit, 1 Stopbit, keine Parität, Hardware Handshake (RTS/CTS)
# Beispiel: ttyToListenTo="ttyS0" (um SDS2DB an COM1 lauschen zu lasssen)

firEmergency
08.01.2014, 18:39
Nein, gibt kein Problem.
War nur die letzten Tage auf Digitalfunk Lehrgang.
Und da stellte ich eben genau die Frage, ob es möglich sein wird, SDS (z.B. den übermittelten Alarmtext) mit externer Software abzugreifen.

So wie du es beschrieben hast, geht es ja wunderbar SDS mit gültiger SIM abzugreifen und dann diese weiterverarbeiten.

Das heißt theoretisch könnte man sich die SDS dann als SMS senden. Ob das dann natürlich rechtlich noch OK ist, wage ich zu bezweifeln.

flachrelais_48
08.01.2014, 19:14
So wie du es beschrieben hast, geht es ja wunderbar SDS mit gültiger SIM abzugreifen und dann diese weiterverarbeiten. ...
Na ja, die PEI-Schnittstelle ist ja genormt. Wenn man die ETSI-Spezifikationen zu Hilfe nimmt und eine Menge Zeit investiert, dann geht es wunderbar. ;-)



... Das heißt theoretisch könnte man sich die SDS dann als SMS senden. ...
Also man könnte die SDS user data einer Text-SDS dekodieren und den Text mittels GSM-Modem als SMS versenden.

Kermit_t_f
08.01.2014, 20:32
Abgreifen ist kein Problem, wie Flachrelais_48 schon schreibt. Die SDS wird ja nur verschlüsselt übertragen, aber wird natürlich entschlüsselt im Endgerät abgelegt und ist dort auslesbar.

firEmergency
08.01.2014, 21:01
Ok, danke.
Das war mir so nicht bewusst.
Da das Protokoll standardisiert ist, geht das ja dann wohl mit allen Tetra-Endgeräten mit PEI Ausgang und BOS-SIM?

Wizard
13.02.2014, 11:13
[QUOTE=flachrelais_48;448871]Na ja, die PEI-Schnittstelle ist ja genormt. Wenn man die ETSI-Spezifikationen zu Hilfe nimmt und eine Menge Zeit investiert, dann geht es wunderbar. ;-)


Schön wärs... PEI und "Genormt" ist wie gewollt und nicht gekonnt.

Sprache und SDS ist zwar zu 95% ETSI konform, aber alles was BSI-SIM, Ordner/Gruppen und banale Dinge wie Error-Codes betrifft, ist bei Sepura und Motorola proprietär gelöst.

Und ja, es geht "eine Menge Zeit" drauf.... :-(

Loddel
26.02.2014, 16:06
Erstmal Danke für die Bereitstellung des Skriptes an flachrelais_48.

Hab das jetzt mal nachgestellt. Hast du eine Idee, ob das Ganze auch mit einem USB-Programmierkabel funzt. Ein serielles besitze ich nicht. Also ich hab genau das hier: PMKN4026A USB.
Und wenn ja, wie sollte die conf dann aussehen? Im Moment bin ich noch ratlos.
Der Start des sdsdb meckert: "Stop! "ttyr00" kann nicht initialisiert werden". Ist ja klar, weil nicht belegt.
Hast du ne Idee oder einen Tip?

flachrelais_48
26.02.2014, 18:15
Nein, das PMKN4026A wird nicht funktionieren. Motorola liefert keinen Linux-Treiber dafür.

Funktionieren sollten alle Lösungen, die unter Linux als special character device angesprochen werden können.

In meinem Fall ist das ein "MOXA NPORT 5110" RS232 over LAN Adapter (/dev/ttyr00). Möglich wären auch RS232/USB-Adapter die meistens als "/dev/ttyUSB0" angelegt werden oder echte RS232-Verbindungen (z.B. /dev/ttyS0).

Das FuG muss auf jeden Fall per RS232 verbunden werden.

Welches FuG willst du denn anschließen?

CSchumacher85
03.09.2014, 21:07
Vielen vielen Dank für dein Programm.

Sehr gut gemacht.

Ich habe es für die Industrie im Einsatz mit Motorola MTM800E und es läuft super.

Hast du privat noch weitere Programme?
Also Programme die dann auf deine Datenbank zugreifen.

mfg Christian

flachrelais_48
03.09.2014, 23:04
Schön zu hören, dass SDS2DB auch im Industrie-Einsatz ist. Welche Anwendungen deckst du damit ab? Ich habe SDS2DB auch weiterentwickelt. Es gibt jetzt die Möglichkeit Empfangs- und Sende-ISSI-Whitelists zu konfigurieren um zu filtern, welche ISSIs ausgewertet werden. Ich werde es bei Gelegenheit hier einchecken.

Ich habe ein PHP-Programm als Web-basiertes Einsatzführungstool geschrieben, das die Statusmeldungen in einer Statusübersicht der Einsatzmittel verarbeitet und in einem Journal protokolliert hatte. Mangels Zeit, konkurierender Projekte und fehlender Unterstützung ging die Entwicklung aber nur schleppend voran und die Anwender haben die Geduld verloren, auf weitere Funktionen zu warten. So ist es unvollendet geblieben.
Jetzt setzen wir EDP4 als Einsatzführungstool ein und die SDS2DB-Datenbank wird von einem erweiterten monitord-Web-Frontend als Rückfallebene und Referenz-"Empfänger" genutzt.

Für die Auswertung von digitalen Alarmierungen habe ich SDS2DB etwas modifiziert und POCSAG2DB daraus gemacht. Zusätzlich zum Sichern der Meldungen in der Datenbank, wird das Meldungsformat aufbereitet und per RS232 an den EDP4-Einsatzservice weitergeleitet um aus den Alarmierungen automatisiert Einsätze anlegen zu lassen. Das kann ich auch hochladen, falls jemand Interesse bekundet.

Schöne Grüße

CSchumacher85
11.09.2014, 14:34
Hallo habe eben festgestellt das der SDS-Header von den SDS Nachrichten abweicht

Header mit Software +CTSDS3010,0,491016,0,40
Header ohne Software +CTSDSR: 12,473010,0,491016,0,40

Weiss jemand den Unterschied zwischen den Beiden Headern?

bzw. mit welchem Befehl kann ich dies Umstellen?

Wenn ich den COMPort Sniffer kann ich keinen besonderen Befehl erkennen der dies umstellen könnte.

mfg
CS

CSchumacher85
11.09.2014, 14:36
Hallo dies klingt sehr interessant wir arbeiten hier auch an einem WebFront End.
Wir setzen auf Ruby on Rails.

CSchumacher85
15.09.2014, 15:34
Hi flachrelais_48 ist dir bekannt ob und wie das ctsdsr Protokoll wechseln kann?
die Erste sds ist immer "R: 12,473010,0,491016,0,40"(richtig) und ab dann im Format
+CTSDS3010,0,491016,0,40. Dieses Format wird solange von der pei Empfange bis man mit sds2d restart das Programm neu startet.

Ist dir sowas schon mal aufgefallen?


Log von pei.ttyS1:

sds2db: <- ATZ
sds2db: <- AT+CTSP=1,3,130
sds2db: -> OK
sds2db: -> R: 12,473010,0,491016,0,40
sds2db: -> 82064F0141
sds2db: <- AT+CMGS=473010,32
sds2db: <- 8210004F
sds2db: -> +CME ERROR: 35
sds2db: -> +CMGS: 0
sds2db: -> OK
sds2db: -> +CMGS: 0,4,79
sds2db: -> +CTSDS3010,0,491016,0,40
sds2db: -> 8206500141

mfg
CS

flachrelais_48
15.09.2014, 19:28
Hallo,

das "ctsdsr Protokoll" kann nicht wechseln. Wenn der AT-Command Mode auf ETSI gestellt ist, muss die Signalisierung einer empfangenen SDS auch der Norm entsprechen.

In deinem Log sind mir aber ein paar Sachen aufgefallen.

sds2db: <- ATZ
sds2db: <- AT+CTSP=1,3,130
sds2db: -> OK

Hier ist das OK vermutlich die Antwort auf ATZ, d.h. dass das Kommando AT+CTSP=1,3,130 zu früh gesendet wird.

Kannst du bitte mal ein Log posten, bei dem die Zeitstempel zu sehen sind? Und den Inhalt der pei.init am besten auch.

Hier mal ein Beispiel, wie es aussehen sollte:

Sep 15 19:05:12 statusmonitor2 sdsfwd: tx ATZ
Sep 15 19:05:13 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:14 statusmonitor2 sdsfwd: tx AT+CTSP=1,2,20
Sep 15 19:05:14 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:15 statusmonitor2 sdsfwd: tx AT+CTSP=1,3,10
Sep 15 19:05:15 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:16 statusmonitor2 sdsfwd: tx AT+CTSP=1,3,130
Sep 15 19:05:16 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:17 statusmonitor2 sdsfwd: tx AT+CTSP=1,1,11
Sep 15 19:05:17 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:18 statusmonitor2 sdsfwd: tx AT+CTGS=1,2xxxxx2
Sep 15 19:05:19 statusmonitor2 sdsfwd: rx +CTGS: 1,2xxxxx2
Sep 15 19:05:19 statusmonitor2 sdsfwd: tx AT+CNUMF?
Sep 15 19:05:20 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:20 statusmonitor2 sdsfwd: rx +CNUMF: 0,262100104xxxxx9
Sep 15 19:05:20 statusmonitor2 sdsfwd: rx 2,16xxxxx2
Sep 15 19:05:21 statusmonitor2 sdsfwd: rx 3,16xxxxx2
Sep 15 19:05:21 statusmonitor2 sdsfwd: tx AT+CTGS?
Sep 15 19:05:21 statusmonitor2 sdsfwd: rx 4,262100116xxxxx4
Sep 15 19:05:21 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:22 statusmonitor2 sdsfwd: rx +CTGS: 1,2xxxxx2
Sep 15 19:05:22 statusmonitor2 sdsfwd: rx OK
Sep 15 19:05:28 statusmonitor2 sdsfwd: rx +CTSDSR: 12,5xxxxx8,0,2xxxxx2,0,416
Sep 15 19:05:28 statusmonitor2 sdsfwd: rx 8200....
Sep 15 19:05:29 statusmonitor2 sdsfwd: rx +CTSDSR: 12,5xxxxx5,0,2xxxxx2,0,416
Sep 15 19:05:29 statusmonitor2 sdsfwd: rx 8200...

Handshake und Geschwindigkeit für /dev/ttyS1 sind passend konfiguriert?

Scheinbar, funktioniert bei dir auch das Senden der Quittung nicht:

sds2db: <- AT+CMGS=473010,32
sds2db: <- 8210004F
sds2db: -> +CME ERROR: 35
sds2db: -> +CMGS: 0

"+CME ERROR:" zeigt immer, dass etwas nicht passt.

Ändere doch im Skript sds2db das Kommando auf "AT+CTSDS=12,0,0,0,1". Das fehlt auch im Log. Bist du sicher, dass die serielle Verbindung einwandfrei ist?

CSchumacher85
16.09.2014, 08:26
Hi flachrelais_48 anbei das Logfile:

Hast du eine neuere Version von SDS2DB weil bei dir anstelle der Pfeile TR und RX steht?

Inhalt vom Logfile ttyS1:
Sep 16 08:23:40 linuxFR-Feinblech sds2db: <- ATZ
Sep 16 08:23:41 linuxFR-Feinblech sds2db: <- AT+CTSP=1,3,130
Sep 16 08:23:41 linuxFR-Feinblech sds2db: -> OK
Sep 16 08:23:58 linuxFR-Feinblech sds2db: -> R: 12,473010,0,491016,0,40
Sep 16 08:23:58 linuxFR-Feinblech sds2db: -> 82065F0141
Sep 16 08:23:59 linuxFR-Feinblech sds2db: <- AT+CMGS=473010,32
Sep 16 08:23:59 linuxFR-Feinblech sds2db: <- 8210005F^Z
Sep 16 08:23:59 linuxFR-Feinblech sds2db: -> +CME ERROR: 35
Sep 16 08:23:59 linuxFR-Feinblech sds2db: -> +CMGS: 0
Sep 16 08:23:59 linuxFR-Feinblech sds2db: -> OK
Sep 16 08:23:59 linuxFR-Feinblech sds2db: -> +CMGS: 0,4,95
Sep 16 08:24:01 linuxFR-Feinblech sds2db: -> +CTSDS0060,0,491016,0,40
Sep 16 08:24:01 linuxFR-Feinblech sds2db: -> 8206620141
Sep 16 08:24:05 linuxFR-Feinblech sds2db: -> +CTSDS3010,0,491016,0,40
Sep 16 08:24:05 linuxFR-Feinblech sds2db: -> 8206600141

Die erste SDS wurde fehlerfrei Empfangen und quittiert anschließend kamen die CTSDS rein.


Inhalt der PEI.init:

# Config-File einlesen
source /usr/local/sds2db/etc/sds2db.conf

# Initialisierung aller PEI Connections für den übergebenem Parameter ausführen
device=$1
if [ ! -c "/dev/$device" ]; then
device="null"
fi
# Sequenzzähler der Write-Spooler-Dateien initial auf Zufallswert setzen
seqnr=$RANDOM

# PEI-Schnittstelle initialisieren
echo "$(date +"%b %d %H:%M:%S") $host $inithelper: initialisiere PEI Schnittstelle an \"$device\"" >> $logfile
printf "ATZ\r" > $writespooldir/$(date +%s).$seqnr.$device
sleep 1
#echo "$(date +"%b %d %H:%M:%S") $host $inithelper: registriere TE für Status-SDS" >> $logfile #wird nicht benötigt #GPS
#printf "AT+CTSP=2,2,20\r" > $writespooldir/$(date +%s).$(($seqnr+1)).$device
#sleep 1
#echo "$(date +"%b %d %H:%M:%S") $host $inithelper: registriere TE für LIP" >> $logfile #wird nicht benötigt
#printf "AT+CTSP=1,3,10\r" > $writespooldir/$(date +%s).$(($seqnr+2)).$device
#sleep 1
echo "$(date +"%b %d %H:%M:%S") $host $inithelper: registriere TE für Text Messaging" >> $logfile
printf "AT+CTSP=1,3,130\r" > $writespooldir/$(date +%s).$(($seqnr+3)).$device
sleep 1
#echo "$(date +"%b %d %H:%M:%S") $host $inithelper: lese MS Identität" >> $logfile
#printf "AT+CNUMF?\r" > $writespooldir/$(date +%s).$(($seqnr+4)).$device
#sleep 1

exit 0

Alles Auskommentiert außer SDS (1,3,130)

mfg
CS

CSchumacher85
16.09.2014, 08:49
Der SerialPort ttyS1 scheint auch richtig konfiguriert zu sein:

stty -F /dev/ttyS1 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = ^D;
eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>;
flush = <undef>; min = 5; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl -echoke

Noch ein Hinweis. Mir ist aufgefallen wenn ich die Software starte und beende ist das Nachrichten-Eingan Menü am Gerät gesperrt (auch wenn keine SDS über die Software empfangen wurde).
Es erscheint die Meldung (Nachr. Empfang blockiert).

Mir sagt das nichts.


mfg
Christian

CSchumacher85
16.09.2014, 12:13
Hi ich konnte den Fehler weiter eingrenzen.

Das Format der SDS verändert sich nicht es ist immer +CTSDSR:
allerdings verschluckt meine SDS2DB Version teile dieses SDS-Strings.

Vermutlich gibt es eine kleine Abweichung im der ttyS1 Konfiguration.

ich suche mal weiter, bin kurz vor der Lösung

;-)

CSchumacher85
16.09.2014, 15:34
Leider komme ich nicht darauf warum teile vom ttyS1 verschluckt werden
hier ist meine stty konfig zum vergleichen:

serialdev_1_init_1="$sttybin 9600 cs8 -parenb -cstopb ixon ixoff -F /dev/$serialdev_1"

flachrelais_48
16.09.2014, 17:49
"ixon ixoff" ist ja Softwarehandshake. Bist du sicher, dass dein FuG (was für ein Gerät hast du angeschlossen?) das unterstützt? Vlt. liegt hier schon der Fehler?

[-]parenb
generate parity bit in output and expect parity bit in input
--> Paritätsbit??? - ich weiß nicht, ob das passt


[-]cstopb
use two stop bits per character (one with '-')

--> 1 Stopbit klingt gut

[-]ixoff
enable sending of start/stop characters

[-]ixon
enable XON/XOFF flow control

--> Software Handshake??? - kann ich mir kaum vorstellen


Teste doch mal ohne "XON/XOFF" und ohne Parität.

flachrelais_48
16.09.2014, 17:59
Hi flachrelais_48 anbei das Logfile:

Hast du eine neuere Version von SDS2DB weil bei dir anstelle der Pfeile TR und RX steht?



Sorry für's Doppelposting. Habe bei den vielen Antworten den Überblick verloren ;-).

Ja, ich habe sds2db weiterentwickelt. Es gibt mittlerweile ISSI-Empfangs- und Sende-Whitelists und die pei.init wird auch beim Stoppen aufgerufen und kann das TE am FuG wieder deregistrieren. (Deshalb ist dein Nachrichteneingang blockiert, wenn du sds2db beendest.)

Ich muss die aktuelle Version "nur" von meiner Konfig anonymisieren, bevor ich es hochlade. Mal schauen, ob ich die nächste Zeit dazu komme.

CSchumacher85
17.09.2014, 08:27
Hi ich habe jetzt ein Y-Kabel am Comport angeschlossen und sniffer alles mit.

Anscheinend ist die stty konfig nicht 100% richtig ich suche jetzt dort weiter.


PS Wie kannst du denn den Bedienkopf sperren?
Ich habe keinen "Sperrbefehl" auf der Schnittstelle gesehen.

mfg
CS

CSchumacher85
17.09.2014, 10:35
Hallo ich bin schon ein gutes Stück weiter.

bei stty muss anscheinend der Parameter inlcr gesetzt werden. Dann klappt die Initalisierung schon besser. Allerdings werden immer noch Zeichen bei mehrzeiligen Antworte verschluckt.

Logfile ttyS1:
Sep 17 10:32:47 linuxFR-Feinblech sds2db: <- ATZ
Sep 17 10:32:47 linuxFR-Feinblech sds2db: -> OK
Sep 17 10:32:48 linuxFR-Feinblech sds2db: <- AT+CTSP=2,2,20
Sep 17 10:32:48 linuxFR-Feinblech sds2db: -> OK
Sep 17 10:32:49 linuxFR-Feinblech sds2db: <- AT+CTSP=1,3,10
Sep 17 10:32:49 linuxFR-Feinblech sds2db: -> OK
Sep 17 10:32:50 linuxFR-Feinblech sds2db: <- AT+CTSP=1,3,130
Sep 17 10:32:50 linuxFR-Feinblech sds2db: -> OK
Sep 17 10:32:51 linuxFR-Feinblech sds2db: <- AT+CNUMF?
Sep 17 10:32:51 linuxFR-Feinblech sds2db: -> : 0,2620015200491016 Eigentlich +CNUMF:0,2620015200491016
Sep 17 10:32:52 linuxFR-Feinblech sds2db: -> 2,16777010
Sep 17 10:32:52 linuxFR-Feinblech sds2db: -> 3,16777110
Sep 17 10:32:52 linuxFR-Feinblech sds2db: -> OK

CSchumacher85
17.09.2014, 10:43
Hi flachrelais_48

kannst du mal bitte deine tty Konfig posten?

bitte mal das Ergebniss von

stty -a -F /dev/ttyS1
posten
Danke

Das würde mir sehr helfen.

flachrelais_48
17.09.2014, 17:42
Da komme ich die nächsten Tage nicht ran. In der sds2db.conf stehen aber Beispiele als Kommentar. Da sollte auch eine Konfig für 9600,8,n,1 ohne Handshake dabei sein.

Grüße

CSchumacher85
18.09.2014, 08:17
Guten Morgen habe das Problem gefunden und gelöst. Nun arbeite alles wie es sein soll.

Wenn jemand Interesse an der OpenSuse-Industrie Version hat kann ich gerne ein TAR erstellen und hochladen.

Auf dem Mini-PC ist noch ein anderes Programm gelaufen (USV-Überwachung).
Jetzt da es abgeschaltet ist sind die String alle vollständig.

Sep 18 08:15:16 linuxFR-Feinblech sds2db: -> +CTSDSR: 12,473010,0,491016,0,40
Sep 18 08:15:16 linuxFR-Feinblech sds2db: -> 8206E40142
Sep 18 08:15:16 linuxFR-Feinblech sds2db: <- AT+CTSDS=12,0,0,0,0
Sep 18 08:15:17 linuxFR-Feinblech sds2db: <- AT+CMGS=473010,32
Sep 18 08:15:17 linuxFR-Feinblech sds2db: <- 821000E4
Sep 18 08:15:17 linuxFR-Feinblech sds2db: -> OK
Sep 18 08:15:17 linuxFR-Feinblech sds2db: -> +CMGS: 0
Sep 18 08:15:17 linuxFR-Feinblech sds2db: -> OK
Sep 18 08:15:17 linuxFR-Feinblech sds2db: -> +CMGS: 0,4,228
Sep 18 08:15:19 linuxFR-Feinblech sds2db: -> +CTSDSR: 12,473010,0,491016,0,40
Sep 18 08:15:19 linuxFR-Feinblech sds2db: -> 8206E50143
Sep 18 08:15:19 linuxFR-Feinblech sds2db: <- AT+CTSDS=12,0,0,0,0
Sep 18 08:15:19 linuxFR-Feinblech sds2db: <- AT+CMGS=473010,32
Sep 18 08:15:19 linuxFR-Feinblech sds2db: <- 821000E5
Sep 18 08:15:19 linuxFR-Feinblech sds2db: -> OK
Sep 18 08:15:20 linuxFR-Feinblech sds2db: -> +CMGS: 0
Sep 18 08:15:20 linuxFR-Feinblech sds2db: -> OK
Sep 18 08:15:20 linuxFR-Feinblech sds2db: -> +CMGS: 0,4,229


Das Web-Front-End ist fast fertig (Zielgruppe Werksfeuerwehren)


mfg
CS

CSchumacher85
18.09.2014, 09:26
So Leute das Grundgerüst des Webfrontend ist fertig.

Dies könnte zum Beispiel durch den offenen Standard von Ruby on Rails auch als ein Teil von Leitstellensoftware verwendet werden. Oder man kann eine Logfunktion einbauen um zu sehen wer wann welchen Status mitgeteilt hat.

Durch die Nutzung des Browser muss auch keine Spezialsoftware gekauft werden.
Man kann einfach direkt und kostenlos loslegen.

mfg
CS

flachrelais_48
20.09.2014, 22:02
Hallo CSchumacher85,

du hast in deiner pei.init ja die Status-SDS nicht für die Ausgabe auf der PEI registriert. Empfängst du die Statusmeldungen als Text-SDS? Warum nutzt du nicht die Status-SDS?

Grüße

CSchumacher85
22.09.2014, 09:29
Hallo, ja ich habe in der Pei.init dies explizit ausgeschaltet, da in unserem Industrienetz die Statusgeschichte nicht wie geplant genutzt werden kann.
(Situation ein Provider mehrer Kunden)

Daher haben wir uns für den Weg der "SDS" Stati entschieden.

flachrelais_48
22.09.2014, 18:07
Wie sieht das auf Seite der Einsatzmittel aus, die ihren Status senden sollen?
Nachrichten-Menü -> neue Nachricht -> text eintippen -> senden an -> issi eintippen?
Bestimmt nicht, oder?

MeisterH
24.09.2014, 22:45
(Situation ein Provider mehrer Kunden)

VSE Net?

1234567890

CSchumacher85
25.09.2014, 15:03
Im Grunde ja es werden vordefenierte SDS auf die Tasten gelegt.
Dies bietet den Vorteil das auch andere "Betriebe" andere Stati nutzen können.

@meister Ja vse net

pavlebo
23.03.2015, 14:43
I am trying to test SDS2DB.

Error is>
sds2db: Start sds2db begonnen
Mar 23 14:36:04 sds2db: lösche Alive-Einträge der FuGs aus DB
Mar 23 14:36:04 sds2db: lösche Alive-Einträge des Servers aus DB
Mar 23 14:36:04 sds2db: starte sds2db
Mar 23 14:36:04 sds2db: starte write spooler
Mar 23 14:36:04 sds2db: erstelle Cronjob für regular run skript
Mar 23 14:36:04 sds2db: initialisiere serielle Schnittstelle "ttyUSB0"
Mar 23 14:36:04 sds2db: starte /usr/local/sds2db/bin/user.init
Mar 23 14:36:04 sds2db: Stop! Userdefinierbares Init-Kommando fehlgeschlagen

On my linux comp. there is no:/usr/local/nullmodem/bin/nullmodem ????

Thanks!

flachrelais_48
23.03.2015, 18:23
Don't worry. Nullmodem isn't necessary to run SDS2DB. Just comment out the call of "/usr/local/sds2db/bin/user.init" in sds2db.conf.

Good luck

flachrelais_48
21.08.2015, 19:44
hallo,

habe gerade hier im Forum deinen Beitrag zu SDS2DB gefunden.

Ich wollte mir die ZIP-Datei runterladen, leider wird mir auf zwei unterschiedlichen Rechnern angezeigt, dass die Datei im ersten Post 0KB hat. Somit lässt sie sich folglich auch nicht entpacken.
Kannst du mir SDS2DB bitte ... mailen ?

Ich möchte SDS2DB gerne in unserem ELW auf einem Raspberry nutzen. Neben dem Speichern der SDS in der MySQL würde ich gerne versuche SDS2DB so zu erweitern, dass ich weitere Daten abzuspeichern kann, z.B. Gespräche, aktuelle GPS-Position, ... usw.
Wenn ich die Beschreibung richtig verstehe, kann ich über die pei.write auch eigene Kommandos an die PEI senden und die Antwort dann ähnlich einer SDS auswerten und wieder in der MySQL abspeichern ?

DANKE !

Gruß
Chibbez

Hallo,

ich bin mal so indiskret deine PN in's Forum zu stellen. Dann haben auch andere Interessierte was davon...
Die Dateien aus dem Eröffnungspost kann ich einwandfrei herunterladen. Es ist ein tgz-Archiv was man mit "tar xvzf ..." auf dem Zielrechner auspacken können sollte. Evtl. vermurkst die Dateiendung .zip da irgenwas? Ich musste das .zip dranhängen, um die Datei hochladen zu können.

pei.write läuft als Daemon und schreibt den Inhalt der Spool-Dateien in .../var/spool/write/... an das passende Interface. Du siehst ja in den Skripten, wie ich die Spooldateien generiere.

Bei den GPS-Positionen sehe ich keine große Herausforderung in der Auswertung, wenn sie als LIP-SDS empfangen werden. Ich habe einen Satz PHP-Funktionen zum Dekodieren der SDS geschrieben. Die sollten auch in diesem Thread zum Herunterladen stehen. Ich habe SDS2DB auch für meinen Einsatzzweck weiterentwickelt und rufe ein weiteres Processing-Skript auf, dem ich in Abhängigkeit einiger Parameter die empfange SDS zur weiteren Verarbeitung übergebe.

Zur Dokumentation von Gesprächsdaten kann ich bis jetzt nichts beitragen. In meinem Fall ist das FRT auf eine reine Datengruppe geschaltet. Da wird nicht gesprochen. Wenn du es schaffst, dass das Gerät die Metadaten der Gruppenkommunikation als "unsolicited message" auf die PEI schreibt, sollten am Skript sds2db keine großen Ergänzungen dafür nötig sein.

grisu911
20.09.2015, 23:45
Hallo,
ich komme irrgendwie nicht klar mit dem Einrichten.
Ich habe ein MTP850 mittel Serial->USB an einen Raspberry. Wenn ich screen /dev/ttyUSB0 nutze sehe ich eingehende SDS, z.B. +CTSDSR: 13,xxxxxxx,0,xxxxxxx,0,16 8007.

Leider habe ich mit sds2db kein Erfolg.
Config der Schnittstelle in der sds2db.conf:
serialdev_1="ttyUSB0"
serialdev_1_init_1="$sttybin -F /dev/$serialdev_1 0:0:cbf:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
ttyToListenTo="ttySDS2DB0"

Die userinit_1 ist auskommentiert wie in Beitrag #39 empfohlen, da der gleiche Fehler wie in Beitrag #38 auftritt. Es tritt dann aber beim Starten von sds2db folgender Fehler auf:
pi@raspberrypi ~ $ sudo /etc/init.d/sds2db start
Starting sds2db... /etc/init.d/sds2db: line 115: ((: != 0 : syntax error: operand expected (error token is "!= 0 ")
done!

Die beiden Log-Dateien beinhalten folgende Meldungen:

sds2db.log.null:
Sep 20 23:24:34 raspberrypi sds2db: <- ATZ
Sep 20 23:24:35 raspberrypi sds2db: <- AT+CTSP=1,2,20
Sep 20 23:24:36 raspberrypi sds2db: <- AT+CTSP=1,3,10
Sep 20 23:24:37 raspberrypi sds2db: <- AT+CTSP=1,3,130
Sep 20 23:24:38 raspberrypi sds2db: <- AT+CNUMF?

sds2db.log:
Sep 20 22:38:21 raspberrypi sds2db: --------------------------
Sep 20 22:38:21 raspberrypi sds2db: Start sds2db begonnen
Sep 20 22:38:21 raspberrypi sds2db: lösche Alive-Einträge der FuGs aus DB
Sep 20 22:38:22 raspberrypi sds2db: lösche Alive-Einträge des Servers aus DB
Sep 20 22:38:22 raspberrypi sds2db: starte sds2db
Sep 20 22:38:22 raspberrypi sds2db: starte write spooler
Sep 20 22:38:22 raspberrypi sds2db: erstelle Cronjob für regular run skript
Sep 20 22:38:22 raspberrypi sds2db: initialisiere serielle Schnittstelle "ttyUSB0"
Sep 20 22:38:22 raspberrypi sds2db: starte read spooler auf "ttyUSB0"
Sep 20 22:38:22 raspberrypi pei.init: initialisiere PEI Schnittstelle an "ttyUSB0"
Sep 20 22:38:23 raspberrypi pei.init: registriere TE für Status-SDS
Sep 20 22:38:24 raspberrypi pei.init: registriere TE für LIP
Sep 20 22:38:26 raspberrypi pei.init: registriere TE für Text Messaging
Sep 20 22:38:27 raspberrypi pei.init: lese MS Identität
Sep 20 22:38:28 raspberrypi sds2db: konfiguriere Logfile-Rotation für "/usr/local/sds2db/var/log/sds2db.log.ttyUSB0"
Sep 20 22:38:28 raspberrypi sds2db: Start sds2db abgeschlossen
Sep 20 22:39:02 raspberrypi regular.run: Server "raspberrypi" Alive-Eintrag in DB "sds2db" hinzugefügt
Sep 20 22:40:01 raspberrypi regular.run: Server "raspberrypi" Alive-Eintrag in DB "sds2db" aktualisiert
.
.
.

Habt Ihr Hinweise was ich hier falsch mache???

Gruß Grisu911

PS.: Es wurde des öffteren darüber geschrieben das es noch php-Projekte gibt, könnten die vielleicht mal hochgeladen werden???

flachrelais_48
21.09.2015, 08:35
Die beiden Log-Dateien beinhalten folgende Meldungen:

sds2db.log.null:
Sep 20 23:24:34 raspberrypi sds2db: <- ATZ
Sep 20 23:24:35 raspberrypi sds2db: <- AT+CTSP=1,2,20
Sep 20 23:24:36 raspberrypi sds2db: <- AT+CTSP=1,3,10
Sep 20 23:24:37 raspberrypi sds2db: <- AT+CTSP=1,3,130
Sep 20 23:24:38 raspberrypi sds2db: <- AT+CNUMF?



Ich sehe hier zwei Auffälligkeiten:

1. Der Name der Logdatei
- Das Logfile wird für jedes konfigurierte Interface geschrieben. Das "null" weist darauf hin, dass "/dev/ttyUSB0" nicht als Character Device existiert.

2. Die fehlenden Antworten vom Funkgerät
- Auf die Initialisierungskommandos müsste das Funkgerät eigentlich antworten, was hier nicht passiert.

Welche Bezeichnung hat dein Kabel?

Welchen RS232/USB Adapter benutzt du?

Schaue doch mal mit "tail -f /var/log/messages" oder "tail -f /var/log/syslog" welche Logmeldungen geschrieben werden, während du das Kabel ansteckst. Mir ist so, als würde der Pi das Device nicht /dev/ttyUSB0 nennen, sondern /dev/ACM0 oder so ähnlich.

grisu911
21.09.2015, 10:26
Hallo,

danke für die schnelle Antwort.
Eingehangen wurde das Gerät schon auf /dev/ttyUSB0
Sep 20 23:17:21 raspberrypi kernel: [ 8.134611] usb 1-1.3: pl2303 converter now attached to ttyUSB0
Als Kabel wird das Datenkabel PMKN4025A genutzt, welches auch unter Windows z.B. bei TetraControl funktioniert. Ich bekomme ja bei "screen /dev/ttyUSB0" Daten über die Schnittstelle.

Das was mich irritiert ist folgender Eintrag
ttyToListenTo="ttySDS2DB0" muss hier auch "ttyUSB0" rein oder was anderes rein???
Wenn ich es auf ttyUSB0 stelle geht es auch nicht.
Irrgendwas schein an meiner config nicht zu stimmen, ich weiß nur nicht was!?!?!

Hier noch mal die ganze Config:
#!/bin/bash
################################################## ################################################## ###########
# Titel: sds2db.conf
# Autor: Michael Kaden
# Datum: 30.12.2012
#
# Funktion:
# Dieses Skript ist Bestandteil von sds2db. Hier werden Konfigurationsvariablen gesetzt und Funktionen
# beschrieben, die durch das Einbinden des Skripts in allen sds2db-Skripten programmweit verfügbar sind.
#
# Zweck:
# Das Skript ermöglicht die zentrale Konfiguration von sds2db.
#
# Copyright (C) 2013 Michael Kaden
#
# Dieses Programm ist freie Software. Sie können es unter Beachtung der Nutzungsbedingungen benutzen,
# weitergeben und modifizieren.
# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird,
# aber OHNE IRGENDEINE GARANTIE, sogar ohne die Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
# BESTIMMTEN ZWECK.
################################################## ################################################## ###########
configfile="/usr/local/sds2db/etc/$skriptname.conf"
programdir="/usr/local/sds2db/bin"
skriptname="sds2db"
program="$programdir/$skriptname"
readspooler="pei.read"
writespooler="pei.write"
inithelper="pei.init"
regular_run="regular.run"
readspooldir="/usr/local/sds2db/var/spool/read"
writespooldir="/usr/local/sds2db/var/spool/write"
pidfiledir="/var/run"
runfiledir="/usr/local/sds2db/var/run"
logfile="/usr/local/sds2db/var/log/$skriptname.log"
initscript="/etc/init.d/$skriptname"
sttybin="/bin/stty"
mysqlbin="/usr/bin/mysql"
awkbin="/usr/bin/awk"
inotifybin="/usr/bin/inotifywait"
db="sds2db"
dbuser="root"
dbpass="root"
db_sds_table="sds2db_sds"
db_radios_table="sds2db_radios"
db_servers_table="sds2db_servers"
now=$(date +"%b %d %H:%M:%S")
host=$(/bin/hostname)
# Name der ersten zu konfigurierenden seriellen Schnittstelle (ohne "/dev/")
# Beispiel: serialdev_1="ttyS0"
#
serialdev_1="ttyUSB0"
#
# Initialisierungskommandos für erste zu konfigurierende serielle Schnittstelle
serialdev_1_init_1="$sttybin -F /dev/$serialdev_1 0:0:cbf:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
#
# Moxa serial device server starten
#serialdev_1_init_1="/sbin/modprobe npreal2 ttymajor=33 calloutmajor=38 verbose=0"
#serialdev_1_init_2="/usr/lib/npreal2/driver/mxloadsvr"
# Parameter der seriellen Schnittstelle mittels "stty" konfigurieren (38400,8,n,1)
#serialdev_1_init_3="$sttybin -F /dev/$serialdev_1 0:0:80000cbd:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
#
# Name der zweiten zu konfigurierenden seriellen Schnittstelle (ohne "/dev/"; auskommentieren, wenn nicht gebraucht)
# Beispiel: serialdev_2="ttyS1"
#
#serialdev_2="ttyS0"
#
# Initialisierungskommandos für zweite zu konfigurierende serielle Schnittstelle
# Beispiel: serialdev_2_init_1="$sttybin -F /dev/$serialdev_2 0:0:80000cbd:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
#
# Parameter der seriellen Schnittstelle mittels "stty" konfigurieren (9600,8,n,1)
#serialdev_2_init_1="$sttybin -F /dev/$serialdev_2 0:0:80000cbd:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
#
# Schnittstellenparameter für stty
# 115200,8,n,1: "0:0:80001cb2:0:3:1c:7f:15:1:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
# 57600,8,n,1: "0:0:80001cb1:0:3:1c:7f:15:1:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
# 38400,8,n,1: "0:0:80000cbf:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0" (RTS/CTS)
# 38400,8,n,1: "0:0:cbf:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16 :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0" (ohne Handshake)
# 9600,8,n,1: "0:0:80000cbd:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f: 17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0"
#
# userdefinierbare Initialisierungskommandos (auskommentieren, wenn nicht gebraucht; Text zwischen []-Klammern erscheint im Logfile)
#
#userinit_1="/usr/local/sds2db/bin/user.init[starte /usr/local/sds2db/bin/user.init]"
#
# an welchen Interfaces soll sds2db lauschen? (mehrere durch Leerzeichen trennen)
# Beispiel: ttyToListenTo="ttyS0 ttyS1"
#
ttyToListenTo="ttySDS2DB0"
#
# soll sds2db empfangene Statusmeldungen als Quittung zurücksenden?
# Beispiel: confirmStatusSDS="yes"
#confirmStatusSDS="yes"
#
# soll sds2db SDS-Empfangsquittungen senden, wenn sie angefordert werden?
# Beispiel: SDSdeliveryReport="yes"
#SDSdeliveryReport="yes"
#
# Funktion für Datenbankzugriff
#
exec_mysql() {
$mysqlbin $db --protocol=TCP -u $dbuser -p$dbpass <<EOFMYSQL
$1;
EOFMYSQL
return $?
}


Gruß Grisu911

flachrelais_48
21.09.2015, 17:43
Ja genau. So wie es im Kommentar der Konfig steht. ;-) Wenn dein Device ttyUSB0 heißt, muss natürlich das Programm auf dieses Gerät gebunden werden.
ttyToListenTo="ttyUSB0"

Wenn es trotzdem nicht geht, könntest du noch die Parameter der seiellen Verbindung prüfen, ob sie zur PEI-Konfig passt.

Du setzt /dev/ttyUSB0 auf 38400 Bit/s,8 Datenbits, kein Paritätsbit, 1 Stopbit.

grisu911
21.09.2015, 21:26
Hallo,

nach Änderung der ttyToListenTo zu "ttyUSB0" und der Parameter der seriellen Schnittstelle zu 9600,8,n,1 klappt es.
Hatte ich gestern auch schon alles probiert, aber wahrscheinlich irrendwie nicht in der Kombination.

Also Danle für die schnell Unterstützung.

Nun noch die folgende Frage:
pi@raspberrypi ~ $ sudo /etc/init.d/sds2db start
Starting sds2db... /etc/init.d/sds2db: line 115: ((: != 0 : syntax error: operand expected (error token is "!= 0 ")
done!

Was hat diese Fehlermeldung beim Starten zu bedeuten?

Gruß Grisu911

flachrelais_48
21.09.2015, 23:34
Wird die Fehlermeldung bei jedem Start angezeigt?

Der bemängelte Vergleich in Zeile 115 des Init-Skriptes bezieht sich auf folgenden Abschnitt:

# Wenn Initialisierung nicht erfolgreich war
if (( "$ret_userinit" != 0 )); then
# Fehlermeldung ins Logfile schreiben und Skript beenden
echo "$(date +"%b %d %H:%M:%S") $host $skriptname: Stop! Userdefinierbares Init-Kommando fehlgeschlagen" >> $logfile
echo "failed!"
stop_deamon
exit 1
fi

Welche Shell benutzt du? Bash? Ich sehe die Meldung zum ersten Mal. Du kannst ja tesweise in Zeile 115 die 0 in Anführungszeichen setzen. (( "$ret_userinit" != "0" )) oder die Anführungszeichen weglassen (( $ret_userinit != 0 ))

Nachtrag: Mir ist in deinem Post der Konfig aufgefallen, dass in den Strings zum Initialisieren der RS232-Ports Leerzeichen stehen, die dort nicht hingehören. Stehen die wirklich in deiner Konfig, oder ist das ein Kopierfehler im Post?

huaba
11.11.2015, 16:39
Hallo zusammen,

gibt es eine aktualissierte/andere Version bereits als Download?

flachrelais_48
11.11.2015, 23:47
Ähm. Nee. Habe es noch so erweitert, dass es so für andere nicht benutzbar wäre. Muss also mal eine Version "abspecken" und anonymisieren. Bin z.Zt. etwas eingespannt, da die 12V-Stromversorgung unseres Funkschranks plötzlich nach 24 Jahren ausgefallen ist.

MiThoTyN
16.11.2015, 10:07
Sorry für's OT werden, aber:

"plötzlich" und "nach 24 Jahren" passt ja nun mal gar nicht zusammen. ;-)

Gruß Joachim

B.Eng.
24.11.2015, 19:38
Hi Leute,

schaltet ihr euer Funkgerät auf eine spezielle Datengruppe um den Status eurer Fahrzeuge empfangen zu können?
Wenn ja, wisst ihr ob diese in Bayern auch für normale BOS Anwender zur Verfügung steht?

Gruß B.Eng.

flachrelais_48
24.11.2015, 22:50
Ja, wir haben eine Datengruppe. Diese ist als Status- und Positions-Ziel in den HRT und MRT eingetragen. Die Gruppe ist nur auf den (sehr wenigen) Geräten verfügbar, die diese Daten empfangen können sollen. Die "normalen" HRT und MRT haben die Gruppe nicht zur Auswahl.
Wie es in Bayern gehandhabt wird, weiß ich nicht. Hast du keinen Ansprechpartner bei deiner AS?

flachrelais_48
05.12.2015, 16:41
Hier ist mal eine aktuelle Version von SDS2DB. Ich habe das Paket geteilt.

1. SDS2DB empfängt die SDS mittels PEI und schreibt sie in eine MySQL-Datenbank. Konfigurierbar können die SDS an weiteres Skript (SDSprocess) übergeben werden. Größte Neuerung ist die Nutzbarkeit von ISSI-Whitelists, um nur Meldungen von FuGs zu verarbeiten die in der Liste konfiguriert sind.

2. SDSprocess ist eine Ergänzung zu SDS2DB und kann die SDS mittels entsprechender PHP-Funktionen decodieren, SDS-Quittungen senden, SDS-Datagramme erzeugen und an serielle Ports weiterleiten (z.B. eine EDP4-Schnittstelle).

Da Dateien mit der Endung tgz nicht zum Hochladen erlaubt sind, habe ich die Endung zip rangehängt. Bitte nach dem Download das ".zip" wieder aus dem Dateinamen löschen.

Vor dem Auspacken auf dem Zielsystem (tar xvpPzf ....tgz) bitte eine vorhandene Installation umbenennen. (/usr/local/sds2db -> /usr/local/sds2db.old sowie /etc/init.d/sds2db -> /etc/init.d/sds2db.old)

Als nächstes, plane ich, das Datei-basierte Spool-Verfahren für die Kommunikation auf MQTT umzustellen. Dann kann die Auswertung der empfangenen Meldungen besser modularisiert werden.

oliversc
04.01.2016, 21:46
Nach diversen kleinen und mittleren Schwierigkeiten habe ich sds2db jetzt auch "up and running".
Momentan noch auf einem Std-Linux-PC. Datenbank wird in den nächsten Tagen auf einen Intranet Server umziehen.
Scripts kommen sowohl auf einem Raspberry PI2 als auch einem Alix-Board zum Einsatz.
WebGui auf Basis von PHP/MySql ist funktional fertig. Layout wird noch gebastelt.

Ein gaaaaaaaanz dickes Lob an Michael - sich durch die PEI Doku durch zu wurschteln ist der Hammer.


ToDo: Umbau der kompletten Funktionalität auf PHP Scripte

dabei kommt dann ggf eine Version f. Windows dabei rum.. mal sehen.


Leider kann ich mangels Tetra-BOS Geräten das ganze nicht encrypted testen. Wenn da jemand Spass dran hat... ;-)

LG aus der verschneiten Eifel
Oli

flachrelais_48
05.01.2016, 15:39
Hallo Oli,

schön, zu lesen...


Nach diversen kleinen und mittleren Schwierigkeiten habe ich sds2db jetzt auch "up and running".
Welche Schwierigkeiten waren das und wie hast du sie gelöst?


Datenbank wird in den nächsten Tagen auf einen Intranet Server umziehen.
Sollte keine weiteren Herausforderungen stellen. Ich gehe über einen SSH-Tunnel zu einer DB auf einem gehosteten Server mit Internet-Anbindung.


Ein gaaaaaaaanz dickes Lob an Michael - sich durch die PEI Doku durch zu wurschteln ist der Hammer.
Das tut gut. :-)


WebGui auf Basis von PHP/MySql ist funktional fertig. Layout wird noch gebastelt.
Ich nutze als Web-GUI das (von mir erweiterte) monitord Web-Frontend von Martin Diedrich, bin aber interessiert, welche Frontends andere nutzen. Also ich würde mich über ein paar Screenshots freuen.


ToDo: Umbau der kompletten Funktionalität auf PHP Scripte

dabei kommt dann ggf eine Version f. Windows dabei rum.. mal sehen.
Was meinst du mit "kompletten Funktionalität"?


Leider kann ich mangels Tetra-BOS Geräten das ganze nicht encrypted testen. Wenn da jemand Spass dran hat... ;-)
Die Verschlüsselung ist ja für die PEI nahezu transparent. Aber zum Testen findet sich bestimmt jemand.

Schöne Grüße

oliversc
05.01.2016, 20:10
Welche Schwierigkeiten waren das und wie hast du sie gelöst?



Das System auf dem Alix-Board läuft auf einer CF-Karte. Da ja bekanntlich die Anzahl der Schreiboperationen auf einer CF Karte beschränkt sind, ist das ganz als 'read-only'-Filesystem aufgesetzt in dem die beschreibbaren Verzeichnisse (LogFiles, Datenbankfiles, Indizies, Spooldateien, .pif Files usw.) ins RAM gemounted werden. Das "verbiegen" der mountpoints und Pfade ist halt manchmal etwas schwierig.
Was sds2db betrifft bin ich anfangs immer mal wieder über vom System zur Telnet-Anmeldung aktivierte Serielle Schnittstellen gestolpert. Ärgerlich in dem Zusammenhang ist halt dann wenn man die einzig vorhanden serielle Schnittstelle für sds2db nutzt und aber dann einen Fehler in der Netzwerk-Config hat, dann geht nix mehr bei Systemen ohne Grafikkarte.



Ich nutze als Web-GUI das (von mir erweiterte) monitord Web-Frontend von Martin Diedrich, bin aber interessiert, welche Frontends andere nutzen. Also ich würde mich über ein paar Screenshots freuen.


Da kann man drüber reden ;-), das wird aber noch ein/zwei Wochen dauern.



Was meinst du mit "kompletten Funktionalität"?


Ablegen aller Parameter in einer MySql-DB. Über die Config bis hin zu den encode/decode Arrays.
In dem Zusammenhang bin ich auch das ein oder andere mal über verschiedene Problemchen/Herausforderungen gestolpert. So hat z.B. OpenWRT ein paar benutzte Kernel Funktionalitäten in den Std-Builds nicht drin (z.B. inotifywait), hat aber den Vorteil ein unhemlich performantes System zu sein und für viele "headless" Systeme verfügbar zu sein.



Die Verschlüsselung ist ja für die PEI nahezu transparent. Aber zum Testen findet sich bestimmt jemand.


Nun ja, nahezu ->

Jan 05 19:06:07 alix.site sds2db: tx AT+CTSDS=12,0,0,0,1
Jan 05 19:06:08 alix.site sds2db: rx +CME ERROR: 34

Jan 05 19:06:07 alix.site sds2db: tx AT+CTSDS=12,0,0,0,0
Jan 05 19:06:08 alix.site sds2db: rx OK

;-)

flachrelais_48
05.01.2016, 21:25
Das System auf dem Alix-Board läuft auf einer CF-Karte. Da ja bekanntlich die Anzahl der Schreiboperationen auf einer CF Karte beschränkt sind, ist das ganz als 'read-only'-Filesystem aufgesetzt in dem die beschreibbaren Verzeichnisse (LogFiles, Datenbankfiles, Indizies, Spooldateien, .pif Files usw.) ins RAM gemounted werden. Das "verbiegen" der mountpoints und Pfade ist halt manchmal etwas schwierig.

Das klingt ja interessant, was für eine Distro hast du genommen und wie hast du die Mountpoints umgebogen?


Was sds2db betrifft bin ich anfangs immer mal wieder über vom System zur Telnet-Anmeldung aktivierte Serielle Schnittstellen gestolpert. Ärgerlich in dem Zusammenhang ist halt dann wenn man die einzig vorhanden serielle Schnittstelle für sds2db nutzt und aber dann einen Fehler in der Netzwerk-Config hat, dann geht nix mehr bei Systemen ohne Grafikkarte.

Ich habe sehr gute Erfahrungen mit FTDI USB/RS232 Adaptern gemacht. Da sie eindeutige Seriennummern in der USB-Firmware mitbringen, kann man schöne UDEV-Regeln anlegen und sprechende Links erzeugen.


In dem Zusammenhang bin ich auch das ein oder andere mal über verschiedene Problemchen/Herausforderungen gestolpert. So hat z.B. OpenWRT ein paar benutzte Kernel Funktionalitäten in den Std-Builds nicht drin (z.B. inotifywait), hat aber den Vorteil ein unhemlich performantes System zu sein und für viele "headless" Systeme verfügbar zu sein.

Inotifywait ist für mich Geschichte. Habe in meiner ständigen Entwicklungsversion das Spool-System auf MQTT (mosquitto) umgestellt. Das beschleunigt die Kommunikation von SDS2DB mit den MT's deutlich. (obwohl es kein Problem war)

oliversc
07.01.2016, 14:26
Das klingt ja interessant, was für eine Distro hast du genommen und wie hast du die Mountpoints umgebogen?

Debian GNU/Linux 6.0 - readonly filesyste in Anlehnung an https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash





Ich habe sehr gute Erfahrungen mit FTDI USB/RS232 Adaptern gemacht. Da sie eindeutige Seriennummern in der USB-Firmware mitbringen, kann man schöne UDEV-Regeln anlegen und sprechende Links erzeugen.

Sowas dachte ich mir schon "ser_device=TETRA1" ;-)



Inotifywait ist für mich Geschichte. Habe in meiner ständigen Entwicklungsversion das Spool-System auf MQTT (mosquitto) umgestellt. Das beschleunigt die Kommunikation von SDS2DB mit den MT's deutlich. (obwohl es kein Problem war)
hört sich interessant an.. kann ein host gleichzeitig Borker, Subscriber und Publisher sein? also alles auf einer physikalischen Maschine?

By the way
was schicke ich denn an für eine LIP Abfrage an ein Geräte dass es mir mit seinen GPS Koordinaten antwortet?

LG
Oli

flachrelais_48
07.01.2016, 16:35
Debian GNU/Linux 6.0 - readonly filesyste in Anlehnung an https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash

Danke, schaue ich mir mal an...


hört sich interessant an.. kann ein host gleichzeitig Borker, Subscriber und Publisher sein? also alles auf einer physikalischen Maschine?

Mit der Installation von mosquitto wird der Brokerdaemon eingerichtet. mosquitto_sub ist Subscriber, mosquitto_pub ist Publisher. Bei mir alles auf einer Maschine. Ist aber kein Muss. Man kann die Rollen auch auf verschiedene Maschinen aufteilen. Auf Wunsch mit Authentifizierung und TLS-Verschlüselung.


By the way
was schicke ich denn an für eine LIP Abfrage an ein Geräte dass es mir mit seinen GPS Koordinaten antwortet?

Ein "Immediate location report request". Habe meine SDS-Encode PHP-Funktion schon erweitert. ;-)

oliversc
07.01.2016, 17:40
Mit der Installation von mosquitto wird der Brokerdaemon eingerichtet. mosquitto_sub ist Subscriber, mosquitto_pub ist Publisher. Bei mir alles auf einer Maschine. Ist aber kein Muss. Man kann die Rollen auch auf verschiedene Maschinen aufteilen. Auf Wunsch mit Authentifizierung und TLS-Verschlüselung.




Ein "Immediate location report request". Habe meine SDS-Encode PHP-Funktion schon erweitert. ;-)
[/QUOTE]


Magst du mir da Einblick in deine Konfig (mosqitto) und die SDS Encode Funktion gewähren? ;-)

Eins meiner Projekte hier ist die Fernsteuerung (Ein- Ausschalten) von Lampen über Tetra.
Es stellt sich dabei die Frage ob ein FuG auch SDS aus Scan Gruppen zuverlässig empfangen kann. (SDS2Group).
Das heisst wenn ich im Maximalausbau 50 FuG habe, die auf bis zu 6 verschiedenen (Daten)Gruppen hören so dass ich die "Gruppenweise" ansprechen kann.. geht das ?

flachrelais_48
07.01.2016, 18:39
Eins meiner Projekte hier ist die Fernsteuerung (Ein- Ausschalten) von Lampen über Tetra.
Es stellt sich dabei die Frage ob ein FuG auch SDS aus Scan Gruppen zuverlässig empfangen kann. (SDS2Group).
Das heisst wenn ich im Maximalausbau 50 FuG habe, die auf bis zu 6 verschiedenen (Daten)Gruppen hören so dass ich die "Gruppenweise" ansprechen kann.. geht das ?

Mit SDS Empfang aus Scan-Gruppen habe ich gar keine Erfahrung. Meine FRT haben ihre Datengruppe gewählt. Alle HRT/MRT senden Status, LIP-Meldungen und Text-SDS an die Datengruppe. Von der Leitstelle zu den HRT/MRT gehen SDS an die ISSI. Für deine M2M Anwendung (jetzt wird mir dein Headless-Read-Only-FS-Ansatz klar ;-) würde ich aber mit jeder Lampe einzeln kommunizieren und deine Gruppenbildung auf Anwendungsebene realisieren. Da bist du viel flexibler und musst nicht mit komischen Scangruppen-SDS hantieren. ;-) Oder ist es wichtig, dass die Lampen gruppenweise syncron schalten?

ahk
07.01.2016, 22:33
Wenn ein Endgerät gerade aktiv in einer Gruppe Empfängt (z.b. ein Gespräch), dann kommen SDS an eine andere Scan Gruppe nicht an.

Aber wenn Du 50 FuGs hast in 6 Gruppen, dann sind doch ca. 8 Geräte in einer Gruppe, die Du dann gemeinsam schalten kannst. Wofür dann Scangroups?
Oder habe ich da was falsch verstanden?

Gruß
Arne

oliversc
08.01.2016, 09:28
Mit SDS Empfang aus Scan-Gruppen habe ich gar keine Erfahrung. Meine FRT haben ihre Datengruppe gewählt. Alle HRT/MRT senden Status, LIP-Meldungen und Text-SDS an die Datengruppe. Von der Leitstelle zu den HRT/MRT gehen SDS an die ISSI. Für deine M2M Anwendung (jetzt wird mir dein Headless-Read-Only-FS-Ansatz klar ;-) würde ich aber mit jeder Lampe einzeln kommunizieren und deine Gruppenbildung auf Anwendungsebene realisieren. Da bist du viel flexibler und musst nicht mit komischen Scangruppen-SDS hantieren. ;-) Oder ist es wichtig, dass die Lampen gruppenweise syncron schalten?

Die Frage ist halt wie schnell 50 SDS hintereinander rausgehen.. wenn wir von einem Zeitraum von 15-20 Sekunden reden ist das sicherlich zu verschmerzen, bei allem was darüber hinaus geht wird es schon schwierig. Zumal ja auch jeder einzelne Empfänger seine Aktion (die untersschiedlich sein kann) quittiert.
Ist hal nicht so einfach eine heisorisch gewachsene Struktur mal up-zo-date zu bringen.. und Lösungen von der Stange gibts für diesen Einsatzzweck absolut gar keine..

oliversc
08.01.2016, 10:36
Wenn ein Endgerät gerade aktiv in einer Gruppe Empfängt (z.b. ein Gespräch), dann kommen SDS an eine andere Scan Gruppe nicht an.

Aber wenn Du 50 FuGs hast in 6 Gruppen, dann sind doch ca. 8 Geräte in einer Gruppe, die Du dann gemeinsam schalten kannst. Wofür dann Scangroups?
Oder habe ich da was falsch verstanden?


Die Geräte werden ausschliesslich zur M2M (machine to machine) Kommunikation verwendet. Ausser SDS passiert auf den Geräten nix.
Verschiedene Gruppen damit diese Geräte en Bloc angesprochen werden können. Scan Gruppen weil verschiedene Szenarien halt vorsehen dass verschiedene Geräte je nach Szenario "zusammengehören"

flachrelais_48
08.01.2016, 13:12
Die Geräte werden ausschliesslich zur M2M (machine to machine) Kommunikation verwendet. Ausser SDS passiert auf den Geräten nix.
Verschiedene Gruppen damit diese Geräte en Bloc angesprochen werden können. Scan Gruppen weil verschiedene Szenarien halt vorsehen dass verschiedene Geräte je nach Szenario "zusammengehören"

Ich bleibe dabei... ;-) Alle in eine Datengruppe und die Adressierung der zu steuernden Systeme auf Anwendungsebene machen. Also eine SDS mit dem Kommando "Lampen an / Steuergruppe 27" an die eine Tetra-Daten-Gruppe schicken. Der empfangende Steuerrechner schaut ob er zur Steuergruppe 27 gehört und das Kommando ausführt, oder nicht. Wenn du flexibel bleiben willst, machst du die Steuergruppenzugehörigkeit dynamisch und steuerst sie auch per Kommando-SDS. Vlt. gibt es da ja ein Protokoll aus der Automationstechnik, an dem du dich orientieren kannst? Mit MQTT lässt sich auf den Steuerrechnern ja auch ein Control-Stack umsetzen (Stichwort "Retained Message").

oliversc
08.01.2016, 15:39
Ich bleibe dabei... ;-) Alle in eine Datengruppe und die Adressierung der zu steuernden Systeme auf Anwendungsebene machen. Also eine SDS mit dem Kommando "Lampen an / Steuergruppe 27" an die eine Tetra-Daten-Gruppe schicken. Der empfangende Steuerrechner schaut ob er zur Steuergruppe 27 gehört und das Kommando ausführt, oder nicht. Wenn du flexibel bleiben willst, machst du die Steuergruppenzugehörigkeit dynamisch und steuerst sie auch per Kommando-SDS. Vlt. gibt es da ja ein Protokoll aus der Automationstechnik, an dem du dich orientieren kannst? Mit MQTT lässt sich auf den Steuerrechnern ja auch ein Control-Stack umsetzen (Stichwort "Retained Message").

Was auf Empfängerseite hinter dem Radio passiert kann ich leider nur sehr eingeschränkt beeinflussen.
Die Idee auch dort etwas habwegs intelligentes an Technik zu installieren gestaltet sich aus den verschiedensten Gründen schwierig bis quasi unmöglich.
Gruppenzugehörigkeit dynamisch höst sich nach nem guten Plan an..

flachrelais_48
08.01.2016, 23:11
Was auf Empfängerseite hinter dem Radio passiert kann ich leider nur sehr eingeschränkt beeinflussen.
Die Idee auch dort etwas habwegs intelligentes an Technik zu installieren gestaltet sich aus den verschiedensten Gründen schwierig bis quasi unmöglich.


Das macht so ein M2M Projekt natürlich nicht einfacher. Ohne Logik auf Empfängerseite wird's schwierig. Wie stellst du dir das vor?

oliversc
11.01.2016, 10:01
Das macht so ein M2M Projekt natürlich nicht einfacher. Ohne Logik auf Empfängerseite wird's schwierig. Wie stellst du dir das vor?

Eine gewisse Logik ist vorhanden, nur leider sehr rudimantär. Hinter den FuG sind irgendwelche MikroController die zumindest ein paar Rückmeldungen an das FuG weitergeben. Leider sind die natürlich nicht alle gleich - wo kämen wir denn dahin. ;-)
Das Leben steckt heir voller Überaschungen, und je mehr ich technisch hinterfrage, umso mehr Baustellen tun sich auf.. Von daher bin ich lieber erstmal vorsichtig...

oliversc
20.01.2016, 23:54
Das macht so ein M2M Projekt natürlich nicht einfacher. Ohne Logik auf Empfängerseite wird's schwierig. Wie stellst du dir das vor?

mal wieder ein kurzes Update..
nach diversen Gesprächen und gaaaanz viel Kaffee mit dem technischen Ansprechpartner der Empfängerseite werden jetzt Arduino Boards als Empfangs-Steuerkomponente eingesetzt.
Damit ist dann auch mehr als genug Logig auf der Empfänergseite vorhanden um vernünftig zu kommunizieren.

Serverseitig ist mittlerweile die Konfig so geändert dass das Alix Board nur noch der reinen Kommunikation dient. hat den Vorteil dass ich außer für die Logfiles mit einem reinen readonly filesystem arbeiten kann.
sds2db kommuniziert in einem seperaten Subnetz über ssh mit dem Datanbankserver der auch die Gui zur Verfügung stellt.

Was mir momentan noch ein wenig Kopfzerbrechen bereitet ist das pollen von LIP Daten.. irgendwie bekomme ich das nicht wirklich hin. Jedenfalls antwortet kein Gerät mit seinen GPS Daten.
Gibts da irgenwas spezielles was ich im HRT MTH800 bzw 850 aktivieren oder deaktivieren muss damit das angesprochene Gerät auch antwortet?

flachrelais_48
21.01.2016, 17:46
Hast du denn das GPS Feature auf deinen Geräten verfügbar? Das muss natürlich im Codeplug aktiviert und konfiguriert sein. Meine Geräte antworten auf einen Immediate Location Report Request.

oliversc
22.01.2016, 07:31
Hast du denn das GPS Feature auf deinen Geräten verfügbar? Das muss natürlich im Codeplug aktiviert und konfiguriert sein. Meine Geräte antworten auf einen Immediate Location Report Request.

Kann mir auf den Geräten zum Beispiel die GPS Koordinaten anzeigen lassen. .

flachrelais_48
23.01.2016, 12:43
Ja, aber das sagt nichts darüber, ob auch LIP als Transport-Protokoll konfiguriert ist.
Wie sieht es denn auf deinem Leitstellen-Daten-Gerät aus? Dort muss das GPS Feature Flag deaktiviert sein.
Interessant wäre auch das Schnittstellenlog der PEI-Initialisierung von sds2db. Ist die Antwort auf "AT+CTSP=1,3,10" "OK"?

oliversc
03.02.2016, 12:41
Ja, aber das sagt nichts darüber, ob auch LIP als Transport-Protokoll konfiguriert ist.
Wie sieht es denn auf deinem Leitstellen-Daten-Gerät aus? Dort muss das GPS Feature Flag deaktiviert sein.
Interessant wäre auch das Schnittstellenlog der PEI-Initialisierung von sds2db. Ist die Antwort auf "AT+CTSP=1,3,10" "OK"?


Mittlerweile hab ich den Fehler gefunden.
Mein Leistellen-Gerät muss in die Liste der LIP berechtigten Geräte eingtragen sein.. sonst klappt das nicht.. ;)

flachrelais_48
03.02.2016, 22:26
Ach ja, jezt wo ich es lese.... Musste ich bei mir auch anpassen. Sorry. Bei meiner Version ist es aber keine Liste sondern eine Range die durch "GPS Authorized ISSI Base" und "GPS Authorized ISSI Range" definiert wird.

TLF1625
13.01.2018, 18:22
Hallo flachrelais_48,

wollte mal nachfragen, ob du deine Version von SDS2DB die auf Mosquitto umgestellt ist, für uns hier bereitstellen kannst ??? Oder hast du optional eine Anleitung, wie ich SDS2DB auf Mosquitto umstellen kann ?
Wir nutzen SDS2DB mittlerweile im ELW, allerdings nicht in einer reinen Datengruppe. Bei vielen Gesprächen wächst der spool Ordner jedoch recht flott auf einige Dateien an. Beispielsweise bei den Unwettern vor zwei Wochen hinkte meine Dokumentation dann immer gut 5 (teilweise 10) Minuten dem eigentlichen Gespräch hinterher.
Wenn ich das oben im Thread richtig verstanden habe, dann verarbeitet die Mosquitto Lösung die Kommunikation schneller?!

Danke schonmal im Voraus.
TLF1625

flachrelais_48
13.01.2018, 21:11
Oh ja, Mosquitto ist ein Quantensprung gegenüber dem alten Spool-File-System.
Bei meinem Projekt hat sich viel getan. Nachdem es immer mehr Funktionen abdecken musste, habe ich es umbenannt und neu strukturiert. Es heißt jetzt "SMI" (Short Message Intermediary). Die Funktionen habe ich modularisiert. Es gibt nun Transceiver-Plugins und Subscriber-Plugins. Die Transceiver-Plugins (SDS, SMS und POCSAG) publishen empfangene Nachrichten auf ihrem MQTT-Topic. Die Subscriber-Plugins (mysql,sdsfrpoc,sdsfrsms) abonnieren die MQTT-Topics und verarbeiten die Nachrichten. Das System ist so flexibel für Erweiterungen. Denkbar wären z.B. künftige Transceiver-Plugins für Messenger-Anbindungen wie Signal oder Telegram. Ich habe auch die Sys-v-Initscripte auf Systemd-Units umgestellt.

Ich werde demnächst modularisierte tgz-Archive bereitstellen. Dann kann sich jeder sein SMI nur mit den benötigten Modulen installieren.
Die alte SDS2DB-Version umzustricken ist eher keine Option. Was macht ihr denn im ELW damit? Habt ihr ein Status-Frontend?

viliv
13.01.2018, 22:19
Hallo das klingt interessant.
Kann die Software auch mit den Tetrapagern kommunizieren und Callouts auswerten?

TLF1625
13.01.2018, 22:25
Super! Hört sich extremst vielversprechend an! Jetzt hast du mich erst recht neugierig gemacht. Dann sind wir mal gespannt.

Hab es in unsere selbst programmierte Einsatz-Doku/Verwaltungs-Software miteingebaut. Es ist quasi die Middleware zwischen unserer Software und dem Tetranetz.
Statusmeldungen kann ich leider von unseren Fahrzeugen keine auswerten, da ich keinen Zugriff auf die Datengruppe habe.
Es loggt momentan "nur" die Gespräche von unseren Fahrzeugen in eine Datenbank mit und ich kann darüber SDS versenden und Einzelrufe zu den Geräten starten.

MQTT wird das ganze aber denke ich ein gutes Stück vereinfachen und schneller / stabiler machen.

flachrelais_48
13.01.2018, 23:37
Hallo das klingt interessant.
Kann die Software auch mit den Tetrapagern kommunizieren und Callouts auswerten?

Kann ich so nicht beantworten. Ich habe keinen Tetra-Pager. Haben die Pager (oder Heimstation) denn eine Schnittstelle? Wenn ja, ist das bestimmt mit wenig Aufwand umzusetzen.

viliv
14.01.2018, 11:56
Sowohl Airbus P8ger als auch der Motorola ADVISOR TPG2200 haben eine Schnittstelle, welche AT-Befehle unterstützen.

flachrelais_48
14.01.2018, 22:01
Hier mein aktueller Stand. Aufgrund der komischen Beschränkung der Datei-Typen beim Upload, habe ich wieder ein "zip" anfügen müssen. Nach dem Download einfach umbenennen und das zip wieder entfernen.

..._base.tgz -> das Basispaket
..._trx_sms.tgz -> das Transceiver-Plugin für SMS (GSM-Modem) - benötigt zusätzlich das Programm "Nullmodem" (nullmodem-0.0.6.tar.gz)
..._trx_sds.tgz -> das Transceiver-Plugin für SDS (MTM800FuG/MTP850)
..._trx_poc.tgz -> das Transceiver-Plugin für POCSAG (cijo ANTON)

flachrelais_48
14.01.2018, 23:07
..._sub_mysql.tgz -> Subscriber-Plugin um Meldungen in eine MySQL/MariaDB Datenbank zu schreiben
..._sub_mysql.sql -> SQL zum Anlegen der vom Plugin benutzten Datenbank-Tabellen
..._sub_sdsfrsms.tgz -> Subscriber-Plugin um Nachrichten die per SMS kommen in eine SDS umzuwandeln
..._sub_sdsfrpoc.tgz -> Subscriber-Plugin um Nachrichten die per POCSAG kommen in eine SDS umzuwandeln

Das Programm Nullmodem muss installiert (configure; make; make install) werden, wenn das Transceiver-Plugin für SMS verwendet wird. Nullmodem (a Utility to loopback Pseudo-Terminals) stammt von Juergen Rinas (http://www.ant.uni-bremen.de/whomes/rinas/nullmodem/index.html) und steht unter GPL. Beim Kompilieren kommt es bei mir zu Warnungen. Es funktioniert aber trotzdem.
In den SMS-Plugins verwende ich eine PHP-Klasse von https://github.com/SmsNica/pdu (mit meinen Bugfixes) zum decodieren und encodieren von SMS. Diese Klasse steht unter MIT License.
Die Lizenzbedingungen für alles, was ich geschrieben habe:
# Dieses Programm ist freie Software. Sie können es unter Beachtung der Nutzungsbedingungen benutzen,
# weitergeben und modifizieren.
# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird,
# aber OHNE IRGENDEINE GARANTIE, sogar ohne die Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
# BESTIMMTEN ZWECK.

Alle Archive sollten per root entpackt werden: # tar xvPzf ...tgz Alle Programm-Teile liegen dann unter /usr/local/smi/...
Nullmodem habe ich unter /usr/local/nullmodem installiert (Parameter beim configure: ./configure --prefix=/usr/local/nullmodem). Wenn Sie es wo anders hin installieren, muss der Pfad zum Binary in der Config angepasst werden.
Ansonsten werden einige Linux-Pakete vorausgesetzt: stty awk php socat mosquitto_pub mosquitto_sub md5sum jq bc base64 mysql

Viel Erfolg!

dozzemer
26.04.2018, 19:34
Kann ich so nicht beantworten. Ich habe keinen Tetra-Pager. Haben die Pager (oder Heimstation) denn eine Schnittstelle? Wenn ja, ist das bestimmt mit wenig Aufwand umzusetzen.

Hallo,

ich habe aktuell einen P8GR mit aktiviertem USB-Datenmodem an eine Raspberry-Pi mit aktuellem Raspbian-Image angeschlossen und bin damit am experimentieren...
Der P8GR hat eine PEI-Schnittstelle, die auch einwandfrei erkannt wird und durch dein Script auch angesprochen wird.

Leider klappt es mit der richtigen Interpretation der AT-Befehle noch nicht ganz korrekt und viele Befehle kennt der P8GR wohl auch einfach nicht.
Die Callouts kommen zumindest in der passenden Log-Datei an, nur in der SQL tauchen sie bisher nicht auf...

Da ich selber im Bereich Linux eher Neuling bin und schon sehr stolz auf mich bin, dass ich deine Scripte unfallfrei zum Laufen gebracht habe, wäre es nett, wenn du vielleicht ne Idee hättest, wo es hakt... ;)
Kann dir bei Bedarf gerne mal Logs der Module per PN schicken ;)

flachrelais_48
26.04.2018, 19:55
ich habe aktuell einen P8GR mit aktiviertem USB-Datenmodem an eine Raspberry-Pi mit aktuellem Raspbian-Image angeschlossen und bin damit am experimentieren...
Der P8GR hat eine PEI-Schnittstelle, die auch einwandfrei erkannt wird und durch dein Script auch angesprochen wird.


Na das klingt doch schon vielversprechend.



Leider klappt es mit der richtigen Interpretation der AT-Befehle noch nicht ganz korrekt und viele Befehle kennt der P8GR wohl auch einfach nicht.
Die Callouts kommen zumindest in der passenden Log-Datei an, nur in der SQL tauchen sie bisher nicht auf...


Ohne Dokumentation und ohne eigene Test-Möglichkeit, könnte es etwas umständlicher werden. :-)



Da ich selber im Bereich Linux eher Neuling bin und schon sehr stolz auf mich bin, dass ich deine Scripte unfallfrei zum Laufen gebracht habe, wäre es nett, wenn du vielleicht ne Idee hättest, wo es hakt... ;)
Kann dir bei Bedarf gerne mal Logs der Module per PN schicken ;)

Bin auch stolz auf dich. ;-) Linux ist cool! Hoffentlich fühlen sich andere ermutigt, es dir gleich zu tun. Immer her mit den Logs.

hannes
06.02.2019, 10:08
Bei mir läuft nun alles wunderbar durch, nur folgendes Command gibt einen Fehler zurück:


tx AT+CTSP=1,2,20
rx +CME ERROR: 3



https://www.etsi.org/deliver/etsi_en/300300_300399/30039205/02.02.00_40/en_30039205v020200o.pdf

Wenn ich die Spezifikation richtig Verstehe, steht die
1 -> service profile / 1 = TE only
2 -> service layer1 / Short Data Service (SDS)
20 -> service layer2 / 20 - Status

Verwendet wird das MTM800ET FuG.
Weicht hier Motorola von der Spezifikation ab?

Gibts eigentlich zu der ETSI Spezifikation, irgendwelche Wiki's, HowTo's, etc. - jemanden was bekannt?

flachrelais_48
06.02.2019, 12:14
Bei Motorola verhindert die Notruf-Funktion das Registrieren von Status ausschließlich für die PEI. Also kannst du auf dem FuG Notruf deakivieren oder das SP auf MT + PEI setzen.

hannes
07.02.2019, 10:28
smi: tx AT+CTSP=2,2,20
smi: rx OK


habs geändert nun OK, aber egal was ich für einen Status drücke ich erhalte folgendes:
(ISSI geändert in 1234567)



Status 1 gedrückt:
smi: rx +CTSDSR: 13,2490293,0,1234567,0,16
smi: rx FE00
Status 2 gedrückt:
smi: rx +CTSDSR: 13,2490293,0,1234567,0,16
smi: rx FE00


Ich hätte etwas anders erwartet, da kann ich ja nichts auswerten?

flachrelais_48
07.02.2019, 11:38
Was hättest du denn erwartet? Hast du den Status auf dem Gerät gedrückt wo du mit der PEI verbunden bist? Dann siehst du auf der PEI nicht, welchen Status du sendest. Das "FE00" ist eine Quittung, das dein Staus empfangen wurde. Hast du ein bestimmtes Anwendungsszenario im Auge?

hannes
12.02.2019, 19:30
Im sds.log fand ich folgendes:



19:01:16 sds.motorola.rx.ttyUSB0: txrx: "rx" device: "ttyUSB0" id: "2190211"
19:01:16 sds.motorola.rx.ttyUSB0: visible: 0
19:01:17 sds.motorola.rx.ttyUSB0: creating new rx SDS message object
19:01:17 sds.motorola.rx.ttyUSB0: publishing rx SDS message object on MQTT topic "smi/msg/sds/rx"


Und am Funkgerät wird die Quittierung ja als Neue Nachricht angezeigt... Von ILS XY ... BY..... Auf Wache.
Daher dachte ich, das die Quittierung eine SDS ist.

Folgendes habe ich wenn eine Sprechtaste aufgetastet wird oder?


smi: rx +ENCR: 15,BYXY XYZ0123456789123456

flachrelais_48
12.02.2019, 20:09
Zum PEI-Log bei Drücken der Sprechtaste kann ich nix sagen. In meiner Anwendung sind die FuGs auf eine reine Datengruppe geschaltet. Da wird kein Gruppenruf empfangen.

Zu Zitat: "Und am Funkgerät wird die Quittierung ja als Neue Nachricht angezeigt... Von ILS XY ... BY..... Auf Wache. Daher dachte ich, das die Quittierung eine SDS ist." fällt mir folgendes ein:
Wenn das Nachrichtenrouting auf die PEI gesetzt ist, dürften die Nachrichten nicht mehr im Nachrichteneingang ankommen. Im Umkehrschluss heißt das, dass du noch Meldungen empfängst, die nicht auf die PEI geroutet werden. Sind das Meldungen die auf das "Home Mode Display" gesendet werden? Du kannst ja mal die PIDs 204 und 220 auf die PEI leiten und schauen...

Die Quittungen, die ich im vergangenen Post meinte, waren Status-SDS mit "FE00", die beinhalten aber keinen Text.

hannes
13.02.2019, 09:37
Danke Dir! :) PID 220 wird angenommen, 204 liefert Fehler 33 oder 3.


smi: tx AT+CTSP=1,3,220
smi: rx OK

smi: tx AT+CTSP=1,2,204
smi: rx +CME ERROR: 33
smi: tx AT+CTSP=1,3,204
smi: rx +CME ERROR: 3



sds log wieder wie gewohnt:


sds.motorola.rx.ttyUSB0: txrx: "rx" device: "ttyUSB0" id: "2190211"
sds.motorola.rx.ttyUSB0: visible: 0
sds.motorola.rx.ttyUSB0: creating new rx SDS message object
sds.motorola.rx.ttyUSB0: publishing rx SDS message object on MQTT topic "smi/msg/sds/rx"


und im ttyUSB.log auch nicht mehr:


smi: rx +CTSDSR: 13,2190211,0,1234567,0,16
smi: rx FE00

flachrelais_48
13.02.2019, 19:24
Du könntest mal schauen, ob du die PID 204 für die PEI registrieren kannst, wenn du das Feature-Flag "Home mode display" im Codeplug deaktivierst. (Vergleichbares gilt für das Feature-Flag "GPS" für LIP-SDS an der PEI.)

hannes
14.02.2019, 15:19
Mit PID 137 (Immediate text messaging / flash), kappt's scheinbar:


smi: tx AT+CTSP=1,3,137


Leider klappts mit 2,3,137 nicht, damit die Quittierung auch am Display erscheint.



smi: rx 89006A8D02739142595244........................65


Ab 91 kann ich das von Hexadezimal in ASCII umwandeln. Davor bin ich etwas überfragt, vermutlich sind das Header Daten.
Hat da jemand einen Tipp für mich?

flachrelais_48
14.02.2019, 19:22
Da hilft die ETSI EN 300 392-2. In Table 29.21 wird für "Immediate text messaging" auf Kapitel 29.5.3 (Text messaging using SDS-TL) verwiesen. Es scheint also das "normale" PDU-Schema für text messaging zu sein. Dann sollte meine PHP-Decodier-Funktion die PDU verarbeiten. Wenn du in "share/php/TetraSDS/PDU.decode.php" nach Zeile 83 eine neue Zeile mit dem Inhalt "foreach(get_TextPDU($PDUbin,$ret["StringPos"]) as $key => $value) { $ret[$key] = $value; }" (ohne die äußeren Anführungszeichen) einfügst, sollte die PDU decodiert werden.

hannes
16.02.2019, 13:03
Respekt! Ich glaube du kennst die Spezifikation auswendig.
Werde ich mir anschauen...

Vielen Dank!