def run_init_mode(self) -> None: """Runs init mode.""" self.logger.debug("Entered INIT") # Connect to pubsub service self.pubsub = PubSub( self, on_connect, on_disconnect, on_publish, on_message, on_subscribe, on_log, ) # Initialize iot connection state self.is_connected = False # Initialize registration state self.is_registered = registration.is_registered() self.device_id = registration.device_id() self.verification_code = registration.verification_code() # Check if network is connected if not self.network_is_connected: self.logger.info("Waiting for network to come online") # Loop forever while True: # Check if network is connected if self.network_is_connected: self.logger.debug("Network came online") break # Update every 100ms time.sleep(0.1) # Give the network time to initialize self.logger.debug("Waiting 30 seconds for network to initialize") time.sleep(30) # Check if device is registered if not self.is_registered: self.logger.debug("Device not registered, registering device") registration.register() # Update registation state self.is_registered = registration.is_registered() self.device_id = registration.device_id() self.verification_code = registration.verification_code() self.config_topic = "/devices/{}/config".format(self.device_id) self.command_topic = "/devices/{}/commands".format(self.device_id) self.telemetry_topic = "/devices/{}/events".format(self.device_id) # Initialize pubsub client self.pubsub.initialize() # Transition to disconnected mode on next state machine update self.mode = modes.DISCONNECTED
def __init__(self, state: State, recipe: RecipeManager) -> None: """Initializes iot manager.""" # Initialize parent class super().__init__() # Initialize parameters self.state = state self.recipe = recipe # Initialize logger self.logger = logger.Logger("IotManager", "iot") self.logger.debug("Initializing manager") # Initialize our state variables self.received_message_count = 0 self.published_message_count = 0 # Initialize pubsub handler self.pubsub = PubSub( ref_self=self, on_connect=on_connect, on_disconnect=on_disconnect, on_publish=on_publish, on_message=on_message, on_subscribe=on_subscribe, on_log=on_log, ) # Initialize state machine transitions self.transitions: Dict[str, List[str]] = { modes.INIT: [ modes.CONNECTED, modes.DISCONNECTED, modes.ERROR, modes.SHUTDOWN, ], modes.CONNECTED: [ modes.INIT, modes.DISCONNECTED, modes.ERROR, modes.SHUTDOWN, ], modes.DISCONNECTED: [ modes.INIT, modes.CONNECTED, modes.SHUTDOWN, modes.ERROR, ], modes.ERROR: [modes.SHUTDOWN], } # Initialize state machine mode self.mode = modes.INIT
def test_init() -> None: state = State() recipe = RecipeManager(state) iot = IotManager(state, recipe) pubsub = PubSub( ref_self=iot, on_connect=on_connect, on_disconnect=on_disconnect, on_publish=on_publish, on_message=on_message, on_subscribe=on_subscribe, on_log=on_log, )
def __init__(self, state: State, recipe: RecipeManager) -> None: """Initializes iot manager.""" # Initialize parent class super().__init__() # Initialize parameters self.state = state self.recipe = recipe # Initialize logger self.logger = logger.Logger("IotManager", "iot") self.logger.debug("Initializing manager") # Initialize our state variables self.received_message_count = 0 self.published_message_count = 0 # Initialize device info self.device_id = registration.device_id() # Initialize topics self.config_topic = "/devices/{}/config".format(self.device_id) self.command_topic = "/devices/{}/commands".format(self.device_id) self.telemetry_topic = "/devices/{}/events".format(self.device_id) # Initialize pubsub handler self.pubsub = PubSub( ref_self=self, on_connect=on_connect, on_disconnect=on_disconnect, on_publish=on_publish, on_message=on_message, on_subscribe=on_subscribe, on_log=on_log, ) # Initialize state machine transitions self.transitions: Dict[str, List[str]] = { modes.INIT: [ modes.CONNECTED, modes.DISCONNECTED, modes.ERROR, modes.SHUTDOWN, ], modes.CONNECTED: [ modes.INIT, modes.DISCONNECTED, modes.ERROR, modes.SHUTDOWN, ], modes.DISCONNECTED: [ modes.INIT, modes.CONNECTED, modes.SHUTDOWN, modes.ERROR, ], modes.ERROR: [modes.SHUTDOWN], } # Initialize state machine mode self.mode = modes.INIT # Initialize recipe modes self.previous_recipe_mode = recipe_modes.NORECIPE