def activateactuator( target, value ): # return true in case the state change: activation is >0 or a different position from prevoius position. # check the actuator isok = False actuatortype = hardwaremod.searchdata(hardwaremod.HW_INFO_NAME, target, hardwaremod.HW_CTRL_CMD) supportedactuators = ["pulse", "servo", "stepper"] # stepper motor if actuatortype == "stepper": out, isok = hardwaremod.GO_stepper_position(target, value) if isok: actuatordbmod.insertdataintable(target, value) # pulse if actuatortype == "pulse": duration = 1000 * hardwaremod.toint(value, 0) # check the fertilizer doser flag before activating the pulse doseron = autofertilizermod.checkactivate(element, duration) # start pulse pulseok = hardwaremod.makepulse(target, duration) # salva su database if "Started" in pulseok: actuatordbmod.insertdataintable(target, duration) isok = True # servo motor if actuatortype == "servo": out, isok = hardwaremod.servoangle(target, value, 0.5) if isok: actuatordbmod.insertdataintable(target, value) return isok
def activateactuator(target, value): # return true in case the state change: activation is >0 or a different position from prevoius position. # check the actuator isok=False actuatortype=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,target,hardwaremod.HW_CTRL_CMD) supportedactuators=["pulse","servo","stepper"] # stepper motor if actuatortype=="stepper": out, isok = hardwaremod.GO_stepper_position(target,value) if isok: actuatordbmod.insertdataintable(target,value) # pulse if actuatortype=="pulse": duration=1000*hardwaremod.toint(value,0) # check the fertilizer doser flag before activating the pulse doseron=autofertilizermod.checkactivate(target,duration) # start pulse pulseok=hardwaremod.makepulse(target,duration) # salva su database if "Started" in pulseok: actuatordbmod.insertdataintable(target,duration) isok=True # servo motor if actuatortype=="servo": out, isok = hardwaremod.servoangle(target,value,0.5) if isok: actuatordbmod.insertdataintable(target,value) return isok
def activateactuator(target, value): # return true in case the state change: activation is >0 or a different position from prevoius position. # check the actuator isok=False actuatortype=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,target,hardwaremod.HW_CTRL_CMD) actuatortypelist=actuatortype.split("/") if actuatortypelist: actuatortype=actuatortypelist[0] print (" Automation Actuator " + actuatortype + " target " + target) supportedactuators=["pulse","servo","stepper"] # stepper motor if actuatortype=="stepper": out, isok = hardwaremod.GO_stepper_position(target,value) if isok: actuatordbmod.insertdataintable(target,value) # hbridge motor if actuatortype=="hbridge": out, isok = hardwaremod.GO_hbridge_position(target,value) if isok: actuatordbmod.insertdataintable(target,value) # pulse if actuatortype=="pulse": duration=hardwaremod.toint(value,0) # check the fertilizer doser flag before activating the pulse doseron=autofertilizermod.checkactivate(target,duration) # start pulse pulseok=hardwaremod.makepulse(target,duration) # salva su database if "Started" in pulseok: actuatordbmod.insertdataintable(target,duration) isok=True # servo motor if actuatortype=="servo": out, isok = hardwaremod.servoangle(target,value,0.5) if isok: actuatordbmod.insertdataintable(target,value) # photo if actuatortype=="photo": duration=hardwaremod.toint(value,0) if duration>0: isok=hardwaremod.takephoto(True) # save action in database if isok: actuatordbmod.insertdataintable(target,1) # mail if (actuatortype=="mail+info+link")or(actuatortype=="mail+info"): if value>0: mailtext=str(value) isok=emailmod.sendmail(target,"info","Automation Value:" + mailtext) # save action in database if isok: actuatordbmod.insertdataintable(target,1) return isok
def activateactuator(target, value): # return true in case the state change: activation is >0 or a different position from prevoius position. # check the actuator isok=False actuatortype=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,target,hardwaremod.HW_CTRL_CMD) supportedactuators=["pulse","servo","stepper"] # stepper motor if actuatortype=="stepper": out, isok = hardwaremod.GO_stepper_position(target,value,priority=ACTIONPRIORITYLEVEL) if isok: actuatordbmod.insertdataintable(target,value) # hbridge motor if actuatortype=="hbridge": out, isok = hardwaremod.GO_hbridge_position(target,value) if isok: actuatordbmod.insertdataintable(target,value) # pulse if actuatortype=="pulse": duration=hardwaremod.toint(value,0) if duration>0: # check the fertilizer doser flag before activating the pulse doseron=autofertilizermod.checkactivate(target,duration) # start pulse pulseok=hardwaremod.makepulse(target,duration,priority=ACTIONPRIORITYLEVEL) # salva su database if "Started" in pulseok: actuatordbmod.insertdataintable(target,duration) isok=True else: pulseok=hardwaremod.stoppulse(target) # servo motor if actuatortype=="servo": out, isok = hardwaremod.servoangle(target,value,0.5,priority=ACTIONPRIORITYLEVEL) if isok: actuatordbmod.insertdataintable(target,value) # photo if actuatortype=="photo": duration=hardwaremod.toint(value,0) if duration>0: isok=hardwaremod.takephoto(True) # True override the daily activation # save action in database if isok: actuatordbmod.insertdataintable(target,1) # mail if (actuatortype=="mail+info+link")or(actuatortype=="mail+info"): if value>0: mailtext=str(value) isok=emailmod.sendmail(target,"info","Interrupt Value:" + mailtext) # save action in database if isok: actuatordbmod.insertdataintable(target,1) return isok
def activatewater(element, duration): # check the activation of the doser before the pump doseron = autofertilizermod.checkactivate(element, duration) #activate pump hardwaremod.makepulse(element, duration) # salva su database logger.info('%s Pump ON, optional time for msec = %s', element, duration) print 'Pump ON, optional time for msec =', duration actuatordbmod.insertdataintable(element, duration)
def activatewater(element, duration): # check the activation of the doser before the pump doseron=autofertilizermod.checkactivate(element,duration) #activate pump hardwaremod.makepulse(element,duration) # salva su database logger.info('%s Pump ON, optional time for msec = %s', element, duration) print 'Pump ON, optional time for msec =', duration actuatordbmod.insertdataintable(element,duration)
def startpump(target, activationseconds, MinAveragetemp, MaxAverageHumid): logger.info('WateringPlan Startpump evaluation: %s', target) #workmode=autowateringmod.checkworkmode(target) #if workmode=="Full Auto": if target in autowateringmod.allowwateringplan: if not autowateringmod.allowwateringplan[target]: logger.info( 'WateringPlan: %s pump activation blocked by automation', target) pumpit = False return False duration = hardwaremod.toint(activationseconds, 0) print(target, " ", duration, " ", datetime.now()) # evaluate parameters #MinAverageLight=500 not used now MinutesOfAverage = 120 #minutes in which the average data is calculated from sensor sampling print("waterpump check") logger.info('execute water pump check %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # then check the temperature and Humidity print("Check Humidity and Temperature") MinAveragetempnum = hardwaremod.tonumber(MinAveragetemp, "NA") MaxAverageHumidnum = hardwaremod.tonumber(MaxAverageHumid, "NA") # all the below conditions should be verified to start the PUMP pumpit = True hsensornamelist = hardwaremod.getsensornamebymeasure( hardwaremod.MEASURELIST[1]) if hsensornamelist: sensordata = [] hsensorname = hsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(hsensorname, sensordata) starttimecalc = datetime.now() - timedelta( minutes=int(MinutesOfAverage)) isok, quantitylist = sensordbmod.EvaluateDataPeriod( sensordata, starttimecalc, datetime.now()) humquantity = quantitylist["average"] logger.info( 'Waterpump Check parameter if humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) print('Waterpump Check parameter if humquantity=', humquantity, ' < MaxAverageHumid=', MaxAverageHumid) if (MaxAverageHumidnum != "NA"): if (humquantity < MaxAverageHumidnum): logger.info( 'Humidity check PASSED, humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) else: logger.info('Humidity check FAILED') print('Humidity check FAILED') pumpit = False tsensornamelist = hardwaremod.getsensornamebymeasure( hardwaremod.MEASURELIST[0]) if tsensornamelist: sensordata = [] tsensorname = tsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(tsensorname, sensordata) starttimecalc = datetime.now() - timedelta( minutes=int(MinutesOfAverage)) isok, quantitylist = sensordbmod.EvaluateDataPeriod( sensordata, starttimecalc, datetime.now()) tempquantity = quantitylist["average"] logger.info( 'Waterpump Check parameter if tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) print('Waterpump Check parameter if tempquantity=', tempquantity, ' > MinAveragetemp=', MinAveragetemp) if (MinAveragetempnum != "NA"): if (tempquantity > MinAveragetempnum): logger.info( 'Temperature check PASSED, tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) else: logger.info('Temperature check FAILED') print('Temperature check FAILED') pumpit = False # weather Forecast sensorname = weatherAPImod.DefaultCounterName() sensorlist = sensordbmod.gettablelist() if sensorname in sensorlist: ActiveActuatorList = weatherAPImod.ActiveActuatorList() if target in ActiveActuatorList: sensordata = [] samplesnumber = 1 sensordbmod.getsensordbdatasamplesN(sensorname, sensordata, samplesnumber) MaxPastMinutes = 1200 starttimecalc = datetime.now() - timedelta(minutes=MaxPastMinutes) isok, quantitylist = sensordbmod.EvaluateDataPeriod( sensordata, starttimecalc, datetime.now()) if isok: RainMultipier = quantitylist["average"] logger.info('Waterpump weather multiplier =%s ', str(RainMultipier)) else: logger.warning( 'Waterpump weather multiplier NOT found within 20 Hours apply 100 ' ) RainMultipier = 100 duration = int(duration * RainMultipier / 100) else: logger.warning('Weather Sensor not found, no multpilier applied ') if pumpit: # activation of the doser before the pump doseron = autofertilizermod.checkactivate(target, duration) # watering #hardwaremod.makepulse(target,duration) activateandregister(target, duration) # salva su database #logger.info('Switch Pump %s ON, optional time for sec = %s', target, duration) #print 'Pump ON, optional time for sec =', duration #actuatordbmod.insertdataintable(target,duration) return True
def startpump(target,activationseconds,MinAveragetemp,MaxAverageHumid): logger.info('WateringPlan Startpump evaluation: %s', target) #workmode=autowateringmod.checkworkmode(target) #if workmode=="Full Auto": if target in autowateringmod.allowwateringplan: if not autowateringmod.allowwateringplan[target]: logger.info('WateringPlan: %s pump activation blocked by automation', target) pumpit=False return False duration=1000*hardwaremod.toint(activationseconds,0) print target, " ",duration, " " , datetime.now() # evaluate parameters #MinAverageLight=500 not used now MinutesOfAverage=120 #minutes in which the average data is calculated from sensor sampling print "waterpump check" logger.info('execute water pump check %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # then check the temperature and Humidity print "Check Humidity and Temperature" MinAveragetempnum=hardwaremod.tonumber(MinAveragetemp,"NA") MaxAverageHumidnum=hardwaremod.tonumber(MaxAverageHumid,"NA") # all the below conditions should be verified to start the PUMP pumpit=True hsensornamelist=hardwaremod.getsensornamebymeasure(hardwaremod.MEASURELIST[1]) if hsensornamelist: sensordata=[] hsensorname=hsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(hsensorname,sensordata) starttimecalc=datetime.now()-timedelta(minutes=int(MinutesOfAverage)) humquantity=sensordbmod.EvaluateDataPeriod(sensordata,starttimecalc,datetime.now())["average"] logger.info('Waterpump Check parameter if humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) print 'Waterpump Check parameter if humquantity=',humquantity,' < MaxAverageHumid=' ,MaxAverageHumid if (MaxAverageHumidnum!="NA"): if (humquantity<MaxAverageHumidnum): logger.info('Humidity check PASSED, humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) else: logger.info('Humidity check FAILED') print 'Humidity check FAILED' pumpit=False tsensornamelist=hardwaremod.getsensornamebymeasure(hardwaremod.MEASURELIST[0]) if tsensornamelist: sensordata=[] tsensorname=tsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(tsensorname,sensordata) starttimecalc=datetime.now()-timedelta(minutes=int(MinutesOfAverage)) tempquantity=sensordbmod.EvaluateDataPeriod(sensordata,starttimecalc,datetime.now())["average"] logger.info('Waterpump Check parameter if tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) print 'Waterpump Check parameter if tempquantity=',tempquantity,' > MinAveragetemp=' ,MinAveragetemp if (MinAveragetempnum!="NA"): if (tempquantity>MinAveragetempnum): logger.info('Temperature check PASSED, tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) else: logger.info('Temperature check FAILED') print 'Temperature check FAILED' pumpit=False if pumpit: # activation of the doser before the pump doseron=autofertilizermod.checkactivate(target,duration) # watering hardwaremod.makepulse(target,duration) # salva su database logger.info('Switch Pump %s ON, optional time for sec = %s', target, duration) print 'Pump ON, optional time for sec =', duration actuatordbmod.insertdataintable(target,duration) return True
def startpump(target, activationseconds, MinAveragetemp, MaxAverageHumid): logger.info('WateringPlan Startpump evaluation: %s', target) #workmode=autowateringmod.checkworkmode(target) #if workmode=="Full Auto": if target in autowateringmod.allowwateringplan: if not autowateringmod.allowwateringplan[target]: logger.info( 'WateringPlan: %s pump activation blocked by automation', target) pumpit = False return False duration = 1000 * hardwaremod.toint(activationseconds, 0) print target, " ", duration, " ", datetime.now() # evaluate parameters #MinAverageLight=500 not used now MinutesOfAverage = 120 #minutes in which the average data is calculated from sensor sampling print "waterpump check" logger.info('execute water pump check %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # then check the temperature and Humidity print "Check Humidity and Temperature" MinAveragetempnum = hardwaremod.tonumber(MinAveragetemp, "NA") MaxAverageHumidnum = hardwaremod.tonumber(MaxAverageHumid, "NA") # all the below conditions should be verified to start the PUMP pumpit = True hsensornamelist = hardwaremod.getsensornamebymeasure( hardwaremod.MEASURELIST[1]) if hsensornamelist: sensordata = [] hsensorname = hsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(hsensorname, sensordata) starttimecalc = datetime.now() - timedelta( minutes=int(MinutesOfAverage)) humquantity = sensordbmod.EvaluateDataPeriod(sensordata, starttimecalc, datetime.now())["average"] logger.info( 'Waterpump Check parameter if humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) print 'Waterpump Check parameter if humquantity=', humquantity, ' < MaxAverageHumid=', MaxAverageHumid if (MaxAverageHumidnum != "NA"): if (humquantity < MaxAverageHumidnum): logger.info( 'Humidity check PASSED, humquantity=%s < MaxAverageHumid=%s ', str(humquantity), str(MaxAverageHumid)) else: logger.info('Humidity check FAILED') print 'Humidity check FAILED' pumpit = False tsensornamelist = hardwaremod.getsensornamebymeasure( hardwaremod.MEASURELIST[0]) if tsensornamelist: sensordata = [] tsensorname = tsensornamelist[0] # get first found sensor in the list sensordbmod.getsensordbdata(tsensorname, sensordata) starttimecalc = datetime.now() - timedelta( minutes=int(MinutesOfAverage)) tempquantity = sensordbmod.EvaluateDataPeriod( sensordata, starttimecalc, datetime.now())["average"] logger.info( 'Waterpump Check parameter if tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) print 'Waterpump Check parameter if tempquantity=', tempquantity, ' > MinAveragetemp=', MinAveragetemp if (MinAveragetempnum != "NA"): if (tempquantity > MinAveragetempnum): logger.info( 'Temperature check PASSED, tempquantity=%s > MinAveragetemp=%s ', str(tempquantity), str(MinAveragetemp)) else: logger.info('Temperature check FAILED') print 'Temperature check FAILED' pumpit = False if pumpit: # activation of the doser before the pump doseron = autofertilizermod.checkactivate(target, duration) # watering hardwaremod.makepulse(target, duration) # salva su database logger.info('Switch Pump %s ON, optional time for sec = %s', target, duration) print 'Pump ON, optional time for sec =', duration actuatordbmod.insertdataintable(target, duration) return True
def startpump(target,activationseconds,ThesholdOFFON,ThesholdONOFF): logger.info('WateringPlan Startpump evaluation: %s', target) #workmode=autowateringmod.checkworkmode(target) #if workmode=="Full Auto": if target in autowateringmod.allowwateringplan: if not autowateringmod.allowwateringplan[target]: logger.info('WateringPlan: %s pump activation blocked by automation', target) pumpit=False return False duration=hardwaremod.toint(activationseconds,0) print(target, " ",duration, " " , datetime.now()) print("waterpump check") logger.info('execute water pump check %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # evaluate parameters MinutesOfAverage=hardwaremod.toint(wateringplansensordbmod.getselduration(),120) #minutes in which the average data is calculated from sensor sampling tsensornamelist, hsensornamelist=wateringplansensordbmod.getactivesensor() valid1, passed1 = checksensorcondition(tsensornamelist,ThesholdOFFON, MinutesOfAverage, False) valid2, passed2 = checksensorcondition(hsensornamelist,ThesholdONOFF, MinutesOfAverage, True) # apply AND or OR condition condition=wateringplansensordbmod.getselcondition() # "AND" , "OR" pumpit=True if valid1 and valid2: if condition=="AND": pumpit=passed1 and passed2 elif condition=="OR": pumpit=passed1 or passed2 else: if valid1: pumpit=passed1 if valid2: pumpit=passed2 print('valid1= ' , valid1 , 'valid2= ' , valid2) print('passed1= ' , passed1 , 'passed2= ' , passed2) print('pumpit= ' , pumpit, 'condition= ' , condition) logger.info('Condition for activation =%s ', pumpit) # weather Forecast sensorname=weatherAPImod.DefaultCounterName() sensorlist=sensordbmod.gettablelist() if sensorname in sensorlist: ActiveActuatorList=weatherAPImod.ActiveActuatorList() if target in ActiveActuatorList: sensordata=[] samplesnumber=1 sensordbmod.getsensordbdatasamplesN(sensorname,sensordata,samplesnumber) MaxPastMinutes=1200 starttimecalc=datetime.now()-timedelta(minutes=MaxPastMinutes) isok , quantitylist=sensordbmod.EvaluateDataPeriod(sensordata,starttimecalc,datetime.now()) if isok: RainMultipier=quantitylist["average"] logger.info('Waterpump weather multiplier =%s ', str(RainMultipier)) else: logger.warning('Waterpump weather multiplier NOT found within 20 Hours apply 100 ') RainMultipier=100 duration=int(duration*RainMultipier/100) else: logger.warning('Weather Sensor not found, no multpilier applied ') if pumpit: # activation of the doser before the pump doseron=autofertilizermod.checkactivate(target,duration) # watering #hardwaremod.makepulse(target,duration) activateandregister(target,duration) # salva su database #logger.info('Switch Pump %s ON, optional time for sec = %s', target, duration) #print 'Pump ON, optional time for sec =', duration #actuatordbmod.insertdataintable(target,duration) return True