Exemple #1
0
def rebootPi(why):

    pclogging.systemlog(config.INFO, "Pi Rebooting: %s" % why)
    if (config.USEBLYNK):
        updateBlynk.blynkTerminalUpdate("Pi Rebooting: %s" % why)
    pclogging.systemlog(config.INFO, "Pi Rebooting: %s" % why)
    os.system("sudo shutdown -r now")
Exemple #2
0
def returnStatusLine(device, state):

        returnString = device
        if (state == True):
                returnString = returnString + ":   \t\tPresent"
        else:
                returnString = returnString + ":   \t\tNot Present"
        if (config.USEBLYNK):
            updateBlynk.blynkTerminalUpdate("Device:"+returnString) 
        return returnString
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 forceWaterPlantCheck():
    if ((state.Plant_Water_Request == True)
            and (state.Plant_Number_Water_Request > 0)):
        # now check for forced watering

        if (state.Plant_Number_Water_Request > config.plant_number):
            print "Non-existent Plant {:d} Water from Button Ignored".format(
                state.Plant_Number_Water_Request)
            updateBlynk.blynkTerminalUpdate(
                time.strftime("%Y-%m-%d %H:%M:%S") +
                ": Plant #{:d} Force Ignored".format(
                    state.Plant_Number_Water_Request) + "\n")
            state.Plant_Number_Water_Request = -1
            updateBlynk.blynkResetButton("V41")
            state.Plant_Water_Request = False
            return
        if (config.DEBUG):
            print ">>>>>>>>>>>>>>"
            print "Entering Force Water"
            print ">>>>>>>>>>>>>>"
            print "FW-Attempt UpdateStateLock acquired"

        UpdateStateLock.acquire()
        if (config.DEBUG):
            print "FW-UpdateStateLock acquired"

        PlantNumber = state.Plant_Number_Water_Request
        if (config.DEBUG):
            print "<<<<<<<<>>>>>>>"
            print "Force Plant {:d} Water from Button ".format(PlantNumber)
            print "<<<<<<<<>>>>>>>"
        forceWaterPlant(PlantNumber)
        state.Plant_Number_Water_Request = -1
        updateBlynk.blynkResetButton("V41")
        state.Plant_Water_Request = False
        # now reset water information

        if (config.DEBUG):
            print "FW-Attempt UpdateStateLock released"
        UpdateStateLock.release()
        if (config.DEBUG):
            print "FW-UpdateStateLock released"
            print ">>>>>>>>>>>>>>"
            print "Exiting Force Water"
            print ">>>>>>>>>>>>>>"
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()
def systemlog(level, message):

    if (config.enable_MySQL_Logging == True):
        LOWESTDEBUG = 0
        # open mysql database
        # write log
        # commit
        # close

        if (level >= LOWESTDEBUG):
            try:
                if (level == config.JSON):
                    if (config.USEBLYNK):
                        updateBlynk.blynkTerminalUpdate("JSON Loaded")
                    pass
                else:
                    if (config.USEBLYNK):
                        updateBlynk.blynkTerminalUpdate(message)
                    pass
                #print("trying database")
                con = mdb.connect('localhost', 'root', config.MySQL_Password,
                                  'SkyWeather2')
                cur = con.cursor()
                #print("before query")
                query = "INSERT INTO SystemLog(TimeStamp, Level, SystemText ) VALUES(LOCALTIMESTAMP(), %i, '%s')" % (
                    level, message)
                #print("query=%s" % query)
                cur.execute(query)
                con.commit()

            except:
                traceback.print_exc()
                con.rollback()
                #sys.exit(1)
            finally:
                cur.close()
                con.close()

                del cur
                del con
