-
-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #394 from f-kessler/hue-plugin
Hue plugin - Async fix
- Loading branch information
Showing
4 changed files
with
151 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
#!/usr/bin/python | ||
# -*- coding: UTF-8 -*- | ||
|
||
""" | ||
Plugin to control Philips hue lights and switches | ||
@author: Fabian Kessler | ||
@requires: none | ||
""" | ||
|
||
# | ||
# Imports | ||
# | ||
import logging # Global logger | ||
from includes import globalVars # Global variables | ||
import json | ||
import requests | ||
import time | ||
|
||
# Helper function, uncomment to use | ||
#from includes.helper import timeHandler | ||
#from includes.helper import wildcardHandler | ||
from includes.helper import configHandler | ||
|
||
## | ||
# | ||
# onLoad (init) function of plugin | ||
# will be called one time by the pluginLoader on start | ||
# | ||
def onLoad(): | ||
""" | ||
While loading the plugins by pluginLoader.loadPlugins() | ||
this onLoad() routine is called one time for initialize the plugin | ||
@requires: nothing | ||
@return: nothing | ||
@exception: Exception if init has an fatal error so that the plugin couldn't work | ||
""" | ||
try: | ||
########## User onLoad CODE ########## | ||
pass | ||
########## User onLoad CODE ########## | ||
except: | ||
logging.error("unknown error") | ||
logging.debug("unknown error", exc_info=True) | ||
raise | ||
|
||
## | ||
# | ||
# Main function of plugin | ||
# will be called by the alarmHandler | ||
# | ||
def run(typ,freq,data): | ||
""" | ||
This function is the implementation of the Plugin. | ||
If necessary the configuration hast to be set in the config.ini. | ||
@type typ: string (FMS|ZVEI|POC) | ||
@param typ: Typ of the dataset | ||
@type data: map of data (structure see readme.md in plugin folder) | ||
@param data: Contains the parameter for dispatch | ||
@type freq: string | ||
@keyword freq: frequency of the SDR Stick | ||
@requires: If necessary the configuration hast to be set in the config.ini. | ||
@return: nothing | ||
@exception: nothing, make sure this function will never thrown an exception | ||
""" | ||
try: | ||
if configHandler.checkConfig("hue"): #read and debug the config | ||
#for debugging | ||
"""logging.debug(globalVars.config.get("hue", "bridgeip")) | ||
logging.debug(globalVars.config.get("hue", "deviceid")) | ||
logging.debug(globalVars.config.get("hue", "apikey")) | ||
logging.debug(globalVars.config.getint("hue", "repeat")) | ||
logging.debug(globalVars.config.getint("hue", "timeon")) | ||
logging.debug(globalVars.config.getint("hue", "timeoff")) | ||
logging.debug(globalVars.config.getint("hue", "keepon"))""" | ||
|
||
########## User Plugin CODE ########## | ||
if typ == "FMS": | ||
logging.warning("%s not supported", typ) | ||
elif typ == "ZVEI": | ||
logging.warning("%s not supported", typ) | ||
elif typ == "POC": | ||
#logging.warning("%s not supported", typ) | ||
logging.debug("POC received") | ||
bridgeip = globalVars.config.get("hue", "bridgeip") | ||
deviceid = globalVars.config.get("hue", "deviceid") | ||
apikey = globalVars.config.get("hue", "apikey") | ||
repeat = globalVars.config.getint("hue", "repeat") | ||
timeon = globalVars.config.getint("hue", "timeon") | ||
timeoff = globalVars.config.getint("hue", "timeoff") | ||
keepon = globalVars.config.getint("hue", "keepon") | ||
data_on = '{"on":true}' | ||
data_off = '{"on":false}' | ||
url = "http://" + bridgeip + "/api/" + apikey + "/lights/" + deviceid + "/state" | ||
logging.debug("hue REST API URL: %s", url) | ||
|
||
#blinking | ||
for _ in xrange(repeat): | ||
requests.put(url, data=data_on) | ||
logging.debug("on for %s seconds", timeon) | ||
time.sleep(timeon) | ||
requests.put(url, data=data_off) | ||
logging.debug("off for %s seconds", timeoff) | ||
time.sleep(timeoff) | ||
if keepon > 0: | ||
logging.debug("switch to on and wait for keepon to expire") | ||
requests.put(url, data=data_on) | ||
logging.debug("keep on for %s seconds", keepon) | ||
time.sleep(keepon) | ||
requests.put(url, data=data_off) | ||
else: | ||
logging.debug("switch to on and exit plugin") | ||
requests.put(url, data=data_on) | ||
else: | ||
logging.warning("Invalid Typ: %s", typ) | ||
########## User Plugin CODE ########## | ||
|
||
except: | ||
logging.error("unknown error") | ||
logging.debug("unknown error", exc_info=True) |