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
Beispiel #2
0
    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