Skip to content

Commit

Permalink
v1.0.9
Browse files Browse the repository at this point in the history
  • Loading branch information
howartp84 committed Mar 26, 2022
1 parent 852fb5c commit ca84723
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Sense.indigoPlugin/Contents/Info.plist
Expand Up @@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>PluginVersion</key>
<string>1.0.8</string>
<string>1.0.9</string>
<key>ServerApiVersion</key>
<string>2.0</string>
<key>IwsApiVersion</key>
Expand Down
Binary file modified Sense.indigoPlugin/Contents/Resources/Thumbs.db
Binary file not shown.
80 changes: 60 additions & 20 deletions Sense.indigoPlugin/Contents/Server Plugin/plugin.py
Expand Up @@ -35,7 +35,7 @@ def __init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs):
self.sidFromDev = dict()
self.devFromSid = dict()

self.rt = dict()
self.rt = dict() #RealTime

self.dontStart = True

Expand Down Expand Up @@ -76,14 +76,29 @@ def closedPrefsConfigUi(self, valuesDict, userCancelled):
self.doSolar = bool(valuesDict.get("solarEnabled", False))
self.folderID = valuesDict.get("folderID", "")

try:
dev = indigo.device.create(indigo.kProtocol.Plugin,"Active Total","Active Total",deviceTypeId="sensedevice",folder=int(self.folderID))
dev.updateStateOnServer(key='id', value='core')
dev.updateStateOnServer(key='power', value="0", uiValue="0 w")
dev.stateListOrDisplayStateIdChanged()
except ValueError as e:
pass
self.createCore()

if (self.dontStart == False):
self.getDevices()

def createCore(self):
try:
self.debugLog("CreateCore")
dev = indigo.device.create(indigo.kProtocol.Plugin,"Active Total","Active Total",deviceTypeId="sensedevice",folder=int(self.folderID))
dev.updateStateOnServer(key='id', value='core')
dev.updateStateOnServer(key='power', value="0", uiValue="0 w")
dev.updateStateImageOnServer(indigo.kStateImageSel.PowerOff)
dev.stateListOrDisplayStateIdChanged()

#Add it to self.devIDs
devID = dev.id
sID = "core"
self.devIDs.append(sID)
self.sidFromDev[int(devID)] = sID
self.devFromSid[sID] = devID
except ValueError as e:
self.errorLog("Could not create Core device.")
pass

########################################
def startup(self):
Expand All @@ -104,12 +119,15 @@ def deviceStartComm(self, dev):
#self.debugLog(dev)
if (dev.deviceTypeId == "sensedevice"):
devID = dev.id
sID = dev.states['id']
dName = dev.name
self.devIDs.append(sID)
self.sidFromDev[int(devID)] = sID
self.devFromSid[sID] = devID
#self.debugLog("Added device {} ({})".format(sID,dName))
sID = dev.states['id']
if (sID != ""): #The state doesn't exist when the device is first created, so can't populate self.devIDs at this point
self.devIDs.append(sID)
self.sidFromDev[int(devID)] = sID
self.devFromSid[sID] = devID
#self.debugLog("Added device {} ({})".format(sID,dName)
#self.debugLog(dev.states)
#self.debugLog(str(self.devIDs))

def deviceStopComm(self, dev):
#self.debugLog("deviceStopComm called")
Expand All @@ -126,22 +144,33 @@ def deviceStopComm(self, dev):
#self.debugLog("Removed device {} ({})".format(sID,dName))

def getDevices(self):
self.debugLog("IDs: %s" % self.devIDs)
#self.debugLog(u"Getting realtime()")
#self.debugLog("IDs: %s" % self.devIDs)
self.debugLog(u"Getting realtime()")
try:
#self.debugLog(u"132")
self.sense.update_realtime()
#self.debugLog(u"134")
for i in self.sense._realtime['devices']:
rtid = i['id']
self.rt[rtid] = int(i['w'])
#self.debugLog(i)
rtid = i['id'] #Get ID from RealTime devices
self.rt[rtid] = int(i['w']) #Get power from RealTime devices
#self.debugLog(u"138")
except SenseAPITimeoutException as e:
self.errorLog(e)
return
self.sense.update_trend_data()
active = self.sense.active_power
daily = self.sense.daily_usage
self.debugLog("Active: {}w".format(active))
self.debugLog("Daily: {}kw".format(daily))
indigo.devices[self.devFromSid['core']].updateStateOnServer(key='power', value=str(int(active)), uiValue=str("{} w".format(int(active))))
indigo.devices[self.devFromSid['core']].updateStateImageOnServer(indigo.kStateImageSel.PowerOn)
try:
indigo.devices[self.devFromSid['core']].updateStateOnServer(key='power', value=str(int(active)), uiValue=str("{} w".format(int(active))))
indigo.devices[self.devFromSid['core']].updateStateImageOnServer(indigo.kStateImageSel.PowerOn)
except KeyError as e:
self.debugLog("No Core device found - Attempting to recreate.")
self.debugLog("Global Active and Daily stats will update on next refresh.")
self.debugLog(e)
self.createCore()

lastUpdateTS = self.sense.getRealtimeCall()
lastUpdate = datetime.fromtimestamp(lastUpdateTS).strftime("%Y-%m-%d %H:%M:%S.%f")
Expand Down Expand Up @@ -181,8 +210,11 @@ def getDevices(self):
indigo.device.enable(self.devFromSid[sID], value=False)
else:
if (sID in self.devIDs):
#self.debugLog("sID {} is in self.devIDs".format(sID))
dev = indigo.devices[self.devFromSid[sID]]
devOldName = dev.name
#self.debugLog("sID {} has old name {}".format(sID,devOldName))
#self.debugLog("sID {} has new name {}".format(sID,dName))
if (dev.name != dName):
dev.name = dName
try:
Expand All @@ -193,21 +225,29 @@ def getDevices(self):
self.debugLog("Failed to rename - duplicate device found - please ensure Sense devices are all uniquely named")
else:
self.errorLog(e)
if (str(sID) in self.rt.keys()):
if (str(sID) in self.rt.keys()): #If the device is currently "On" (ie appearing in Realtime on Sense dashboard)
dev.updateStateOnServer(key='power', value=str(self.rt[sID]), uiValue=str("{} w".format(self.rt[sID])))
dev.updateStateImageOnServer(indigo.kStateImageSel.PowerOn)
else:
dev.updateStateOnServer(key='power', value="0", uiValue="0 w")
dev.updateStateImageOnServer(indigo.kStateImageSel.PowerOff)
#dev.stateListOrDisplayStateIdChanged()
else:
#self.debugLog("sID {} is NOT in self.devIDs".format(sID))
self.debugLog("CREATING: {} ({})".format(dName,sID))
#self.debugLog(d)
try:
dev = indigo.device.create(indigo.kProtocol.Plugin,dName,dName,deviceTypeId="sensedevice",folder=int(self.folderID))
dev.updateStateOnServer(key='id', value=str(sID))
dev.updateStateOnServer(key='power', value="0", uiValue="0 w")
dev.updateStateImageOnServer(indigo.kStateImageSel.PowerOff)
dev.stateListOrDisplayStateIdChanged()

#Add it to self.devIDs
devID = dev.id
self.devIDs.append(sID)
self.sidFromDev[int(devID)] = sID
self.devFromSid[sID] = devID
except ValueError as e:
if (str(e) == "NameNotUniqueError"):
self.debugLog("Duplicate device found - please ensure Sense devices are all uniquely named")
Expand Down

0 comments on commit ca84723

Please sign in to comment.