class TempActuatorEmulator():   

    def __init__(self):
        
        self.thisActuatorData = ActuatorData()
        self.thisActuatorData.setValue(20)
        self.thisActuatorData.setCommand('IDEAL')
     
    def processMessage(self, actuatorData):
        
        
        if(self.thisActuatorData!=actuatorData):
        
            if (actuatorData.getCommand() == 'INCREASE'):           
                print('Increasing temperature')
                GPIO.set_rotation(actuatorData.getValue())
            #GPIO stands for general purpose input output
            #we set rotation and get values
            elif (actuatorData.getCommand() == 'DECREASE'):
                print('Decreasing temperature')
                GPIO.set_rotation(actuatorData.getValue())        
            else:
                print('maintaining the ideal temperature')
                GPIO.set_rotation(actuatorData.getValue())
                
            self.thisActuatorData = actuatorData
Пример #2
0
 def __init__(self):
     self.actuator = ActuatorData()
     self.sensorAdaptor = MultiSensorAdaptor()
     self.config = ConfigUtil()
     self.config.loadConfig("../../../config/ConnectedDevicesConfig.props")
     self.threshold = float(self.config.getValue("device", "nominalTemp"))
     self.actuatorOP = MultiActuatorAdaptor.getInstance()
class TempActuatorAdaptor():
    '''
    * Class constructor function which makes actuation based on current temperature value extracted from SensorData object
    * This constructor also uses functions of SimpleLedAActivator class such as setBLUE(), setRED
    '''

    def __init__(self):
        logging.info("Actuation")     
        
        if  (data_object.getcurvalue() < 20):
            self.actuator_status = ActuatorData()
            self.actuator_status.addData("Increase Temperature", data_object.getcurvalue(), "Temperature Sensor")  # logging actuator data
            high = SimpleLedActivator(3)
            high.setRED()
            #high.default_led()
            return
        
        if  (data_object.getcurvalue() > 20):
            self.actuator_status = ActuatorData()
            self.actuator_status.addData("Decrease Temperature", data_object.getcurvalue(), "Temperature Sensor")  # logging actuator data
            low = SimpleLedActivator(3)
            low.setBLUE()
            #low.default_led()
            return
        else:
            return
        
    def getActuator_obj(self):
        return self.actuator_status
Пример #4
0
    def testPublishActuatorCommand(self):

        #Call the connect method of MqttClientConnector with valid values
        self.mqttClientConnector.connect("broker.hivemq.com", 1883)

        #Let it connect
        sleep(2)

        #Create ActuatorData object and add a valid command
        actuatorData = ActuatorData()
        actuatorData.setCommand("Test Command")

        #Publish to topic and assert true for successful publishing
        self.assertEqual(
            True,
            self.mqttClientConnector.publishActuatorCommand(actuatorData, 2))

        #Call the connect method of MqttClientConnector with invalid values
        self.mqttClientConnector.connect("brosdf235iytksg", 1883)

        #Let it connect
        sleep(2)

        #Publish to topic and assert False for failure to publish
        self.assertEqual(
            False,
            self.mqttClientConnector.publishActuatorCommand(actuatorData, 2))

        #Pass a null to method and assert False for failure to publish
        self.assertEqual(
            False, self.mqttClientConnector.publishActuatorCommand(None, 2))
Пример #5
0
 def __init__(self):
     '''
     Constructor
     '''
     self.actuatorData = ActuatorData()
     self.senseHatLedActivator = SenseHatLedActivator()
     self.simpleLedActivator = SimpleLedActivator()
 def setUp(self):
     self.du = DataUtil()
     self.sd = SensorData()
     self.sd.addValue(15)
     self.sd.setName("Test")
     self.ad = ActuatorData()
     self.ad.addValue(44)
     self.ad.setName("Test")
     self.ad.setCommand("Test")
     pass
Пример #7
0
 def toActuatorDataFromJson2(self,jsonData):
     adDict = json.loads(jsonData)
     
     ad              = ActuatorData()
     ad.Value        = adDict['value']
     ad.timeStamp    = adDict['timestamp']
     
     #print(" decode [post] --> " + str(ad))
     
     return ad
Пример #8
0
	def setUp(self):
		
		self.ac = ActuatorData()
		self.ac.addValue(15)
		self.sensor = SensorData()
		self.sensor.addValue(15)
		self.hsa = HumiditySensorAdaptorTask()
		self.hsa.objectLoader()
		self.pu = PersistenceUtil()
		pass
