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
    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()
    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))
Exemple #4
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()
Exemple #5
0
    def testDefaultValues(self):
        ad = ActuatorData()

        self.assertEquals(ad.getCommand(), ConfigConst.DEFAULT_COMMAND)
        self.assertEquals(ad.getStatusCode(), ConfigConst.DEFAULT_STATUS)

        logging.info("Actuator data as string: " + str(ad))
    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))
Exemple #7
0
 def updateActuator(self, data: ActuatorData) -> bool:
     """
     Override super class method.
     Use _handleActuation to execute actuation
     :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
     cmd = data.getCommand()
     if cmd != ActuatorData.COMMAND_ON and cmd != ActuatorData.COMMAND_OFF:
         logging.error(
             "Got an invalid ActuatorData, whose command is invalid!")
         return False
     ret = self._handleActuation(cmd, data.getValue(), data.getStateData())
     self.latestActuatorData.updateData(data)
     self.latestActuatorData.setStatusCode(int(ret))
     self.latestActuatorData.setName(self.simpleName)
     self.latestActuatorData.setAsResponse()
     return ret >= 0
     pass
	def updateActuator(self, data: ActuatorData) -> bool:
		if data != None:
			if (data.getCommand() == 0):
				self.deactivateActuator()
			else:
				self.activateActuator(data.getCommand())
				self.LatestActuatorData = data
				self.LatestActuatorData.setAsResponse()
		return True
    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
Exemple #10
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 #11
0
    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 __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 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)
Exemple #14
0
    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
Exemple #15
0
    def testActuatorCmdPubSub(self):
        qos = 1

        # NOTE: delay can be anything you'd like - the sleep() calls are simply to slow things down a bit for observation
        delay = self.cfg.getInteger(ConfigConst.MQTT_GATEWAY_SERVICE,
                                    ConfigConst.KEEP_ALIVE_KEY,
                                    ConfigConst.DEFAULT_KEEP_ALIVE)

        actuatorData = ActuatorData()
        payload = DataUtil().actuatorDataToJson(actuatorData)

        listener = DefaultDataMessageListener()
        self.mcc.setDataMessageListener(listener)

        self.mcc.connectClient()

        sleep(5)

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

        sleep(delay)

        self.mcc.disconnectClient()
    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 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 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 jsonToActuatorData(self, jsonData) -> ActuatorData:
		"""
		Convert json string to ActuatorData Instance
		:param jsonData: Given json string
		:return: Decoded ActuatorData Instance
		"""
		adDict: dict = json.loads(jsonData)
		ad = ActuatorData(d=adDict)
		return ad
Exemple #20
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.")
    def testFullUpdate(self):
        ad = ActuatorData()
        ad2 = self._createTestActuatorData()

        ad.updateData(ad2)

        self.assertEquals(ad.getCommand(), ActuatorData.COMMAND_ON)
        self.assertEquals(ad.getStateData(), self.DEFAULT_STATE_DATA)
        self.assertEquals(ad.getValue(), self.DEFAULT_VALUE)
    def handleActuatorCommandResponse(self, data: ActuatorData) -> bool:
        """
		Callback function to handle an actuator command response packaged as a ActuatorData object.
		
		@param data The ActuatorData message received.
		@return bool True on success; False otherwise.
		"""
        if data:
            logging.info('Actuator Command: ' + str(data.getCommand()))

        return True
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.LatestActuatorData = ActuatorData(actuatorType)
		self.simpleName = simpleName
	
		
	def activateActuator(self, val: float) -> bool:
		logging.info("Sending Actuator On Command")
		self.LatestActuatorData.command = ActuatorData.COMMAND_ON
		return True
		
	def deactivateActuator(self) -> bool:
		logging.info("Sending Actuator Off Command")
		self.LatestActuatorData.command = ActuatorData.COMMAND_OFF
		return True

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

	
	def getSimpleName(self) -> str:
		return self.simpleName
	
	
	def updateActuator(self, data: ActuatorData) -> bool:
		if data != None:
			if (data.getCommand() == 0):
				self.deactivateActuator()
			else:
				self.activateActuator(data.getCommand())
				self.LatestActuatorData = data
				self.LatestActuatorData.setAsResponse()
		return True
	def testWriteActuatorDataToCdaDataPath(self):
		logging.info("\n\n----- [ActuatorData to JSON to file] -----")
		
		dataObj  = ActuatorData()
		dataStr  = self.dataUtil.actuatorDataToJson(dataObj)
		fileName = self.cdaDataPath + '/ActuatorData.dat'

		logging.info("Sample ActuatorData JSON (validated): " + str(dataStr))
		logging.info("Writing ActuatorData JSON to CDA data path: " + fileName)
		
		fileRef = Path(fileName)
		fileRef.write_text(dataStr, encoding = 'utf-8')
 def sendActuatorCommand(self, data: ActuatorData) -> bool:
     logging.debug("Got ActuatorData: {}".format(data.__str__()))
     if data.isResponse:
         logging.info("Ignore response ActuatorData.")
         return True
     if self.useEmulator is False:
         logging.info("Sending ActuatorData to simulated Actuators.")
         if data.getActuatorType() is ActuatorData.HUMIDIFIER_ACTUATOR_TYPE:
             self.humidifierActuator.updateActuator(data)
             pass
         elif data.getActuatorType() is ActuatorData.HVAC_ACTUATOR_TYPE:
             self.hvacActuator.updateActuator(data)
             pass
         else:
             logging.warning("Got ActuatorData for Actuator that has not been simulated.")
     else:
         logging.info("Sending ActuatorData to emulated Actuators.")
         if data.getActuatorType() is ActuatorData.HUMIDIFIER_ACTUATOR_TYPE:
             self.humidifierEmulator.updateActuator(data)
             pass
         elif data.getActuatorType() is ActuatorData.HVAC_ACTUATOR_TYPE:
             self.hvacEmulator.updateActuator(data)
             pass
         elif data.getActuatorType() is ActuatorData.LED_DISPLAY_ACTUATOR_TYPE:
             self.ledEmulator.updateActuator(data)
             pass
         else:
             logging.warning("Got ActuatorData for Actuator that has not been simulated.")
     return True
     pass
Exemple #26
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 #27
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 #28
0
 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
    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("_handleSensorDataAnalysis method is called...")
        if (self.enableHandleTempChangeOnDevice == True):
            self.actuatorData = ActuatorData()
            self.actuatorData.actuator_type = ActuatorData.HVAC_ACTUATOR_TYPE
            self.actuatorData.COMMAND_ON
            self.actuatorAdapterManager.sendActuatorCommand(self.actuatorData)
            pass
Exemple #30
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