def testUpdateActuator(self):
        ad = ActuatorData(actuatorType=ActuatorData.HVAC_ACTUATOR_TYPE)
        ad.setCommand(ActuatorData.COMMAND_ON)
        ad.setValue(self.DEFAULT_VAL_A)
        self.assertTrue(self.hSimTask.updateActuator(ad))
        adr = self.hSimTask.getLatestActuatorResponse()

        self.assertIsNotNone(adr)
        self.assertEqual(adr.getValue(), self.DEFAULT_VAL_A)
        logging.info("ActuatorData: " + str(adr))

        ad.setValue(self.DEFAULT_VAL_B)
        self.assertTrue(self.hSimTask.updateActuator(ad))
        adr = self.hSimTask.getLatestActuatorResponse()

        self.assertIsNotNone(adr)
        self.assertEqual(adr.getValue(), self.DEFAULT_VAL_B)
        logging.info("ActuatorData: " + str(adr))

        ad.setCommand(ActuatorData.COMMAND_OFF)
        self.assertTrue(self.hSimTask.updateActuator(ad))
        adr = self.hSimTask.getLatestActuatorResponse()

        self.assertIsNotNone(adr)
        self.assertEqual(adr.getCommand(), ActuatorData.COMMAND_OFF)
        logging.info("ActuatorData: " + str(adr))
    def testStartAndStopManagerWithMqtt(self):
        """
		NOTE: Be sure to enable CoAP by setting the following flag to True
		within PiotConfig.props
		enableMqttClient = True
		enableCoapClient = False
		
		"""
        ddMgr = DeviceDataManager()
        ddMgr.startManager()

        mqttClient = MqttClientConnector()
        mqttClient.connectClient()

        ad = ActuatorData()
        ad.setCommand(1)

        adJson = DataUtil().actuatorDataToJson(ad)

        mqttClient.publishMessage(ResourceNameEnum.CDA_ACTUATOR_CMD_RESOURCE,
                                  msg=adJson,
                                  qos=1)

        sleep(10)

        mqttClient.disconnectClient()
        ddMgr.stopManager()
