Beispiel #1
0
class TempSensorAdaptor(Thread):

    deviceConfigReader = None
    tempSensorEmulator = None
    enableTempEmulator = False
    currentTemp = 0
    currentSensorData = None
    sh = None

    def __init__(self, configDir):
        Thread.__init__(self)

        self.deviceConfigReader = ConfigReader(configDir, "Device")
        self.sh = sense_hat.SenseHat()
        self.currentSensorData = SensorData("Temperature")
        #SensorEmulator simulates temperature range from 25 degree to 15 degree
        #temperature is changed after a random period of time in range 10 sec to 1 sec
        self.tempSensorEmulator = SensorEmulator(30, 15, 10, 1)
        self.tempSensorEmulator.daemon = True
        self.tempSensorEmulator.start()

        if self.deviceConfigReader.getProperty("enableEmulator") == "True":
            self.enableTempEmulator = True
            self.tempSensorEmulator.enableTempEmulator = True

    def getCurrentTemp(self):
        return self.currentTemp

    def getCurrentSensorData(self):
        self.currentSensorData.addNewValue(
            self.currentTemp)  # refresh SensorData only when it is called.
        return self.currentSensorData

    def run(self):
        while True:
            if self.enableTempEmulator:  #If enableTempEmulator is false then using sense_hat to get current temperature!
                self.currentTemp = self.tempSensorEmulator.getCurrValue()
            else:
                self.currentTemp = self.sh.get_temperature()

    def setflagEnableTempEmulator(self, enableTempEmulator):
        self.enableTempEmulator = enableTempEmulator
        self.tempSensorEmulator.enableTempEmulator = enableTempEmulator
Beispiel #2
0
class SensorManagementApp(Thread):

    tempSensorAdaptor = None
    tempSensorData = None

    tempActuatorEmulator = None
    airConActuatorEmulator = None

    mqttClient_TempSensor = None
    mqttClient_AirCon = None

    confiReader = None
    pollCycleSecs = None
    mqttGatewayHost = None
    mqttGatewayPort = None

    def __init__(self, configDir):

        Thread.__init__(self)

        #Set all the custom variables from configuration file
        self.confiReader = ConfigReader(configDir, "Device")
        self.pollCycleSecs = int(self.confiReader.getProperty("pollCycleSecs"))
        self.confiReader = ConfigReader(configDir, "mqtt.gateway")
        self.mqttGatewayHost = self.confiReader.getProperty("host")
        self.mqttGatewayPort = int(self.confiReader.getProperty("port"))

        #Start temperature Sensor Adaptor
        self.tempSensorAdaptor = TempSensorAdaptor(configDir)
        self.tempSensorAdaptor.daemon = True
        self.tempSensorAdaptor.start()

        #Initialize Temperature Actuator Emulator and AirConditioner Actuator Emulator
        self.tempActuatorEmulator = TempActuatorEmulator()
        self.airConActuatorEmulator = AirConActuatorEmulator()

        #Initialize a mqttClient_TempSensor with custom call back methods and start listening on Temperature ActuatorData from gateway broker
        self.mqttClient_TempSensor = mqttClientConnector.MqttClientConnector(
            self.mqttGatewayHost, self.mqttGatewayPort, self.on_connect,
            self.on_message_TempActuator, self.on_publish_TempSensorData,
            self.on_subscribe_TempActuator)
        self.mqttClient_TempSensor.connect()
        self.mqttClient_TempSensor.subscribeTopic(
            "iot/actuatorData/temperature", 1)

        #Initialize a mqttClient_AirCon with custom call back methods and start listening on AirConditioner ActuatorData from gateway broker
        self.mqttClient_AirCon = mqttClientConnector.MqttClientConnector(
            self.mqttGatewayHost, self.mqttGatewayPort, self.on_connect,
            self.on_message_AirConActuator, self.on_publish_AirConStatus,
            self.on_subscribe_AirConActuator)
        self.mqttClient_AirCon.connect()
        self.mqttClient_AirCon.subscribeTopic(
            "iot/actuatorData/airConditioner", 1)

    # custom callback when connect to Gateway broker
    def on_connect(self, mqttc, obj, flags, rc):
        print("Successfully Connect to GatewayBroker!! rc: " + str(rc))

    #custom callback when subscribed actuatorData arrive, then tiger temperature ActuatorEmulator
    def on_message_TempActuator(self, mqttc, obj, msg):
        print("TempActuatorData arrived from topic:" + msg.topic + " QoS:" +
              str(msg.qos) + " Message:" + str(msg.payload.decode("utf-8")))
        self.tempActuatorEmulator.process_message(str(msg.payload))

    #custom callback when Temperature SensorData publish success
    def on_publish_TempSensorData(self, mqttc, obj, mid):
        print(
            "Successfully published SensorData to topic iot/sensorData/temperature !! mid: "
            + str(mid))

    #custom callback when successfully subscribe to Temperature Actuator
    def on_subscribe_TempActuator(self, mqttc, obj, mid, granted_qos):
        print(
            "Successfully Subscribed to topic: iot/actuatorData/temperature !! "
            + str(mid) + " Granted_QoS:" + str(granted_qos))

    #custom callback method when subscribed AirConditionerActuatorData arrive, then tiger air Conditioner ActuatorEmulater
    def on_message_AirConActuator(self, mqttc, obj, msg):
        print("AirConditionerActuatorData arrived from topic:" + msg.topic +
              " QoS:" + str(msg.qos) + " Message:" +
              str(msg.payload.decode("utf-8")))
        self.airConActuatorEmulator.process_message(str(msg.payload))

    #custom callback when air conditioner status publish success
    def on_publish_AirConStatus(self, mqttc, obj, mid):
        print(
            "Successfully published AirConditionerStatus to topic iot/status/AirConditioner !! mid: "
            + str(mid))

    #custom callback when air Conditioner actuatorData subscribe success
    def on_subscribe_AirConActuator(self, mqttc, obj, mid, granted_qos):
        print(
            "Successfully Subscribed to topic: iot/actuatorData/airConditioner !! "
            + str(mid) + " Granted_QoS:" + str(granted_qos))

    def run(self):
        while True:
            #Read new temperature sensorData and publish to gateway broker
            self.tempSensorData = self.tempSensorAdaptor.getCurrentSensorData()

            self.mqttClient_TempSensor.publishMessage(
                "iot/sensorData/temperature",
                str(self.tempSensorData.toDict()), 2)

            sleep(self.pollCycleSecs)  #wait for next poll