ich brauche eure Fachmännische Beratung. Meine Kenntnisse in Python halten sich in Grenzen, da ich mal vor 20 Jahren angefangen habe und lange Pause hatte. Deshalb nimmt es mir nicht übel, wenn ich nicht immer folgen kann. Ich habe ein kleines Projekt, das ich gerade anstrebe. Ich bin leidenschaftlicher Funker und nutzte bis vor kurzem noch ein Windows System mit einer VOIP Software, um die Sprachübertragung von einem VOIP Client auf das Funkgerät zu übertragen. Funktioniert soweit ganz gut. Nun habe ich ein kleines Skript, das mein Audiosignal der Soundkarte abfragt und beim anliegen ein DTR / RTS Pin schaltet.
Auf mein neues Ubuntu Linux System funktioniert das soweit auch ganz gut und habe da auch ein kleines Skript, das ich nun noch anpassen möchte. Dazu habe ich allerdings noch ein paar Fragen. Hier der bisherige Code, der bisher seine Arbeit sehr gut verrichtet (allerdings nur bei Ubuntu, beim Raspberry Pi habe ich allerdings Probleme zwecks der fehlenden "alsaaudio" Bibliotheken.)
Code: Alles auswählen
#!/usr/bin/python
import alsaaudio
import audioop
import serial
import time
# -------------------------------------------------------------------
#
# Einstellungen
#
# -------------------------------------------------------------------
# COM Port
com = '/dev/ttyUSB1'
# Level wann auf Durchgang geschalten wird
dbm = 0
# Sendeverzoegerung
delay = 0
# PTT nach Level halten
level = 100
# Sende und Empfangslevel
dbr = 0
dbx = 0
# -------------------------------------------------------------------
#
# RS232: initalisieren
#
# -------------------------------------------------------------------
rs232 = serial.Serial(str(com), baudrate = 9600, timeout = 3.0)
# -------------------------------------------------------------------
#
# ALSA: initalisieren
#
# -------------------------------------------------------------------
audio = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK,
channels = 2,
rate = 8000,
format = alsaaudio.PCM_FORMAT_S8,
periodsize = 200)
# -------------------------------------------------------------------
#
# Programminfo
#
# -------------------------------------------------------------------
print('PTT RTS / DTR Pin Schaltung: Zum beenden der PTT Schaltung einfach dieses Konsolenfenster schließen.')
print('----------------------------------------------------------------------------------------------------')
print('COM Schnittstelle: ' + str(com) + '\nDurchgang bei: ' +
str(dbm) + ' db\nPTT nach Level halten: ' +
str(level) + ' Millisekunden\nSendeverzg: ' +
str(delay) + ' Millisekunden\n')
# -------------------------------------------------------------------
#
# RTS/DTR: initalisieren
#
# -------------------------------------------------------------------
while True:
try:
len, data = audio.read()
if audioop.avgpp(data, 1) > dbm:
dbx = dbx + 2
if dbx > delay:
dbx = dbx - 1
dbr = 0
rs232.setDTR(1)
rs232.setRTS(1)
time.sleep(.025)
else:
dbr = dbr + 2
if dbr >= level:
dbr = dbr - 1
dbx = 0
rs232.setDTR(0)
rs232.setRTS(0)
time.sleep(.010)
except Exception as e:
print(e)
Ich würde gerne den Status der Schaltung im Konsolenfenster angezeigt bekommen, der mir sagt, ob der DTR / RTS Pin geschaltet wurde. Schön wäre es auch, wenn ich beim starten des Skriptes in der Konsole auswählen kann, welche Soundkarte und welche COM Schnittstelle ich nutzen möchte und diese ggf. prüft, ob diese auch angeschlossen sind. Soweit reichen meine Kenntnisse leider nicht aus, um das umzusetzen.
Kann mir einer behilflich sein?