Skip to content
Snippets Groups Projects
Select Git revision
  • d2692666b9c25146a9837c535c10d4cd3fb1a1d9
  • 4.27 default
  • GestureModification
  • dev/5.1
4 results

SaveSequenceRig.uasset

Blame
  • 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()