Select Git revision
SaveSequenceRig.uasset
start.py 8.01 KiB
# -*- coding: utf-8 -*-
import asyncio
import datetime
import sys
from concurrent.futures import ThreadPoolExecutor
from devices.lasertracker.const import MQTT_USERNAME, MQTT_PASSWORD, MQTT_BROKER, MQTT_VHOST, MQTT_PORT
from wzl.utilities import root_logger
from wzl.mqtt import MQTTPublisher
from src.soil.component import Component
from src.http.server import HTTPServer
from src.soil.event import Event, EventSeverity, EventTrigger
from src.soil.stream import FixedJob, ConfigurableJob, EventJob, UpdateJob, MessageScheduler, EventScheduler, UpdateScheduler
from devices.lasertracker.device.enums import StateEnum, ModeEnum
from devices.lasertracker.device.com_lasertracker import COMLasertracker
sys.setswitchinterval(0.0005)
def start(com_lasertracker: COMLasertracker):
# server settings
address = '127.0.0.1'
port = '8000'
main_logger = root_logger.get(__name__)
# set up servers
executor = ThreadPoolExecutor(max_workers=100)
loop = asyncio.get_event_loop()
loop.set_default_executor(executor)
# configure mqtt
mqtt = MQTTPublisher(MQTT_USERNAME)
mqtt.connect(MQTT_BROKER, MQTT_PORT, MQTT_VHOST + ":" + MQTT_USERNAME, MQTT_PASSWORD)
# configure messages
message_schedule = []
update_schedule = []
message_schedule += [
FixedJob("COM-Lasertracker/COM-BaseStations/COM-Base/MEA-Position", 1, com_lasertracker._com_basestations._com_base.get_mea_position)]
for child0_uuid in com_lasertracker._com_mobileentities._com_target:
message_schedule += [FixedJob("COM-Lasertracker/COM-MobileEntities/{}/MEA-Position".format(child0_uuid), 1,
com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_position)]
message_scheduler = MessageScheduler(loop, message_schedule, [mqtt])
for child0_uuid in com_lasertracker._com_mobileentities._com_target:
update_schedule += [UpdateJob("COM-Lasertracker/COM-MobileEntities/{}/MEA-Quaternion".format(child0_uuid),
com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_quaternion)]
update_scheduler = UpdateScheduler(loop, update_schedule, [mqtt])
# configure events
event_schedule = []
event_schedule += [
EventJob("COM-Lasertracker/COM-BaseStations/COM-Base/MEA-Distance", 10, com_lasertracker._com_basestations._com_base.get_mea_distance,
Event(EventSeverity.WARNING, EventTrigger.LARGER, "double", 50, "The target is distance is large. Uncertainty might be high."))]
event_schedule += [
EventJob("COM-Lasertracker/COM-BaseStations/COM-Base/PAR-State", 10, com_lasertracker._com_basestations._com_base.get_par_state,
Event(EventSeverity.ERROR, EventTrigger.EQUALS, "enum", StateEnum.ERROR, "An error occured!"))]
for child0_uuid in com_lasertracker._com_mobileentities._com_target:
event_schedule += [EventJob("COM-Lasertracker/COM-MobileEntities/{}/PAR-Locked".format(child0_uuid), 10,
com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_locked,
Event(EventSeverity.WARNING, EventTrigger.EQUALS, "bool", False, "Target is not locked!"))]
event_scheduler = EventScheduler(loop, event_schedule, [mqtt])
# configure model
mapping = {}
mapping['COM-Lasertracker'] = {'add': None, 'remove': None}
submapping = mapping['COM-Lasertracker']
submapping['PAR-State'] = {'getter': com_lasertracker.get_par_state, 'setter': com_lasertracker.set_par_state}
submapping['PAR-Manufacturer'] = {'getter': com_lasertracker.get_par_manufacturer, 'setter': None}
submapping['PAR-Version'] = {'getter': com_lasertracker.get_par_version, 'setter': None}
submapping['PAR-Time'] = {'getter': com_lasertracker.get_par_time, 'setter': None}
submapping['FUN-Reset'] = {'method': com_lasertracker.fun_reset, 'signature': {'arguments': {}, 'returns': []}}
submapping['FUN-Shutdown'] = {'method': com_lasertracker.fun_shutdown, 'signature': {'arguments': {}, 'returns': []}}
mapping['COM-Lasertracker']['COM-BaseStations'] = {'add': None, 'remove': None}
submapping = mapping['COM-Lasertracker']['COM-BaseStations']
mapping['COM-Lasertracker']['COM-BaseStations']['COM-Base'] = {'add': None, 'remove': None}
submapping = mapping['COM-Lasertracker']['COM-BaseStations']['COM-Base']
submapping['MEA-Position'] = com_lasertracker._com_basestations._com_base.get_mea_position
submapping['MEA-Quaternion'] = com_lasertracker._com_basestations._com_base.get_mea_quaternion
submapping['MEA-Azimuth'] = com_lasertracker._com_basestations._com_base.get_mea_azimuth
submapping['MEA-Elevation'] = com_lasertracker._com_basestations._com_base.get_mea_elevation
submapping['MEA-Distance'] = com_lasertracker._com_basestations._com_base.get_mea_distance
submapping['MEA-Online'] = com_lasertracker._com_basestations._com_base.get_mea_online
submapping['PAR-State'] = {'getter': com_lasertracker._com_basestations._com_base.get_par_state, 'setter': None}
submapping['PAR-Calibration'] = {'getter': com_lasertracker._com_basestations._com_base.get_par_calibration, 'setter': None}
submapping['PAR-Interval'] = {'getter': com_lasertracker._com_basestations._com_base.get_par_interval,
'setter': com_lasertracker._com_basestations._com_base.set_par_interval}
submapping['FUN-Jog'] = {'method': com_lasertracker._com_basestations._com_base.fun_jog,
'signature': {'arguments': {'ARG-Azimuth': 'arg_azimuth', 'ARG-Elevation': 'arg_elevation'}, 'returns': []}}
submapping['FUN-PointTo'] = {'method': com_lasertracker._com_basestations._com_base.fun_pointto,
'signature': {'arguments': {'ARG-Position': 'arg_position'}, 'returns': []}}
mapping['COM-Lasertracker']['COM-MobileEntities'] = {'add': com_lasertracker._com_mobileentities.add,
'remove': com_lasertracker._com_mobileentities.remove}
submapping = mapping['COM-Lasertracker']['COM-MobileEntities']
for child0_uuid in com_lasertracker._com_mobileentities._com_target:
mapping['COM-Lasertracker']['COM-MobileEntities'][child0_uuid] = {'add': None, 'remove': None}
submapping = mapping['COM-Lasertracker']['COM-MobileEntities'][child0_uuid]
submapping['MEA-Position'] = com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_position
submapping['MEA-Quaternion'] = com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_quaternion
submapping['PAR-State'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_state, 'setter': None}
submapping['PAR-Mode'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_mode, 'setter': None}
submapping['PAR-Type'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_type, 'setter': None}
submapping['PAR-Calibration'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_calibration, 'setter': None}
submapping['PAR-Locked'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_locked,
'setter': com_lasertracker._com_mobileentities._com_target[child0_uuid].set_par_locked}
submapping['FUN-Reset'] = {'method': com_lasertracker._com_mobileentities._com_target[child0_uuid].fun_reset,
'signature': {'arguments': {}, 'returns': []}}
submapping['FUN-Trigger'] = {'method': com_lasertracker._com_mobileentities._com_target[child0_uuid].fun_trigger,
'signature': {'arguments': {}, 'returns': []}}
model = Component.load('./Lasertracker.json', mapping['COM-Lasertracker'])
http = HTTPServer(loop, address, port, model)
# start servers
main_logger.info("Starting main asynchronous loop")
try:
loop.run_forever()
except:
pass
finally:
loop.close()