Exemple #7
0
def initializeSGSPart2():

        # status reports
    
        print("----------------------")
        print("Local Devices")
        print("----------------------")
        print(returnStatusLine("OLED",config.OLED_Present))
        print(returnStatusLine("BMP280",config.BMP280_Present))
        print(returnStatusLine("DustSensor",config.DustSensor_Present))
        #print(returnStatusLine("Sunlight Sensor",config.Sunlight_Present))
        #print(returnStatusLine("hdc1000 Sensor",config.hdc1000_Present))
        #print(returnStatusLine("Ultrasonic Level Sensor",config.UltrasonicLevel_Present))
    
        print("----------------------")
        print("Checking Wireless SGS Devices")
        print("----------------------")
    
        scanForResources.updateDeviceStatus(True)
        
        # turn off All Valves
        AccessValves.turnOffAllValves()
    
    
        wirelessJSON = readJSON.getJSONValue("WirelessDeviceJSON")
        for single in wirelessJSON:
            print(returnStatusLine(str(single["name"])+" - "+str(single["id"]),state.deviceStatus[str(single["id"])]))
    
   
        # Set up Wireless MQTT Links
        MQTTFunctions.startWirelessMQTTClient()

        # subscribe to IDs
        if (len(wirelessJSON) == 0):
            print("################################")
            print("ERROR")
            print("################################")
            print("No Wireless SGS uinits present - run SGSConfigure.py")
            print("################################")
            exit()

        # wait for connection
        while state.WirelessMQTTClientConnected != True:    #Wait for connection
            time.sleep(0.1)


        # subscribe to IDs

        for single in wirelessJSON:
            topic = "SGS/" + single["id"]
            print("subscribing to ", topic)
            state.WirelessMQTTClient.subscribe(topic)
            # write out to ValveChanges for startup
            myJSON = {}
            myJSON["id"] = single["id"]
            myJSON["valvestate"] = "V00000000"

            pclogging.writeMQTTValveChangeRecord(myJSON)

        print()
    
        print()
        print("----------------------")
        print("Plant / Sensor Counts")
        print("----------------------")
        config.moisture_sensor_count = len(readJSON.getJSONValue("WirelessDeviceJSON"))*4 
        config.valve_count = len(readJSON.getJSONValue("WirelessDeviceJSON"))*8 
        print( "Wireless Unit Count:", len(readJSON.getJSONValue("WirelessDeviceJSON")) )
        print("Sensor Count: ",config.moisture_sensor_count)
        print("Valve Count: ",config.valve_count)
        print()
        if (config.USEBLYNK):
            updateBlynk.blynkTerminalUpdate( "Wireless Unit Count:%d"% len(readJSON.getJSONValue("WirelessDeviceJSON")) )
            updateBlynk.blynkTerminalUpdate("Sensor Count: %d"%config.moisture_sensor_count)
            updateBlynk.blynkTerminalUpdate("Pump Count: %d"%config.valve_count)
            updateBlynk.updateStaticBlynk() 

        print("----------------------")
        print("Other Smart Garden System Expansions")
        print("----------------------")
        print(returnStatusLine("Weather",config.Weather_Present))
        print(returnStatusLine("GardenCam",config.GardenCam_Present))
        print(returnStatusLine("SunAirPlus",config.SunAirPlus_Present))
        print(returnStatusLine("SolarMAX",config.SunAirPlus_Present))
        print(returnStatusLine("Lightning Mode",config.Lightning_Mode))
    
        print(returnStatusLine("MySQL Logging Mode",config.enable_MySQL_Logging))
        print(returnStatusLine("UseBlynk",config.USEBLYNK))
        print()
        print("----------------------")
    
        #Establish WeatherSTEMHash
        if (config.USEWEATHERSTEM == True):
            state.WeatherSTEMHash = SkyCamera.SkyWeatherKeyGeneration(config.STATIONKEY)
Exemple #8
0
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):
    updateBlynk.blynkInit()
#############################
# main program
#############################


# Main Program
if __name__ == '__main__':

    print ""
    print "SGS Version "+SGSVERSION+"  - SwitchDoc Labs"
    print ""
    print "Program Started at:"+ time.strftime("%Y-%m-%d %H:%M:%S")
    print ""

    if (config.USEBLYNK):
        updateBlynk.blynkTerminalUpdate(time.strftime("%Y-%m-%d %H:%M:%S")+": SGS Program Started"+ "\n")
        updateBlynk.blynkTerminalUpdate( "SGS Version "+SGSVERSION+"  - SwitchDoc Labs"+"\n")
    
    print returnStatusLine("ADS1115",config.ADS1115_Present)
    print returnStatusLine("OLED",config.OLED_Present)
    print returnStatusLine("Sunlight Sensor",config.Sunlight_Present)
    print returnStatusLine("hdc1000 Sensor",config.hdc1000_Present)
    print returnStatusLine("Ultrasonic Level Sensor",config.UltrasonicLevel_Present)
    print
    print "----------------------"
    print "Plant / Sensor Counts"
    print "----------------------"
    print "Sensor Count: ",config.moisture_sensor_count
    print "Pump Count: ",config.USB_pump_count
    print
    if (config.USEBLYNK):
Exemple #10
0
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,
        state.solarCurrent)