Exemple #3
0
    def testActuatorCmdPubSub(self):
        qos = 0
        delay = self.cfg.getInteger(ConfigConst.MQTT_GATEWAY_SERVICE,
                                    ConfigConst.KEEP_ALIVE_KEY,
                                    ConfigConst.DEFAULT_KEEP_ALIVE)

        actuatorData = ActuatorData()
        actuatorData.setCommand(7)

        self.mcc.setDataMessageListener(DefaultDataMessageListener())

        payload = DataUtil().actuatorDataToJson(actuatorData)

        self.mcc.connectClient()

        sleep(5)

        self.mcc.publishMessage(
            resource=ResourceNameEnum.CDA_ACTUATOR_CMD_RESOURCE,
            msg=payload,
            qos=qos)

        sleep(delay + 5)

        self.mcc.disconnectClient()
    def testUpdateActuator(self):
        ad = ActuatorData(typeID=ConfigConst.HUMIDIFIER_ACTUATOR_TYPE)
        ad.setCommand(ConfigConst.COMMAND_ON)
        ad.setValue(self.DEFAULT_VAL_A)

        adr = self.hSimTask.updateActuator(ad)

        self.assertIsNotNone(adr)
        self.assertEquals(adr.getValue(), self.DEFAULT_VAL_A)
        logging.info("ActuatorData: " + str(adr))

        ad.setValue(self.DEFAULT_VAL_B)

        adr = self.hSimTask.updateActuator(ad)

        self.assertIsNotNone(adr)
        self.assertEquals(adr.getValue(), self.DEFAULT_VAL_B)
        logging.info("ActuatorData: " + str(adr))

        ad.setCommand(ConfigConst.COMMAND_OFF)

        adr = self.hSimTask.updateActuator(ad)

        self.assertIsNotNone(adr)
        self.assertEquals(adr.getCommand(), ConfigConst.COMMAND_OFF)
        logging.info("ActuatorData: " + str(adr))
    def testLedDisplayEmulation(self):
        ad = ActuatorData(actuatorType=ConfigConst.LED_DISPLAY_ACTUATOR_TYPE)
        ad.setCommand(ConfigConst.COMMAND_ON)
        ad.setStateData("What's up?")
        self.actuatorAdapterMgr.sendActuatorCommand(ad)

        ad.setCommand(ConfigConst.COMMAND_OFF)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)
    def testLEDSimulation(self):
        ad = ActuatorData(actuatorType=ActuatorData.LED_DISPLAY_ACTUATOR_TYPE)
        ad.setStateData(stateData="Test stateData")

        ad.setCommand(ActuatorData.COMMAND_ON)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)

        ad.setCommand(ActuatorData.COMMAND_OFF)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)
    def testHumidifierEmulation(self):
        ad = ActuatorData(actuatorType=ConfigConst.HUMIDIFIER_ACTUATOR_TYPE)
        ad.setValue(50.0)

        ad.setCommand(ConfigConst.COMMAND_ON)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)

        ad.setCommand(ConfigConst.COMMAND_OFF)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)
    def _createTestActuatorData(self):
        ad = ActuatorData()

        ad.setName(self.DEFAULT_NAME)
        ad.setCommand(ActuatorData.COMMAND_ON)
        ad.setStateData(self.DEFAULT_STATE_DATA)
        ad.setValue(self.DEFAULT_VALUE)

        return ad
    def testHvacEmulation(self):
        ad = ActuatorData(actuatorType=ConfigConst.HVAC_ACTUATOR_TYPE)
        ad.setValue(22.5)

        ad.setCommand(ConfigConst.COMMAND_ON)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)

        ad.setCommand(ConfigConst.COMMAND_OFF)
        self.actuatorAdapterMgr.sendActuatorCommand(ad)
    def testActuatorDataCallback(self):
        ddMgr = DeviceDataManager()

        actuatorData = ActuatorData(typeID=ConfigConst.HVAC_ACTUATOR_TYPE)
        actuatorData.setCommand(ConfigConst.COMMAND_ON)
        actuatorData.setStateData("This is a test.")

        ddMgr.handleActuatorCommandMessage(actuatorData)

        sleep(10)
    def testStartAndStopManagerWithMqttAndCoap(self):
        ddMgr = DeviceDataManager(enableMqtt=False, enableCoap=False)

        actuatorData = ActuatorData(
            actuatorType=ActuatorData.HVAC_ACTUATOR_TYPE)
        actuatorData.setCommand(ActuatorData.COMMAND_ON)
        actuatorData.setStateData("This is a test.")

        ddMgr.handleActuatorCommandMessage(actuatorData)

        sleep(10)
Exemple #12
0
    def _createTestActuatorData(self):
        ad = ActuatorData()

        ad.setName(self.DEFAULT_NAME)
        ad.setCommand(ConfigConst.COMMAND_ON)
        ad.setStateData(self.DEFAULT_STATE_DATA)
        ad.setValue(self.DEFAULT_VALUE)

        logging.info("Actuator data as string: " + str(ad))

        return ad
Exemple #13
0
    def testActuatorDataConversionsFromJsonUsingDecimal(self):
        logging.info("\n\n----- [ActuatorData Conversions from JSON] -----")

        adData = ActuatorData()
        adData.setCommand(1)
        adData.setStateData("This is a test.")

        jsonData1 = self.dataUtil.actuatorDataToJson(adData, True)

        logging.info("\n\nActuatorData to JSON:\n\n" + str(jsonData1))

        adData2 = self.dataUtil.jsonToActuatorData(jsonData1)

        logging.info("\n\nJSON to ActuatorData:\n\n" + str(adData2))

        jsonData2 = self.dataUtil.actuatorDataToJson(adData2, True)

        logging.info("\n\nActuatorData back to JSON:\n\n" + str(jsonData2))
Exemple #14
0
 def _handleSensorDataAnalysis(self, data: SensorData):
     """
     Call this from handleSensorMessage() to determine if there's
     any action to take on the message. Steps to take:
     1) Check config: Is there a rule or flag that requires immediate processing of data?
     2) Act on data: If # 1 is true, determine what - if any - action is required, and execute.
     """
     logging.info("_handleSensorDataAnalysis called,msg:"+str(data))
     if self.enableHandleTempChangeOnDevice is True:
         hvac = ActuatorData(ActuatorData.HVAC_ACTUATOR_TYPE)
         if data.getValue() < self.triggerHvacTempCeiling and data.getValue() > self.triggerHvacTempFloor:
             # start hvac when in trigger range
             hvac.setCommand(ActuatorData.COMMAND_ON)
         else:
             # stop hvac when not in range
             hvac.setCommand(ActuatorData.COMMAND_OFF)
         # send command
         self.aam.sendActuatorCommand(hvac)
