Exemplo n.º 1
0
class ReadSensorData:

    logMessage = ''
    const = ''
    processSensorData = ''
    processConfigFile = ''
    GPIOPins = ''
    bus = ''
    address = 0x04

    def __init__(self):
        self.logMessage = LogMessage()
        self.const = Constant()
        self.processSensorData = ProcessSensorReading()
        self.processConfigFile = ProcessConfigFile()
        self.GPIOPins = GPIOPin()
        self.bus = smbus.SMBus(1)

    def run(self):
        try:
            if self.processConfigFile.checkValuesInConfigFile():
                self.i2cRead()
            else:
                self.logMessage.log('Invalid configuration data / No file found - Read Sensor Data')
                time.sleep(40)
                self.run()
        except:
            self.logMessage.log('Error on reading sensor data frequently')
            time.sleep(40)
            self.run()

    def i2cRead(self):
        try:
            while True:

                self.writeNumber(self.const.SENSOR_CODE_TEMPERATURE)
                time.sleep(1)
                temperature = self.readNumber()
                self.processSensorData.updateTemperature(str(temperature))

                self.writeNumber(self.const.SENSOR_CODE_HUMIDITY)
                time.sleep(1)
                humidity = self.readNumber()
                self.processSensorData.updateHumidity(str(humidity))

                self.writeNumber(self.const.SENSOR_CODE_MOISTURE)
                time.sleep(1)
                moisture = self.readNumber()		
                self.processSensorData.updateMoisture(str(moisture))

                self.writeNumber(self.const.SENSOR_CODE_WATER)
                time.sleep(1)
                water = self.readNumber()		
                self.processSensorData.updateWaterUsed(str(water))

                self.writeNumber(self.const.SENSOR_CODE_BATTERY)
                time.sleep(1)
                battery = self.readNumber()
                self.processSensorData.updateBattery(str(battery))

                # power valve based on soil moisture
                self.checkSoilMoisture(moisture)
        except:
            self.logMessage.log('Error on sending request to Arduino - Read Sensor Data')
            pass

    def checkSoilMoisture(self, moisture):
        try:
            if moisture > 0:
                lowerLimit = self.processConfigFile.readLowerLimit()
                higherLimit = self.processConfigFile.readUpperLimit()
                if moisture < lowerLimit:
                    self.GPIOPins.powerOnValve()
                    self.processSensorData.updateStateOfValve('ON')
                elif moisture > higherLimit:
                    self.GPIOPins.powerOffValve()
                    self.processSensorData.updateStateOfValve('OFF')
        except:
            self.logMessage.log('Error on checking soil moisture - Read Sensor Data')
            pass

    def writeNumber(self, value):
        try:
            self.bus.write_byte(self.address, value)
        except:
            pass
        return -1

    def readNumber(self):
        number = 0
        try:
            number = self.bus.read_byte(self.address)
        except:
            pass
        return number