Пример #9
0
 def __init__(self, enableEmulator, lowVal, highVal, curTemp, isPrevTempSet):
     super(TempSensorAdaptor, self).__init__()
     self.enableEmulator = enableEmulator
     self.curTemp = curTemp
     self.lowVal = lowVal
     self.highVal = highVal
     self.isPrevTempSet = isPrevTempSet
     
     self.config = ConfigUtil.ConfigUtil('')
     self.config.loadConfig()
     self.actuatorData = ActuatorData()
     self.tempActuatorEmulator = TempActuatorEmulator()
Пример #10
0
 def updateActuator(self,ActuatorData):
     #print("Actuator Name "+ str(ActuatorData.getValue() ))
     if(ActuatorData.getName()=="HumidityI2C"):
         self.Humidityi2cdata = str(ActuatorData.getValue())
     elif(ActuatorData.getName()=="HumiditySenseHat"):
         self.HumiditySenseHat = str(ActuatorData.getValue())
         #print("Actuator Name "+ str(ActuatorData.getValue()))
     message = "Temp -> I2C =" + self.Humidityi2cdata + " SenseHat ="+ self.HumiditySenseHat
     logging.info(message)
     #print("msg : " +message)
     self.hat.updateLed(message)
     return True
 def jsonToactuator(self, jsonData):
     adDict = json.loads(jsonData)
     ad = ActuatorData()
     ad.name = adDict['name']
     ad.timeStamp = adDict['timeStamp']
     ad.hasError = adDict['hasError']
     ad.command = adDict['command']
     ad.errCode = adDict['errCode']
     ad.statusCode = adDict['statusCode']
     ad.stateData = adDict['stateData']
     ad.curValue = adDict['curValue']
     return ad
    def setUp(self):
        self.sd = SensorData()
        self.sd.addValue(11)
        self.sdm = SensorDataManager()
        self.actuator = ActuatorData()
        self.actuator.setCommand("Raise Temp")
        self.sdm.threshold = 20
        self.tsa = TempSensorAdaptor()
        self.taa = TempActuatorAdaptor()
        self.tat = TempSensorAdaptorTask()
        self.shla = SenseHatLedActivator()

        pass
Пример #13
0
    def testwriteActuatorDataToFile(self):

        #create sensorData object
        actuatorData = ActuatorData()

        #add a value
        actuatorData.setName("Testinng")

        #write to file and assert True
        self.assertEqual(True,
                         self.dataUtil.writeActuatorDataToFile(actuatorData))

        pass
Пример #14
0
 def setUp(self):
     self.config = ConfigUtil()
     self.config.loadConfig('../../../config/ConnectedDevicesConfig.props')
     self.tempsensor = TempSensorAdaptorTask()
     self.sensordata = SensorData()
     self.actuatordata = ActuatorData()
     self.sensordata.addValue(10)
     self.sensordata.addValue(15)
     self.sensordata.addValue(20)
     self.sensordata.addValue(25)
     self.sensordata.setName('Temperature')
     self.actuatordata.setCommand('Increasing')
     self.actuatordata.setName('SenseHat')
     self.sdmanager = SensorDataManager()
 def setUp(self):
     self.sd = SensorData()
     self.sd.addValue(11)
     self.sd.setName("Test")
     self.sdm = SensorDataManager()
     self.sdm.actuator.addValue(11)
     self.actuator = ActuatorData()
     self.actuator.addValue(2)
     self.actuator.setName("Test")
     self.tsa = MultiSensorAdaptor()
     self.taa = MultiActuatorAdaptor()
     self.tat = HumiditySensorAdaptorTask()
     self.tat.sensorData = SensorData()
     self.shla = SenseHatLedActivator()
 def toActuatorDataFromJson(self, string):
     act = ActuatorData()
     data = json.loads(string)
     logging.info(data)
     act.name = data['name']
     act.value = data['current']
     act.command = data['command']
     act.min_value = data['min_value']
     act.max_value = data['max_value']
     act.total_value = data['total_value']
     act.avgTemp = data['avgTemp']
     act.timestamp = data['timestamp']
     logging.info("New actuator generated from JSon \n")
     return act
Пример #17
0
 def jsonToactuator(self,jsonData):
     actdataDict = json.loads(jsonData)
     print(" decode [pre] --> " + str(actdataDict))
     actdata = ActuatorData()
     actdata.name = actdataDict['name']
     actdata.time = actdataDict['timeStamp']
     actdata.hasError = actdataDict['hasError']
     actdata.command = actdataDict['command']
     actdata.errCode = actdataDict['errCode']
     actdata.statusCode = actdataDict['statusCode']
     actdata.stateData = actdataDict['stateData']
     actdata.curValue = actdataDict['curValue']
     print(" decode [post] --> " + str(actdata))
     return actdata
