Moin moin,
da ich von meinem DMR Hotspot noch zwei Nextion Displays liegen hatte, habe ich mich gefragt ob man die nicht auch am SVXLink betreiben kann. Da der Windet ja nun vor der Tür steht und das Wetter in den letzten Tage einfach nur schmuddelig war und mir Bast Sterne zu Weihnachten basteln auch nicht besonders liegt habe ich mich mit dem Thema einmal ausgiebig beschäftigt. Hier nun das Ergebnis:
2,4 Zoll Display am Raspi 1
3,5 Zoll Display am Raspi Zero W mit kleiner Powerbank im 3D Druck Gehäuse
Der Betrieb läuft abgesetzt, d.h. die Daten werden per Netzwerk übertragen. Somit kann das Display unabhängig vom Relais / Hotspot Standort betrieben werden.
Wie funktioniert das ganze? Da ich meine Relaisfunkstellen / Hotspots alle über einen VPN Server verbunden habe auf den die Raspis über SMB zugreifen können, sendet mir SVXLink aus der entsprechenden TCL Datei heraus einen Text in eine bestimmte Datei auf den VPN Server die der Display Raspi mit einem Python3 Script abfragt. Hier das Beispiel für den Zustand des TRX:
Code: Alles auswählen
#
# Executed each time the transmitter is turned on or off
# is_on - Set to 1 if the transmitter is on or 0 if it's off
#
proc transmit {is_on} {
#puts "Turning the transmitter $is_on";
variable prev_ident;
variable need_ident;
if {$is_on && ([clock seconds] - $prev_ident > 5)} {
set need_ident 1;
}
if {$is_on == 1} {
exec echo "TX" > /var/log/display/tx;
} else { exec echo "RX" > /var/log/display/tx
}
}
https://nextion.tech/nextion-editor/
Auf dem Raspi habe ich Debian Bullseye installiert und Python3. Weiter braucht man noch die Nextion Python Sourcen von pypi:
https://pypi.org/project/nextion/
Dann habe ich mir ein Python3 Scribt gebaut mit dem ich die Daten auf dem Server abfrage und an das Display verschicke:
Code: Alles auswählen
#StartVariablen
tg = "StartUp"
lh = "None"
tx = "RX"
netz = "FM-Funknetz"
call = "DB0EIN-DV"
news = "+++++ no News +++++"
netz1 = "FM-Funknetz"
call1 = "DG7AA-HS"
import asyncio
import logging
import random
import sys
import time
from nextion import Nextion, EventType
class App:
def __init__(self):
self.client = Nextion('/dev/ttyS0', 9600, self.event_handler)
# Note: async event_handler can be used only in versions 1.8.0+ (versions 1.8.0+ supports both sync and async versions)
async def event_handler(self, type_, data):
logging.info('Event %s data: %s', type, str(data))
async def run(self):
await self.client.connect()
await self.client.command ('page FUNKNETZ')
#await client.sleep()
#await client.wakeup()
while 1:
page = (await self.client.command('sendme'))
f = open("/sys/class/thermal/thermal_zone0/temp", "r")
t = f.readline ()
cputemp = t[0:2]
unwetter = open("/var/log/display/DB0EIN-DV/unwetter", "r")
unwetter1 = unwetter.readline()
unwettero = open("/var/log/display/DB0EIN-DV/unwettero", "r")
unwettero1 = unwettero.readline()
wetter = open("/var/log/display/DB0EIN-DV/wetter", "r")
wetter1 = wetter.readline()
tg = open("/var/log/display/DB0EIN-DV/talkgroup", "r")
atg = tg.readline()
lh = open("/var/log/display/DB0EIN-DV/lh", "r")
lh1 = lh.readline()
tx = open("/var/log/display/DB0EIN-DV/tx", "r")
tx1 = tx.readline()
news1 = " +++ "+str(wetter1)+" +++ CPU Temperatur: "+str(cputemp)+" Grad +++ "+str(unwetter1)+" +++ "+str(unwettero1)+" +++ "
zeit = (time.strftime("%d.%m.%Y %H:%M"))+" Uhr"
if "RX" in tx1 :
c = 33808
else:
c = 63488
await self.client.set('FUNKNETZ.tg.txt', str(atg))
await self.client.set('FUNKNETZ.lh.txt', str(lh1))
await self.client.set('FUNKNETZ.news.txt', str(news1))
await self.client.set('FUNKNETZ.tx.pco', c)
await self.client.set('FUNKNETZ.tx.txt', str(tx1))
await self.client.set('FUNKNETZ.netz.txt', str(netz))
await self.client.set('FUNKNETZ.call.txt', str(call))
await self.client.set('FUNKNETZ.uhr.txt', str(zeit))
if __name__ == '__main__':
logging.basicConfig(
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.INFO,
handlers=[
logging.StreamHandler()
])
loop = asyncio.get_event_loop()
app = App()
asyncio.ensure_future(app.run())
loop.run_forever()
Aussichten und Ideen:
Da das Nextion Display über einen Touchscreen verfügt ist es auch möglich zwischen mehreren Oberflächen umzuschalten um z.B. mehrere Relais / Hotspots auszulesen. Das konnte ich inzwischen auch schon erfolgreich bei dem 2,4 Zoll Display testen. Bei meinen beiden 3,5 Zoll Displays ist der Touch leider kaputt. Mit dem Touchscreen könnte man auch auch Befehle an das Relais unter Umständen wieder zurück senden, z.B. an die "dtmf.pty", was ich bislang aber noch nicht probiert habe. Weiter ist es sicherlich auch möglich anstatt des wesentlich teureren und auch Energie intensiveren Raspi z.B. einen Wemos D1 Mini , wie ihn Jens für sein Display verwendet, einzusetzen. Erste Befehle an das Nextion mit dem Wemos zu senden waren bei mir ebenfalls erfolgreich. Es wäre auch denkbar Daten direkt von fm-funketz aus dem Dashboard oder aus dem SVXLink log auszulesen und darzustellen wie das z.B. der SVXCube macht.
Eine alternative zu den doch recht teuren Nextion Displays könnten die Displays von TJC sein die allerdings für den chinesischen Markt produziert werden. Diese sind auf den ersten Blick baugleich mit den Nextion und die Software dafür ist zu 100% identisch, außer das die TJC Software nur in chinesisch verfügbar ist. Da die Buttons aber identisch angeordnet sind kann man sich ja die englische Software zusätzlich aufmachen und dann 1 zu 1 die Buttons bedienen. Für 12,68€ das Stück habe ich mir deshalb mal 2 bei Ali bestellt und werde das mal testen.
** Ein kurzer Dank an Hans-Jürgen, DO4YNH der mir das Gehäuse gedruckt hat und mir den Tipp mit den TJC Displays gegeben hat. **
+++++ Under Construction +++++ Keine Sorglos Anleitung +++++ Verwendung auf eigene Gefahr +++++ Kein Support +++++