add noise detection

This commit is contained in:
sailoog 2021-11-21 21:10:09 +01:00
parent fbf534359d
commit 1083567ab6
3 changed files with 53 additions and 26 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -134,7 +134,19 @@ class MyFrame(wx.Frame):
def onRead(self): def onRead(self):
self.ShowStatusBarYELLOW(_('Reading MAIANA device settings...')) self.ShowStatusBarYELLOW(_('Reading MAIANA device settings...'))
self.mmsi.SetValue('')
self.vesselName.SetValue('')
self.callSign.SetValue('')
self.vesselType.SetValue('')
self.LOA.SetValue('')
self.beam.SetValue('')
self.portOffset.SetValue('')
self.bowOffset.SetValue('')
self.logger.Clear()
self.logger2.Clear()
self.device = self.conf.get('MAIANA', 'device') self.device = self.conf.get('MAIANA', 'device')
if self.conf.get('MAIANA', 'noiseDetect') == '1': self.toolbar3.ToggleTool(304,True)
else: self.toolbar3.ToggleTool(304,False)
deviceOld = self.device deviceOld = self.device
availableIDs = [] availableIDs = []
selected = '' selected = ''
@ -192,25 +204,20 @@ class MyFrame(wx.Frame):
data = ujson.loads(resp.content) data = ujson.loads(resp.content)
except: data = {} except: data = {}
self.logger.Clear()
self.logger.BeginFontSize(10) self.logger.BeginFontSize(10)
self.logger.WriteText('This feature is still under construction')
self.logger.Newline()
self.logger.Newline()
self.logger.WriteText(_('Hardware revision')) self.logger.WriteText(_('Hardware revision'))
if 'hardwareRevision' in data: self.logger.WriteText(': '+data['hardwareRevision']['value']) if 'hardwareRevision' in data: self.logger.WriteText(': '+data['hardwareRevision']['value'])
self.logger.Newline() self.logger.Newline()
self.logger.WriteText(_('Firmware revision')) self.logger.WriteText(_('Firmware revision'))
if 'firmwareRevision' in data: self.logger.WriteText(': '+data['firmwareRevision']['value']) if 'firmwareRevision' in data: self.logger.WriteText(': '+data['firmwareRevision']['value'])
self.logger.Newline() self.logger.Newline()
self.logger.WriteText(_('Serial number'))
if 'serialNumber' in data: self.logger.WriteText(': '+data['serialNumber']['value'])
self.logger.Newline()
self.logger.WriteText(_('Type of MCU')) self.logger.WriteText(_('Type of MCU'))
if 'MCUtype' in data: self.logger.WriteText(': '+data['MCUtype']['value']) if 'MCUtype' in data: self.logger.WriteText(': '+data['MCUtype']['value'])
self.logger.Newline() self.logger.Newline()
self.logger.WriteText(_('Serial number'))
self.logger2.Clear() if 'serialNumber' in data: self.logger.WriteText(': '+data['serialNumber']['value'])
self.logger.Newline()
self.logger2.BeginFontSize(10) self.logger2.BeginFontSize(10)
self.logger2.WriteText(_('Transmitter hardware module')) self.logger2.WriteText(_('Transmitter hardware module'))
if 'transmission' in data: if 'transmission' in data:
@ -319,15 +326,7 @@ class MyFrame(wx.Frame):
if 'beam' in data['station']: self.beam.SetValue(str(data['station']['beam']['value'])) if 'beam' in data['station']: self.beam.SetValue(str(data['station']['beam']['value']))
if 'bowOffset' in data['station']: self.bowOffset.SetValue(str(data['station']['bowOffset']['value'])) if 'bowOffset' in data['station']: self.bowOffset.SetValue(str(data['station']['bowOffset']['value']))
if 'portOffset' in data['station']: self.portOffset.SetValue(str(data['station']['portOffset']['value'])) if 'portOffset' in data['station']: self.portOffset.SetValue(str(data['station']['portOffset']['value']))
else:
self.mmsi.SetValue('')
self.vesselName.SetValue('')
self.callSign.SetValue('')
self.vesselType.SetValue('')
self.LOA.SetValue('')
self.beam.SetValue('')
self.portOffset.SetValue('')
self.bowOffset.SetValue('')
self.ShowStatusBarGREEN(_('Done')) self.ShowStatusBarGREEN(_('Done'))
@ -424,6 +423,9 @@ class MyFrame(wx.Frame):
toolTX = self.toolbar3.AddTool(302, _('Software TX switch'), wx.Bitmap(self.currentdir+"/data/switch-off.png")) toolTX = self.toolbar3.AddTool(302, _('Software TX switch'), wx.Bitmap(self.currentdir+"/data/switch-off.png"))
self.Bind(wx.EVT_TOOL, self.OnToolTX, toolTX) self.Bind(wx.EVT_TOOL, self.OnToolTX, toolTX)
self.toolbar3.AddSeparator() self.toolbar3.AddSeparator()
toolNoise = self.toolbar3.AddCheckTool(304, _('Detect noise'), wx.Bitmap(self.currentdir+"/data/notifications.png"))
self.Bind(wx.EVT_TOOL, self.OnToolNoise, toolNoise)
self.toolbar3.AddSeparator()
toolSave = self.toolbar3.AddTool(303, _('Save station data'), wx.Bitmap(self.currentdir+"/data/apply.png")) toolSave = self.toolbar3.AddTool(303, _('Save station data'), wx.Bitmap(self.currentdir+"/data/apply.png"))
self.Bind(wx.EVT_TOOL, self.OnToolSave, toolSave) self.Bind(wx.EVT_TOOL, self.OnToolSave, toolSave)
@ -462,6 +464,12 @@ class MyFrame(wx.Frame):
vbox.Add(hbox4, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox4, 1, wx.ALL | wx.EXPAND, 0)
self.settings.SetSizer(vbox) self.settings.SetSizer(vbox)
def OnToolNoise(self,e):
if self.toolbar3.GetToolState(304):
self.conf.set('MAIANA', 'noiseDetect', '1')
else:
self.conf.set('MAIANA', 'noiseDetect', '0')
def OnToolSave(self, event): def OnToolSave(self, event):
mmsi = self.mmsi.GetValue() mmsi = self.mmsi.GetValue()
if not re.match('^[0-9]{9,9}$', mmsi): if not re.match('^[0-9]{9,9}$', mmsi):