Пример #18
0
 def __init__(self):
     Thread.__init__(self)
     self.highVal = 30
     self.lowVal = 0
     self.updateTime = 2
     self.senseHat = SenseHat()
     self.sensorData = SensorData()
     self.actuatorData = ActuatorData()
     self.connector = Connector()
     self.alertDiff = 10
     
     
     self.config = ConfigUtil('D:/git/repository/iot-device/apps/data/ConnectedDevicesConfig.props')
     self.config.loadConfig()
     print('Configuration data...\n' + str(self.config))
Пример #19
0
    def toActuatorDataFromJson(self, jsonStr) -> ActuatorData:

        #instantiate ActuatorData
        actuatorData = ActuatorData()

        #use json load to convert it to a dictionary
        jsonLoad = json.loads(jsonStr)

        #parse and add it to the actuatorData object one by one
        actuatorData.name = jsonLoad['name']
        actuatorData.command = jsonLoad['command']
        actuatorData.value = jsonLoad['value']

        #return the actuatorData reference
        return actuatorData
Пример #20
0
class SensorDataManager():
    actData = ActuatorData()
    nomTemp = 0
    confP = ConfigUtil()
    '''
    this function takes sensorData as an argument and updates the ActuatorData object with the values and 
    returns the ActuatorData object.
    '''
    def handleSensorData(self, sensorData):
        self.actData.setName(sensorData.getName())
        self.actData.setValue(sensorData.getCurrentValue())
        self.nomTemp = float(self.confP.getValue("device", "nominalTemp"))
        if ((self.nomTemp - 5.0) < sensorData.getCurrentValue() <
            (self.nomTemp + 5.0)):
            self.actData.setCommand("NEUTRAL")
        elif (sensorData.getCurrentValue() < (self.nomTemp + 10.0)):
            self.actData.setCommand("TEMP DEC")
        elif (sensorData.getCurrentValue() > (self.nomTemp + 10.0)):
            self.actData.setCommand("TEMP INC")
    # print(self.actData.getCommand())
        return self.actData

    #return None

    def humidity(self, sensorData):
        self.actData.setName(sensorData.getName())
        self.actData.setValue(sensorData.getCurrentValue())
        self.actData.setCommand(str(round(sensorData.getCurrentValue(), 2)))
        return self.actData

    def pressure(self, sensorData):
        self.actData.setName(sensorData.getName())
        self.actData.setValue(sensorData.getCurrentValue())
        self.actData.setCommand(str(round(sensorData.getCurrentValue(), 2)))
        return self.actData
Пример #21
0
class Module07Test(unittest.TestCase):
    sensorD = SensorData()
    #hasConf=confU.hasConfig()
    curVal = sensorD.getCurrentValue()
    avgVal = sensorD.getAverageValue()
    actD = ActuatorData()
    du = DataUtil()
    adl = ActuatorDataListener()
    j = ""

    def testSensorData(self):
        self.assertTrue(isinstance(self.curVal, float), "Float Value")
        self.assertTrue(self.avgVal >= 0.0 and self.avgVal <= 30.0,
                        "Average Temperature within the range")

    '''
	It checks for the datatype of the getCommand function to be String.
	'''

    def testDataUtil(self):
        self.assertTrue(
            isinstance(self.du.toJsonFromSensorData(self.sensorD), str),
            "String")

    def testActuatorDataFromJson(self):
        self.assertTrue(
            isinstance(self.du.toActuatorDataFromJson(self.j), str), "String")

    def testActuatorDataListener(self):
        self.assertTrue(
            isinstance(self.adl.onActuatorMessage(str(self.curVal)), float),
            "Type String")
 def __init__(self):
     self.LedActivate = SenseHatLedActivator()
     self.acdata = ActuatorData()
     self.sendMessage = SmtpClientConnector()
     logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',
                         level=logging.DEBUG)  # logging basic data
     self.cpuUtil = SystemCpuUtilTask()
Пример #23
0
 def toJsonFromActuatorData(self,
                            actuatorData: ActuatorData.ActuatorData) -> str:
     '''
     Convert from ActuatorData instance to JSON
     '''
     #Converting the actuatorData to a dictionary
     jsonData = {
         "command": actuatorData.getCommand(),
         "name": actuatorData.getName(),
         "value": actuatorData.getValue()
     }
     #dumping the json data and returning it
     jsonStr = json.dumps(jsonData)
     #Logging and writing to file
     self.writeActuatorDataToFile("Created actuatorData JSON" + jsonStr)
     return jsonStr
