mirror of
https://github.com/openplotter/openplotter-maiana.git
synced 2025-05-19 00:20:10 -07:00
new rescue management
This commit is contained in:
parent
45d95a0a1b
commit
d1775dbdf9
@ -56,6 +56,15 @@ def main():
|
|||||||
print(_('DONE'))
|
print(_('DONE'))
|
||||||
except Exception as e: print(_('FAILED: ')+str(e))
|
except Exception as e: print(_('FAILED: ')+str(e))
|
||||||
|
|
||||||
|
print(_('Creating services...'))
|
||||||
|
try:
|
||||||
|
fo = open('/etc/systemd/system/openplotter-maiana-read.service', "w")
|
||||||
|
fo.write( '[Service]\nEnvironment=OPrescue=0\nEnvironmentFile=/boot/firmware/config.txt\nExecStart=openplotter-maiana-read $OPrescue\nUser='+conf2.user+'\nRestart=always\nRestartSec=3\n\n[Install]\nWantedBy=local-fs.target')
|
||||||
|
fo.close()
|
||||||
|
subprocess.call(['systemctl', 'daemon-reload'])
|
||||||
|
print(_('DONE'))
|
||||||
|
except Exception as e: print(_('FAILED: ')+str(e))
|
||||||
|
|
||||||
print(_('Setting version...'))
|
print(_('Setting version...'))
|
||||||
try:
|
try:
|
||||||
conf2.set('APPS', 'maiana', version)
|
conf2.set('APPS', 'maiana', version)
|
||||||
|
@ -28,12 +28,6 @@ def main():
|
|||||||
language.Language(currentdir, package, currentLanguage)
|
language.Language(currentdir, package, currentLanguage)
|
||||||
platform2 = platform.Platform()
|
platform2 = platform.Platform()
|
||||||
|
|
||||||
print(_('Stopping OpenPlotter MAIANA service...'))
|
|
||||||
try:
|
|
||||||
subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
|
||||||
print(_('DONE'))
|
|
||||||
except Exception as e: print(_('FAILED: ')+str(e))
|
|
||||||
|
|
||||||
print(_('Removing connection to Signal K server for MAIANA commands...'))
|
print(_('Removing connection to Signal K server for MAIANA commands...'))
|
||||||
try:
|
try:
|
||||||
data = {}
|
data = {}
|
||||||
@ -57,6 +51,14 @@ def main():
|
|||||||
print(_('DONE'))
|
print(_('DONE'))
|
||||||
except Exception as e: print(_('FAILED: ')+str(e))
|
except Exception as e: print(_('FAILED: ')+str(e))
|
||||||
|
|
||||||
|
print(_('Removing services...'))
|
||||||
|
try:
|
||||||
|
subprocess.call(['systemctl', 'disable', 'openplotter-maiana-read'])
|
||||||
|
subprocess.call(['systemctl', 'stop', 'openplotter-maiana-read'])
|
||||||
|
subprocess.call(['systemctl', 'daemon-reload'])
|
||||||
|
print(_('DONE'))
|
||||||
|
except Exception as e: print(_('FAILED: ')+str(e))
|
||||||
|
|
||||||
print(_('Removing version...'))
|
print(_('Removing version...'))
|
||||||
try:
|
try:
|
||||||
conf2.set('APPS', 'maiana', '')
|
conf2.set('APPS', 'maiana', '')
|
||||||
|
@ -122,8 +122,11 @@ class MyFrame(wx.Frame):
|
|||||||
webbrowser.open(url, new=2)
|
webbrowser.open(url, new=2)
|
||||||
|
|
||||||
def restartRead(self):
|
def restartRead(self):
|
||||||
subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
subprocess.call([self.platform.admin, 'python3', self.currentdir+'/service.py', 'enable'])
|
||||||
subprocess.Popen('openplotter-maiana-read')
|
time.sleep(1)
|
||||||
|
|
||||||
|
def stopRead(self):
|
||||||
|
subprocess.call([self.platform.admin, 'python3', self.currentdir+'/service.py', 'disable'])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
def onRead(self):
|
def onRead(self):
|
||||||
@ -191,12 +194,10 @@ class MyFrame(wx.Frame):
|
|||||||
|
|
||||||
if deviceOld != self.device:
|
if deviceOld != self.device:
|
||||||
if self.device: self.restartRead()
|
if self.device: self.restartRead()
|
||||||
else: subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
else: self.stopRead()
|
||||||
else:
|
else:
|
||||||
if self.device:
|
if self.device: self.restartRead()
|
||||||
test = subprocess.check_output(['ps','aux']).decode(sys.stdin.encoding)
|
else: self.stopRead()
|
||||||
if not 'openplotter-maiana-read' in test: self.restartRead()
|
|
||||||
else: subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
|
||||||
|
|
||||||
if self.device:
|
if self.device:
|
||||||
self.sock.sendto(b'sys?\r\n',(self.UDP_IP,self.UDP_PORT))
|
self.sock.sendto(b'sys?\r\n',(self.UDP_IP,self.UDP_PORT))
|
||||||
@ -213,7 +214,7 @@ class MyFrame(wx.Frame):
|
|||||||
ts = datetime.datetime.utcnow().timestamp()
|
ts = datetime.datetime.utcnow().timestamp()
|
||||||
timestamp = data['hardwareRevision']['timestamp']
|
timestamp = data['hardwareRevision']['timestamp']
|
||||||
ts2 = time.mktime(datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%fZ").timetuple())
|
ts2 = time.mktime(datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%fZ").timetuple())
|
||||||
if ts - ts2 > 3:
|
if ts - ts2 > 5:
|
||||||
self.ShowStatusBarRED(_('Cannot connect with the device, try again by pressing "Refresh"'))
|
self.ShowStatusBarRED(_('Cannot connect with the device, try again by pressing "Refresh"'))
|
||||||
return
|
return
|
||||||
hardwareRevision = data['hardwareRevision']['value']
|
hardwareRevision = data['hardwareRevision']['value']
|
||||||
@ -424,12 +425,10 @@ class MyFrame(wx.Frame):
|
|||||||
|
|
||||||
if deviceOld != self.device:
|
if deviceOld != self.device:
|
||||||
if self.device: self.restartRead()
|
if self.device: self.restartRead()
|
||||||
else: subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
else: self.stopRead()
|
||||||
else:
|
else:
|
||||||
if self.device:
|
if self.device: self.restartRead()
|
||||||
test = subprocess.check_output(['ps','aux']).decode(sys.stdin.encoding)
|
else: self.stopRead()
|
||||||
if not 'openplotter-maiana-read' in test: self.restartRead()
|
|
||||||
else: subprocess.call(['pkill','-f','openplotter-maiana-read'])
|
|
||||||
|
|
||||||
self.onRead()
|
self.onRead()
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Openplotter. If not, see <http://www.gnu.org/licenses/>.
|
# along with Openplotter. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os, socket, time, ssl, json, datetime
|
import os, socket, time, ssl, json, datetime, sys
|
||||||
from openplotterSettings import conf
|
from openplotterSettings import conf
|
||||||
from openplotterSettings import platform
|
from openplotterSettings import platform
|
||||||
from openplotterSettings import language
|
from openplotterSettings import language
|
||||||
@ -23,91 +23,92 @@ from websocket import create_connection
|
|||||||
from openplotterSignalkInstaller import connections
|
from openplotterSignalkInstaller import connections
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
platform2 = platform.Platform()
|
if sys.argv[1] != '1':
|
||||||
conf2 = conf.Conf()
|
platform2 = platform.Platform()
|
||||||
currentdir = os.path.dirname(os.path.abspath(__file__))
|
conf2 = conf.Conf()
|
||||||
currentLanguage = conf2.get('GENERAL', 'lang')
|
currentdir = os.path.dirname(os.path.abspath(__file__))
|
||||||
package = 'openplotter-maiana'
|
currentLanguage = conf2.get('GENERAL', 'lang')
|
||||||
language.Language(currentdir, package, currentLanguage)
|
package = 'openplotter-maiana'
|
||||||
skConnections = connections.Connections('MAIANA')
|
language.Language(currentdir, package, currentLanguage)
|
||||||
token = skConnections.token
|
skConnections = connections.Connections('MAIANA')
|
||||||
device = conf2.get('MAIANA', 'device')
|
token = skConnections.token
|
||||||
if conf2.get('GENERAL', 'debug') == 'yes': debug = True
|
device = conf2.get('MAIANA', 'device')
|
||||||
else: debug = False
|
if conf2.get('GENERAL', 'debug') == 'yes': debug = True
|
||||||
if token and device:
|
else: debug = False
|
||||||
ws = False
|
if token and device:
|
||||||
sock = False
|
ws = False
|
||||||
while True:
|
sock = False
|
||||||
try:
|
while True:
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
try:
|
||||||
server_address = ('localhost', 10110)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
sock.connect(server_address)
|
server_address = ('localhost', 10110)
|
||||||
sock.setblocking(0)
|
sock.connect(server_address)
|
||||||
|
sock.setblocking(0)
|
||||||
|
|
||||||
uri = platform2.ws+'localhost:'+platform2.skPort+'/signalk/v1/stream?subscribe=none'
|
uri = platform2.ws+'localhost:'+platform2.skPort+'/signalk/v1/stream?subscribe=none'
|
||||||
headers = {'Authorization': 'Bearer '+token}
|
headers = {'Authorization': 'Bearer '+token}
|
||||||
ws = create_connection(uri, header=headers, sslopt={"cert_reqs": ssl.CERT_NONE})
|
ws = create_connection(uri, header=headers, sslopt={"cert_reqs": ssl.CERT_NONE})
|
||||||
|
|
||||||
tick = time.perf_counter()
|
tick = time.perf_counter()
|
||||||
while True:
|
while True:
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
if (time.perf_counter() - tick) > 3: raise Exception('')
|
if (time.perf_counter() - tick) > 3: raise Exception('')
|
||||||
data = False
|
data = False
|
||||||
try: data = sock.recv(1024)
|
try: data = sock.recv(1024)
|
||||||
except: pass
|
except: pass
|
||||||
if data:
|
if data:
|
||||||
tick = time.perf_counter()
|
tick = time.perf_counter()
|
||||||
data = data.decode("utf-8")
|
data = data.decode("utf-8")
|
||||||
if '$PA' in data:
|
if '$PA' in data:
|
||||||
data = data.splitlines()
|
data = data.splitlines()
|
||||||
for data2 in data:
|
for data2 in data:
|
||||||
SKdata = {}
|
SKdata = {}
|
||||||
data3 = data2.split('*')
|
data3 = data2.split('*')
|
||||||
data3 = data3[0].split(',')
|
data3 = data3[0].split(',')
|
||||||
#$PAINF,A,0x20*5B
|
#$PAINF,A,0x20*5B
|
||||||
if data3[0] == '$PAINF':
|
if data3[0] == '$PAINF':
|
||||||
try:
|
try:
|
||||||
noiseValue = int(data3[2],16)
|
noiseValue = int(data3[2],16)
|
||||||
SKdata.update({"MAIANA.channel"+data3[1]+".noiseFloor":noiseValue})
|
SKdata.update({"MAIANA.channel"+data3[1]+".noiseFloor":noiseValue})
|
||||||
if conf2.get('MAIANA', 'noiseDetect') == '1':
|
if conf2.get('MAIANA', 'noiseDetect') == '1':
|
||||||
if noiseValue > 64:
|
if noiseValue > 64:
|
||||||
now = datetime.datetime.utcnow()
|
now = datetime.datetime.utcnow()
|
||||||
now = now.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
now = now.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||||
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":{"message":_("There may be electromagnetic interference near the MAIANA AIS antenna"),"state":"alert","method": ["visual", "sound"],"timestamp":now}})
|
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":{"message":_("There may be electromagnetic interference near the MAIANA AIS antenna"),"state":"alert","method": ["visual", "sound"],"timestamp":now}})
|
||||||
else:
|
else:
|
||||||
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":None})
|
SKdata.update({"notifications.MAIANA.channel"+data3[1]+".noiseFloor":None})
|
||||||
except: pass
|
except: pass
|
||||||
#$PAITX,A,18*1C
|
#$PAITX,A,18*1C
|
||||||
elif data3[0] == '$PAITX':
|
elif data3[0] == '$PAITX':
|
||||||
SKdata.update({"MAIANA.channel"+data3[1]+".transmittedMessageType":data3[2]})
|
SKdata.update({"MAIANA.channel"+data3[1]+".transmittedMessageType":data3[2]})
|
||||||
#$PAISYS,11.3.0,4.0.0,,STM32L422,1,1*05
|
#$PAISYS,11.3.0,4.0.0,,STM32L422,1,1*05
|
||||||
elif data3[0] == '$PAISYS':
|
elif data3[0] == '$PAISYS':
|
||||||
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":data3[5],"MAIANA.bootloader":data3[6]})
|
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":data3[5],"MAIANA.bootloader":data3[6]})
|
||||||
except:
|
except:
|
||||||
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
|
try: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":data3[4],"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
|
||||||
except: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":'',"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
|
except: SKdata.update({"MAIANA.hardwareRevision":data3[1],"MAIANA.firmwareRevision":data3[2],"MAIANA.serialNumber":data3[3],"MAIANA.MCUtype":'',"MAIANA.breakoutGeneration":'',"MAIANA.bootloader":''})
|
||||||
#$PAISTN,987654321,NAUT,,37,0,0,0,0*2A
|
#$PAISTN,987654321,NAUT,,37,0,0,0,0*2A
|
||||||
elif data3[0] == '$PAISTN':
|
elif data3[0] == '$PAISTN':
|
||||||
try:
|
try:
|
||||||
SKdata.update({"MAIANA.station.MMSI":data3[1],"MAIANA.station.vesselName":data3[2],"MAIANA.station.callSign":data3[3],"MAIANA.station.vesselType":int(data3[4]),"MAIANA.station.LOA":int(data3[5]),"MAIANA.station.beam":int(data3[6]),"MAIANA.station.portOffset":int(data3[7]),"MAIANA.station.bowOffset":int(data3[8])})
|
SKdata.update({"MAIANA.station.MMSI":data3[1],"MAIANA.station.vesselName":data3[2],"MAIANA.station.callSign":data3[3],"MAIANA.station.vesselType":int(data3[4]),"MAIANA.station.LOA":int(data3[5]),"MAIANA.station.beam":int(data3[6]),"MAIANA.station.portOffset":int(data3[7]),"MAIANA.station.bowOffset":int(data3[8])})
|
||||||
except: pass
|
except: pass
|
||||||
#$PAITXCFG,1,0,1,1,0*0
|
#$PAITXCFG,1,0,1,1,0*0
|
||||||
elif data3[0] == '$PAITXCFG':
|
elif data3[0] == '$PAITXCFG':
|
||||||
try:
|
try:
|
||||||
SKdata.update({"MAIANA.transmission.hardwarePresent":int(data3[1]),"MAIANA.transmission.hardwareSwitch":int(data3[2]),"MAIANA.transmission.softwareSwitch":int(data3[3]),"MAIANA.transmission.stationData":int(data3[4]),"MAIANA.transmission.status":int(data3[5])})
|
SKdata.update({"MAIANA.transmission.hardwarePresent":int(data3[1]),"MAIANA.transmission.hardwareSwitch":int(data3[2]),"MAIANA.transmission.softwareSwitch":int(data3[3]),"MAIANA.transmission.stationData":int(data3[4]),"MAIANA.transmission.status":int(data3[5])})
|
||||||
except: pass
|
except: pass
|
||||||
keys = []
|
keys = []
|
||||||
for i in SKdata:
|
for i in SKdata:
|
||||||
keys.append({"path":i,"value":SKdata[i]})
|
keys.append({"path":i,"value":SKdata[i]})
|
||||||
if keys:
|
if keys:
|
||||||
SignalK = {"updates":[{"$source":"OpenPlotter.maiana","values":keys}]}
|
SignalK = {"updates":[{"$source":"OpenPlotter.maiana","values":keys}]}
|
||||||
SignalK = json.dumps(SignalK)
|
SignalK = json.dumps(SignalK)
|
||||||
ws.send(SignalK+'\r\n')
|
ws.send(SignalK+'\r\n')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if debug: print(str(e))
|
if debug: print(str(e))
|
||||||
if ws: ws.close()
|
if ws: ws.close()
|
||||||
if sock: sock.close()
|
if sock: sock.close()
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,4 +22,11 @@ if sys.argv[1]=='sk':
|
|||||||
subprocess.call(['systemctl', 'stop', 'signalk.service'])
|
subprocess.call(['systemctl', 'stop', 'signalk.service'])
|
||||||
subprocess.call(['systemctl', 'stop', 'signalk.socket'])
|
subprocess.call(['systemctl', 'stop', 'signalk.socket'])
|
||||||
subprocess.call(['systemctl', 'start', 'signalk.socket'])
|
subprocess.call(['systemctl', 'start', 'signalk.socket'])
|
||||||
subprocess.call(['systemctl', 'start', 'signalk.service'])
|
subprocess.call(['systemctl', 'start', 'signalk.service'])
|
||||||
|
|
||||||
|
if sys.argv[1]=='enable':
|
||||||
|
subprocess.call(['systemctl', 'restart', 'openplotter-maiana-read.service'])
|
||||||
|
subprocess.call(['systemctl', 'enable', 'openplotter-maiana-read.service'])
|
||||||
|
elif sys.argv[1]=='disable':
|
||||||
|
subprocess.call(['systemctl', 'stop', 'openplotter-maiana-read.service'])
|
||||||
|
subprocess.call(['systemctl', 'disable', 'openplotter-maiana-read.service'])
|
@ -20,23 +20,14 @@ from openplotterSettings import language
|
|||||||
from openplotterSettings import platform
|
from openplotterSettings import platform
|
||||||
from openplotterSignalkInstaller import connections
|
from openplotterSignalkInstaller import connections
|
||||||
|
|
||||||
class Start():
|
class Start():
|
||||||
def __init__(self, conf, currentLanguage):
|
def __init__(self, conf, currentLanguage):
|
||||||
self.conf = conf
|
self.initialMessage = ''
|
||||||
currentdir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
language.Language(currentdir,'openplotter-maiana',currentLanguage)
|
|
||||||
|
|
||||||
self.initialMessage = _('Starting MAIANA transponder...')
|
|
||||||
|
|
||||||
def start(self):
|
|
||||||
green = ''
|
|
||||||
black = ''
|
|
||||||
red = ''
|
|
||||||
|
|
||||||
subprocess.call(['pkill', '-f', 'openplotter-maiana-read'])
|
|
||||||
subprocess.Popen('openplotter-maiana-read')
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
green = ''
|
||||||
|
black = ''
|
||||||
|
red = ''
|
||||||
return {'green': green,'black': black,'red': red}
|
return {'green': green,'black': black,'red': red}
|
||||||
|
|
||||||
class Check():
|
class Check():
|
||||||
@ -157,24 +148,25 @@ class Check():
|
|||||||
if not black: black = msg
|
if not black: black = msg
|
||||||
else: black+= ' | '+msg
|
else: black+= ' | '+msg
|
||||||
|
|
||||||
# check service
|
#service
|
||||||
test = subprocess.check_output(['ps','aux']).decode(sys.stdin.encoding)
|
if device and result[0] == 'validated':
|
||||||
if device and (result[0] == 'approved' or result[0] == 'validated'):
|
try:
|
||||||
if 'openplotter-maiana-read' in test:
|
subprocess.check_output(['systemctl', 'is-active', 'openplotter-maiana-read.service']).decode(sys.stdin.encoding)
|
||||||
msg = _('running')
|
msg = _('service running')
|
||||||
if not green: green = msg
|
if not green: green = msg
|
||||||
else: green+= ' | '+msg
|
else: green+= ' | '+msg
|
||||||
else:
|
except:
|
||||||
msg = _('not running')
|
msg = _('service not running')
|
||||||
if red: red += '\n '+msg
|
if red: red += '\n '+msg
|
||||||
else: red = msg
|
else: red = msg
|
||||||
else:
|
else:
|
||||||
if 'openplotter-maiana-read' in test:
|
try:
|
||||||
msg = _('running')
|
subprocess.check_output(['systemctl', 'is-active', 'openplotter-maiana-read.service']).decode(sys.stdin.encoding)
|
||||||
|
msg = _('service running')
|
||||||
if red: red += '\n '+msg
|
if red: red += '\n '+msg
|
||||||
else: red = msg
|
else: red = msg
|
||||||
else:
|
except:
|
||||||
msg = _('not running')
|
msg = _('service not running')
|
||||||
if not black: black = msg
|
if not black: black = msg
|
||||||
else: black+= ' | '+msg
|
else: black+= ' | '+msg
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user