def waterPlant(plantNumber): # We want to put off this state if Update State is .is locked. That will prevent Update State from being hosed by this state machine if (config.DEBUG): print "WP-Attempt Aquire" UpdateStateLock.acquire() if (config.DEBUG): print "WP-UpdateStateLock acquired" previousState = state.SGS_State #if(state.SGS_State == state.SGS_States.Monitor): state.SGS_State = state.SGS_States.Watering if (config.USEPUBNUB): publishStatusToPubNub() if (config.USEBLYNK): updateBlynk.blynkStatusUpdate() if ((state.Tank_Percentage_Full > config.Tank_Pump_Level) or (state.Plant_Water_Request == True)): pumpWater(2.0, plantNumber) state.Last_Event = "Plant #{:d} Watered at: ".format( plantNumber) + time.strftime("%Y-%m-%d %H:%M:%S") if (config.USEBLYNK): updateBlynk.blynkTerminalUpdate( time.strftime("%Y-%m-%d %H:%M:%S") + ": Plant #{:d} Watered".format(plantNumber) + "\n") else: if (config.DEBUG): print "Plant #{:d} pumpWater overruled - Tank Empty".format( plantNumber) if (config.USEBLYNK): updateBlynk.blynkTerminalUpdate( time.strftime("%Y-%m-%d %H:%M:%S") + ": Plant #{:d} pumpWater overruled - Tank Empty".format( plantNumber) + "\n") state.Last_Event = "NW-Tank Empty at: " + time.strftime( "%Y-%m-%d %H:%M:%S") if (config.USEBLYNK): updateBlynk.blynkEventUpdate() state.SGS_State = previousState if (config.USEPUBNUB): publishStatusToPubNub() if (config.USEBLYNK): updateBlynk.blynkStatusUpdate() if (config.DEBUG): print "WP-Attempt released" UpdateStateLock.release() if (config.DEBUG): print "WP-UpdateStateLock released"
def initializeSGSPart3(): if (config.SWDEBUG): if (config.USEBLYNK): print("Blynk Status=", updateBlynk.blynkSGSAppOnline()) updateBlynk.blynkAlarmUpdate(); state.Last_Event = "SGS Started:"+time.strftime("%Y-%m-%d %H:%M:%S") if (config.USEBLYNK): updateBlynk.blynkEventUpdate() if (config.OLED_Present): if (config.LOCKDEBUG): print("Attempt OLEDLock acquired") OLEDLock.acquire() if (config.LOCKDEBUG): print("OLEDLock acquired") # display logo image = Image.open('SmartPlantPiSquare128x64.ppm').convert('1') display.image(image) display.display() time.sleep(3.0) display.clear() Scroll_SSD1306.addLineOLED(display, (" Welcome to ")) Scroll_SSD1306.addLineOLED(display, (" Smart Garden ")) if (config.LOCKDEBUG): print("Attempt OLEDLock released") OLEDLock.release() if (config.LOCKDEBUG): print("OLEDLock released") # initialize variables # state.Pump_Water_Full = False checkAndWater() checkForAlarms()
def forceWaterPlant(plantNumber): previousState = state.SGS_State; #if(state.SGS_State == state.SGS_States.Monitor): state.SGS_State =state.SGS_States.Watering if (config.USEPUBNUB): publishStatusToPubNub() if (config.USEBLYNK): updateBlynk.blynkStatusUpdate() pumpWater(2.0, plantNumber) state.Last_Event = "Plant #{:d} Force Watered at: ".format(plantNumber)+time.strftime("%Y-%m-%d %H:%M:%S") if (config.USEBLYNK): updateBlynk.blynkTerminalUpdate(time.strftime("%Y-%m-%d %H:%M:%S")+": Plant #{:d} Force Watered".format(plantNumber)+"\n") updateBlynk.blynkEventUpdate() state.SGS_State = previousState if (config.USEPUBNUB): publishStatusToPubNub() if (config.USEBLYNK): updateBlynk.blynkStatusUpdate()
print(util.returnStatusEnable("UseMQTT", config.MQTT_Enable)) print(util.returnStatusLine("Check WLAN", config.enable_WLAN_Detection)) print( util.returnStatusLine("WeatherUnderground", config.WeatherUnderground_Present)) print(util.returnStatusLine("UseWeatherStem", config.USEWEATHERSTEM)) print("----------------------") # startup pclogging.systemlog(config.INFO, "SkyWeather2 Startup Version " + config.SWVERSION) if (config.USEBLYNK): updateBlynk.blynkEventUpdate("SW Startup Version " + config.SWVERSION) updateBlynk.blynkTerminalUpdate("SW Startup Version " + config.SWVERSION) subjectText = "The " + config.STATIONKEY + " SkyWeather2 Raspberry Pi has #rebooted." ipAddress = subprocess.check_output(['hostname', '-I']) bodyText = "SkyWeather2 Version " + config.SWVERSION + " Startup \n" + ipAddress.decode( ) + "\n" if (config.SunAirPlus_Present): sampleSunAirPlus() bodyText = bodyText + "\n" + "BV=%0.2fV/BC=%0.2fmA/SV=%0.2fV/SC=%0.2fmA" % ( batteryVoltage, batteryCurrent, solarVoltage, solarCurrent) sendemail.sendEmail("test", bodyText, subjectText, config.notifyAddress, config.fromAddress, "") if (config.USEBLYNK):
def checkForAlarms(): # check to see alarm if (config.DEBUG): print "checking for alarm" if (state.Alarm_Active == True): print "Alarm_Active = True" else: print "Alarm_Active = False" # initialize list = startAlarmStatementDisplay(display) lastAlarm = state.Alarm_Active if (state.Alarm_Active == True): activeAlarm = False state.Is_Alarm_MoistureFault = False for i in range(0,config.plant_number): if (state.Moisture_Humidity_Array[i] <= state.Alarm_Moisture_Sensor_Fault): if (config.DEBUG): print "Plant #{:d}---->Moisture Sensor Fault".format(i+1) displayAlarmOLEDDisplay(list, "#{:d}MS FLT!".format(i), 10) state.Is_Alarm_MoistureFault = True if (state.Alarm_Air_Quality < state.AirQuality_Sensor_Value): if (config.DEBUG): print "state.Alarm_Air_Quality=", state.Alarm_Air_Quality print "state.AirQuality_Sensor_Value", state.AirQuality_Sensor_Value state.Is_Alarm_AirQuality = True activeAlarm = True else: state.Is_Alarm_AirQuality = False if (state.Alarm_Temperature >= state.Temperature): if (config.DEBUG): print "---->Low Temperature Alarm!" activeAlarm = True state.Is_Alarm_Temperature = True else: state.Is_Alarm_Temperature = False state.Is_Alarm_Moisture = False for i in range(0,config.plant_number): if (state.Moisture_Humidity_Array[i] <= state.Alarm_Moisture): if (config.DEBUG): print "Plant #{:d}---->Moisture Low Alarm".format(i+1) state.Is_Alarm_Moisture = True activeAlarm = True if (state.Alarm_Water == True ): if (state.Pump_Water_Full == False): if (config.DEBUG): print "---->Water Empty Alarm!" activeAlarm = True state.Is_Alarm_Water = True else: state.Is_Alarm_Water = False if (config.DEBUG): print "activeAlarm = ", activeAlarm if (activeAlarm == True): # hold for display displayActiveAlarms() state.Last_Event = "Alarm Active: "+time.strftime("%Y-%m-%d %H:%M:%S") # release display else: print "lastAlarm=", lastAlarm print "activeAlarm=", activeAlarm if (state.Alarm_Last_State != activeAlarm): state.Last_Event = "Alarm Ended: "+time.strftime("%Y-%m-%d %H:%M:%S") else: state.Last_Event = "SGS Running: "+time.strftime("%Y-%m-%d %H:%M:%S") if (config.USEPUBNUB): publishEventToPubNub() if (config.USEBLYNK): updateBlynk.blynkEventUpdate() if (config.USEPUBNUB): publishAlarmToPubNub("") if (config.USEBLYNK): updateBlynk.blynkAlarmUpdate()
print "Scheduled Jobs" print "-----------------" scheduler.print_jobs() print "-----------------" if (config.DEBUG): if (config.USEBLYNK): print "Blynk Status=", updateBlynk.blynkSGSAppOnline() updateBlynk.blynkAlarmUpdate(); state.Last_Event = "SGS Started:"+time.strftime("%Y-%m-%d %H:%M:%S") if (config.USEPUBNUB): publishEventToPubNub() if (config.USEBLYNK): updateBlynk.blynkEventUpdate() if (config.OLED_Present): if (config.DEBUG): print "Attempt OLEDLock acquired" OLEDLock.acquire() if (config.DEBUG): print "OLEDLock acquired" # display logo image = Image.open('SmartPlantPiSquare128x64.ppm').convert('1') display.image(image) display.display() time.sleep(3.0) display.clear()
print(util.returnStatusEnable("UseMQTT", config.MQTT_Enable)) print(util.returnStatusLine("Check WLAN", config.enable_WLAN_Detection)) print( util.returnStatusLine("WeatherUnderground", config.WeatherUnderground_Present)) print(util.returnStatusLine("UseWeatherStem", config.USEWEATHERSTEM)) print("----------------------") # startup pclogging.systemlog(config.INFO, "SkyWeather2 Startup Version " + config.SWVERSION) if (config.USEBLYNK): updateBlynk.blynkEventUpdate("SW Startup Version " + config.SWVERSION) updateBlynk.blynkTerminalUpdate("SW Startup Version " + config.SWVERSION) subjectText = "The " + config.STATIONKEY + " SkyWeather2 Raspberry Pi has #rebooted." ipAddress = subprocess.check_output(['hostname', '-I']) if (config.USEBLYNK): updateBlynk.blynkEventUpdate("IPAddress: " + ipAddress.decode()) updateBlynk.blynkTerminalUpdate("IPAddress: " + ipAddress.decode()) bodyText = "SkyWeather2 Version " + config.SWVERSION + " Startup \n" + ipAddress.decode( ) + "\n" if (config.SunAirPlus_Present): sampleSunAirPlus() bodyText = bodyText + "\n" + "BV=%0.2fV/BC=%0.2fmA/SV=%0.2fV/SC=%0.2fmA" % ( state.batteryVoltage, state.batteryCurrent, state.solarVoltage,