Exemplo n.º 2
0
class DailyReport:

    logMessage = ''
    const = ''
    sim = ''
    messages = ''
    processSensorData = ''
    processConfigFile = ''
    bus = ''
    address = 0x04

    def __init__(self):
        self.logMessage = LogMessage()
        self.const = Constant()
        self.sim = SIMOperations()
        self.messages = Message()
        self.processConfigFile = ProcessConfigFile()
        self.processSensorData = ProcessSensorReading()
        self.bus = smbus.SMBus(1)

    def run(self):
        try:
            if self.sim.checkSIMCard():
                if self.processConfigFile.checkValuesInConfigFile():
                    data = self.processSensorData.getSensorData()
                    if len(data) > 0:
                        currentTime = time.strftime("%d.%m.%Y %H:%M:%S")
                        message1 = 'Dear Digital Farmer, here is your farm’s status;'
                        message2 = 'Device ID: %s \n Temperature: %s \n Humidity: %s ' % (
                            'SMF001', str(data[0]), str(data[1]))
                        message3 = 'Soil Moisture: %s \n Liters of water irrigated: %s ' % (
                            str(data[2]), str(data[3]))
                        message4 = 'State of Valve: %s \n Battery voltage: %s \n Date and Time: %s' % (
                            str(data[5]), str(data[4]), str(currentTime))
                        self.sim.sendSMS(message1)
                        time.sleep(2)
                        self.sim.sendSMS(message2)
                        time.sleep(2)
                        self.sim.sendSMS(message3)
                        time.sleep(2)
                        self.sim.sendSMS(message4)
                        self.logMessage.log(
                            'Running daily schedule : (message : ' +
                            str(message1) + str(message2) + str(message3) +
                            str(message4) + ' )')
                        self.processSensorData.updateWaterUsed('0')
                        # send alert to arduino to reset water usage value
                        self.writeNumber(self.const.SENSOR_CODE_WATER_RESET)
                        time.sleep(1)
                        water = self.readNumber()
                        self.processSensorData.updateWaterUsed(water)
                    else:
                        self.logMessage.log('No sensor data saved')
                else:
                    self.logMessage.log(
                        'Invalid configuration data / No file found - Daily report'
                    )
            else:
                self.logMessage.log(
                    'Error No SIM Card detected - Daily report')
        except:
            self.logMessage.log('Error in Daily Report')

    def writeNumber(self, value):
        try:
            self.bus.write_byte(self.address, value)
        except:
            pass
        return -1

    def readNumber(self):
        number = 0
        try:
            number = self.bus.read_byte(self.address)
        except:
            pass
        return number
Exemplo n.º 3
0
class DailyReport:

    logMessage = ''
    const = ''
    sim = ''
    messages = ''
    processSensorData = ''
    processConfigFile = ''
    bus = ''
    address = 0x04

    def __init__(self):
        self.logMessage = LogMessage()
        self.const = Constant()
        self.sim = SIMOperations()
        self.messages = Message()
        self.processConfigFile = ProcessConfigFile()
        self.processSensorData = ProcessSensorReading()
        self.bus = smbus.SMBus(1)

    def run(self):
        try:
            if self.sim.checkSIMCard():
                if self.processConfigFile.checkValuesInConfigFile():
                    data = self.processSensorData.getSensorData()
                    if len(data) > 0:
                        currentTime = time.strftime("%d.%m.%Y %H:%M:%S")
                        message1 = 'Dear Digital Farmer, here is your farm’s status;'
                        message2 = 'Device ID: %s \n Temperature: %s \n Humidity: %s ' % ('SMF001', str(data[0]), str(data[1]))
                        message3 = 'Soil Moisture: %s \n Liters of water irrigated: %s ' % (str(data[2]), str(data[3]))
                        message4 = 'State of Valve: %s \n Battery voltage: %s \n Date and Time: %s' % (str(data[5]), str(data[4]), str(currentTime))
                        self.sim.sendSMS(message1)
                        time.sleep(2)
                        self.sim.sendSMS(message2)
                        time.sleep(2)
                        self.sim.sendSMS(message3)
                        time.sleep(2)
                        self.sim.sendSMS(message4)
                        self.logMessage.log('Running daily schedule : (message : ' + str(message1) + str(message2) + str(message3) + str(message4) + ' )')
                        self.processSensorData.updateWaterUsed('0')
                        # send alert to arduino to reset water usage value
                        self.writeNumber(self.const.SENSOR_CODE_WATER_RESET)
                        time.sleep(1)
                        water = self.readNumber()
                        self.processSensorData.updateWaterUsed(water)
                    else:
                        self.logMessage.log('No sensor data saved')
                else:
                    self.logMessage.log('Invalid configuration data / No file found - Daily report')
            else:
                self.logMessage.log('Error No SIM Card detected - Daily report')
        except:
            self.logMessage.log('Error in Daily Report')

    def writeNumber(self, value):
        try:
            self.bus.write_byte(self.address, value)
        except:
            pass
        return -1

    def readNumber(self):
        number = 0
        try:
            number = self.bus.read_byte(self.address)
        except:
            pass
        return number