Exemple #15
0
	def testUpdateEmulator(self):
		ad = ActuatorData(actuatorType = ActuatorData.HVAC_ACTUATOR_TYPE)
		ad.setCommand(ActuatorData.COMMAND_ON)
		ad.setValue(22.0)
		
		self.assertTrue(self.hvSimTask.updateActuator(ad))
		adr = self.hvSimTask.getLatestActuatorResponse()
		
		if adr:
			self.assertEqual(adr.getCommand(), ActuatorData.COMMAND_ON)
			self.assertEqual(adr.getStatusCode(), 0)
			logging.info("ActuatorData: " + str(adr))
			
			# wait 5 seconds
			sleep(5)
		else:
			logging.warning("ActuatorData is None.")
			
		ad.setValue(20.0)
		
		self.assertTrue(self.hvSimTask.updateActuator(ad))
		adr = self.hvSimTask.getLatestActuatorResponse()
		
		if adr:
			self.assertEqual(adr.getCommand(), ActuatorData.COMMAND_ON)
			self.assertEqual(adr.getStatusCode(), 0)
			logging.info("ActuatorData: " + str(adr))
			
			# wait 5 seconds
		else:
			logging.warning("ActuatorData is None.")
			
		ad.setCommand(ActuatorData.COMMAND_OFF)
		
		self.assertTrue(self.hvSimTask.updateActuator(ad))
		adr = self.hvSimTask.getLatestActuatorResponse()
		
		if adr:
			self.assertEqual(adr.getCommand(), ActuatorData.COMMAND_OFF)
			self.assertEqual(adr.getStatusCode(), 0)
			logging.info("ActuatorData: " + str(adr))
		else:
			logging.warning("ActuatorData is None.")
Exemple #16
0
class BaseActuatorSimTask():
    """
	Shell representation of class for student implementation.
	
	"""
    def __init__(self,
                 actuatorType: int = ActuatorData.DEFAULT_ACTUATOR_TYPE,
                 simpleName: str = "Actuator"):
        self.actuatorType = actuatorType
        self.simpleName = simpleName
        self.actuatorData = ActuatorData(name=simpleName)

    def activateActuator(self, val: float) -> bool:
        logging.info("""\n*******\n* ON *\n*******\n%s Value: %f\n""",
                     self.simpleName, val)
        self.actuatorData.setCommand(ActuatorData.COMMAND_ON)
        return True

    def deactivateActuator(self) -> bool:
        logging.info("""\n*******\n* OFF *\n*******\n""")
        self.actuatorData.setCommand(ActuatorData.COMMAND_OFF)
        return True

    def getLatestActuatorResponse(self) -> ActuatorData:
        return self.actuatorData

    def getSimpleName(self) -> str:
        return self.simpleName

    def updateActuator(self, data: ActuatorData) -> bool:
        if data is not None:
            if data.getCommand() == ActuatorData.COMMAND_ON:
                self.activateActuator(data.value)
            else:
                self.deactivateActuator()
        self.actuatorData._handleUpdateData(data)
        self.actuatorData.setAsResponse()
        logging.info(
            "Emulating %s actuator %s:", self.simpleName,
            "ON" if self.actuatorData.getCommand() == ActuatorData.COMMAND_ON
            else "OFF")
        return True
Exemple #17
0
    def testUpdateEmulator(self):
        ad = ActuatorData(typeID=ConfigConst.HUMIDIFIER_ACTUATOR_TYPE)
        ad.setCommand(ConfigConst.COMMAND_ON)
        ad.setValue(50.0)

        adr = self.huSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_ON)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))

            # wait 5 seconds
            sleep(5)
        else:
            logging.warning("ActuatorData is None.")

        ad.setValue(35.0)

        adr = self.huSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_ON)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))

            # wait 5 seconds
        else:
            logging.warning("ActuatorData is None.")

        ad.setCommand(ConfigConst.COMMAND_OFF)

        adr = self.huSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_OFF)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))
        else:
            logging.warning("ActuatorData is None.")