View File

@ -15,16 +15,23 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Openplotter. If not, see <http://www.gnu.org/licenses/>. # along with Openplotter. If not, see <http://www.gnu.org/licenses/>.
import socket, time, ssl, json import os, socket, time, ssl, json, datetime
from openplotterSettings import conf from openplotterSettings import conf
from openplotterSettings import platform from openplotterSettings import platform
from openplotterSettings import language
from websocket import create_connection from websocket import create_connection
def main(): def main():
platform2 = platform.Platform() platform2 = platform.Platform()
conf2 = conf.Conf() conf2 = conf.Conf()
currentdir = os.path.dirname(os.path.abspath(__file__))
currentLanguage = conf2.get('GENERAL', 'lang')
package = 'openplotter-maiana'
language.Language(currentdir, package, currentLanguage)
token = conf2.get('MAIANA', 'token') token = conf2.get('MAIANA', 'token')
device = conf2.get('MAIANA', 'device') device = conf2.get('MAIANA', 'device')
if conf2.get('GENERAL', 'debug') == 'yes': debug = True
else: debug = False
if token and device: if token and device:
ws = False ws = False
sock = False sock = False
@ -56,16 +63,27 @@ def main():
data3 = data2.split('*') data3 = data2.split('*')
data3 = data3[0].split(',') data3 = data3[0].split(',')
#$PAINF,A,0x20*5B #$PAINF,A,0x20*5B
if data3[0] == '$PAINF': if data3[0] == '$PAINF':
try: SKdata.update({"MAIANA.channel"+data3[1]+".noiseFloor":int(data3[2],16)}) try:
noiseValue = int(data3[2],16)
SKdata.update({"MAIANA.channel"+data3[1]+".noiseFloor":noiseValue})
if conf2.get('MAIANA', 'noiseDetect') == '1':
if noiseValue > 64:
now = datetime.datetime.now()
now = now.strftime("%Y-%m-%dT%H:%M:%fZ")
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":{"message":_("There may be electromagnetic interference near the MAIANA AIS antenna"),"state":"alert","method": ["visual", "sound"],"timestamp":now}})
else:
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":None})
except: pass except: pass
#$PAITX,A,18*1C #$PAITX,A,18*1C
elif data3[0] == '$PAITX': elif data3[0] == '$PAITX':
SKdata.update({"MAIANA.channel"+data3[1]+".transmittedMessageType":data3[2]}) SKdata.update({"MAIANA.channel"+data3[1]+".transmittedMessageType":data3[2]})
#$PAISYS,11.0.0,3.1.0,00010*2E #$PAISYS,11.3.0,4.0.0,,STM32L422,1,1*05
elif data3[0] == '$PAISYS': elif data3[0] == '$PAISYS':
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4]}) try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":data3[5],"MAIANA.bootloader":data3[6]})
except: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":''}) except:
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
except: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":'',"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
#$PAISTN,987654321,NAUT,,37,0,0,0,0*2A #$PAISTN,987654321,NAUT,,37,0,0,0,0*2A
elif data3[0] == '$PAISTN': elif data3[0] == '$PAISTN':
try: try:
@ -83,7 +101,8 @@ def main():
SignalK = {"updates":[{"$source":"OpenPlotter.maiana","values":keys}]} SignalK = {"updates":[{"$source":"OpenPlotter.maiana","values":keys}]}
SignalK = json.dumps(SignalK) SignalK = json.dumps(SignalK)
ws.send(SignalK+'\r\n') ws.send(SignalK+'\r\n')
except: except Exception as e:
if debug: print(str(e))
if ws: ws.close() if ws: ws.close()
if sock: sock.close() if sock: sock.close()
time.sleep(5) time.sleep(5)