diff --git a/openplotterMaiana/data/notifications.png b/openplotterMaiana/data/notifications.png new file mode 100644 index 0000000..b93af37 Binary files /dev/null and b/openplotterMaiana/data/notifications.png differ diff --git a/openplotterMaiana/openplotterMaiana.py b/openplotterMaiana/openplotterMaiana.py index adacc1c..fe522e9 100644 --- a/openplotterMaiana/openplotterMaiana.py +++ b/openplotterMaiana/openplotterMaiana.py @@ -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): diff --git a/openplotterMaiana/openplotterMaianaRead.py b/openplotterMaiana/openplotterMaianaRead.py index f6992f6..f16eb3a 100644 --- a/openplotterMaiana/openplotterMaianaRead.py +++ b/openplotterMaiana/openplotterMaianaRead.py @@ -15,16 +15,23 @@ # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see . -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)