Пример #24
0
class Module03Test(unittest.TestCase):
	confU=ConfigUtil();
	sensorD=SensorData()
	hasConf=confU.hasConfig()
	curVal=sensorD.getCurrentValue()
	avgVal=sensorD.getAverageValue()
	actD=ActuatorData()
	senDM=SensorDataManager()
	
	"""
	it checks for the datatype of hasConf to be boolean, If true test case is passed.
	"""

	def testConfigUtil(self):
		self.assertTrue(isinstance(self.hasConf,bool),"Boolean Value")
		
	"""
	it checks for the datatype of curVal to be float, If true test case is passed. 
	Second checks for the avgVal to be within the specified range.If true test case is passed. 
	"""	
	def testSensorData(self):
		self.assertTrue(isinstance(self.curVal,float),"Float Value")
		self.assertTrue(self.avgVal>=0.0 and self.avgVal<=30.0,"Average Temperature within the range")
	'''
	It checks for the datatype of the getCommand function to be String.
	'''	
	def testActuatorData(self):
		self.assertTrue(isinstance(self.actD.getCommand(),str), "String")
		
	'''
	It checks for the returntype of the function handleSensorData of class SensorDataManager to be of type actuator data. 
	'''	
	def testSensorDataManager(self):
		self.assertTrue(isinstance(self.senDM.handleSensorData(self.sensorD),ActuatorData), "Type Actuator Data")		
class SensorDataManager(object):
    '''
    classdocs
    '''   
    actuatorData = ActuatorData()
    

    def __init__(self):
        '''
        Constructor
        '''
        self.config = ConfigUtil()
        self.connector = SmtpClientConnector()
        self.tempActuator = TempActuatorAdaptor()
        
    '''
    If current temperature exceeds or falls below the 'nominalTemp', the new SensorData instance will trigger an actuation
    It will return the new ActualatorData instance with the appropriate data value and command embedded;
    Otherwise, it returns None
    Also,if an actuation is triggered, the SmtpClientConnector instance will be created to send the e-mail 
    message to the appropriate destination    
    '''
        
    def handleSensorData(self,sensorData):
        self.nominalTemp = float(self.config.getValue(ConfigConst.DEVICE, ConfigConst.NOMINAL_TEMP))
        self.time       = sensorData.timeStamp                                     
        self.average    = sensorData.avgValue
        self.samples    = sensorData.getCount()
        self.min        = sensorData.minValue
        self.max        = sensorData.maxValue 
        self.message    = 'Temperature\n' + '\tTime: ' +str(self.time) + '\n\tCurrent: ' + str(sensorData.curValue) + '\n\tAverage: ' +str(self.average) + '\n\tSamples: ' + str(self.samples) + '\n\tMin: ' + str(self.min) + '\n\tMax: ' + str(self.max)
        
        if(sensorData.curValue>self.nominalTemp):
            
            logging.info('\nCurrent temperature exceeds nonminalTemp by > ' +str(self.nominalTemp) + '. Triggering alert...')
            #print('\nCurrent temperature exceeds nonminalTemp by > ' +str(self.nominalTemp) + '. Triggering alert...')      
            
            self.connector.publishMessage('Excessive Temperature', self.message)
            self.actuatorData.setCommand('Increasing')
            self.actuatorData.getValue(sensorData.curValue)
            self.tempActuator.updateActuator(self.actuatorData)
            print(self.message)
            return(self.actuatorData)
            
            
        elif(sensorData.curValue<self.nominalTemp):
            
            logging.info('\nCurrent temperature falls below nonminalTemp by < ' +str(self.nominalTemp) + '. Triggering alert...')                                     
             
            self.connector.publishMessage('Decreasing Temperature', self.message)
            self.actuatorData.setCommand('Decreasing')
            self.actuatorData.getValue(sensorData.curValue)
            self.tempActuator.updateActuator(self.actuatorData)
            print(self.message)
            return(self.actuatorData)
        
        else:
            return(None)
            
 def writeActuatorToDataDbms(self,ActuatorData):
     dbData = DataUtil.toJsonFromActuatorData(self, ActuatorData)
     r = redis.StrictRedis(host=self.host, port=self.port, password=self.auth, decode_responses=True)
     r.set(ActuatorData.getTimeStamp()+"- Actuator",dbData)
     r.publish("Actuator", dbData)
     #logging.info("Sending data to DB")
     r.close() 
     return True
