class MainFrame(wx.Frame): def __init__(self): self.option=sys.argv[1] paths=Paths() self.currentpath=paths.currentpath self.conf=Conf() Language(self.conf.get('GENERAL','lang')) wx.Frame.__init__(self, None, title=_('Fine calibration'), size=(500,300)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.CreateStatusBar() self.text=wx.StaticText(self, label=_('Error'), pos=(10, 10)) self.output = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_DONTWRAP, size=(480,110), pos=(10,90)) self.button_close =wx.Button(self, label=_('Close'), pos=(300, 210)) self.Bind(wx.EVT_BUTTON, self.close, self.button_close) self.button_calculate =wx.Button(self, label=_('Calculate'), pos=(400, 210)) self.Bind(wx.EVT_BUTTON, self.calculate, self.button_calculate) if self.option=='c': self.text.SetLabel(_('Press Calculate and wait for the system to calculate\nthe ppm value with the selected channel. Put the obtained\nvalue in "Correction (ppm)" field and enable SDR-AIS\nreception. Estimated time: 1 min.')) if self.option=='b': self.text.SetLabel(_('Press Calculate and wait for the system to check the band.\nWrite down the strongest channel (power). If you do not find\nany channel try another band. Estimated time: 5 min.')) self.Centre() def calculate(self,e): self.SetStatusText(_('Working...')) self.output.SetValue('') gain=self.conf.get('AIS-SDR', 'gain') ppm=self.conf.get('AIS-SDR', 'ppm') if self.option=='c': channel=self.conf.get('AIS-SDR', 'gsm_channel') try: output=subprocess.check_output(['kal', '-c', channel, '-g', gain, '-e', ppm]) except: output=_('error') if self.option=='b': band=self.conf.get('AIS-SDR', 'band') try: output=subprocess.check_output(['kal', '-s', band, '-g', gain, '-e', ppm]) except: output=_('error') self.output.SetValue(output) self.SetStatusText(_('Finished')) def close(self,e): self.Destroy()
class MainFrame(wx.Frame): def __init__(self): self.option=sys.argv[1] self.text_sms=sys.argv[2] self.text_sms=unicode(self.text_sms,'utf-8') self.phone=sys.argv[3] paths=Paths() self.currentpath=paths.currentpath self.conf=Conf() Language(self.conf.get('GENERAL','lang')) wx.Frame.__init__(self, None, title=_('Test SMS'), size=(500,260)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.CreateStatusBar() self.text=wx.StaticText(self, label=_('Error'), pos=(10, 10)) self.output = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_DONTWRAP, size=(480,110), pos=(10,50)) self.button_close =wx.Button(self, label=_('Close'), pos=(300, 170)) self.Bind(wx.EVT_BUTTON, self.close, self.button_close) self.button_calculate =wx.Button(self, label=_('Start'), pos=(400, 170)) self.Bind(wx.EVT_BUTTON, self.calculate, self.button_calculate) if self.option=='i': self.text.SetLabel(_('Press start to check the settings and connect to the GSM device')) if self.option=='t': self.text.SetLabel(_('Press start to send the text "')+self.text_sms+_('"\nto the number "')+self.phone+'"') self.Centre() def calculate(self,e): self.output.SetValue('') output='' if self.option=='i': self.SetStatusText(_('Connecting...')) try: output=subprocess.check_output(['gammu', 'identify']) except: output= _('Error opening device. Check settings.') if self.option=='t': self.SetStatusText(_('Sending...')) try: sm = gammu.StateMachine() sm.ReadConfig() sm.Init() netinfo = sm.GetNetworkInfo() output+= 'Network name: %s' % netinfo['NetworkName'] output+= '\nNetwork code: %s' % netinfo['NetworkCode'] output+= '\nLAC: %s' % netinfo['LAC'] output+= '\nCID: %s' % netinfo['CID'] message = { 'Text': self.text_sms, 'SMSC': {'Location': 1}, 'Number': self.phone, } sm.SendSMS(message) output+='\nSMS "'+self.text_sms+_('" sent succesfully to ')+self.phone except Exception,e: output= str(e) self.output.SetValue(output) self.SetStatusText(_('Finished')) def close(self,e): self.Destroy()
class MyFrame(wx.Frame): def __init__(self): self.SK_unit = '' self.SK_description = '' self.SK_unit_priv = 0 self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 self.ws = None self.thread = threading._DummyThread self.private_unit_s = 1 logging.basicConfig() self.buffer = [] self.list_SK = [] self.list_SK_unit = [] self.sortCol = 0 self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' Language(self.conf) wx.Frame.__init__(self, None, title='diagnostic SignalK input', size=(670, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.ttimer = 100 self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.list.InsertColumn(0, _('SRC'), width=245) self.list.InsertColumn(1, _('SignalK'), width=300) self.list.InsertColumn(2, _('Value'), wx.LIST_FORMAT_RIGHT, width=100) self.list.InsertColumn(3, _('Unit'), width=45) self.list.InsertColumn(4, _('Interval'), wx.LIST_FORMAT_RIGHT, width=55) self.list.InsertColumn(5, _('Status'), width=50) self.list.InsertColumn(6, _('Description'), width=500) sort_SRC = wx.Button(panel, label=_('Sort SRC')) sort_SRC.Bind(wx.EVT_BUTTON, self.on_sort_SRC) sort_SK = wx.Button(panel, label=_('Sort SK')) sort_SK.Bind(wx.EVT_BUTTON, self.on_sort_SK) self.private_unit = wx.CheckBox(panel, label=_('private Unit'), pos=(360, 32)) self.private_unit.Bind(wx.EVT_CHECKBOX, self.on_private_unit) self.private_unit.SetValue(self.private_unit_s) unit_setting = wx.Button(panel, label=_('Unit Setting')) unit_setting.Bind(wx.EVT_BUTTON, self.on_unit_setting) vbox = wx.BoxSizer(wx.VERTICAL) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox.Add(sort_SRC, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(sort_SK, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add((0, 0), 1, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.private_unit, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(unit_setting, 0, wx.RIGHT | wx.LEFT, 5) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.read() self.start() self.Show(True) self.status = '' self.data = [] self.baudc = 0 self.baud = 0 self.timer.Start(self.ttimer) self.no_action = 0 self.no_action_limit = 5000 / self.ttimer def timer_act(self, e): if len(self.buffer) > 0: self.no_action = 0 for ii in self.buffer: if 0 <= ii[0] < self.list.GetItemCount(): self.list.SetStringItem(ii[0], ii[1], ii[2]) else: self.sorting() self.buffer = [] else: self.no_action += 1 if self.no_action > self.no_action_limit: if self.ws: self.ws.close() self.start() self.no_action = 0 def json_interval(self, time_old, time_new): sek_n = float(time_new[17:22]) sek_o = float(time_old[17:22]) if sek_n >= sek_o: dif = sek_n - sek_o else: dif = sek_n + 60 - sek_o return dif def read(self): self.list_SK_unit = [] try: with open( self.home + '/.config/signalk-server-node/node_modules/@signalk/signalk-schema/dist/keyswithmetadata.json' ) as data_file: data = json.load(data_file) except: #old signalk with open( self.home + '/.config/signalk-server-node/node_modules/@signalk/signalk-schema/src/keyswithmetadata.json' ) as data_file: data = json.load(data_file) data_sk_unit_private = [] if os.path.isfile(self.home + '/.openplotter/private_unit.json'): with open(self.home + '/.openplotter/private_unit.json') as data_file: data_sk_unit_private = json.load(data_file) for i in data: if 'units' in data[i].keys(): if 'description' in data[i].keys(): ii = i.replace('/vessels/*/', '') ii = ii.replace('RegExp', '*') ii = ii.replace('/', '.') self.list_SK_unit.append([ str(ii), str(data[i]['units']), '', str(data[i]['description']) ]) else: self.list_SK_unit.append( [str(ii), str(data[i]['units']), '', '']) for j in data_sk_unit_private: for i in self.list_SK_unit: if j[0] == i[0]: i[2] = j[2] break self.list_SK_unit.sort(key=lambda tup: tup[0]) self.list_SK_unit.sort(key=lambda tup: tup[1]) def lookup_star(self, name): skip = -1 index = 0 st = '' for i in name.split('.'): if index > -1: if skip == 0: st += '.*' else: if i in ['propulsion', 'sensors']: skip = 1 elif i in ['electrical', 'registrations', 'tanks']: skip = 2 st += '.' + i index += 1 skip -= 1 st = st[1:] self.SK_unit = '' self.SK_unit_priv = '' self.SK_description = '' for j in self.list_SK_unit: exist = False if j[0] == st: exist = True self.SK_unit = j[1] self.SK_description = j[3] if j[2] != '': self.SK_unit_priv = j[2] else: self.SK_unit_priv = j[1] break if not exist: print 'no unit for ', st self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 if self.SK_unit_priv != self.SK_unit: if self.SK_unit == 'Hz': if self.SK_unit_priv == 'RPM': self.SK_Faktor_priv = 0.0166666666 elif self.SK_unit == 'K': if self.SK_unit_priv == 'C': self.SK_Offset_priv = -273.15 elif self.SK_unit_priv == 'F': self.SK_Faktor_priv = 1.8 self.SK_Offset_priv = -459.67 elif self.SK_unit == 'J': if self.SK_unit_priv == 'Ah(12V)': self.SK_Faktor_priv = 43200. if self.SK_unit_priv == 'Ah(24V)': self.SK_Faktor_priv = 86400 elif self.SK_unit == 'm': if self.SK_unit_priv == 'ft': self.SK_Faktor_priv = 0.3048 elif self.SK_unit_priv == 'nm': self.SK_Faktor_priv = 1852 elif self.SK_unit_priv == 'km': self.SK_Faktor_priv = 1000 elif self.SK_unit == 'm/s': if self.SK_unit_priv == 'kn': self.SK_Faktor_priv = 0.514444444 elif self.SK_unit_priv == 'kmh': self.SK_Faktor_priv = 0, 277778 elif self.SK_unit_priv == 'mph': self.SK_Faktor_priv = 0.44704 elif self.SK_unit == 'm3': if self.SK_unit_priv == 'l': self.SK_Faktor_priv = 0.001 elif self.SK_unit_priv == 'gal': self.SK_Faktor_priv = 0.00378541 elif self.SK_unit == 'm3/s': if self.SK_unit_priv == 'l/h': self.SK_Faktor_priv = 2.777778E-7 elif self.SK_unit_priv == 'gal/h': self.SK_Faktor_priv = 0.0000010515 elif self.SK_unit == 'Pa': if self.SK_unit_priv == 'hPa': self.SK_Faktor_priv = 100 elif self.SK_unit_priv == 'Bar': self.SK_Faktor_priv = 100000 elif self.SK_unit == 'rad' and self.SK_unit_priv == 'deg': self.SK_Faktor_priv = 0.0174533 elif self.SK_unit == 's': if self.SK_unit_priv == 'h': self.SK_Faktor_priv = 3600 elif self.SK_unit_priv == 'd': self.SK_Faktor_priv = 86400 elif self.SK_unit_priv == 'y': self.SK_Faktor_priv = 31536000 elif self.SK_unit == 'ratio': if self.SK_unit_priv == '%': self.SK_Faktor_priv = 0.01 else: self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 def on_sort_SRC(self, e): self.sortCol = 0 self.sorting() def on_sort_SK(self, e): self.sortCol = 1 self.sorting() def sorting(self): self.list.DeleteAllItems() list_new = [] for i in sorted(self.list_SK, key=lambda item: (item[self.sortCol])): list_new.append(i) self.list_SK = list_new self.init2() def init2(self): index = 0 for i in self.list_SK: if type(i[2]) is float: pass elif type(i[2]) is str: pass else: i[2] = 0.0 self.list.InsertStringItem(index, str(i[0])) self.list.SetStringItem(index, 1, str(i[1])) if not self.private_unit_s: if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) else: self.buffer.append([index, 2, str('%.3f' % i[2])]) self.buffer.append([index, 3, i[3]]) else: if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) else: i[9] = i[2] / i[10] + i[11] self.buffer.append([index, 2, str('%.3f' % i[9])]) self.buffer.append([index, 3, i[8]]) self.list.SetStringItem(index, 4, str('%.1f' % i[4])) self.list.SetStringItem(index, 5, str(i[5])) self.list.SetStringItem(index, 6, str(i[6])) index += 1 def on_unit_setting(self, e): subprocess.Popen(['python', self.currentpath + '/unit-private.py']) def OnClose(self, e): self.endlive = True qx = 0 while not self.ende and qx < 50: time.sleep(0.1) qx += 1 if self.ws: self.ws.close() self.timer.Stop() self.Destroy() def on_message(self, ws, message): if self.endlive: self.on_close(ws) self.ende = True return try: js_up = json.loads(message)['updates'][0] except: return label = '' src = '' if '$source' in js_up: src = js_up['$source'] elif 'source' in js_up: label = js_up['source']['label'] src = label if 'type' in js_up['source']: if js_up['source']['type'] == 'NMEA0183': if 'talker' in js_up['source']: src += '.' + js_up['source']['talker'] if 'sentence' in js_up['source']: src += '.' + js_up['source']['sentence'] elif js_up['source']['type'] == 'NMEA2000': if 'src' in js_up['source']: src += '.' + js_up['source']['src'] if 'pgn' in js_up['source']: src += '.' + str(js_up['source']['pgn']) try: timestamp = js_up['timestamp'] except: timestamp = '2000-01-01T00:00:00.000Z' values_ = js_up['values'] for values in values_: path = values['path'] value = values['value'] src2 = src timestamp2 = timestamp if type(value) is dict: if 'timestamp' in value: timestamp2 = value['timestamp'] if '$source' in value: src2 = value['$source'] elif 'source' in value: src2 = label if 'type' in value['source']: if value['source']['type'] == 'NMEA0183': if 'talker' in value['source']: src2 += '.' + value['source']['talker'] if 'sentence' in value['source']: src2 += '.' + value['source']['sentence'] elif value['source']['type'] == 'NMEA2000': if 'src' in value['source']: src2 += '.' + value['source']['src'] if 'pgn' in value['source']: src2 += '.' + str(value['source']['pgn']) for lvalue in value: result = True if lvalue in ['source', '$source']: result = False elif lvalue == 'timestamp': if 'position' in path and 'RMC' in src2: path2 = 'navigation.datetime' value2 = timestamp2 self.update_add(value2, path2, src2, timestamp2) result = False if result: path2 = path + '.' + lvalue value2 = value[lvalue] self.update_add(value2, path2, src2, timestamp2) else: self.update_add(value, path, src, timestamp) def update_add(self, value, path, src, timestamp): # SRC SignalK Value Unit Interval Status Description timestamp private_Unit private_Value priv_Faktor priv_Offset # 0 1 2 3 4 5 6 7 8 9 10 11 if type(value) is list: value = value[0] if type(value) is float: pass elif type(value) is unicode: value = str(value) elif type(value) is int: value = float(value) else: value = 0.0 index = 0 exists = False for i in self.list_SK: if path == i[1] and i[0] == src: exists = True i[0] = src i[2] = value if i[4] == 0.0: i[4] = self.json_interval(i[7], timestamp) else: i[4] = i[4] * .8 + 0.2 * self.json_interval( i[7], timestamp) i[7] = timestamp self.buffer.append([index, 0, i[0]]) self.buffer.append([index, 4, str('%.2f' % i[4])]) if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) self.buffer.append([index, 3, i[3]]) break elif type(i[2]) is float: pass else: i[2] = 0.0 if not self.private_unit_s: self.buffer.append([index, 2, str('%.3f' % i[2])]) self.buffer.append([index, 3, i[3]]) else: i[9] = i[2] / i[10] + i[11] self.buffer.append([index, 2, str('%.3f' % i[9])]) self.buffer.append([index, 3, i[8]]) break index += 1 if not exists: self.lookup_star(path) self.list_SK.append([ src, path, value, str(self.SK_unit), 0.0, 1, self.SK_description, timestamp, str(self.SK_unit_priv), 0, self.SK_Faktor_priv, self.SK_Offset_priv ]) self.buffer.append([-1, 0, '']) def on_private_unit(self, e): self.private_unit_s = self.private_unit.GetValue() def on_error(self, ws, error): print error def on_close(self, ws): ws.close() def on_open(self, ws): pass def run(self): self.endlive = False self.ende = False self.ws = websocket.WebSocketApp( "ws://localhost:3000/signalk/v1/stream?subscribe=self", on_message=lambda ws, msg: self.on_message(ws, msg), on_error=lambda ws, err: self.on_error(ws, err), on_close=lambda ws: self.on_close(ws)) self.ws.on_open = lambda ws: self.on_open(ws) self.ws.run_forever() self.ws = None def start(self): def run(): self.run() self.thread = threading.Thread(target=run) self.thread.start()
# Openplotter is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import time, socket, threading, datetime, geomag, pynmea2, math from classes.datastream import DataStream from classes.conf import Conf from classes.language import Language conf=Conf() Language(conf.get('GENERAL','lang')) global sock_in global error sock_in='' error=0 a=DataStream(conf) last_heading='' heading_time='' sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) accuracy=float(conf.get('STARTUP', 'cal_accuracy')) rate=float(conf.get('STARTUP', 'nmea_rate_cal')) #thread1
else: conf.set('WIFI', 'device', 'wlan0') if ssid: conf.set('WIFI', 'ssid', ssid) else: conf.set('WIFI', 'ssid', 'OpenPlotter') if passw: conf.set('WIFI', 'password', passw) else: conf.set('WIFI', 'password', '12345678') if hw_mode: conf.set('WIFI', 'hw_mode', hw_mode) else: conf.set('WIFI', 'hw_mode', 'g') if channel: conf.set('WIFI', 'channel', channel) else: conf.set('WIFI', 'channel', '6') if wpa: conf.set('WIFI', 'wpa', wpa) else: conf.set('WIFI', 'wpa', '2') if boot_sh == 1: if share: conf.set('WIFI', 'share', share) else: conf.set('WIFI', 'share', '0') wifi_server = conf.get('WIFI', 'enable') delay = int(conf.get('STARTUP', 'delay')) kplex = conf.get('STARTUP', 'kplex') opencpn = conf.get('STARTUP', 'opencpn') opencpn_no = conf.get('STARTUP', 'opencpn_no_opengl') opencpn_fullscreen = conf.get('STARTUP', 'opencpn_fullscreen') x11vnc = conf.get('STARTUP', 'x11vnc') vnc_pass = conf.get('STARTUP', 'vnc_pass') gps_time = conf.get('STARTUP', 'gps_time') signalk = conf.get('SIGNALK', 'enable') enable = conf.get('AIS-SDR', 'enable') gain = conf.get('AIS-SDR', 'gain') ppm = conf.get('AIS-SDR', 'ppm')
# Openplotter is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import subprocess, os, shutil, sys, pyudev from classes.paths import Paths from classes.conf import Conf conf = Conf() wifi_server = sys.argv[1] wlan = conf.get('WIFI', 'device') passw = conf.get('WIFI', 'password') ssid = conf.get('WIFI', 'ssid') hw_mode = conf.get('WIFI', 'hw_mode') channel = conf.get('WIFI', 'channel') wpa = conf.get('WIFI', 'wpa') share = conf.get('WIFI', 'share') paths = Paths() currentpath = paths.currentpath subprocess.call(['service', 'hostapd', 'stop']) subprocess.call(['service', 'dnsmasq', 'stop']) subprocess.call(['ifdown', wlan]) if wifi_server == '1':
boot_conf = ConfigParser.SafeConfigParser() boot_conf.read('/boot/config.txt') device=boot_conf.get('OPENPLOTTER', 'device') ssid=boot_conf.get('OPENPLOTTER', 'ssid') passw=boot_conf.get('OPENPLOTTER', 'pass') except Exception,e: print str(e) conf=Conf() if device and ssid and passw: conf.set('WIFI', 'enable', '1') conf.set('WIFI', 'device', device) conf.set('WIFI', 'ssid', ssid) conf.set('WIFI', 'password', passw) delay=int(conf.get('STARTUP', 'delay')) kplex=conf.get('STARTUP', 'kplex') opencpn=conf.get('STARTUP', 'opencpn') opencpn_no=conf.get('STARTUP', 'opencpn_no_opengl') opencpn_fullscreen=conf.get('STARTUP', 'opencpn_fullscreen') x11vnc=conf.get('STARTUP', 'x11vnc') gps_time=conf.get('STARTUP', 'gps_time') signalk=conf.get('SIGNALK', 'enable') enable=conf.get('AIS-SDR', 'enable') gain=conf.get('AIS-SDR', 'gain') ppm=conf.get('AIS-SDR', 'ppm') channel=conf.get('AIS-SDR', 'channel') wifi_server=conf.get('WIFI', 'enable')
# 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, pynmea2, RTIMU, math, csv from classes.paths import Paths from classes.conf import Conf paths=Paths() currentpath=paths.currentpath conf=Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if conf.get('STARTUP', 'nmea_hdg')=='1' or conf.get('STARTUP', 'nmea_heel')=='1': SETTINGS_FILE = "RTIMULib" s = RTIMU.Settings(SETTINGS_FILE) imu = RTIMU.RTIMU(s) imu.IMUInit() imu.setSlerpPower(0.02) imu.setGyroEnable(True) imu.setAccelEnable(True) imu.setCompassEnable(True) poll_interval = imu.IMUGetPollInterval() if conf.get('STARTUP', 'nmea_press')=='1' or conf.get('STARTUP', 'nmea_temp_p')=='1': SETTINGS_FILE2 = "RTIMULib2" s2 = RTIMU.Settings(SETTINGS_FILE2) pressure_val = RTIMU.RTPressure(s2) pressure_val.pressureInit()
boot_conf.read('/boot/config.txt') device = boot_conf.get('OPENPLOTTER', 'device') ssid = boot_conf.get('OPENPLOTTER', 'ssid') passw = boot_conf.get('OPENPLOTTER', 'pass') except Exception, e: print str(e) conf = Conf() if device and ssid and passw: conf.set('WIFI', 'enable', '1') conf.set('WIFI', 'device', device) conf.set('WIFI', 'ssid', ssid) conf.set('WIFI', 'password', passw) delay = int(conf.get('STARTUP', 'delay')) kplex = conf.get('STARTUP', 'kplex') opencpn = conf.get('STARTUP', 'opencpn') opencpn_no = conf.get('STARTUP', 'opencpn_no_opengl') opencpn_fullscreen = conf.get('STARTUP', 'opencpn_fullscreen') x11vnc = conf.get('STARTUP', 'x11vnc') gps_time = conf.get('STARTUP', 'gps_time') signalk = conf.get('SIGNALK', 'enable') enable = conf.get('AIS-SDR', 'enable') gain = conf.get('AIS-SDR', 'gain') ppm = conf.get('AIS-SDR', 'ppm') channel = conf.get('AIS-SDR', 'channel') wifi_server = conf.get('WIFI', 'enable')
import sys, subprocess, wx from classes.conf import Conf from classes.paths import Paths from classes.language import Language action=sys.argv[1] #see actions.py start_all_actions='18' paths=Paths() currentpath=paths.currentpath conf=Conf() Language(conf.get('GENERAL','lang')) data=conf.get('ACTIONS', 'triggers') triggers=data.split('||') triggers.pop() for index,item in enumerate(triggers): ii=item.split(',') triggers[index]=ii data=conf.get('ACTIONS', 'actions') trigger_actions=data.split('||') trigger_actions.pop() for index,item in enumerate(trigger_actions): ii=item.split(',') trigger_actions[index]=ii
# Openplotter is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import subprocess, os, shutil, sys, pyudev from classes.paths import Paths from classes.conf import Conf conf=Conf() wifi_server=sys.argv[1] wlan = conf.get('WIFI', 'device') passw = conf.get('WIFI', 'password') ssid = conf.get('WIFI', 'ssid') hw_mode = conf.get('WIFI', 'hw_mode') channel = conf.get('WIFI', 'channel') wpa = conf.get('WIFI', 'wpa') share = conf.get('WIFI', 'share') paths=Paths() currentpath=paths.currentpath subprocess.call(['service', 'hostapd', 'stop']) subprocess.call(['service', 'dnsmasq', 'stop']) subprocess.call(['ifdown', wlan]) if wifi_server=='1':
boot_conf = ConfigParser.SafeConfigParser() boot_conf.read('/boot/config.txt') device=boot_conf.get('OPENPLOTTER', 'device') ssid=boot_conf.get('OPENPLOTTER', 'ssid') passw=boot_conf.get('OPENPLOTTER', 'pass') except Exception,e: print str(e) conf=Conf() if device and ssid and passw: conf.set('WIFI', 'enable', '1') conf.set('WIFI', 'device', device) conf.set('WIFI', 'ssid', ssid) conf.set('WIFI', 'password', passw) delay=int(conf.get('STARTUP', 'delay')) kplex=conf.get('STARTUP', 'kplex') opencpn=conf.get('STARTUP', 'opencpn') opencpn_no=conf.get('STARTUP', 'opencpn_no_opengl') opencpn_fullscreen=conf.get('STARTUP', 'opencpn_fullscreen') x11vnc=conf.get('STARTUP', 'x11vnc') gps_time=conf.get('STARTUP', 'gps_time') signalk=conf.get('STARTUP', 'signalk') enable=conf.get('AIS-SDR', 'enable') gain=conf.get('AIS-SDR', 'gain') ppm=conf.get('AIS-SDR', 'ppm') channel=conf.get('AIS-SDR', 'channel') wifi_server=conf.get('WIFI', 'enable')
import sys, subprocess, wx from classes.conf import Conf from classes.paths import Paths from classes.language import Language action=sys.argv[1] #see actions.py start_all_actions='ACT19' paths=Paths() currentpath=paths.currentpath conf=Conf() Language(conf.get('GENERAL','lang')) triggers=[] data=conf.get('ACTIONS', 'triggers') try: triggers=eval(data) except:triggers=[] #stop all if action=='0': i=0 for ii in triggers: templist=ii[4] start_all=False for iii in templist: if iii[0]==start_all_actions: start_all=True
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import time, socket, threading import RPi.GPIO as GPIO from classes.datastream import DataStream from classes.conf import Conf from classes.language import Language from classes.actions import Actions conf=Conf() Language(conf.get('GENERAL','lang')) global trigger_actions global triggers trigger_actions='' triggers='' global sock_in global error sock_in='' error=0 a=DataStream() actions=Actions() nodata='' channel1='' channel2='' channel3=''
class addSKtoN2K(wx.Dialog): def __init__(self): self.conf = Conf() self.home = self.conf.home self.currentpath = self.conf.get('GENERAL', 'op_folder') Language(self.conf) style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER wx.Dialog.__init__(self, None, title=_('Generate N2K from Signal K'),style=style) self.Bind(wx.EVT_CLOSE, self.when_closed) self.SetInitialSize((720, 400)) #self.SetAutoLayout(1) #self.SetupScrolling() self.icon = wx.Icon(self.currentpath + '/static/icons/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.panel = wx.Panel(self) self.list_N2Kgen = [ ['126992','System Time',''], ['127245','Rudder','steering.rudderAngle'], ['127250','Heading','navigation.headingMagnetic'], ['127257','Attitude','navigation.attitude.pitch, navigation.attitude.roll, navigation.attitude.yaw'], ['127488','Engine_Rapid','propulsion.port.revolutions'], ['127488_1','Engine_Rapid','propulsion.starboard.revolutions'], ['127489','Engine','propulsion.port.oilTemperature, propulsion.port.temperature'], ['127489_1','Engine','propulsion.starboard.oilTemperature, propulsion.starboard.temperature'], ['127505','FluidLevel','tanks.fuel.standard.capacity, tanks.fuel.standard.currentLevel'], ['127505_1','FluidLevel','tanks.liveWell.standard.capacity, tanks.liveWell.standard.currentLevel'], ['127505_2','FluidLevel','tanks.wasteWater.standard.capacity, tanks.wasteWater.standard.currentLevel'], ['127505_3','FluidLevel','tanks.blackWater.standard.capacity, tanks.blackWater.standard.currentLevel'], ['127508','Battery_Status','electrical.batteries.service.voltage, electrical.batteries.service.current, electrical.batteries.service.temperature'], ['128259','Speed','navigation.speedOverGround, navigation.speedThroughWater'], ['128267','Depth','environment.depth.belowTransducer, environment.depth.surfaceToTransducer'], ['128275','Distance_Log','navigation.log, navigation.logTrip'], ['129025','Position_Rapid','navigation.position.latitude, navigation.position.longitude'], ['129026','COG_SOG','navigation.courseOverGroundTrue, navigation.speedOverGround'], ['130306_2','Wind Data','environment.wind.angleApparent, environment.wind.speedApparent'], ['130306_3','Wind Data','environment.wind.angleTrueWater, environment.wind.speedTrue'], ['130310','Environmental_Parameters','environment.outside.pressure, environment.outside.temperature, environment.water.temperature'], ['130311','Environmental_Parameters','environment.outside.pressure, environment.inside.humidity, environment.water.temperature'], ['130316','Temperature','environment.inside.refrigerator.temperature'], ['130316_1','Temperature','propulsion.port.exhaustTemperature'] ] self.list_N2K = CheckListCtrl(self.panel, 100) self.list_N2K.InsertColumn(0, _('PGN'), width=100) self.list_N2K.InsertColumn(1, _('description'), width=250) self.list_N2K.InsertColumn(2, _('Signal K variable'), width=920) self.list_N2K.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_selected) OK = wx.Button(self.panel, label=_('Apply changes')) OK.Bind(wx.EVT_BUTTON, self.on_OK) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list_N2K, 1, wx.ALL | wx.EXPAND, 5) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(OK, 0, wx.ALL, 5) self.panel.SetSizer(vbox) for ii in self.list_N2Kgen: self.list_N2K.Append(ii) data = self.conf.get('N2K', 'pgn_generate') try: self.PGN_list = eval(data) except: self.PGN_list = [] i=0 for ii in self.list_N2Kgen: if str(ii[0]) in self.PGN_list: self.list_N2K.CheckItem(i) i += 1 def on_OK(self,e): result = [] i=0 for ii in self.list_N2Kgen: if self.list_N2K.IsChecked(i): result.append(str(ii[0])) i += 1 self.conf.set('N2K', 'pgn_generate', str(result)) N2K_output=self.conf.get('N2K', 'output') if N2K_output == '1': subprocess.call(['pkill', '-f', 'SK-base_d.py']) subprocess.Popen(['python',self.currentpath+'/SK-base_d.py']) self.when_closed(e) def on_selected(self,e): pass def when_closed(self,e): self.Destroy()
class MyFrame(wx.Frame): def __init__(self): self.list_SK = [] self.data_SK_unit_private = [] self.SK_unit = '' self.SK_description = '' self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' Language(self.conf) logging.basicConfig() self.buffer = [] self.sortCol = 0 wx.Frame.__init__(self, None, title='diagnostic SignalK input', size=(650, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.list.InsertColumn(0, 'SignalK', width=400) self.list.InsertColumn(1, _('SK Unit'), width=80) self.list.InsertColumn(2, _('Unit'), width=80) self.list.InsertColumn(3, _('Description'), width=500) self.sort_UnitSK = wx.Button(panel, label=_('Sort SK Unit')) self.sort_UnitSK.Bind(wx.EVT_BUTTON, self.on_sort_UnitSK) self.sort_Unit = wx.Button(panel, label=_('Sort Unit')) self.Bind(wx.EVT_BUTTON, self.on_sort_Unit, self.sort_Unit) self.sort_SK = wx.Button(panel, label=_('Sort SK')) self.sort_SK.Bind(wx.EVT_BUTTON, self.on_sort_SK) self.change_selected = wx.Button(panel, label=_('change selected')) self.change_selected.Bind(wx.EVT_BUTTON, self.on_change_selected) list_convert = [ 'Hz', 'Hz RPM', 'J', 'J Ah(12V)', 'J Ah(24V)', 'K', 'K C', 'K F', 'm', 'm ft', 'm nm', 'm km', 'm/s', 'm/s kn', 'm/s kmh', 'm/s mph', 'm3', 'm3 dm3', 'm3 gal', 'm3/s', 'm3/s l/h', 'm3/s gal/h', 'Pa', 'Pa hPa', 'Pa Bar', 'rad', 'rad deg', 's', 's h', 's d', 's y', 'ratio', 'ratio %' ] self.select_Unit_t = wx.StaticText(panel, label=_('convert')) self.select_Unit = wx.ComboBox(panel, choices=list_convert, style=wx.CB_READONLY, size=(150, 32)) vbox = wx.BoxSizer(wx.VERTICAL) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox.Add(self.sort_SK, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.sort_UnitSK, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.sort_Unit, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add((0, 0), 1, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.change_selected, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.select_Unit_t, 0, wx.LEFT | wx.TOP, 5) hbox.Add(self.select_Unit, 0, wx.RIGHT | wx.LEFT, 5) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.read() self.sorting() self.Show(True) def read(self): self.list_SK = [] try: with open( self.home + '/.config/signalk-server-node/node_modules/@signalk/signalk-schema/dist/keyswithmetadata.json' ) as data_file: data = json.load(data_file) except: #old signalk with open( self.home + '/.config/signalk-server-node/node_modules/@signalk/signalk-schema/src/keyswithmetadata.json' ) as data_file: data = json.load(data_file) self.data_SK_unit_private = [] if os.path.isfile(self.home + '/.openplotter/private_unit.json'): with open(self.home + '/.openplotter/private_unit.json') as data_file: self.data_SK_unit_private = json.load(data_file) for i in data: if 'units' in data[i].keys(): if 'description' in data[i].keys(): ii = i.replace('/vessels/*/', '') ii = ii.replace('RegExp', '*') ii = ii.replace('/', '.') self.list_SK.append([ str(ii), str(data[i]['units']), '', str(data[i]['description']) ]) else: self.list_SK.append( [str(ii), str(data[i]['units']), '', '']) for j in self.data_SK_unit_private: for i in self.list_SK: if j[0] == i[0]: i[2] = j[2] self.list_SK.sort(key=lambda tup: tup[0]) self.list_SK.sort(key=lambda tup: tup[1]) def lookup_star(self, name): skip = -1 index = 0 st = '' for i in name.split('.'): if index > -1: if skip == 0: st += '.*' else: if i in ['propulsion', 'inventory']: skip = 1 elif i == 'resources': skip = 2 st += '.' + i index += 1 skip -= 1 st = st[1:] self.SK_unit = '' self.SK_description = '' exist = False for j in self.list_SK: if j[2] == st: self.SK_unit = j[0] self.SK_description = j[3] exist = True break if not exist: print 'no unit for ', st def on_sort_Unit(self, e): self.sortCol = 2 self.sorting() def on_sort_UnitSK(self, e): self.sortCol = 1 self.sorting() def on_sort_SK(self, e): self.sortCol = 0 self.sorting() def on_change_selected(self, e): orig_unit = self.select_Unit.GetValue().split(' ') if len(orig_unit) == 1: orig_unit = [orig_unit[0], ''] if orig_unit[0] != '': list_select = [] item = self.list.GetFirstSelected() while item != -1: # do something with the item self.list_SK[item][2] = orig_unit[1] list_select.append(self.get_by_index(item)) item = self.list.GetNextSelected(item) self.data_SK_unit_private = [] for i in self.list_SK: if i[2] != '': self.data_SK_unit_private.append([i[0], i[1], i[2]]) with open(self.home + '/.openplotter/private_unit.json', 'w') as data_file: json.dump(self.data_SK_unit_private, data_file) self.data_SK_unit_private = [] with open(self.home + '/.openplotter/private_unit.json') as data_file: self.data_SK_unit_private = json.load(data_file) self.read() self.sorting() def get_by_index(self, item): index = 0 for i in self.list_SK: if index == item: return i index += 1 return False def sorting(self): self.list.DeleteAllItems() self.list_SK.sort(key=lambda tup: tup[self.sortCol]) index = 0 for i in self.list_SK: self.list.InsertStringItem(index, i[0]) self.list.SetStringItem(index, 1, i[1]) self.list.SetStringItem(index, 2, i[2]) self.list.SetStringItem(index, 3, i[3]) index += 1 def OnClose(self, e): self.Destroy()
class MyFrame(wx.Frame): def __init__(self): # This creates a UDP socket self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # This opens the OpenPlotter configuration file in ~/.openplotter/openplotter.conf self.conf = Conf() Language(self.conf) title = _('Demo tool') wx.Frame.__init__(self, None, title=title, size=(600, 360)) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(op_folder + '/static/icons/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) panel = wx.Panel(self) info = wx.StaticText( panel, label=_('To create tools see ~/.openplotter/tools/README.md.')) # Getting info from OpenPlotter configuration file. When reading from demo tool conf file or OpenPlotter conf file, if section or option do not exist, they will be created with no value. op_data_box = wx.StaticBox(panel, -1, _(' OpenPlotter config data ')) version = _('OpenPlotter version: ').decode('utf8') + self.conf.get( 'GENERAL', 'version') + ' ' + self.conf.get('GENERAL', 'state') text1 = wx.StaticText(panel, label=version) sk_key_box = wx.StaticBox(panel, -1, _(' Working with Signal K ')) text2 = wx.StaticText(panel, label=_('Select a Signal K key')) self.SKkey = wx.TextCtrl(panel, style=wx.CB_READONLY) self.SKkey.SetValue(conf2.get('SIGNALK', 'key')) self.edit_skkey = wx.Button(panel, label=_('Edit')) # This uses the OpenPlotter class to select a signal k key self.edit_skkey.Bind(wx.EVT_BUTTON, self.onEditSkkey) text3 = wx.StaticText(panel, label=_('Write some text to publish')) self.data = wx.TextCtrl(panel) self.data.SetValue(conf2.get('SIGNALK', 'data')) self.button_publish = wx.Button(panel, label=_('Publish')) self.button_publish.Bind(wx.EVT_BUTTON, self.onPublish) button_cancel = wx.Button(panel, label=_('Cancel')) self.Bind(wx.EVT_BUTTON, self.on_cancel, button_cancel) button_ok = wx.Button(panel, label=_('OK')) self.Bind(wx.EVT_BUTTON, self.on_ok, button_ok) v_boxSizer1 = wx.StaticBoxSizer(op_data_box, wx.VERTICAL) v_boxSizer1.AddSpacer(5) v_boxSizer1.Add(text1, 0, wx.ALL | wx.EXPAND, 5) h_boxSizer1 = wx.BoxSizer(wx.HORIZONTAL) h_boxSizer1.Add(self.SKkey, 1, wx.ALL | wx.EXPAND, 5) h_boxSizer1.Add(self.edit_skkey, 0, wx.ALL | wx.EXPAND, 5) h_boxSizer2 = wx.BoxSizer(wx.HORIZONTAL) h_boxSizer2.Add(self.data, 1, wx.ALL | wx.EXPAND, 5) h_boxSizer2.Add(self.button_publish, 0, wx.ALL | wx.EXPAND, 5) v_boxSizer2 = wx.StaticBoxSizer(sk_key_box, wx.VERTICAL) v_boxSizer2.AddSpacer(5) v_boxSizer2.Add(text2, 0, wx.ALL | wx.EXPAND, 5) v_boxSizer2.Add(h_boxSizer1, 0, wx.ALL | wx.EXPAND, 5) v_boxSizer2.Add(text3, 0, wx.ALL | wx.EXPAND, 5) v_boxSizer2.Add(h_boxSizer2, 0, wx.ALL | wx.EXPAND, 5) buttons = wx.BoxSizer(wx.HORIZONTAL) buttons.Add((0, 0), 1, wx.ALL | wx.EXPAND, 0) buttons.Add(button_cancel, 0, wx.ALL | wx.EXPAND, 10) buttons.Add(button_ok, 0, wx.ALL | wx.EXPAND, 10) vbox3 = wx.BoxSizer(wx.VERTICAL) vbox3.Add(info, 0, wx.ALL | wx.EXPAND, 10) vbox3.Add(v_boxSizer1, 0, wx.ALL | wx.EXPAND, 5) vbox3.Add(v_boxSizer2, 0, wx.ALL | wx.EXPAND, 5) vbox3.Add(buttons, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox3) self.Centre() def onEditSkkey(self, e): key = self.SKkey.GetValue() dlg = selectKey(key) res = dlg.ShowModal() if res == wx.ID_OK: key = dlg.keys_list.GetValue() if '*' in key: wildcard = dlg.wildcard.GetValue() if wildcard: if not re.match('^[0-9a-zA-Z]+$', wildcard): self.ShowMessage( _('Failed. * must contain only allowed characters.' )) dlg.Destroy() return key = key.replace('*', wildcard) else: self.ShowMessage( _('Failed. You have to provide a name for *.')) dlg.Destroy() return self.SKkey.SetValue(key) dlg.Destroy() def onPublish(self, e): key = self.SKkey.GetValue() data = self.data.GetValue() # Saving data to demo tool conf file in ~/.openplotter/ conf2.set('SIGNALK', 'key', key) conf2.set('SIGNALK', 'data', data) #Sending data to Signal K server. Port 55557 is used to send sensors data. SignalK_delta = '{"updates":[{"$source":"OPdemo","values":[{"path":"' + key + '","value":"' + data + '"}]}]}\n' self.sock.sendto(SignalK_delta, ('127.0.0.1', 55557)) def on_ok(self, e): self.Close() def on_cancel(self, e): self.Close() def ShowMessage(self, w_msg): wx.MessageBox(w_msg, 'Info', wx.OK | wx.ICON_INFORMATION)
class MainFrame(wx.Frame): def __init__(self): self.conf = Conf() Language(self.conf.get("GENERAL", "lang")) wx.Frame.__init__(self, None, title=_("Connection"), size=(550, 385)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(currentpath + "/openplotter.ico", wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.in_out = sys.argv[1] self.con_type = sys.argv[2] wx.StaticText(self, label=_("Name"), pos=(25, 35)) self.name = wx.TextCtrl(self, -1, size=(120, 32), pos=(20, 55)) if self.con_type == "serial": if self.in_out == "in": wx.StaticBox(self, label=_(" Serial input "), size=(530, 90), pos=(10, 10)) if self.in_out == "out": wx.StaticBox(self, label=_(" Serial output "), size=(530, 90), pos=(10, 10)) self.SerDevLs = [] self.SerialCheck("/dev/rfcomm") self.SerialCheck("/dev/ttyUSB") self.SerialCheck("/dev/ttyS") self.SerialCheck("/dev/ttyACM") wx.StaticText(self, label=_("Port"), pos=(155, 35)) self.deviceComboBox = wx.ComboBox( self, choices=self.SerDevLs, style=wx.CB_DROPDOWN, size=(155, 32), pos=(150, 55) ) if self.SerDevLs: self.deviceComboBox.SetValue(self.SerDevLs[0]) self.bauds = ["4800", "9600", "19200", "38400", "57600", "115200"] wx.StaticText(self, label=_("Bauds"), pos=(320, 35)) self.baudComboBox = wx.ComboBox( self, choices=self.bauds, style=wx.CB_READONLY, size=(90, 32), pos=(315, 55) ) self.baudComboBox.SetValue("4800") if self.con_type == "network": if self.in_out == "in": wx.StaticBox(self, label=_(" Network input "), size=(530, 90), pos=(10, 10)) self.gpsd = wx.Button(self, label=_("GPSD"), pos=(440, 55)) self.Bind(wx.EVT_BUTTON, self.create_gpsd, self.gpsd) if self.in_out == "out": wx.StaticBox(self, label=_(" Network output "), size=(530, 90), pos=(10, 10)) self.type = ["TCP", "UDP"] wx.StaticText(self, label=_("Type"), pos=(155, 35)) self.typeComboBox = wx.ComboBox(self, choices=self.type, style=wx.CB_READONLY, size=(70, 32), pos=(150, 55)) self.typeComboBox.SetValue("TCP") wx.StaticText(self, label=_("Address"), pos=(235, 35)) self.address = wx.TextCtrl(self, -1, size=(120, 32), pos=(230, 55)) wx.StaticText(self, label=_("Port"), pos=(365, 35)) self.port = wx.TextCtrl(self, -1, size=(55, 32), pos=(360, 55)) wx.StaticBox(self, label=_(" Filter "), size=(530, 195), pos=(10, 105)) self.mode_filter = [_("none"), _("Accept only sentences:"), _("Ignore sentences:")] self.filter = wx.ComboBox(self, choices=self.mode_filter, style=wx.CB_READONLY, size=(220, 32), pos=(20, 130)) self.filter.SetValue(self.mode_filter[0]) wx.StaticText(self, label=_("Filtering"), pos=(25, 175)) self.sentences = wx.TextCtrl(self, -1, style=wx.CB_READONLY, size=(400, 32), pos=(20, 195)) self.sentences.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self.delete = wx.Button(self, label=_("Delete"), pos=(440, 195)) self.Bind(wx.EVT_BUTTON, self.delete_sentences, self.delete) wx.StaticText(self, label=_("Talker - Sentence"), pos=(25, 240)) self.talker = wx.TextCtrl(self, -1, size=(35, 32), pos=(20, 260)) wx.StaticText(self, label=_("-"), pos=(60, 265)) self.sent = wx.TextCtrl(self, -1, size=(45, 32), pos=(70, 260)) self.add_sent = wx.Button(self, label=_("Add sentence"), pos=(160, 260)) self.Bind(wx.EVT_BUTTON, self.add_sentence, self.add_sent) self.sentences.SetValue(_("nothing")) self.talker.SetValue("**") self.sent.SetValue("***") self.ok = wx.Button(self, label=_("OK"), pos=(440, 310)) self.Bind(wx.EVT_BUTTON, self.ok_conn, self.ok) self.cancel = wx.Button(self, label=_("Cancel"), pos=(330, 310)) self.Bind(wx.EVT_BUTTON, self.cancel_conn, self.cancel) self.Centre() def ShowMessage(self, w_msg): wx.MessageBox(w_msg, "Info", wx.OK | wx.ICON_INFORMATION) def SerialCheck(self, dev): num = 0 for _ in range(99): s = dev + str(num) d = os.path.exists(s) if d == True: self.SerDevLs.append(s) num = num + 1 def delete_sentences(self, event): self.sentences.SetValue(_("nothing")) def add_sentence(self, event): talker = self.talker.GetValue() sent = self.sent.GetValue() if not re.match("^[*A-Z]{2}$", talker): self.ShowMessage(_("Talker must have 2 uppercase characters. The symbol * matches any character.")) return if not re.match("^[*A-Z]{3}$", sent): self.ShowMessage(_("Sentence must have 3 uppercase characters. The symbol * matches any character.")) return r_sentence = talker + sent if r_sentence == "*****": self.ShowMessage( _( "You must enter 2 uppercase characters for talker or 3 uppercase characters for sentence. The symbol * matches any character." ) ) return if r_sentence in self.sentences.GetValue(): self.ShowMessage(_("This sentence already exists.")) return if self.sentences.GetValue() == _("nothing"): self.sentences.SetValue(r_sentence) else: self.sentences.SetValue(self.sentences.GetValue() + "," + r_sentence) def create_gpsd(self, event): self.name.SetValue("gpsd") self.typeComboBox.SetValue("TCP") self.address.SetValue("localhost") self.port.SetValue("2947") def ok_conn(self, event): name = self.name.GetValue() name = name.replace(" ", "_") if not re.match("^[_0-9a-z]{1,13}$", name): self.ShowMessage( _( '"Name" must be a string between 1 and 13 lowercase letters and/or numbers which is not used as name for another input/output.' ) ) return if self.con_type == "serial": type_conn = "Serial" if self.deviceComboBox.GetValue(): port_address = self.deviceComboBox.GetValue() else: self.ShowMessage(_("You must select a Port.")) return bauds_port = self.baudComboBox.GetValue() if self.con_type == "network": type_conn = self.typeComboBox.GetValue() if self.address.GetValue(): port_address = self.address.GetValue() else: self.ShowMessage(_("You must enter an Address.")) return if self.port.GetValue(): bauds_port = self.port.GetValue() else: self.ShowMessage(_("You must enter a Port.")) return if self.filter.GetValue() == _("none") and self.sentences.GetValue() != _("nothing"): self.ShowMessage(_("You must select a Filter type.")) return filter_type = "none" filtering = "nothing" if self.filter.GetValue() == _("Accept only sentences:") and self.sentences.GetValue() != _("nothing"): filter_type = "accept" filtering = "" r = self.sentences.GetValue() l = r.split(",") for index, item in enumerate(l): if index != 0: filtering += ":" filtering += "+" + item filtering += ":-all" if self.filter.GetValue() == _("Ignore sentences:") and self.sentences.GetValue() != _("nothing"): filter_type = "ignore" filtering = "" r = self.sentences.GetValue() l = r.split(",") for index, item in enumerate(l): if index != 0: filtering += ":" filtering += "-" + item print self.in_out + "," + name + "," + type_conn + "," + port_address + "," + bauds_port + "," + filter_type + "," + filtering + ",1" self.Destroy() def cancel_conn(self, event): self.Destroy()
else: conf.set('WIFI', 'device', 'wlan0') if ssid: conf.set('WIFI', 'ssid', ssid) else: conf.set('WIFI', 'ssid', 'OpenPlotter') if passw: conf.set('WIFI', 'password', passw) else: conf.set('WIFI', 'password', '12345678') if hw_mode: conf.set('WIFI', 'hw_mode', hw_mode) else: conf.set('WIFI', 'hw_mode', 'g') if channel: conf.set('WIFI', 'channel', channel) else: conf.set('WIFI', 'channel', '6') if wpa: conf.set('WIFI', 'wpa', wpa) else: conf.set('WIFI', 'wpa', '2') if boot_sh==1: if share: conf.set('WIFI', 'share', share) else: conf.set('WIFI', 'share', '0') wifi_server=conf.get('WIFI', 'enable') delay=int(conf.get('STARTUP', 'delay')) kplex=conf.get('STARTUP', 'kplex') opencpn=conf.get('STARTUP', 'opencpn') opencpn_no=conf.get('STARTUP', 'opencpn_no_opengl') opencpn_fullscreen=conf.get('STARTUP', 'opencpn_fullscreen') x11vnc=conf.get('STARTUP', 'x11vnc') vnc_pass=conf.get('STARTUP', 'vnc_pass') gps_time=conf.get('STARTUP', 'gps_time') signalk=conf.get('SIGNALK', 'enable') enable=conf.get('AIS-SDR', 'enable') gain=conf.get('AIS-SDR', 'gain') ppm=conf.get('AIS-SDR', 'ppm')
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import serial import socket import sys from classes.conf import Conf conf = Conf() activ = False activ = conf.get('N2K', 'output') == '1' if not activ: sys.exit(0) try: ser = serial.Serial(conf.get('N2K', 'can_usb'), 115200, timeout=0.5) except: print 'failed to start N2K output server on ' + conf.get('N2K', 'can_usb') sys.exit(0) Quelle = '127.0.0.1' # Adresse des eigenen Rechners Port = 55560 e_udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # s.o. e_udp_sock.bind((Quelle, Port))
class MainFrame(wx.Frame): def __init__(self): self.option = sys.argv[1] self.text_sms = sys.argv[2] self.text_sms = unicode(self.text_sms, 'utf-8') self.phone = sys.argv[3] self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' Language(self.conf) wx.Frame.__init__(self, None, title=_('Test SMS'), size=(500, 260)) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.CreateStatusBar() self.text = wx.StaticText(self, label=_('Error'), pos=(10, 10)) self.output = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_DONTWRAP, size=(480, 110), pos=(10, 50)) self.button_close = wx.Button(self, label=_('Close'), pos=(300, 170)) self.Bind(wx.EVT_BUTTON, self.close, self.button_close) self.button_calculate = wx.Button(self, label=_('Start'), pos=(400, 170)) self.Bind(wx.EVT_BUTTON, self.calculate, self.button_calculate) if self.option == 'i': self.text.SetLabel( _('Press start to check the settings and connect to the GSM device' )) if self.option == 't': self.text.SetLabel( _('Press start to send the text "').decode('utf8') + self.text_sms + _('"\nto the number "').decode('utf8') + self.phone + '"') self.Centre() def calculate(self, e): self.output.SetValue('') output = '' if self.option == 'i': self.SetStatusText(_('Connecting...')) try: output = subprocess.check_output(['gammu', 'identify']) except: output = _('Error opening device. Check settings.') if self.option == 't': self.SetStatusText(_('Sending...')) try: sm = gammu.StateMachine() sm.ReadConfig() sm.Init() netinfo = sm.GetNetworkInfo() output += 'Network name: %s' % netinfo['NetworkName'] output += '\nNetwork code: %s' % netinfo['NetworkCode'] output += '\nLAC: %s' % netinfo['LAC'] output += '\nCID: %s' % netinfo['CID'] message = { 'Text': self.text_sms, 'SMSC': { 'Location': 1 }, 'Number': self.phone, } sm.SendSMS(message) output += '\nSMS "' + self.text_sms + _( '" sent succesfully to ').decode('utf8') + self.phone except Exception, e: output = str(e) self.output.SetValue(output) self.SetStatusText(_('Finished'))
if send: SignalK +=Erg[0:-1]+']}]}\n' sock.sendto(SignalK, ('127.0.0.1', 55557)) conf = Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) read_sensors = True #init SPI MCP rate_ana=0.25 MCP=[] adjust_point=[] SignalK='' data=conf.get('SPI', 'mcp') try: temp_list=eval(data) except:temp_list=[] analog_=False for ii in temp_list: if '.*.' in ii[2]: ii[2]=ii[2].replace('*', ii[3]) MCP.append(ii) if ii[0]==1:analog_=True if ii[0]==1 and ii[4]==1: if not conf.has_option('SPI', 'value_'+str(ii[1])): temp_list=[[0,0],[1023,1023]] conf.set('SPI', 'value_'+str(ii[1]), str(temp_list)) conf.read() data=conf.get('SPI', 'value_'+str(ii[1]))
# # 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, pynmea2, RTIMU, math, csv from classes.paths import Paths from classes.conf import Conf paths=Paths() currentpath=paths.currentpath conf=Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) nmea_hdg_b = conf.get('STARTUP', 'nmea_hdg')=='1' nmea_heel_b = conf.get('STARTUP', 'nmea_heel')=='1' nmea_pitch_b = conf.get('STARTUP', 'nmea_pitch')=='1' poll_interval = 1 imu_b = False pressure_val_b = False humidity_val_b = False log_list_b = False nmea_press_b = conf.get('STARTUP', 'nmea_press')=='1' nmea_temp_p_b = conf.get('STARTUP', 'nmea_temp_p')=='1' nmea_hum_b = conf.get('STARTUP', 'nmea_hum')=='1' nmea_temp_h_b = conf.get('STARTUP', 'nmea_temp_h')=='1' press_temp_log_b = conf.get('STARTUP', 'press_temp_log')=='1'
class MyFrame(wx.Frame): def __init__(self): self.ttimer = 100 self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' Language(self.conf) self.list_iter = [] titleadd = '' if len(sys.argv) > 2: titleadd = sys.argv[2] wx.Frame.__init__(self, None, title=titleadd, size=(650, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.logger = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_DONTWRAP | wx.LC_SORT_ASCENDING) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.list.InsertColumn(0, _('Device'), width=50) self.list.InsertColumn(1, _('Type'), width=50) self.list.InsertColumn(2, _('Interval'), wx.LIST_FORMAT_RIGHT, width=50) self.list.InsertColumn(3, _('Data'), width=500) self.button_pause = wx.Button(panel, label=_('Pause'), pos=(555, 160)) self.button_pause.Bind(wx.EVT_BUTTON, self.pause) sort = wx.Button(panel, label=_('Sort'), pos=(555, 200)) sort.Bind(wx.EVT_BUTTON, self.sort) nmea = wx.Button(panel, label=_('NMEA info'), pos=(555, 240)) nmea.Bind(wx.EVT_BUTTON, self.nmea_info) self.pause_all = 0 htextbox = wx.BoxSizer(wx.HORIZONTAL) htextbox.Add(self.logger, 1, wx.ALL | wx.EXPAND, 5) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(self.button_pause, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(sort, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(nmea, 0, wx.RIGHT | wx.LEFT, 5) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(htextbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.Show(True) self.s2 = '' self.status = '' self.data = [] self.baudc = 0 self.baud = 0 self.timer.Start(self.ttimer) def connect(self): port = 10113 try: if len(sys.argv) > 0: port = int(sys.argv[1]) self.s2 = socket.socket() self.s2.connect(("localhost", port)) self.s2.settimeout(5) self.status = _('connected to:').decode('utf8') + str(port) except socket.error, error_msg: self.status = _('Failed to connect with localhost:10113. Error: ' ).decode('utf8') + str( error_msg[0]) + _(', trying to reconnect...') self.s2 = '' time.sleep(7) else:
# but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # 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, pynmea2, time from w1thermsensor import W1ThermSensor from classes.conf import Conf conf=Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sensors_list=eval(conf.get('1W', 'DS18B20')) sensors=[] for index,item in enumerate(sensors_list): try: type=W1ThermSensor.THERM_SENSOR_DS18B20 for sensor in W1ThermSensor.get_available_sensors(): if item[3] == sensor.id: type = sensor.type sensors.append(W1ThermSensor(type, item[3])) except Exception,e: sensors_list[index][5]='0' print str(e) while True:
class MyFrame(wx.Frame): def __init__(self): self.ttimer = 40 self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' try: self.ser = serial.Serial(self.conf.get('N2K', 'can_usb'), 115200, timeout=0.5) except: print 'failed to start N2K output setting on ' + self.conf.get( 'N2K', 'can_usb') sys.exit(0) Language(self.conf) Buf_ = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) self.Buffer = bytearray(Buf_) self.Zustand = 6 self.buffer = 0 self.PGN_list = [] self.list_N2K_txt = [] self.list_count = [] self.p = 0 wx.Frame.__init__(self, None, title="N2K setting", size=(650, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) panel = wx.Panel(self, 100) wx.StaticText(panel, wx.ID_ANY, label="TX PGN", style=wx.ALIGN_CENTER, pos=(10, 5)) self.list_N2K = CheckListCtrl(panel, 400, 260) self.list_N2K.SetBackgroundColour((230, 230, 230)) self.list_N2K.SetPosition((10, 25)) self.list_N2K.InsertColumn(0, _('PGN'), width=90) self.list_N2K.InsertColumn(1, _('info'), width=200) wx.StaticText(panel, wx.ID_ANY, label="enabled transmit PGN:", style=wx.ALIGN_CENTER, pos=(10, 300)) self.printing = wx.StaticText(panel, size=(600, 70), pos=(10, 320)) self.check_b = wx.Button(panel, label=_('check'), size=(70, 32), pos=(550, 20)) self.Bind(wx.EVT_BUTTON, self.check, self.check_b) self.apply_b = wx.Button(panel, label=_('apply'), size=(70, 32), pos=(550, 60)) self.Bind(wx.EVT_BUTTON, self.apply, self.apply_b) self.Centre() self.read_N2K() self.timer.Start(self.ttimer) self.check(0) self.Show(True) def check(self, e): self.Send_Command(1, 0x49, 0) time.sleep(0.2) self.read_stick_check() def apply(self, e): st = '' counter = 0 for ii in self.list_N2K_txt: if self.list_N2K.IsChecked(counter): exist = 0 for jj in self.PGN_list: if ii[0] == str(jj): exist = 1 if exist == 0: st += ii[0] + ' ' if len(self.PGN_list) < 36: self.sendTX_PGN(int(ii[0]), 1) self.PGN_list.append(ii[0]) time.sleep(0.2) counter += 1 print 'new PGNs=', st st = '' for jj in self.PGN_list: counter = 0 for ii in self.list_N2K_txt: exist = 0 if ii[0] == str(jj): if not self.list_N2K.IsChecked(counter): exist = 1 if exist == 1: st += ii[0] + ' ' self.sendTX_PGN(int(ii[0]), 0) time.sleep(0.2) counter += 1 print 'del PGNs=', st self.Send_Command(1, 0x01, 0) def sendTX_PGN(self, lPGN, add): if add: data_ = (0, 0, 0, 0, 1, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF) else: data_ = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) data = bytearray(data_) data[0] = lPGN & 255 data[1] = (lPGN >> 8) & 255 data[2] = (lPGN >> 16) & 255 self.Send_Command(14, 0x47, data) def Send_Command(self, length, command, arg): data_ = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) data = bytearray(data_) data[0] = 0xa1 #command data[1] = length #Actisense length data[2] = command i = 3 while i < length + 2: data[i] = arg[i - 3] i += 1 self.SendCommandtoSerial(data) def timer_act(self, e): self.getCharfromSerial() def OnClose(self, event): self.timer.Stop() self.Destroy() def SendCommandtoSerial(self, TXs): crc = 0 #start = codecs.decode('1002', 'hex_codec') start = (0x10, 0x02) ende = codecs.decode('1003', 'hex_codec') ende = (0x10, 0x03) i = 0 while i < TXs[1] + 2: crc += TXs[i] i += 1 crc = (256 - crc) & 255 TXs[TXs[1] + 2] = crc i = 0 self.ser.write(chr(start[0])) self.ser.write(chr(start[1])) while i < TXs[1] + 3: self.ser.write(chr(TXs[i])) #print format(TXs[i], '02x') if TXs[i] == 0x10: self.ser.write(chr(TXs[i])) i += 1 self.ser.write(chr(ende[0])) self.ser.write(chr(ende[1])) def getCharfromSerial(self): bytesToRead = self.ser.inWaiting() if bytesToRead > 0: buffer = self.ser.read(bytesToRead) for i in buffer: #sys.stdout.write(' '+hex(ord(i))) self.parse(ord(i)) def parse(self, b): if self.Zustand == 6: # zu Beginn auf 0x10 warten if b == 0x10: self.Zustand = 0x10 elif self.Zustand == 0x10: if b == 0x10: # 0x10 Schreiben wenn zweimal hintereinander self.Buffer[self.p] = b self.p += 1 self.Zustand = 0 elif b == 0x02: # Anfang gefunden self.p = 0 self.Zustand = 0 elif b == 0x03: # Ende gefunden if self.crcCheck(): #print "CRC" self.output() self.p = 0 self.Zustand = 6 # Auf Anfang zuruecksetzen elif self.Zustand == 0: if b == 0x10: self.Zustand = 0x10 else: self.Buffer[self.p] = b self.p += 1 def crcCheck(self): crc = 0 i = 0 while i < self.p: crc = (crc + self.Buffer[i]) & 255 i += 1 return (crc == 0) def output(self): k = 0 if self.Buffer[0] == 0x93 and self.Buffer[1] == self.p - 3: #i=0 #while i < 10: # sys.stdout.write(' '+hex(self.Buffer[i])) # i += 1 #print ' ' pass else: if self.Buffer[2] == 0x49 and self.Buffer[3] == 0x01: j = 0 st = '' self.PGN_list = [] while j < self.Buffer[14]: i = j * 4 lPGN = self.Buffer[15 + i] + self.Buffer[ 16 + i] * 256 + self.Buffer[17 + i] * 256 * 256 self.PGN_list.append(lPGN) j += 1 st += str(lPGN) + ' ' if ((j) % 6) == 0 and j > 0: st += '\n' self.printing.SetLabel(st) self.conf.set('N2K', 'pgn_output', st) def getCommandfromSerial(self, RXs): crc = 0 start = (0x10, 0x02) ende = (0x10, 0x03) i = 0 while i < RXs[1] + 2: crc += RXs[i] i += 1 crc = (256 - crc) & 255 RXs[RXs[1] + 2] = crc i = 0 self.ser.write(chr(start[0])) self.ser.write(chr(start[1])) while i < RXs[1] + 3: self.ser.write(chr(RXs[i])) #print format(RXs[i], '02x') if RXs[i] == 0x10: self.ser.write(chr(RXs[i])) i += 1 self.ser.write(chr(ende[0])) self.ser.write(chr(ende[1])) def read_N2K(self): if self.list_N2K.GetItemCount() < 3: while self.list_N2K.GetItemCount() > 3: self.list_N2K.DeleteItem(self.list_N2K.GetItemCount() - 1) self.list_N2K_txt = [] with open(self.currentpath + '/classes/N2K_PGN.csv') as f: self.list_N2K_txt = [ x.strip('\n\r').split(',') for x in f.readlines() ] for ii in self.list_N2K_txt: pgn = int(ii[0]) self.list_N2K.Append([pgn, ii[1]]) def read_stick_check(self): counter = 0 for ii in self.list_N2K_txt: for jj in self.PGN_list: if ii[0] == str(jj): self.list_N2K.CheckItem(counter) counter += 1
except socket.error, error_msg: error = _('Failed to connect with localhost:10110. Error: ') + str( error_msg[0]) print error sock_in = '' time.sleep(7) else: error = 0 #end thread1 # no loop conf = Conf() Language(conf.get('GENERAL', 'lang')) global triggers triggers = [] global sock_in global error sock_in = '' error = 0 a = DataStream(conf) actions = Actions(conf) nodata = '' sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) read_triggers()
# any later version. # Openplotter is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import matplotlib.pyplot as plt from classes.conf import Conf from classes.language import Language conf = Conf() Language(conf) data = conf.get('PYPILOT', 'deviation') listsave = [] try: listsave = eval(data) except: listsave = [] x=[] y=[] for ii in listsave: x.append(ii[1] - ii[0]) y.append(ii[0]) plt.plot(x,y) plt.suptitle(_('Show deviation table as curve'), fontsize=12) plt.xlabel(_('Deviation'), fontsize=12)
class MyFrame(wx.Frame): def __init__(self): Quelle = '127.0.0.1' # Adresse des eigenen Rechners Port = 55560 self.e_udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #s.o. self.e_udp_sock.bind((Quelle, Port)) self.e_udp_sock.settimeout(1) self.ttimer = 20 self.conf = Conf() self.home = self.conf.home self.currentpath = self.home + self.conf.get( 'GENERAL', 'op_folder') + '/openplotter' Language(self.conf) print self.conf.get('GENERAL', 'lang') list_N2K_txt = [] self.list_N2K = [] with open(self.currentpath + '/classes/N2K_PGN.csv') as f: list_N2K_txt = [x.strip('\n\r').split(',') for x in f.readlines()] for ii in list_N2K_txt: pgn = int(ii[0]) self.list_N2K.append([pgn, ii[1]]) self.Buffer = [0] * 500 self.Zustand = 6 self.list_iter = [] wx.Frame.__init__(self, None, title='diagnostic N2K output', size=(650, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, size=(540, 370), pos=(5, 5)) self.list.InsertColumn(0, _('PGN'), wx.LIST_FORMAT_RIGHT, width=62) self.list.InsertColumn(1, _('SRC'), wx.LIST_FORMAT_RIGHT, width=38) self.list.InsertColumn(2, _('DST'), wx.LIST_FORMAT_RIGHT, width=38) self.list.InsertColumn(3, _('Name'), width=180) self.list.InsertColumn(4, _('Interval'), wx.LIST_FORMAT_RIGHT, width=45) self.list.InsertColumn(5, _('Data'), width=350) sort_SRC = wx.Button(panel, label=_('Sort SRC')) sort_SRC.Bind(wx.EVT_BUTTON, self.on_sort_SRC) sort_PGN = wx.Button(panel, label=_('Sort PGN')) sort_PGN.Bind(wx.EVT_BUTTON, self.on_sort_PGN) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(sort_SRC, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(sort_PGN, 0, wx.RIGHT | wx.LEFT, 5) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.Show(True) self.status = '' self.data = [] self.timer.Start(self.ttimer) def timer_actx(self, event): pass def timer_act(self, event): self.timer.Stop() try: data1, addr = self.e_udp_sock.recvfrom(512) except: self.timer.Start(self.ttimer) return # Die Puffergroesse muss immer eine Potenz # von 2 sein data = bytearray(data1) if data[7] + 9 == len(data): self.output(data) self.timer.Start(self.ttimer) def on_sort_PGN(self, e): self.timer.Stop() self.list_iter.sort() self.list.DeleteAllItems() self.init2() self.timer.Start(self.ttimer) def on_sort_SRC(self, e): self.timer.Stop() self.list.DeleteAllItems() list_new = [] for i in sorted(self.list_iter, key=lambda item: (item[1], item[0])): list_new.append(i) self.list_iter = list_new self.init2() self.timer.Start(self.ttimer) def init2(self): index = 0 for i in self.list_iter: self.list.InsertStringItem(index, str(i[0])) self.list.SetStringItem(index, 1, str(i[1])) self.list.SetStringItem(index, 2, str(i[2])) self.list.SetStringItem(index, 3, str(i[3])) self.list.SetStringItem(index, 4, str(i[4])) self.list.SetStringItem(index, 5, '') index += 1 def OnClose(self, event): self.timer.Stop() self.Destroy() def output(self, data): k = 0 Buffer = bytearray(data) if Buffer[0] == 0x94: nPriority = Buffer[2] lPGN = Buffer[3] + Buffer[4] * 256 + Buffer[5] * 256 * 256 nDestAddr = Buffer[6] nSrcAddr = 'own' length = Buffer[7] datap = '' data = 0 for i in range(8, 8 + length): data = data + Buffer[i] datap += ' ' + ('0' + hex(Buffer[i])[2:])[-2:] #print lPGN, nSrcAddr, nDestAddr, datap exist = 0 index = 0 tt = time.time() for i in self.list_iter: if nSrcAddr == i[1]: if lPGN == i[0]: td = round(i[4] * 0.3 + 0.7 * (tt - i[5]), 1) self.list_iter[index][4] = td self.list_iter[index][5] = tt self.list.SetStringItem(index, 4, str(td)) self.list.SetStringItem(index, 5, str(datap)) self.Update() exist = 1 index += 1 if exist == 0: self.list.InsertStringItem(index, str(lPGN)) self.list.SetStringItem(index, 1, str(nSrcAddr)) self.list.SetStringItem(index, 2, str(nDestAddr)) for ii in self.list_N2K: if lPGN == ii[0]: self.list.SetStringItem(index, 3, ii[1]) self.list.SetStringItem(index, 4, 'X') self.list.SetStringItem(index, 5, datap) self.list_iter.append([ lPGN, nSrcAddr, nDestAddr, self.list.GetItem(index, 3).GetText(), 0, tt ])
class MyFrame(wx.Frame): def __init__(self): self.ttimer = 40 self.conf = Conf() self.home = self.conf.home self.currentpath = self.conf.get('GENERAL', 'op_folder') self.SK_settings = SK_settings(self.conf) baudrate = self.SK_settings.ngt1_baudrate can_device = self.SK_settings.ngt1_device if baudrate and can_device: try: self.ser = serial.Serial(can_device, baudrate, timeout=0.5) except: print 'failed to start N2K input diagnostic on ' + can_device sys.exit(0) else: sys.exit(0) Language(self.conf) list_N2K_txt = [] self.list_N2K = [] with open(self.currentpath + '/classes/N2K_PGN.csv') as f: list_N2K_txt = [x.strip('\n\r').split(',') for x in f.readlines()] for ii in list_N2K_txt: pgn = int(ii[0]) self.list_N2K.append([pgn, ii[1]]) self.Buffer = [0] * 500 self.Zustand = 6 self.list_iter = [] wx.Frame.__init__(self, None, title='diagnostic N2K input', size=(650, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/static/icons/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.list.InsertColumn(0, _('PGN'), wx.LIST_FORMAT_RIGHT, width=62) self.list.InsertColumn(1, _('SRC'), wx.LIST_FORMAT_RIGHT, width=38) self.list.InsertColumn(2, _('DST'), wx.LIST_FORMAT_RIGHT, width=38) self.list.InsertColumn(3, _('Name'), width=180) self.list.InsertColumn(4, _('Interval'), wx.LIST_FORMAT_RIGHT, width=45) self.list.InsertColumn(5, _('Data'), width=350) sort_SRC = wx.Button(panel, label=_('Sort SRC')) sort_SRC.Bind(wx.EVT_BUTTON, self.on_sort_SRC) sort_PGN = wx.Button(panel, label=_('Sort PGN')) sort_PGN.Bind(wx.EVT_BUTTON, self.on_sort_PGN) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(sort_SRC, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(sort_PGN, 0, wx.RIGHT | wx.LEFT, 5) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.Show(True) self.status = '' self.data = [] self.baudc = 0 self.baud = 0 self.timer.Start(self.ttimer) def timer_act(self, event): if self.ser: self.getCharfromSerial() def on_sort_PGN(self, e): self.timer.Stop() self.list_iter.sort() self.list.DeleteAllItems() self.init2() self.timer.Start(self.ttimer) def on_sort_SRC(self, e): self.timer.Stop() self.list.DeleteAllItems() list_new = [] for i in sorted(self.list_iter, key=lambda item: (item[1], item[0])): list_new.append(i) self.list_iter = list_new self.init2() self.timer.Start(self.ttimer) def init2(self): index = 0 for i in self.list_iter: self.list.InsertStringItem(index, str(i[0])) self.list.SetStringItem(index, 1, str(i[1])) self.list.SetStringItem(index, 2, str(i[2])) self.list.SetStringItem(index, 3, str(i[3])) self.list.SetStringItem(index, 4, str(i[4])) self.list.SetStringItem(index, 5, '') index += 1 def OnClose(self, event): self.timer.Stop() self.Destroy() def getCharfromSerial(self): bytesToRead = self.ser.inWaiting() if bytesToRead > 0: buffer = self.ser.read(bytesToRead) for i in buffer: #sys.stdout.write(' '+hex(ord(i))) self.parse(ord(i)) def parse(self, b): if self.Zustand == 6: # zu Beginn auf 0x10 warten if b == 0x10: self.Zustand = 0x10 elif self.Zustand == 0x10: if b == 0x10: # 0x10 Schreiben wenn zweimal hintereinander self.Buffer[self.p] = b self.p += 1 self.Zustand = 0 elif b == 0x02: # Anfang gefunden self.p = 0 self.Zustand = 0 elif b == 0x03: # Ende gefunden if self.crcCheck(): #print "CRC" self.output() self.p = 0 self.Zustand = 6 # Auf Anfang zuruecksetzen elif self.Zustand == 0: if b == 0x10: self.Zustand = 0x10 else: self.Buffer[self.p] = b self.p += 1 def crcCheck(self): crc = 0 i = 0 while i < self.p: crc = (crc + self.Buffer[i]) & 255 i += 1 return (crc == 0) def output(self): if self.Buffer[0] == 0x93 and self.Buffer[1] == self.p - 3: nPriority = self.Buffer[2] lPGN = self.Buffer[ 3] + self.Buffer[4] * 256 + self.Buffer[5] * 256 * 256 nDestAddr = self.Buffer[6] nSrcAddr = self.Buffer[7] length = self.Buffer[12] datap = '' data = 0 for i in range(13, 13 + length): data = data + self.Buffer[i] datap += ' ' + ('0' + hex(self.Buffer[i])[2:])[-2:] #print lPGN, nSrcAddr, nDestAddr, datap exist = 0 index = 0 tt = time.time() for i in self.list_iter: if nSrcAddr == i[1]: if lPGN == i[0]: td = round(i[4] * 0.3 + 0.7 * (tt - i[5]), 1) self.list_iter[index][4] = td self.list_iter[index][5] = tt self.list.SetStringItem(index, 4, str(td)) self.list.SetStringItem(index, 5, datap) exist = 1 index += 1 if exist == 0: self.list.InsertStringItem(index, str(lPGN)) self.list.SetStringItem(index, 1, str(nSrcAddr)) self.list.SetStringItem(index, 2, str(nDestAddr)) for ii in self.list_N2K: if lPGN == ii[0]: self.list.SetStringItem(index, 3, ii[1]) self.list.SetStringItem(index, 4, 'X') self.list.SetStringItem(index, 5, datap) self.list_iter.append([ lPGN, nSrcAddr, nDestAddr, self.list.GetItem(index, 3).GetText(), 0, tt ])
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import serial import socket import sys from classes.conf import Conf from classes.SK_settings import SK_settings conf = Conf() activ = False activ = conf.get('N2K', 'output') == '1' if not activ: sys.exit(0) SK_settings = SK_settings(conf) baudrate = SK_settings.ngt1_baudrate can_device = SK_settings.ngt1_device if baudrate and can_device: try: ser = serial.Serial(can_device, baudrate, timeout=0.5) except: print 'failed to start N2K output server on ' + can_device sys.exit(0) else: sys.exit(0)
class MyFrame(wx.Frame): def __init__(self): logging.basicConfig() self.conf = Conf() self.home = self.conf.home self.currentpath = self.home+self.conf.get('GENERAL', 'op_folder')+'/openplotter' #self.Check127488_pos=100 #self.Check127489_pos=100 #self.Check127505_pos=100 #self.Check130316_pos=100 self.N2K=N2K_send() self.tick=0 self.list_SK=[] Language(self.conf) wx.Frame.__init__(self, None, title="N2K-from-SK", size=(650,435)) self.Bind(wx.EVT_CLOSE, self.OnClose) self.ttimer=100 self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) iL=20; self.Check126992 = wx.CheckBox(self, label=_('126992 System_Time'), pos=(20, iL)) iL+=20; self.Check127245 = wx.CheckBox(self, label=_('127245 Rudder'), pos=(20, iL)) iL+=20; self.Check127250 = wx.CheckBox(self, label=_('127250 Heading'), pos=(20, iL)) iL+=20 self.Check127257 = wx.CheckBox(self, label=_('127257 Attitude'), pos=(20, iL)) iL+=20 self.Check127488 = wx.CheckBox(self, label=_('127488 Engine_Rapid'), pos=(20, iL)) iL+=20 self.Check127488_1 = wx.CheckBox(self, label=_('127488 Engine_Rapid starbord'), pos=(20, iL)) iL+=20 self.Check127489 = wx.CheckBox(self, label=_('127489 Engine'), pos=(20, iL)) iL+=20 self.Check127489_1 = wx.CheckBox(self, label=_('127489 Engine starbord'), pos=(20, iL)) iL+=20 self.Check127505 = wx.CheckBox(self, label=_('127505 FluidLevel fuel'), pos=(20, iL)) iL+=20 self.Check127505_1 = wx.CheckBox(self, label=_('127505 FluidLevel water'), pos=(20, iL)) iL+=20 self.Check127505_2 = wx.CheckBox(self, label=_('127505 FluidLevel gray water'), pos=(20, iL)) iL+=20 self.Check127505_3 = wx.CheckBox(self, label=_('127505 FluidLevel black water'), pos=(20, iL)) iL+=20 self.Check127508 = wx.CheckBox(self, label=_('127508 Battery_Status'), pos=(20, iL)) iL+=20; self.Check128259 = wx.CheckBox(self, label=_('128259 Speed'), pos=(20, iL)) iL+=20 self.Check128267 = wx.CheckBox(self, label=_('128267 Depth'), pos=(20, iL)) iL+=20 self.Check128275 = wx.CheckBox(self, label=_('128275 Distance_Log'), pos=(20, iL)) iL+=20 self.Check129025 = wx.CheckBox(self, label=_('129025 Position_Rapid'), pos=(20, iL)) iL+=20 self.Check129026 = wx.CheckBox(self, label=_('129026 COG_SOG'), pos=(20, iL)) iL=100 self.Check130306 = wx.CheckBox(self, label=_('130306 Wind Data'), pos=(320, iL)) iL+=20 self.Check130310 = wx.CheckBox(self, label=_('130310 Environmental_Parameters'), pos=(320, iL)) iL+=20 self.Check130311 = wx.CheckBox(self, label=_('130311 Environmental_Parameters'), pos=(320, iL)) iL+=20 self.Check130316 = wx.CheckBox(self, label=_('130316 Temperature refrigerator'), pos=(320, iL)) iL+=20 self.Check130316_1 = wx.CheckBox(self, label=_('130316 Temperature exhaust'), pos=(320, iL)) self.Bind(wx.EVT_CHECKBOX, self.updCB) self.XallBtn = wx.Button(self, label=_('all'),size=(70, 32), pos=(550, 20)) self.Bind(wx.EVT_BUTTON, self.allBtn, self.XallBtn) self.XnoneBtn = wx.Button(self, label=_('none'),size=(70, 32), pos=(550, 60)) self.Bind(wx.EVT_BUTTON, self.noneBtn, self.XnoneBtn) self.Centre() self.Show(True) self.defvar() self.aktPGN() self.cycle250=time.time() self.cycle250_2=time.time()+0.111 self.cycle500=time.time()+0.123 self.cycle500_2=time.time()+0.241 self.cycle500_3=time.time()+0.363 self.cycle500_4=time.time()-0.025 self.cycle1000=time.time()+0.087 self.cycle1000_2=time.time()+0.207 self.start() self.timer.Start(self.ttimer) def allBtn(self,e): self.setCheckbox(True) self.aktPGN() def noneBtn(self,e): self.setCheckbox(False) self.aktPGN() def setCheckbox(self, value): self.Check126992.SetValue(value) self.Check127245.SetValue(value) self.Check127250.SetValue(value) self.Check127257.SetValue(value) self.Check127488.SetValue(value) self.Check127488_1.SetValue(value) self.Check127489.SetValue(value) self.Check127489_1.SetValue(value) self.Check127505.SetValue(value) self.Check127505_1.SetValue(value) self.Check127505_2.SetValue(value) self.Check127505_3.SetValue(value) self.Check127508.SetValue(value) self.Check128259.SetValue(value) self.Check128267.SetValue(value) self.Check128275.SetValue(value) self.Check129025.SetValue(value) self.Check129026.SetValue(value) self.Check130306.SetValue(value) self.Check130310.SetValue(value) self.Check130311.SetValue(value) self.Check130316.SetValue(value) self.Check130316_1.SetValue(value) def updCB(self,event): self.aktPGN() #self.PGN_list = ['126992','127245','127250','127257','127488','127488_1','127489','127489_1','127505','127505_1','127505_2','127505_3','127508','128259','128267','128275','129025','129026','130306','130310','130311','130316','130316_1'] self.PGN_list = ['126992','127245'] def aktPGN(self): self.akt126992='126992' in self.PGN_list self.akt127245='127245' in self.PGN_list self.akt127250='127250' in self.PGN_list self.akt127257='127257' in self.PGN_list self.akt127488='127488' in self.PGN_list self.akt127488_1='127488_1' in self.PGN_list self.akt127489='127489' in self.PGN_list self.akt127489_1='127489_1' in self.PGN_list self.akt127505='127505' in self.PGN_list self.akt127505_1='127505_1' in self.PGN_list self.akt127505_2='127505_2' in self.PGN_list self.akt127505_3='127505_3' in self.PGN_list self.akt127508='127508' in self.PGN_list self.akt128259='128259' in self.PGN_list self.akt128267='128267' in self.PGN_list self.akt128275='128275' in self.PGN_list self.akt129025='129025' in self.PGN_list self.akt129026='129026' in self.PGN_list self.akt130306='130306' in self.PGN_list self.akt130310='130310' in self.PGN_list self.akt130311='130311' in self.PGN_list self.akt130316='130316' in self.PGN_list self.akt130316_1='130316_1' in self.PGN_list def setlist(self,list)
else: current_state = '0' SignalK = '{"updates":[{"$source":"OPnotifications.GPIO.' + io + '.' + str( channel ) + '","values":[{"path":"sensors.' + name + '","value":' + current_state + '}]}]}\n' sock.sendto(SignalK, ('127.0.0.1', 55558)) conf = Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #init SPI MCP rate_ana = 0.1 MCP = [] adjust_point = [] SignalK = '' data = conf.get('SPI', 'mcp') try: temp_list = eval(data) except: temp_list = [] analog_ = False for ii in temp_list: if '.*.' in ii[2]: ii[2] = ii[2].replace('*', ii[3]) MCP.append(ii) if ii[0] == 1: analog_ = True if ii[0] == 1 and ii[4] == 1: if not conf.has_option('SPI', 'value_' + str(ii[1])): temp_list = [[0, 0], [1023, 1023]] conf.set('SPI', 'value_' + str(ii[1]), str(temp_list)) conf.read()
# GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import sys, subprocess, wx from classes.conf import Conf from classes.language import Language action=sys.argv[1] #see actions.py start_all_actions='ACT19' conf = Conf() currentpath = conf.home+conf.get('GENERAL', 'op_folder')+'/openplotter' Language(conf) triggers=[] data=conf.get('ACTIONS', 'triggers') try: triggers=eval(data) except:triggers=[] #stop all if action=='0': i=0 for ii in triggers: templist=ii[4] start=0
# but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import matplotlib.pyplot as plt import sys from classes.conf import Conf from classes.language import Language edit = sys.argv[1] conf = Conf() Language(conf) data = conf.get('SPI', 'value_' + str(edit)) listsave = [] try: temp_list = eval(data) except: temp_list = [] for ii in temp_list: listsave.append(ii) plt.plot(*zip(*listsave)) plt.suptitle(_( 'settings to convert raw adc values (unlinear and/or no factor and/or no offset)\n to useable values for input ' ).decode('utf8') + str(edit), fontsize=12) plt.xlabel(_('row adc value'), fontsize=12) plt.ylabel(_('value in unit'), fontsize=12) plt.show()
from w1thermsensor import W1ThermSensor from classes.conf import Conf conf=Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) eng_temp='' tick=time.time() while True: tick2=time.time() #GENERATE if tick2-tick > float(conf.get('STARTUP', 'nmea_rate_sen')): tick=time.time() # read DS18B20 if conf.get('STARTUP', 'nmea_eng_temp')=='1': try: sensor = W1ThermSensor() eng_temp = sensor.get_temperature() except Exception,e: print str(e) # XDR list_tmp=[] if conf.get('STARTUP', 'nmea_eng_temp')=='1' and eng_temp: eng_temp=round(eng_temp,1) list_tmp.append('C') list_tmp.append(str(eng_temp)) list_tmp.append('C')
# # 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, pynmea2, RTIMU, math, csv from classes.paths import Paths from classes.conf import Conf paths = Paths() currentpath = paths.currentpath conf = Conf() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) nmea_hdg_b = conf.get('STARTUP', 'nmea_hdg') == '1' nmea_heel_b = conf.get('STARTUP', 'nmea_heel') == '1' nmea_pitch_b = conf.get('STARTUP', 'nmea_pitch') == '1' poll_interval = 1 imu_b = False pressure_val_b = False humidity_val_b = False log_list_b = False nmea_press_b = conf.get('STARTUP', 'nmea_press') == '1' nmea_temp_p_b = conf.get('STARTUP', 'nmea_temp_p') == '1' nmea_hum_b = conf.get('STARTUP', 'nmea_hum') == '1' nmea_temp_h_b = conf.get('STARTUP', 'nmea_temp_h') == '1' press_temp_log_b = conf.get('STARTUP', 'press_temp_log') == '1'
class MyFrame(wx.Frame): def __init__(self): self.SK_unit = '' self.SK_description = '' self.SK_unit_priv = 0 self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 self.ws = None self.thread = threading._DummyThread self.private_unit_s = 1 logging.basicConfig() self.buffer = [] self.list_SK = [] self.list_SK_unit = [] self.sortCol = 0 self.conf = Conf() self.home = self.conf.home self.currentpath = self.conf.get('GENERAL', 'op_folder') SK_ = SK_settings(self.conf) self.ws_name = SK_.ws + SK_.ip + ":" + str( SK_.aktport) + "/signalk/v1/stream?subscribe=self" Language(self.conf) wx.Frame.__init__(self, None, title='diagnostic Signal K input', size=(770, 435)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, wx.ID_ANY) self.ttimer = 100 self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_act, self.timer) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath + '/static/icons/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.list.InsertColumn(0, _('SRC'), width=200) self.list.InsertColumn(1, _('Signal K'), width=310) self.list.InsertColumn(2, _('Value'), wx.LIST_FORMAT_RIGHT, width=190) self.list.InsertColumn(3, _('Unit'), width=45) self.list.InsertColumn(4, _('Interval'), wx.LIST_FORMAT_RIGHT, width=55) self.list.InsertColumn(5, _('Status'), width=50) self.list.InsertColumn(6, _('Description'), width=500) self.list.InsertColumn(7, _('label'), width=100) self.list.InsertColumn(8, _('type'), width=90) self.list.InsertColumn(9, _('pgn'), width=70) self.list.InsertColumn(10, _('src'), width=50) self.list.InsertColumn(11, _('sentence'), width=50) self.list.InsertColumn(12, _('talker'), width=50) sort_SRC = wx.Button(panel, label=_('Sort SRC')) sort_SRC.Bind(wx.EVT_BUTTON, self.on_sort_SRC) sort_SK = wx.Button(panel, label=_('Sort SK')) sort_SK.Bind(wx.EVT_BUTTON, self.on_sort_SK) show_keys = wx.Button(panel, label=_('Show All SK keys')) show_keys.Bind(wx.EVT_BUTTON, self.on_show_keys) self.private_unit = wx.CheckBox(panel, label=_('private Unit'), pos=(360, 32)) self.private_unit.Bind(wx.EVT_CHECKBOX, self.on_private_unit) self.private_unit.SetValue(self.private_unit_s) unit_setting = wx.Button(panel, label=_('Unit Setting')) unit_setting.Bind(wx.EVT_BUTTON, self.on_unit_setting) vbox = wx.BoxSizer(wx.VERTICAL) hlistbox = wx.BoxSizer(wx.HORIZONTAL) hbox = wx.BoxSizer(wx.HORIZONTAL) hlistbox.Add(self.list, 1, wx.ALL | wx.EXPAND, 5) hbox.Add(sort_SRC, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(sort_SK, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(show_keys, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add((0, 0), 1, wx.RIGHT | wx.LEFT, 5) hbox.Add(self.private_unit, 0, wx.RIGHT | wx.LEFT, 5) hbox.Add(unit_setting, 0, wx.RIGHT | wx.LEFT, 5) vbox.Add(hlistbox, 1, wx.ALL | wx.EXPAND, 0) vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 0) panel.SetSizer(vbox) self.CreateStatusBar() self.read() self.start() self.Show(True) self.status = '' self.data = [] self.baudc = 0 self.baud = 0 self.timer.Start(self.ttimer) self.no_action = 0 self.no_action_limit = 5000 / self.ttimer def timer_act(self, e): if len(self.buffer) > 0: self.no_action = 0 for ii in self.buffer: if 0 <= ii[0] < self.list.GetItemCount(): self.list.SetStringItem(ii[0], ii[1], ii[2]) else: self.sorting() self.buffer = [] else: self.no_action += 1 if self.no_action > self.no_action_limit: if self.ws: self.ws.close() self.start() self.no_action = 0 def json_interval(self, time_old, time_new): sek_n = float(time_new[17:22]) sek_o = float(time_old[17:22]) if sek_n >= sek_o: dif = sek_n - sek_o else: dif = sek_n + 60 - sek_o return dif def read(self): self.list_SK_unit = [] self.keys = GetKeys() data = self.keys.keys data_sk_unit_private = [] if os.path.isfile(self.home + '/.openplotter/private_unit.json'): with open(self.home + '/.openplotter/private_unit.json') as data_file: data_sk_unit_private = ujson.load(data_file) for i in data: self.list_SK_unit.append([str(i[0]), str(i[2]), '', str(i[1])]) for j in data_sk_unit_private: for i in self.list_SK_unit: if j[0] == i[0]: i[2] = j[2] break self.list_SK_unit.sort(key=lambda tup: tup[0]) self.list_SK_unit.sort(key=lambda tup: tup[1]) self.data_sk_star3 = [] self.data_sk_star4 = [] self.data_sk_1 = [] self.data_sk_2 = [] self.data_sk_3 = [] self.data_sk_4 = [] self.data_sk_5 = [] for i in self.list_SK_unit: j = i[0].split('.') if "*" in i[0]: if len(j) == 3: self.data_sk_star3.append(i) elif len(j) == 4: self.data_sk_star4.append(i) else: if len(j) == 3: self.data_sk_3.append(i) elif len(j) == 4: self.data_sk_4.append(i) elif len(j) == 1: self.data_sk_1.append(i) elif len(j) == 2: self.data_sk_2.append(i) elif len(j) == 5: self.data_sk_5.append(i) def lookup_star(self, name): j = name.split('.') erg = [] if len(j) == 3: for i in self.data_sk_3: if name == i[0]: erg = i break elif len(j) == 4: for i in self.data_sk_4: if name == i[0]: erg = i break elif len(j) == 1: for i in self.data_sk_1: if name == i[0]: erg = i break elif len(j) == 2: for i in self.data_sk_2: if name == i[0]: erg = i break elif len(j) == 5: for i in self.data_sk_5: if name == i[0]: erg = i break if erg == []: if len(j) == 3: for i in self.data_sk_star3: if (j[0] + ".*." + j[2]) == i[0]: erg = i break elif (j[0] + '.' + j[1] + '.*') == i[0]: erg = i break if len(j) == 4: for i in self.data_sk_star4: if (j[0] + '.*.' + j[2] + '.' + j[3]) == i[0]: erg = i break elif (j[0] + '.' + j[1] + '.*.' + j[3]) == i[0]: erg = i break self.SK_unit = '' self.SK_unit_priv = '' self.SK_description = '' if erg != []: self.SK_unit = erg[1] self.SK_description = erg[3] if erg[2] != '': self.SK_unit_priv = erg[2] else: self.SK_unit_priv = erg[1] else: print 'no unit for ', name self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 if self.SK_unit_priv != self.SK_unit: if self.SK_unit == 'Hz': if self.SK_unit_priv == 'RPM': self.SK_Faktor_priv = 0.0166666666 elif self.SK_unit == 'K': if self.SK_unit_priv == 'C': self.SK_Offset_priv = -273.15 elif self.SK_unit_priv == 'F': self.SK_Faktor_priv = 1.8 self.SK_Offset_priv = -459.67 elif self.SK_unit == 'J': if self.SK_unit_priv == 'Ah(12V)': self.SK_Faktor_priv = 43200. if self.SK_unit_priv == 'Ah(24V)': self.SK_Faktor_priv = 86400 elif self.SK_unit == 'm': if self.SK_unit_priv == 'ft': self.SK_Faktor_priv = 0.3048 elif self.SK_unit_priv == 'nm': self.SK_Faktor_priv = 1852 elif self.SK_unit_priv == 'km': self.SK_Faktor_priv = 1000 elif self.SK_unit == 'm/s': if self.SK_unit_priv == 'kn': self.SK_Faktor_priv = 0.514444444 elif self.SK_unit_priv == 'kmh': self.SK_Faktor_priv = 0, 277778 elif self.SK_unit_priv == 'mph': self.SK_Faktor_priv = 0.44704 elif self.SK_unit == 'm3': if self.SK_unit_priv == 'dm3': self.SK_Faktor_priv = 0.001 elif self.SK_unit_priv == 'gal': self.SK_Faktor_priv = 0.00378541 elif self.SK_unit == 'm3/s': if self.SK_unit_priv == 'l/h': self.SK_Faktor_priv = 2.777778E-7 elif self.SK_unit_priv == 'gal/h': self.SK_Faktor_priv = 0.0000010515 elif self.SK_unit == 'Pa': if self.SK_unit_priv == 'hPa': self.SK_Faktor_priv = 100 elif self.SK_unit_priv == 'Bar': self.SK_Faktor_priv = 100000 elif self.SK_unit == 'rad' and self.SK_unit_priv == 'deg': self.SK_Faktor_priv = 0.0174533 elif self.SK_unit == 's': if self.SK_unit_priv == 'h': self.SK_Faktor_priv = 3600 elif self.SK_unit_priv == 'd': self.SK_Faktor_priv = 86400 elif self.SK_unit_priv == 'y': self.SK_Faktor_priv = 31536000 elif self.SK_unit == 'ratio': if self.SK_unit_priv == '%': self.SK_Faktor_priv = 0.01 else: self.SK_Faktor_priv = 1 self.SK_Offset_priv = 0 def on_sort_SRC(self, e): self.sortCol = 0 self.sorting() def on_sort_SK(self, e): self.sortCol = 1 self.sorting() def on_show_keys(self, e): dlg = showKeys() res = dlg.ShowModal() dlg.Destroy() def sorting(self): self.list.DeleteAllItems() list_new = [] for i in sorted(self.list_SK, key=lambda item: (item[self.sortCol])): list_new.append(i) self.list_SK = list_new self.init2() def init2(self): index = 0 for i in self.list_SK: if type(i[2]) is float: pass elif type(i[2]) is str: pass else: i[2] = 0.0 self.list.InsertStringItem(index, str(i[0])) self.list.SetStringItem(index, 1, str(i[1])) if not self.private_unit_s: if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) else: self.buffer.append([index, 2, str('%.3f' % i[2])]) self.buffer.append([index, 3, i[3]]) else: if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) else: i[9] = i[2] / i[10] + i[11] self.buffer.append([index, 2, str('%.3f' % i[9])]) self.buffer.append([index, 3, i[8]]) self.list.SetStringItem(index, 4, str('%.1f' % i[4])) self.list.SetStringItem(index, 5, str(i[5])) self.list.SetStringItem(index, 6, str(i[6])) self.list.SetStringItem(index, 7, str(i[12])) self.list.SetStringItem(index, 8, str(i[13])) self.list.SetStringItem(index, 9, str(i[14])) self.list.SetStringItem(index, 10, str(i[15])) self.list.SetStringItem(index, 11, str(i[16])) self.list.SetStringItem(index, 12, str(i[17])) index += 1 def on_unit_setting(self, e): subprocess.Popen(['python', self.currentpath + '/unit-private.py']) def OnClose(self, e): self.endlive = True if self.ws: self.ws.close() self.timer.Stop() self.Destroy() def on_message(self, ws, message): type = '' talker = '' sentence = '' src_ = '' pgn = '' label = '' src = '' type = '' value = '' if self.endlive: self.on_close(ws) self.ende = True return js_upb = '' #if True: try: js_upb = ujson.loads(message) if 'updates' not in js_upb: return js_up = js_upb['updates'][0] if 'source' in js_up.keys(): source = js_up['source'] label = source['label'] if 'type' in source: type = source['type'] if type == 'NMEA0183': if 'talker' in source: talker = source['talker'] src = label + '.' + talker if 'sentence' in source: sentence = source['sentence'] src = label + '.' + sentence elif type == 'NMEA2000': if 'src' in source: src_ = source['src'] src = label + '.' + src_ if 'pgn' in source: pgn = source['pgn'] src += '.' + str(pgn) if '$source' in js_up and src == '': src = js_up['$source'] if 'timestamp' in js_up.keys(): timestamp = js_up['timestamp'] else: timestamp = '2000-01-01T00:00:00.000Z' values_ = js_up['values'] for values in values_: path = values['path'] value = values['value'] src2 = src timestamp2 = timestamp if isinstance(value, dict): if 'timestamp' in value: timestamp2 = value['timestamp'] if '$source' in value and src == '': src = value['$source'] elif 'source' in value: source = value['source'] label = source['label'] if 'type' in source: type = source['type'] if type == 'NMEA0183': if 'talker' in source: talker = source['talker'] src = label + '.' + talker if 'sentence' in source: sentence = source['sentence'] src = label + '.' + sentence elif type == 'NMEA2000': if 'src' in source: src_ = source['src'] src = label + '.' + src_ if 'pgn' in source: pgn = source['pgn'] src += '.' + str(pgn) for lvalue in value: result = True if lvalue in ['source', '$source', 'method']: result = False elif lvalue == 'timestamp': if 'position' in path and 'RMC' in src2: self.update_add(timestamp2, 'navigation.datetime', src2, timestamp2, label, type, pgn, src_, sentence, talker) result = False if result: path2 = path + '.' + lvalue value2 = value[lvalue] self.update_add(value2, path2, src2, timestamp2, label, type, pgn, src_, sentence, talker) else: self.update_add(value, path, src, timestamp, label, type, pgn, src_, sentence, talker) except: print 'Error when parsing this sentence:' print js_upb def update_add(self, value, path, src, timestamp, label, type, pgn, src_, sentence, talker): # SRC SignalK Value Unit Interval Status Description timestamp private_Unit private_Value priv_Faktor priv_Offset label type pgn src_ sentence talker # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if isinstance(value, list): value = value[0] #if type(value) is list: value = value[0] if isinstance(value, float): pass elif isinstance(value, basestring): value = str(value) elif isinstance(value, int): value = float(value) elif value is None: value = 'None' else: value = 0.0 index = 0 exists = False for i in self.list_SK: if path == i[1] and i[0] == src: exists = True i[0] = src i[2] = value if i[4] == 0.0: i[4] = self.json_interval(i[7], timestamp) else: i[4] = i[4] * .6 + 0.4 * self.json_interval( i[7], timestamp) i[7] = timestamp self.buffer.append([index, 0, i[0]]) self.buffer.append([index, 4, str('%.2f' % i[4])]) if isinstance(i[2], str): #if type(i[2]) is str: self.buffer.append([index, 2, i[2]]) self.buffer.append([index, 3, i[3]]) break elif isinstance(i[2], float): #elif type(i[2]) is float: pass else: i[2] = 0.0 if not self.private_unit_s: self.buffer.append([index, 2, str('%.3f' % i[2])]) self.buffer.append([index, 3, i[3]]) else: i[9] = i[2] / i[10] + i[11] self.buffer.append([index, 2, str('%.3f' % i[9])]) self.buffer.append([index, 3, i[8]]) break index += 1 if not exists: self.lookup_star(path) self.list_SK.append([ src, path, value, str(self.SK_unit), 0.0, 1, self.SK_description, timestamp, str(self.SK_unit_priv), 0, self.SK_Faktor_priv, self.SK_Offset_priv, label, type, str(pgn), src_, sentence, talker ]) self.buffer.append([-1, 0, '']) def on_private_unit(self, e): self.private_unit_s = self.private_unit.GetValue() def on_error(self, ws, error): print error def on_close(self, ws): ws.close() def on_open(self, ws): pass def run(self): self.endlive = False self.ende = False self.ws = websocket.WebSocketApp( self.ws_name, on_message=lambda ws, msg: self.on_message(ws, msg), on_error=lambda ws, err: self.on_error(ws, err), on_close=lambda ws: self.on_close(ws)) self.ws.on_open = lambda ws: self.on_open(ws) self.ws.run_forever() self.ws = None def start(self): def run(): self.run() self.thread = threading.Thread(target=run) self.thread.start()
# Openplotter is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import matplotlib.pyplot as plt import sys from classes.conf import Conf from classes.language import Language conf = Conf() Language(conf) data = conf.get('COMPASS', 'deviation') listsave = [] try: listsave = eval(data) except: listsave = [] x=[] y=[] for ii in listsave: x.append(ii[1] - ii[0]) y.append(ii[0]) plt.plot(x,y) plt.suptitle(_('Show deviation table as curve'), fontsize=12) plt.xlabel(_('Deviation'), fontsize=12)
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Openplotter. If not, see <http://www.gnu.org/licenses/>. import time, socket, threading, datetime, geomag, pynmea2, math import RPi.GPIO as GPIO from classes.datastream import DataStream from classes.conf import Conf from classes.language import Language from classes.actions import Actions conf=Conf() Language(conf.get('GENERAL','lang')) global sock_in global error sock_in='' error=0 a=DataStream() actions=Actions() nodata='' global runSW1on global runSW1off global runSW2on global runSW2off global runSW3on global runSW3off global runSW4on
class MySK: def __init__(self): self.list_SK = [] self.static_list = [[]] self.sortCol = 0 self.conf = Conf() self.home = self.conf.home self.currentpath = self.conf.get('GENERAL', 'op_folder') SK_ = SK_settings(self.conf) self.ws_name = SK_.ws + SK_.ip + ":" + str( SK_.aktport) + "/signalk/v1/stream?subscribe=self" self.data = [] self.start() def json_interval(self, time_old, time_new): sek_n = float(time_new[17:22]) sek_o = float(time_old[17:22]) if sek_n >= sek_o: dif = sek_n - sek_o else: dif = sek_n + 60 - sek_o return float(dif) def OnClose(self, e): self.stop() def on_message(self, ws, message): js_up = ujson.loads(message) if 'updates' not in js_up: return js_up = js_up['updates'][0] label = '' src = '' type = '' value = '' if 'source' in js_up.keys(): source = js_up['source'] label = source['label'] if 'type' in source: type = source['type'] if type == 'NMEA0183': if 'talker' in source: src = label + '.' + source['talker'] if 'sentence' in source: src = label + '.' + source['sentence'] elif type == 'NMEA2000': if 'src' in source: src = label + '.' + source['src'] if 'pgn' in source: src += '.' + str(source['pgn']) if '$source' in js_up and src == '': src = js_up['$source'] if 'timestamp' in js_up.keys(): timestamp = js_up['timestamp'] else: timestamp = '2000-01-01T00:00:00.000Z' values_ = js_up['values'] for values in values_: path = values['path'] value = values['value'] src2 = src timestamp2 = timestamp if isinstance(value, dict): if 'timestamp' in value: timestamp2 = value['timestamp'] if '$source' in value and src == '': src = value['$source'] elif 'source' in value: source = value['source'] label = source['label'] if 'type' in source: type = source['type'] if type == 'NMEA0183': if 'talker' in source: src = label + '.' + source['talker'] if 'sentence' in source: src = label + '.' + source['sentence'] elif type == 'NMEA2000': if 'src' in source: src = label + '.' + source['src'] if 'pgn' in source: src += '.' + str(source['pgn']) for lvalue in value: result = True if lvalue in ['source', '$source']: result = False elif lvalue == 'timestamp': if 'position' in path and 'RMC' in src2: self.update_add(timestamp2, 'navigation.datetime', src2, timestamp2) result = False if result: path2 = path + '.' + lvalue value2 = value[lvalue] self.update_add(value2, path2, src2, timestamp2) else: self.update_add(value, path, src, timestamp) def update_add(self, value, path, src, timestamp): # SRC SignalK Value Unit Interval Status Description timestamp private_Unit private_Value priv_Faktor priv_Offset # 0 1 2 3 4 5 6 7 8 9 10 11 if type(value) is list: value = value[0] if isinstance(value, float): pass elif isinstance(value, basestring): value = str(value) elif isinstance(value, int): value = float(value) elif value is None: value = 'None' else: value = 0.0 index = 0 exists = False for i in self.list_SK: if path == i[1] and i[0] == src: exists = True i[2] = value i[7] = timestamp break index += 1 if not exists: self.list_SK.append( [src, path, value, '', 0.0, 1, '', timestamp, '', 1, 0]) for il in self.static_list: indexm = 0 for im in il: if im[0] == path: im[1] = self.list_SK[-1] #break indexm += 1 def on_error(self, ws, error): print error def on_close(self, ws): time.sleep(1) if self.ws is not None: self.ws.close() time.sleep(5) self.start() def on_open(self, ws): pass def run(self): self.ws = websocket.WebSocketApp( self.ws_name, on_message=lambda ws, msg: self.on_message(ws, msg), on_error=lambda ws, err: self.on_error(ws, err), on_close=lambda ws: self.on_close(ws)) self.ws.on_open = lambda ws: self.on_open(ws) self.ws.run_forever() self.ws = None def start(self): def run(): self.run() self.thread = threading.Thread(target=run) self.thread.start() def stop(self): time.sleep(1) if self.ws is not None: self.ws.close() self.thread.join()
SignalK='{"updates":[{"$source":"OPsensors.MQTT.'+msg.topic+'","values":[{"path":"'+path+'","value":"'+value+'"}]}]}\n' sock.sendto(SignalK, ('127.0.0.1', 55557)) if i[1] == 2: #signal k delta input SignalK = msg.payload sock.sendto(SignalK, ('127.0.0.1', 55557)) except Exception,e: print str(e) def on_connect(client, userdata, flags, rc): try: for i in topics_list: client.subscribe(i[0], qos=0) except Exception,e: print str(e) conf = Conf() x=conf.get('MQTT', 'topics') if x: topics_list=eval(x) else: topics_list=[] local_broker='127.0.0.1' local_port='1883' user=conf.get('MQTT', 'username') passw=conf.get('MQTT', 'password') broker=conf.get('MQTT', 'broker') port=conf.get('MQTT', 'port') client='' client_local='' if user and passw and topics_list: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if broker and port:
class MainFrame(wx.Frame): def __init__(self): self.conf=Conf() Language(self.conf.get('GENERAL','lang')) wx.Frame.__init__(self, None, title=_('Connection'), size=(550,385)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.in_out=sys.argv[1] self.con_type=sys.argv[2] wx.StaticText(self, label=_('Name'), pos=(25, 35)) self.name = wx.TextCtrl(self, -1, size=(120, 32), pos=(20, 55)) if self.con_type=='serial': if self.in_out=='in': wx.StaticBox(self, label=_(' Serial input '), size=(530, 90), pos=(10, 10)) if self.in_out=='out': wx.StaticBox(self, label=_(' Serial output '), size=(530, 90), pos=(10, 10)) self.SerDevLs = [] self.SerialCheck('/dev/rfcomm') self.SerialCheck('/dev/ttyUSB') self.SerialCheck('/dev/ttyS') self.SerialCheck('/dev/ttyACM') self.SerialCheck('/dev/ttyAMA') wx.StaticText(self, label=_('Port'), pos=(155, 35)) self.deviceComboBox = wx.ComboBox(self, choices=self.SerDevLs, style=wx.CB_DROPDOWN, size=(155, 32), pos=(150, 55)) if self.SerDevLs : self.deviceComboBox.SetValue(self.SerDevLs[0]) self.bauds = ['4800', '9600', '19200', '38400', '57600', '115200'] wx.StaticText(self, label=_('Bauds'), pos=(320, 35)) self.baudComboBox = wx.ComboBox(self, choices=self.bauds, style=wx.CB_READONLY, size=(90, 32), pos=(315, 55)) self.baudComboBox.SetValue('4800') if self.con_type=='network': if self.in_out=='in': wx.StaticBox(self, label=_(' Network input '), size=(530, 90), pos=(10, 10)) self.gpsd =wx.Button(self, label=_('GPSD'), pos=(440, 55)) self.Bind(wx.EVT_BUTTON, self.create_gpsd, self.gpsd) if self.in_out=='out': wx.StaticBox(self, label=_(' Network output '), size=(530, 90), pos=(10, 10)) self.type = ['TCP', 'UDP'] wx.StaticText(self, label=_('Type'), pos=(155, 35)) self.typeComboBox = wx.ComboBox(self, choices=self.type, style=wx.CB_READONLY, size=(70, 32), pos=(150, 55)) self.typeComboBox.SetValue('TCP') wx.StaticText(self, label=_('Address'), pos=(235, 35)) self.address = wx.TextCtrl(self, -1, size=(120, 32), pos=(230, 55)) wx.StaticText(self, label=_('Port'), pos=(365, 35)) self.port = wx.TextCtrl(self, -1, size=(55, 32), pos=(360, 55)) wx.StaticBox(self, label=_(' Filter '), size=(530, 195), pos=(10, 105)) self.mode_filter = [_('none'), _('Accept only sentences:'), _('Ignore sentences:')] self.filter = wx.ComboBox(self, choices=self.mode_filter, style=wx.CB_READONLY, size=(220, 32), pos=(20, 130)) self.filter.SetValue(self.mode_filter[0]) wx.StaticText(self, label=_('Filtering'), pos=(25, 175)) self.sentences = wx.TextCtrl(self, -1, style=wx.CB_READONLY, size=(400, 32), pos=(20, 195)) self.sentences.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self.delete =wx.Button(self, label=_('Delete'), pos=(440, 195)) self.Bind(wx.EVT_BUTTON, self.delete_sentences, self.delete) wx.StaticText(self, label=_('Talker - Sentence'), pos=(25, 240)) self.talker = wx.TextCtrl(self, -1, size=(35, 32), pos=(20, 260)) wx.StaticText(self, label=_('-'), pos=(60, 265)) self.sent = wx.TextCtrl(self, -1, size=(45, 32), pos=(70, 260)) self.add_sent =wx.Button(self, label=_('Add sentence'), pos=(160, 260)) self.Bind(wx.EVT_BUTTON, self.add_sentence, self.add_sent) self.sentences.SetValue(_('nothing')) self.talker.SetValue('**') self.sent.SetValue('***') self.ok =wx.Button(self, label=_('OK'), pos=(440, 310)) self.Bind(wx.EVT_BUTTON, self.ok_conn, self.ok) self.cancel =wx.Button(self, label=_('Cancel'), pos=(330, 310)) self.Bind(wx.EVT_BUTTON, self.cancel_conn, self.cancel) self.Centre() def ShowMessage(self, w_msg): wx.MessageBox(w_msg, 'Info', wx.OK | wx.ICON_INFORMATION) def SerialCheck(self,dev): num = 0 for _ in range(99): s = dev + str(num) d = os.path.exists(s) if d == True: self.SerDevLs.append(s) num = num + 1 def delete_sentences(self,event): self.sentences.SetValue(_('nothing')) def add_sentence(self,event): talker=self.talker.GetValue() sent=self.sent.GetValue() if not re.match('^[*A-Z]{2}$', talker): self.ShowMessage(_('Talker must have 2 uppercase characters. The symbol * matches any character.')) return if not re.match('^[*A-Z]{3}$', sent): self.ShowMessage(_('Sentence must have 3 uppercase characters. The symbol * matches any character.')) return r_sentence=talker+sent if r_sentence=='*****': self.ShowMessage(_('You must enter 2 uppercase characters for talker or 3 uppercase characters for sentence. The symbol * matches any character.')) return if r_sentence in self.sentences.GetValue(): self.ShowMessage(_('This sentence already exists.')) return if self.sentences.GetValue()==_('nothing'): self.sentences.SetValue(r_sentence) else: self.sentences.SetValue(self.sentences.GetValue()+','+r_sentence) def create_gpsd(self,event): self.name.SetValue('gpsd') self.typeComboBox.SetValue('TCP') self.address.SetValue('127.0.0.1') self.port.SetValue('2947') def ok_conn(self,event): name= self.name.GetValue() name=name.replace(' ', '_') if not re.match('^[_0-9a-z]{1,13}$', name): self.ShowMessage(_('"Name" must be a string between 1 and 13 lowercase letters and/or numbers which is not used as name for another input/output.')) return if self.con_type=='serial': type_conn='Serial' if self.deviceComboBox.GetValue(): port_address=self.deviceComboBox.GetValue() else: self.ShowMessage(_('You must select a Port.')) return bauds_port=self.baudComboBox.GetValue() if self.con_type=='network': type_conn=self.typeComboBox.GetValue() if self.address.GetValue(): port_address=self.address.GetValue() else: self.ShowMessage(_('You must enter an Address.')) return if self.port.GetValue(): bauds_port=self.port.GetValue() else: self.ShowMessage(_('You must enter a Port.')) return if self.filter.GetValue()==_('none') and self.sentences.GetValue()!=_('nothing'): self.ShowMessage(_('You must select a Filter type.')) return filter_type='none' filtering='nothing' if self.filter.GetValue()==_('Accept only sentences:') and self.sentences.GetValue()!=_('nothing'): filter_type='accept' filtering='' r=self.sentences.GetValue() l=r.split(',') for index,item in enumerate(l): if index!=0: filtering+=':' filtering+='+'+item filtering+=':-all' if self.filter.GetValue()==_('Ignore sentences:') and self.sentences.GetValue()!=_('nothing'): filter_type='ignore' filtering='' r=self.sentences.GetValue() l=r.split(',') for index,item in enumerate(l): if index!=0: filtering+=':' filtering+='-'+item print self.in_out+','+name+','+type_conn+','+port_address+','+bauds_port+','+filter_type+','+filtering+',1' self.Destroy() def cancel_conn(self,event): self.Destroy()
class MyFrame(wx.Frame): def __init__(self, parent): paths=Paths() self.currentpath=paths.currentpath self.conf=Conf() Language(self.conf.get('GENERAL','lang')) wx.Frame.__init__(self, parent, title="Inspector", size=(650,435)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.logger = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_DONTWRAP, size=(650,150), pos=(0,0)) self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, size=(540, 220), pos=(5, 155)) self.list.InsertColumn(0, _('Type'), width=205) self.list.InsertColumn(1, _('Value'), width=130) self.list.InsertColumn(2, _('Source'), width=90) self.list.InsertColumn(3, _('NMEA'), width=50) self.list.InsertColumn(4, _('Age'), width=59) self.button_pause =wx.Button(self, label=_('Pause'), pos=(555, 160)) self.Bind(wx.EVT_BUTTON, self.pause, self.button_pause) self.button_reset =wx.Button(self, label=_('Reset'), pos=(555, 200)) self.Bind(wx.EVT_BUTTON, self.reset, self.button_reset) self.button_nmea =wx.Button(self, label=_('NMEA info'), pos=(555, 240)) self.Bind(wx.EVT_BUTTON, self.nmea_info, self.button_nmea) self.a=DataStream() index=0 for i in self.a.DataList: data=eval('self.a.'+i+'[0]') self.list.InsertStringItem(index,data) index=index+1 self.pause_all=0 self.CreateStatusBar() self.Centre() self.Show(True) self.thread1=threading.Thread(target=self.parse_data) self.thread2=threading.Thread(target=self.refresh_loop) self.s2='' self.error='' self.frase_nmea_log='' self.data=[] self.read_conf=1 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) if not self.thread1.isAlive(): self.thread1.start() if not self.thread2.isAlive(): self.thread2.start() def check_switches(self): self.channel1='' self.channel2='' self.channel3='' self.channel4='' self.channel5='' self.channel6='' self.channel7='' self.channel8='' self.channel9='' self.channel10='' if self.conf.get('SWITCH1', 'enable')=='1': self.channel1=int(self.conf.get('SWITCH1', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH1', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel1, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('SWITCH2', 'enable')=='1': self.channel2=int(self.conf.get('SWITCH2', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH2', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel2, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('SWITCH3', 'enable')=='1': self.channel3=int(self.conf.get('SWITCH3', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH3', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel3, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('SWITCH4', 'enable')=='1': self.channel4=int(self.conf.get('SWITCH4', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH4', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel4, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('SWITCH5', 'enable')=='1': self.channel5=int(self.conf.get('SWITCH5', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH5', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel5, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('SWITCH6', 'enable')=='1': self.channel6=int(self.conf.get('SWITCH6', 'gpio')) pull_up_down=GPIO.PUD_DOWN if self.conf.get('SWITCH6', 'pull_up_down')=='Pull Up': pull_up_down=GPIO.PUD_UP GPIO.setup(self.channel6, GPIO.IN, pull_up_down=pull_up_down) if self.conf.get('OUTPUT1', 'enable')=='1': self.channel7=int(self.conf.get('OUTPUT1', 'gpio')) GPIO.setup(self.channel7, GPIO.OUT) if self.conf.get('OUTPUT2', 'enable')=='1': self.channel8=int(self.conf.get('OUTPUT2', 'gpio')) GPIO.setup(self.channel8, GPIO.OUT) if self.conf.get('OUTPUT3', 'enable')=='1': self.channel9=int(self.conf.get('OUTPUT3', 'gpio')) GPIO.setup(self.channel9, GPIO.OUT) if self.conf.get('OUTPUT4', 'enable')=='1': self.channel10=int(self.conf.get('OUTPUT4', 'gpio')) GPIO.setup(self.channel10, GPIO.OUT) # thread 1 def connect(self): try: self.s2 = socket.socket() self.s2.connect(("localhost", 10110)) self.s2.settimeout(5) except socket.error, error_msg: self.error= _('Failed to connect with localhost:10110. Error: ')+ str(error_msg[0])+_(', trying to reconnect...') self.s2='' time.sleep(7) else: self.error=''
class MyFrame(wx.Frame): def __init__(self, parent, title): paths=Paths() self.currentpath=paths.currentpath self.conf=Conf() Language(self.conf.get('GENERAL','lang')) wx.Frame.__init__(self, parent, title=title, size=(650,435)) self.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(self.currentpath+'/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.logger = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_DONTWRAP, size=(650,150), pos=(0,0)) wx.StaticText(self, label=_('NMEA inspector'), pos=(525, 160)) self.button_pause =wx.Button(self, label=_('Pause'), pos=(530, 190)) self.Bind(wx.EVT_BUTTON, self.pause, self.button_pause) self.button_reset =wx.Button(self, label=_('Reset'), pos=(530, 230)) self.Bind(wx.EVT_BUTTON, self.reset, self.button_reset) self.button_nmea =wx.Button(self, label=_('NMEA info'), pos=(530, 270)) self.Bind(wx.EVT_BUTTON, self.nmea_info, self.button_nmea) self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, size=(500, 220), pos=(5, 155)) self.list.InsertColumn(0, _('Type'), width=165) self.list.InsertColumn(1, _('Value'), width=130) self.list.InsertColumn(2, _('Source'), width=90) self.list.InsertColumn(3, _('NMEA'), width=50) self.list.InsertColumn(4, _('Age'), width=59) self.a=DataStream() index=0 for i in self.a.DataList: data=eval('self.a.'+i+'[0]') self.list.InsertStringItem(index,data) index=index+1 self.pause_all=0 self.CreateStatusBar() self.Centre() self.Show(True) self.thread1=threading.Thread(target=self.parse_data) self.thread2=threading.Thread(target=self.refresh_loop) self.s2='' self.error='' self.frase_nmea_log='' self.data=[] self.read_conf=0 if not self.thread1.isAlive(): self.thread1.start() if not self.thread2.isAlive(): self.thread2.start() # thread 1 def connect(self): try: self.s2 = socket.socket() self.s2.connect(("localhost", 10110)) self.s2.settimeout(5) except socket.error, error_msg: self.error= _('Failed to connect with localhost:10110. Error: ')+ str(error_msg[0])+_(', trying to reconnect...') self.s2='' time.sleep(7) else: self.error=''
class MainFrame(wx.Frame): def __init__(self): self.conf = Conf() Language(self.conf.get('GENERAL', 'lang')) wx.Frame.__init__(self, None, title=_('Connection'), size=(550, 385)) self.SetFont( wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.icon = wx.Icon(currentpath + '/openplotter.ico', wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) self.in_out = sys.argv[1] self.con_type = sys.argv[2] wx.StaticText(self, label=_('Name'), pos=(25, 35)) self.name = wx.TextCtrl(self, -1, size=(120, 32), pos=(20, 55)) if self.con_type == 'serial': if self.in_out == 'in': wx.StaticBox(self, label=_(' Serial input '), size=(530, 90), pos=(10, 10)) if self.in_out == 'out': wx.StaticBox(self, label=_(' Serial output '), size=(530, 90), pos=(10, 10)) self.SerialCheck() wx.StaticText(self, label=_('Port'), pos=(155, 35)) self.deviceComboBox = wx.ComboBox(self, choices=self.SerDevLs, style=wx.CB_DROPDOWN, size=(155, 32), pos=(150, 55)) if self.SerDevLs: self.deviceComboBox.SetValue(self.SerDevLs[0]) self.bauds = ['4800', '9600', '19200', '38400', '57600', '115200'] wx.StaticText(self, label=_('Bauds'), pos=(320, 35)) self.baudComboBox = wx.ComboBox(self, choices=self.bauds, style=wx.CB_READONLY, size=(90, 32), pos=(315, 55)) self.baudComboBox.SetValue('4800') if self.con_type == 'network': if self.in_out == 'in': wx.StaticBox(self, label=_(' Network input '), size=(530, 90), pos=(10, 10)) self.gpsd = wx.Button(self, label=_('GPSD'), pos=(440, 55)) self.Bind(wx.EVT_BUTTON, self.create_gpsd, self.gpsd) if self.in_out == 'out': wx.StaticBox(self, label=_(' Network output '), size=(530, 90), pos=(10, 10)) self.type = ['TCP', 'UDP'] wx.StaticText(self, label=_('Type'), pos=(155, 35)) self.typeComboBox = wx.ComboBox(self, choices=self.type, style=wx.CB_READONLY, size=(70, 32), pos=(150, 55)) self.typeComboBox.SetValue('TCP') wx.StaticText(self, label=_('Address'), pos=(235, 35)) self.address = wx.TextCtrl(self, -1, size=(120, 32), pos=(230, 55)) wx.StaticText(self, label=_('Port'), pos=(365, 35)) self.port = wx.TextCtrl(self, -1, size=(55, 32), pos=(360, 55)) wx.StaticBox(self, label=_(' Filter '), size=(530, 195), pos=(10, 105)) self.mode_filter = [ _('none'), _('Accept only sentences:'), _('Ignore sentences:') ] self.filter = wx.ComboBox(self, choices=self.mode_filter, style=wx.CB_READONLY, size=(220, 32), pos=(20, 130)) self.filter.SetValue(self.mode_filter[0]) wx.StaticText(self, label=_('Filtering'), pos=(25, 175)) self.sentences = wx.TextCtrl(self, -1, style=wx.CB_READONLY, size=(400, 32), pos=(20, 195)) self.sentences.SetBackgroundColour( wx.SystemSettings_GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) self.delete = wx.Button(self, label=_('Delete'), pos=(440, 195)) self.Bind(wx.EVT_BUTTON, self.delete_sentences, self.delete) wx.StaticText(self, label=_('Talker - Sentence'), pos=(25, 240)) self.talker = wx.TextCtrl(self, -1, size=(35, 32), pos=(20, 260)) wx.StaticText(self, label=_('-'), pos=(60, 265)) self.sent = wx.TextCtrl(self, -1, size=(45, 32), pos=(70, 260)) self.add_sent = wx.Button(self, label=_('Add sentence'), pos=(160, 260)) self.Bind(wx.EVT_BUTTON, self.add_sentence, self.add_sent) self.sentences.SetValue(_('nothing')) self.talker.SetValue('**') self.sent.SetValue('***') self.ok = wx.Button(self, label=_('OK'), pos=(440, 310)) self.Bind(wx.EVT_BUTTON, self.ok_conn, self.ok) self.cancel = wx.Button(self, label=_('Cancel'), pos=(330, 310)) self.Bind(wx.EVT_BUTTON, self.cancel_conn, self.cancel) self.Centre() def ShowMessage(self, w_msg): wx.MessageBox(w_msg, 'Info', wx.OK | wx.ICON_INFORMATION) def SerialCheck(self): self.SerDevLs = [_('none')] context = pyudev.Context() for device in context.list_devices(subsystem='tty'): i = device['DEVNAME'] if '/dev/ttyU' in i or '/dev/ttyA' in i or '/dev/ttyS' in i or '/dev/ttyO' in i or '/dev/r' in i or '/dev/i' in i: self.SerDevLs.append(i) try: ii = device['DEVLINKS'] value = ii[ii.rfind('/dev/ttyOP_'):] if value.find('/dev/ttyOP_') >= 0: self.SerDevLs.append(value) except: pass def delete_sentences(self, event): self.sentences.SetValue(_('nothing')) def add_sentence(self, event): talker = self.talker.GetValue() sent = self.sent.GetValue() if not re.match('^[*A-Z]{2}$', talker): self.ShowMessage( _('Talker must have 2 uppercase characters. The symbol * matches any character.' )) return if not re.match('^[*A-Z]{3}$', sent): self.ShowMessage( _('Sentence must have 3 uppercase characters. The symbol * matches any character.' )) return r_sentence = talker + sent if r_sentence == '*****': self.ShowMessage( _('You must enter 2 uppercase characters for talker or 3 uppercase characters for sentence. The symbol * matches any character.' )) return if r_sentence in self.sentences.GetValue(): self.ShowMessage(_('This sentence already exists.')) return if self.sentences.GetValue() == _('nothing'): self.sentences.SetValue(r_sentence) else: self.sentences.SetValue(self.sentences.GetValue() + ',' + r_sentence) def create_gpsd(self, event): self.name.SetValue('gpsd') self.typeComboBox.SetValue('TCP') self.address.SetValue('127.0.0.1') self.port.SetValue('2947') def ok_conn(self, event): name = self.name.GetValue() name = name.replace(' ', '_') if not re.match('^[_0-9a-z]{1,13}$', name): self.ShowMessage( _('"Name" must be a string between 1 and 13 lowercase letters and/or numbers which is not used as name for another input/output.' )) return if self.con_type == 'serial': type_conn = 'Serial' if self.deviceComboBox.GetValue(): port_address = self.deviceComboBox.GetValue() else: self.ShowMessage(_('You must select a Port.')) return bauds_port = self.baudComboBox.GetValue() if self.con_type == 'network': type_conn = self.typeComboBox.GetValue() if self.address.GetValue(): port_address = self.address.GetValue() else: self.ShowMessage(_('You must enter an Address.')) return if self.port.GetValue(): bauds_port = self.port.GetValue() else: self.ShowMessage(_('You must enter a Port.')) return if self.filter.GetValue() == _( 'none') and self.sentences.GetValue() != _('nothing'): self.ShowMessage(_('You must select a Filter type.')) return filter_type = 'none' filtering = 'nothing' if self.filter.GetValue() == _( 'Accept only sentences:' ) and self.sentences.GetValue() != _('nothing'): filter_type = 'accept' filtering = '' r = self.sentences.GetValue() l = r.split(',') for index, item in enumerate(l): if index != 0: filtering += ':' filtering += '+' + item filtering += ':-all' if self.filter.GetValue() == _( 'Ignore sentences:' ) and self.sentences.GetValue() != _('nothing'): filter_type = 'ignore' filtering = '' r = self.sentences.GetValue() l = r.split(',') for index, item in enumerate(l): if index != 0: filtering += ':' filtering += '-' + item print self.in_out + ',' + name + ',' + type_conn + ',' + port_address + ',' + bauds_port + ',' + filter_type + ',' + filtering + ',1' self.Destroy() def cancel_conn(self, event): self.Destroy()
try: sock_in = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock_in.settimeout(5) sock_in.connect(('localhost', 10110)) except socket.error, error_msg: error= _('Failed to connect with localhost:10110. Error: ')+ str(error_msg[0]) print error sock_in='' time.sleep(7) else: error=0 #end thread1 # no loop conf=Conf() Language(conf.get('GENERAL','lang')) global triggers triggers=[] global sock_in global error sock_in='' error=0 a=DataStream(conf) actions=Actions(conf) nodata='' sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) read_triggers()