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):
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')
if self.conf.get('MAIANA', 'noiseDetect') == '1': self.toolbar3.ToggleTool(304,True)
else: self.toolbar3.ToggleTool(304,False)
deviceOld = self.device
availableIDs = []
selected = ''
@ -192,25 +204,20 @@ class MyFrame(wx.Frame):
data = ujson.loads(resp.content)
except: data = {}
self.logger.Clear()
self.logger.BeginFontSize(10)
self.logger.WriteText('This feature is still under construction')
self.logger.Newline()
self.logger.Newline()
self.logger.WriteText(_('Hardware revision'))
if 'hardwareRevision' in data: self.logger.WriteText(': '+data['hardwareRevision']['value'])
self.logger.Newline()
self.logger.WriteText(_('Firmware revision'))
if 'firmwareRevision' in data: self.logger.WriteText(': '+data['firmwareRevision']['value'])
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'))
if 'MCUtype' in data: self.logger.WriteText(': '+data['MCUtype']['value'])
self.logger.Newline()
self.logger2.Clear()
self.logger.WriteText(_('Serial number'))
if 'serialNumber' in data: self.logger.WriteText(': '+data['serialNumber']['value'])
self.logger.Newline()
self.logger2.BeginFontSize(10)
self.logger2.WriteText(_('Transmitter hardware module'))
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 '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']))
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'))
@ -424,6 +423,9 @@ class MyFrame(wx.Frame):
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.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"))
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)
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):
mmsi = self.mmsi.GetValue()
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
# 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 platform
from openplotterSettings import language
from websocket import create_connection
def main():
platform2 = platform.Platform()
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')
device = conf2.get('MAIANA', 'device')
if conf2.get('GENERAL', 'debug') == 'yes': debug = True
else: debug = False
if token and device:
ws = False
sock = False
@ -56,16 +63,27 @@ def main():
data3 = data2.split('*')
data3 = data3[0].split(',')
#$PAINF,A,0x20*5B
if data3[0] == '$PAINF':
try: SKdata.update({"MAIANA.channel"+data3[1]+".noiseFloor":int(data3[2],16)})
if data3[0] == '$PAINF':
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
#$PAITX,A,18*1C
elif data3[0] == '$PAITX':
SKdata.update({"MAIANA.channel"+data3[1]+".transmittedMessageType":data3[2]})
#$PAISYS,11.0.0,3.1.0,00010*2E
elif data3[0] == '$PAISYS':
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4]})
except: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":''})
#$PAISYS,11.3.0,4.0.0,,STM32L422,1,1*05
elif data3[0] == '$PAISYS':
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:
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
elif data3[0] == '$PAISTN':
try:
@ -83,7 +101,8 @@ def main():
SignalK = {"updates":[{"$source":"OpenPlotter.maiana","values":keys}]}
SignalK = json.dumps(SignalK)
ws.send(SignalK+'\r\n')
except:
except Exception as e:
if debug: print(str(e))
if ws: ws.close()
if sock: sock.close()
time.sleep(5)