Exemple #18
0
    def testUpdateEmulator(self):
        ad = ActuatorData(actuatorType=ConfigConst.LED_DISPLAY_ACTUATOR_TYPE)
        ad.setCommand(ConfigConst.COMMAND_ON)
        ad.setStateData(self.HELLO_WORLD_A)

        adr = self.lddSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_ON)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))

            # wait 5 seconds
            sleep(5)
        else:
            logging.warning("ActuatorData is None.")

        ad.setStateData(self.HELLO_WORLD_B)

        adr = self.lddSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_ON)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))

            # wait 5 seconds
        else:
            logging.warning("ActuatorData is None.")

        ad.setCommand(ConfigConst.COMMAND_OFF)

        adr = self.lddSimTask.updateActuator(ad)

        if adr:
            self.assertEqual(adr.getCommand(), ConfigConst.COMMAND_OFF)
            self.assertEqual(adr.getStatusCode(), 0)
            logging.info("ActuatorData: " + str(adr))
        else:
            logging.warning("ActuatorData is None.")
Exemple #19
0
    def _handleSensorDataAnalysis(self, data: SensorData):
        """
		Call this from handleSensorMessage() to determine if there's
		any action to take on the message. Steps to take:
		1) Check config: Is there a rule or flag that requires immediate processing of data?
		2) Act on data: If # 1 is true, determine what - if any - action is required, and execute.
		"""
        logging.info(
            "[CDA_CALLBACK]----->>>The _handleSensorDataAnalysis method is being called"
        )
        """
		"""
        if self.enableHandleTempChangeOnDevice and data.getSensorType(
        ) == SensorData.TEMP_SENSOR_TYPE:

            ad = ActuatorData(actuatorType=ActuatorData.HVAC_ACTUATOR_TYPE)
            value = data.getValue()
            if value >= self.triggerHvacTempFloor and value <= self.triggerHvacTempCeiling:
                ad.setCommand(ActuatorData.COMMAND_OFF)
            else:
                ad.setCommand(ActuatorData.COMMAND_ON)

            self.actuatorAdapterManager.sendActuatorCommand(ad)
        """
		"""
        if self.enableHandleSoilHumidityChangeOnDevice and data.getSensorType(
        ) == SensorData.SOIL_HUMIDITY_SENSOR_TYPE:

            ad = ActuatorData(
                actuatorType=ActuatorData.SPRINKLER_ACTUATOR_TYPE)
            value = data.getValue()
            if value >= self.triggerWaterDeviceHumiCeiling:
                ad.setCommand(ActuatorData.COMMAND_OFF)
                self.actuatorAdapterManager.sendActuatorCommand(ad)
            elif value <= self.triggerWaterDeviceHumiFloor:
                ad.setCommand(ActuatorData.COMMAND_ON)
                self.actuatorAdapterManager.sendActuatorCommand(ad)
                self.coapClient.sendGetRequest(
                    ResourceNameEnum.CDA_ACTUATOR_CMD_RESOURCE, False, 5)
            else:
                self.coapClient.sendGetRequest(
                    ResourceNameEnum.CDA_CLOUD_ACTUATOR_CMD_RESOURCE, False, 5)
