Requires pywemo and sense_energy from pip
So im still working on this, but here are the basics… I had to hardcode the IP of the Wemo as the discovery via python often resulted in not finding the correct plug.
Basically this checks that we are generating solar power by getting the solar generation from sense, If we are not generating solar or not generating sufficient solar based on usage and the plug is on, turn the plug off.
If we are generating solar and have excess compared to usage, and the plug is off, based on the average watt usage of the plug do we have that amount of solar generation above usage then turn the plug on, if not turn it off.
import pywemo, re
from sense_energy import Senseable
username = 'Sense_UserName'
password = 'Sense_Pass'
sense = Senseable(wss_timeout=30,api_timeout=30)
sense.authenticate(username, password)
sense.update_realtime()
active_power = str(sense.active_power).split('.')[0]
active_solar_power = str(sense.active_solar_power).split('.')[0]
plug_name = "GolfCart"
asp = int(active_solar_power)
ap = int(active_power)
power_diff = asp-ap
wemo_ip_address = "192.168.1.107"
wemoport = pywemo.ouimeaux_device.probe_wemo(wemo_ip_address)
wemourl = 'http://%s:%i/setup.xml' % (wemo_ip_address, wemoport)
wemodevice = pywemo.discovery.device_from_description(wemourl, None)
plug = wemodevice
plug_string = str(plug)
plug_power = str(plug.get_state())
plug_total_time = plug.insight_params['ontotal']
plug_total_watt = plug.insight_params['totalmw']
plug_avg_power = int((plug_total_watt / 1000) / (plug_total_time / 60))
if plug_power == '1':
if power_diff < 1:
print ("Not eough solar power", power_diff)
plug.off()
else:
plugsplit = str(plug).split(',')[0]
plugstrip = str(plugsplit).strip('[ ] < >')
plugreplace1 = str(plugstrip).replace('Insight', '')
plugreplace2 = str(plugreplace1).replace('WeMo', '')
plugreplace3 = str(plugreplace2).replace(" ", "")
plugreplace4 = str(plugreplace3).replace('"', '' )
plugpwrreplace = str(plug.current_power).rstrip('3')
plugpwr = (round(plug.current_power/1000))
if plug_name in plug_string:
if power_diff > plug_avg_power:
print ("Power Above Threshold at", power_diff, "Plug Average Power", plug_avg_power)
plug.on()
else:
print ("Power Below Threshold at", power_diff, "Plug Average Power", plug_avg_power)
plug.off()
else:
print (plug_name, "Not Found")