Übernommen aus dem Forum.Fm-funknetz.de
Es kommt leider hin und wieder zu Aussetzern von Svxlink wenn das Display nicht im Netzwerk erreichbar ist.
Hier kommt die kleine Abhilfe.
Anlegen der Datei display-status.sh
nano /root/display-status.sh
Bitte die passende IP des Display’s eintragen welche euch auf dem Display angezeigt oder bekannt ist.
#!/bin/bash
## Display IP eintragen
ip='192.168.178.51'
while true
do
if
( nc -zv $ip 80 2>&1 >/dev/null );
then
echo 'online' > /tmp/display-state.txt;
echo $ip > /tmp/display-ip.txt;
else
echo 'offline' > /tmp/display-state.txt;
fi
### Abfrage alle 120s
sleep 120
done
Datei Ausführbar machen
chmod +x /root/display-status.sh
Kurzer Test? mit STRG + X beenden !!
sh /root/display-status.sh
unter /tmp/display-state.txt datei kontrollieren,
cat /tmp/display-state.txt
Nun die ReflectorLogic.tcl bearbeiten, backup der datei kann nie schaden
nano /usr/share/svxlink/events.d/local/ReflectorLogic.tcl
nun wird mittel if else in der Start und Stop Sektion folgendes erweitert
#
# Executed on talker start
#
# tg -- The talk group
# callsign -- The callsign of the talker node
#
proc talker_start {tg callsign} {
variable selected_tg
## Beginn Verzeichnis hinzufügen
set ip1 [exec cat "/tmp/display-state.txt"]
set ip [exec cat "/tmp/display-ip.txt"]
#puts "### Talker start on TG #$tg: $callsign"
if {($tg == $selected_tg)} {
## Beginn Status Display einlesen
if {($ip1 == "offline")} {
puts "display offline"
} else {
## Ende Status Display einlesen
exec curl -i -s -o /dev/null http://$ip/control?cmd=GPIO,14,0 & curl http://$ip/control?cmd=LCD,1,1,%22auf%20TG$tg%20ist%22 & curl http://$ip/control?cmd=LCD,2,1,%22%20%20%20$callsign%22;
## Beginn Status Display einlesen Nr2
puts "Display online "
}
## Ende Status Display einlesen Nr2
}
}
# Executed on talker stop
#
# tg -- The talk group
# callsign -- The callsign of the talker node
#
proc talker_stop {tg callsign} {
variable selected_tg
variable ::Logic::CFG_CALLSIGN
#puts "### Talker stop on TG #$tg: $callsign"
set systemTime [clock seconds]
set last [clock format $systemTime -format %H:%M:%S];
## Hinzufügen der Display Status Pfades
set ip1 [exec cat "/tmp/display-state.txt"]
set ip [exec cat "/tmp/display-ip.txt"]
if {($tg == $selected_tg)} {
##Beginn Status Display einlesen
if {($ip1 == "offline")} {
puts "Display Offline"
} else {
puts "Display online"
## Ende Status Display einlesen
## Display Ansteuerung via HTTP schon vorhanden (muss alles in eine Zeile)
exec curl -i -s -o /dev/null http://$ip/control?cmd=GPIO,14,1 & curl http://$ip/control?cmd=LCD,1,1,%22Lastheard%20TG$tg%22 & curl http://$ip/control?cmd=LCD,2,1,%22$callsign%20$last%22;
# Eine Klammer Hinzufügen
}
}
}
Die IP zum Display muss im Befehl wieder angepasst werden, falls der Code komplett kopiert wird.
Ins Verzeichnis wechseln und Starter anlegen
cd /lib/systemd/system
nano display.service
Folgendes Einfügen
[Unit]
Description=Abfrage Svxremote Display
[Service]
ExecStart=/root/display-status.sh
[Install]
WantedBy=multi-user.target
Systemd neu laden
sudo systemctl daemon-reload
Dienst in den Autostart laden
CODE: ALLES AUSWÄHLEN
sudo systemctl enable display.service
Display Dienst starten und svxlink neu starten
sudo systemctl start display.service
sudo systemctl start svxlink.service
have Fun
dj1jay