class BaseActuatorSimTask():
    """
	Base class for ActuatorSimTask
	
	"""
    def __init__(self,
                 actuatorType: int = ActuatorData.DEFAULT_ACTUATOR_TYPE,
                 simpleName: str = ConfigConst.NOT_SET):
        """
		Init BaseActuatorSimTask with default values
		:param actuatorType: Type of actuator
		:param simpleName: Name of actuator
		"""
        self.actuatorType = actuatorType
        self.simpleName = simpleName
        self.latestActuatorData = ActuatorData(self.actuatorType,
                                               self.simpleName)
        pass

    def activateActuator(self, val: float) -> bool:
        """
		Turn actuator on with given target value
		As a sim actuator, there is no real action
		:param val: Given target actuator value
		:return: If succeed to activate Actuator, always True as a sim actuator
		"""
        logging.info("\n======\nSim %s actuator ON, with value = %d.\n======" %
                     (self.getSimpleName(), val))
        self.latestActuatorData.setCommand(ActuatorData.COMMAND_ON)
        self.latestActuatorData.setValue(val)
        return True
        pass

    def deactivateActuator(self) -> bool:
        """
		Turn actuator off with given target value
		As a sim actuator, there is no real action
		:return: If succeed to deactivate Actuator, always True as a sim actuator
		"""
        logging.info("\n======\nSim %s actuator OFF.\n======" %
                     self.getSimpleName())
        self.latestActuatorData.setCommand(ActuatorData.COMMAND_OFF)
        return True
        pass

    def getLatestActuatorResponse(self) -> ActuatorData:
        """
		Get latest actuator data
		:return: Latest ActuatorData
		"""
        return self.latestActuatorData
        pass

    def getSimpleName(self) -> str:
        """
		Get name of the sim actuator
		:return: Name string
		"""
        return self.simpleName
        pass

    def updateActuator(self, data: ActuatorData) -> bool:
        """
		Use ActuatorData as command:
		Update current maintained latest ActuatorData
		Use given ActuatorData to execute command
		:param data: Given ActuatorData
		:return: If succeed to update and execute
		"""
        if data is None:
            logging.error("Got an invalid ActuatorData, which is None!")
            return False
        if not isinstance(data, ActuatorData):
            logging.error(
                "Got an invalid ActuatorData, which type is not ActuatorData!")
            return False
        if data.getCommand(
        ) is not ActuatorData.COMMAND_ON and data.getCommand(
        ) is not ActuatorData.COMMAND_OFF:
            logging.error(
                "Got an invalid ActuatorData, whose command is invalid!")
            return False
        ret = False
        if data.getCommand() is ActuatorData.COMMAND_ON:
            ret = self.activateActuator(data.getValue())
        else:
            ret = self.deactivateActuator()
        self.latestActuatorData.updateData(data)
        self.latestActuatorData.setName(self.simpleName)
        self.latestActuatorData.setStatusCode(int(ret))
        self.latestActuatorData.setAsResponse()
        return ret
        pass
Exemple #21
0
class BaseActuatorSimTask():
    """
	Shell representation of class for student implementation.
	
	"""
    def __init__(self,
                 actuatorType: int = ActuatorData.DEFAULT_ACTUATOR_TYPE,
                 simpleName: str = "Actuator",
                 actuatorName=ConfigConst.NOT_SET):
        """
		Initialization of class.
		Create an instance of BaseActuatorSimTask
		"""
        self.actuatorType = actuatorType
        self.simpleName = simpleName
        self.latestAd = ActuatorData(name=actuatorName)

    def activateActuator(self, val: float) -> bool:
        """
		Activate the Actuator
		
		@return bool
		"""
        logging.info("---> Emulating %s actuator ON:",
                     str(self.getActuatorTypeName()))
        print('*******')
        print('* O N *')
        print('*******')
        print(self.getActuatorTypeName() + ' VALUE -> ' + str(val))
        self.latestAd.setCommand(ActuatorData.COMMAND_ON)
        return True

    def deactivateActuator(self) -> bool:
        """
		Deactivate the Actuator
		
		@return bool
		"""
        logging.info("---> Emulating %s actuator OFF: ",
                     str(self.getActuatorTypeName()))
        print('*******')
        print('* OFF *')
        print('*******')
        self.latestAd.setCommand(ActuatorData.COMMAND_OFF)
        return True

    def getActuatorType(self):
        """
		Get the ActuatorType of the instance
		
		@return str
		"""
        return self.actuatorType

    def getLatestActuatorResponse(self) -> ActuatorData:
        """
		Get the LatestActuatorResponse of the instance
		
		@return ActuatorData
		"""
        return self.latestAd

    def getSimpleName(self) -> str:
        """
		Get the SimpleName of the instance
		
		@return str
		"""
        return self.simpleName

    def updateActuator(self, data: ActuatorData) -> bool:
        """
		Update the Actuator
		
		@return bool
		"""
        if data:
            if data.getCommand() == ActuatorData.COMMAND_ON:
                self.activateActuator(data.getValue())
            else:
                self.deactivateActuator()
            self.latestAd._handleUpdateData(data)

        self.latestAd.setAsResponse()
        return True

    def getActuatorTypeName(self):
        """
		Get the ActuatorTypeName of the instance
		
		@return str
		"""
        if self.actuatorType == 1:
            return 'HVAC'
        if self.actuatorType == 2:
            return 'HUMIDIFIER'
        return 'Unknown'