Пример #27
0
class Module05Test(unittest.TestCase):

	"""
	Use this to setup your tests. This is where you may want to load configuration
	information (if needed), initialize class-scoped variables, create class-scoped
	instances of complex objects, initialize any requisite connections, etc.
	"""
	def setUp(self):
		
		self.ac = ActuatorData()
		self.ac.addValue(15)
		self.sensor = SensorData()
		self.sensor.addValue(15)
		self.hsa = HumiditySensorAdaptorTask()
		self.hsa.objectLoader()
		self.pu = PersistenceUtil()
		pass

	"""
	Use this to tear down any allocated resources after your tests are complete. This
	is where you may want to release connections, zero out any long-term data, etc.
	"""
	def tearDown(self):
		pass

	"""
	Place your comments describing the test here.
	"""
	def testSenseHatActivator(self):
		hat = SenseHatLedActivator()
		self.assertTrue(hat.updateLed("Test"),"Led Update Failed")
		pass
	
	def testSensorData(self):
		a = self.hsa.readSensorValue()
		self.assertGreaterEqual(a.current, 0, "Issue with sensor")
		pass
	
	def testWriteActuator(self):
		self.assertTrue(self.pu.writeActuatorToDataDbms(self.ac))
		pass
 	
	def testWriteSensor(self):
		self.assertTrue(self.pu.writeSensorToDataDbms(self.sensor))
		pass
class SensorDataManager:
    #Default Constructor
    def __init__(self):
        self.actuator = ActuatorData()
        self.sensorAdaptor = MultiSensorAdaptor()
        self.config = ConfigUtil()
        self.config.loadConfig("../../../config/ConnectedDevicesConfig.props")
        self.threshold = float(self.config.getValue("device", "nominalTemp"))
        self.actuatorOP = MultiActuatorAdaptor.getInstance()

    def run(self):

        self.sensorAdaptor.getSensorData()

    #Method for evaluating the sensor values and create decision for actation
    def hadleSensorData(self, SensorData):
        self.actuator.max_value = SensorData.max_value
        self.actuator.min_value = SensorData.min_value
        self.actuator.readings_number = SensorData.readings_number
        self.actuator.value = SensorData.getCurrentValue()
        self.actuator.avgTemp = (SensorData.total_value /
                                 SensorData.readings_number)
        self.actuator.total_value = SensorData.total_value
        self.actuator.setName(SensorData.getName())
        self.actuatorOP.updateActuator(self.actuator)
        #print("Value check - " + str(self.actuator.value))
        self.sendNotification()
        return True

    #Triggering mail based on the command value. The mail contains the relevant information.
    def sendNotification(self):

        try:
            logging.info(self.actuator.getName() + "Temperature: \nTime: " +
                         str(self.actuator.timestamp) + " Value :" +
                         str(self.actuator.getValue()))
            mail = SmtpClientConnector()
            #Creating mail body text
            data = "Reading from:" + self.actuator.getName(
            ) + "\nTime: " + str(
                self.actuator.timestamp) + "\ncurrent : " + str(
                    self.actuator.getValue()) + "\nAverage :" + str(
                        self.actuator.getAverageValue()) + "\nSamples :" + str(
                            self.actuator.readings_number) + "\nMin: " + str(
                                self.actuator.min_value) + "\nMax :" + str(
                                    self.actuator.max_value)
            mail.publishMessage(
                "Humidity Alert Python -" + self.actuator.getName(), data)
            logging.info('\nMail sent')
            return True
        except Exception as e:
            logging.info(e)
            print(e)
            #If the mailing fails, the method returns false
            return False
Пример #29
0
    def jsonToActuatorData(self, jsonData):
        adDict = json.loads(jsonData)

        #print(" decode [pre] --> " + str(adDict))

        ad = ActuatorData()
        ad.name = adDict['name']
        ad.timeStamp = adDict['timeStamp']
        ad.hasError = adDict['hasError']
        ad.command = adDict['command']
        ad.errCode = adDict['errCode']
        ad.statusCode = adDict['statusCode']
        ad.stateData = adDict['stateData']
        ad.curValue = adDict['curValue']

        #print(" decode [post] --> " + str(ad))

        return ad
Пример #30
0
 def __init__(self):
     super(TempSensorAdaptor, self).__init__()
     self.config = ConfigUtil.ConfigUtil('')
     self.config.loadConfig()
     self.actuatorData = ActuatorData()
     self.tempActuatorEmulator = TempActuatorEmulator()
     self.senseHat = SenseHat()
     self.coapConnector = CoapSimpleClientConnector.CoapSimpleClientConnector(
     )