commit - e7e27decb5dc8a763656c279cde23a1aa8514347
commit + 496ad2f3f639e6328ee92aebc0cf0bee292202ab
blob - a0c06edd5e70a98b983ee245be00d6c4e9a173a8
blob + 3645eecfe1915135322e334f257be390ee63e585
--- .gitignore
+++ .gitignore
hue-bridge
hue-email
hue-token
+_*
blob - 6377fc0ab36c8ce44977b2c2b095d404fd6b43a5
blob + 94e556b4d9b799dd45da0f417042590ac73e6cce
--- add-newdeveloper.py
+++ add-newdeveloper.py
# Create a new user on the bridge
#
# For example:
-# $ create-new.py <bridge IP>
+# $ add-newdeveloper.py <bridge IP>
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import urllib.request
import json
-parser = argparse.ArgumentParser(description="Control light")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
+parser = argparse.ArgumentParser(description="Create a new developer token on the Hue Bridge")
+parser.add_argument("bridge", type=str, help="Hue Bridge IP address")
try:
args = parser.parse_args()
blob - 49935e0a799195fe965f8ce6d0454a9cf57cb088
blob + 632f6c6ea2376ef32d088f0a3c82f3332483849e
--- daylight-trigger.py
+++ daylight-trigger.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191030
+# Version 1.1 - 20200507 - added config file support
#
# Control a light based on sensor information
# Get ['dark'] from sensor ID and switch on/off light ID
# depending where your sensor is located you can use ['daylight']
#
# For example:
-# $ daylight-trigger.py <bridge IP> <token> -s 50 -l 24
+# $ daylight-trigger.py <bridge name> -s 50 -l 24
#
+# Add the following to crontab:
+# */5 * * * * /<path-to-your-script>/daylight-trigger.py <bridge name> -s 50 -l 24 -a dimmed
+#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
#
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Control light based on light sensor")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-s", "--sensor", type=int, required=True, help="sensor id#")
parser.add_argument("-l", "--light", type=int, required=True, help="light id#")
parser.add_argument("-a", "--action", type=str, default='on', help="on|off|relax|bright|dimmed|nightlight")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
sensor = args.sensor
light = args.light
action = args.action
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - 848a8c17c82b160b20e7f1dcc99f27e0c6d5d8d7
blob + 9a9ba6dc4ad4e39693c7ad20a081bfef644a6fa4
--- get-groups.py
+++ get-groups.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191028
+# Version 1.1 - 20200507 - added config file support
#
# Get all light IDs
#
# For example:
-# $ get-lights.py <bridge IP> <token>
+# $ get-lights.py <bridge name>
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Get all group ids from Hue Bridge")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - 7b8fac9fd2d909fc78f541dcb555dfddd10329ad
blob + b58744f75ab93d032de0d0424a5f3bdccee60e53
--- get-id.py
+++ get-id.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191103
+# Version 1.1 - 20200507 - added config file support
#
# Collect all information of given id
#
# For example:
-# $ get-id.py <bridge IP> <token> -t sensors -i 6
+# $ get-id.py <bridge name> -t sensors -i 6
#
# Requires:
# - Python 3.x
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Get id information")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-i", "--id", type=int, default='1', help="id#")
parser.add_argument("-t", "--type", type=str, default='lights', help="lights|sensors|groups|rules")
parser.add_argument("-v", "--verbose", action='store_true', help="verbose")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
id = args.id
type = args.type
verbose = args.verbose
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - f60d94350e737616dc8d361d763e0c59142b0570
blob + bd2862cde63555b43dfe9a020826a43442e359ff
--- get-lights.py
+++ get-lights.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191028
# Version 1.1 - 20191103 - added ['state']['on']
+# Version 1.2 - 20200507 - added config file support
#
# Get all light ids and state
#
# For example:
-# $ get-lights.py <bridge IP> <token>
+# $ get-lights.py <bridge name>
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Get all light ids from Hue Bridge")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-i", "--id", type=int, help="light id#")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
id = args.id
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - a65e8341a03dc49719dbc913b9f6a3dbc20420b1
blob + 2beef18025048774008f7d94a04ada1af6ee976b
--- get-sensors.py
+++ get-sensors.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191028
# Version 1.1 - 20191106 - added battery status
+# Version 1.2 - 20200507 - added config file support
#
# Get all sensor IDs (ZLLPresence, ZLLLightLevel and ZLLTemperature)
# grouped by ZLLPresence name
#
# For example:
-# $ get-sensors.py <bridge IP> <token>
+# $ get-sensors.py <bridge name>
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import json
import re
import collections
+import os
+import configparser
parser = argparse.ArgumentParser(description="Get all sensor ids from Hue Bridge")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-b", "--battery", type=int, help="battery check only, threshold, default 20")
parser.add_argument("-v", "--verbose", action='store_true', help="verbose")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
battery = args.battery
verbose = args.verbose
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - 4d89913b9e32a5381c32b452687c43ca6219b00f
blob + 59a4eb4e4e132e204586ec4673dcdab1cd36b622
--- groupctl.py
+++ groupctl.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191102
+# Version 1.1 - 20200507 - added config file support
#
# Control a group of lights (room)
#
# For example:
-# $ groupctl.py <bridge IP> <token> -g 4 -a on
+# $ groupctl.py <bridge name> -g 4 -a on
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Control group of lights (room)")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-g", "--group", type=int, required=True, help="group id#")
parser.add_argument("-a", "--action", type=str, default='on', help="on|off|relax|bright|dimmed|nightlight")
parser.add_argument("-v", "--verbose", action='store_true', help="verbose")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
group = args.group
action = args.action
verbose = args.verbose
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - 52cf1637cd35df690424ceb606881dd3e88e985e
blob + a75c136e6eff032e9a8f05fff25b92e331779250
--- lightctl.py
+++ lightctl.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191102
+# Version 1.1 - 20200507 - added config file support
#
# Control a light or plug
#
# For example:
-# $ lightctl.py <bridge IP> <token> -l 24 -a relax
+# $ lightctl.py <bridge name> -l 24 -a relax
#
# Follow the steps at the Hue Developer site to get the username/token
# https://developers.meethue.com/develop/get-started-2/
import ssl
import urllib.request
import json
+import os
+import configparser
parser = argparse.ArgumentParser(description="Control light")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-l", "--light", type=int, required=True, help="light id#")
parser.add_argument("-a", "--action", type=str, default='on', help="on|off|relax|bright|dimmed|nightlight|state")
parser.add_argument("-v", "--verbose", action='store_true', help="verbose")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
light = args.light
action = args.action
verbose = args.verbose
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - /dev/null
blob + ff0fd6aabf69f4fef30e40fd53b6cc1d20399346 (mode 644)
--- /dev/null
+++ hue.conf
+[bridge1]
+ip = 192.168.100.101
+token = bridge1token
+[bridge2]
+ip = 192.168.100.102
+token = bridge2token
blob - 9026d575a89b80d7688d6b41d412a897968e1601
blob + d4cacb44173efafd8126554f43a65ac0f047ad54
--- temperature.py
+++ temperature.py
#!/usr/bin/env python3
#
-# Copyright 2019, Mischa Peters <mischa AT high5 DOT nl>, High5!.
+# Copyright 2019-2020, Mischa Peters <mischa AT high5 DOT nl>, High5!.
# Version 1.0 - 20191103
+# Version 1.1 - 20200507 - added config file support
#
# Get temperaure from all sensors
#
# For exmaple:
-# $ temperature.py <bridge IP> <token>
+# $ temperature.py <bridge name>
#
# Requires:
# - Python 3.x
import re
import collections
import math
+import os
+import configparser
parser = argparse.ArgumentParser(description="Get temperature from Hue Bridge")
-parser.add_argument("bridge", type=str, help="Hue Bridge IP")
-parser.add_argument("token", type=str, help="Hue API Token")
+parser.add_argument("bridgename", type=str, help="Hue Bridge name in specified in hue.conf")
parser.add_argument("-v", "--verbose", action='store_true', help="verbose")
parser.add_argument("-d", "--debug", action='store_true', help="debug")
try:
args = parser.parse_args()
- bridge = args.bridge
- token = args.token
+ bridgename = args.bridgename
verbose = args.verbose
debug = args.debug
except argparse.ArgumentError as e:
print(str(e))
+config_files = ['./hue.conf', './.hue.conf', '/etc/hue.conf', '/etc/hue/hue.conf', os.path.expanduser('~/.hue.conf'), os.path.expanduser('~/hue.conf')]
+config = configparser.RawConfigParser()
+config.read(config_files)
+bridge = config.get(bridgename, 'ip')
+token = config.get(bridgename, 'token')
+
no_cert_check = ssl.create_default_context()
no_cert_check.check_hostname=False
no_cert_check.verify_mode=ssl.CERT_NONE
blob - e0e673d6611cf23a0627b441a16478fa4a5a62cd (mode 755)
blob + /dev/null
--- wrapper-daylight-trigger.sh
+++ /dev/null
-#!/bin/sh
-PATH=$PATH:/usr/local/bin
-#
-# Easy invocation of python script
-# Add the following to crontab:
-# */5 * * * * /<path-to-your-script>/wrapper-daylight-trigger.sh
-#
-# ambient light sensor 43 to check
-# light 7 to control
-# scene dimmed
-/home/mischa/hue/daylight-trigger.py $(cat /home/mischa/hue-bridge2) $(cat /home/mischa/hue-token2) -s 43 -l 7 -a dimmed
blob - d1ef08f212a87a18d300668b1ac11c1a0ae6c79e
blob + 7fc15b5382e8f483f1884cfa39d9a086a107c4b7
--- wrapper-sensors-battery.sh
+++ wrapper-sensors-battery.sh
# Add the following to crontab:
# @daily /<path-to-your-script>/wrapper-sensors-battery.sh
#
-result=$(/home/mischa/hue/get-sensors.py $(cat /home/mischa/hue-bridge) $(cat /home/mischa/hue-token) -b 20)
-result2=$(/home/mischa/hue/get-sensors.py $(cat /home/mischa/hue-bridge2) $(cat /home/mischa/hue-token2) -b 20)
+result=$(/home/mischa/hue/get-sensors.py bridge1 -b 20)
+result2=$(/home/mischa/hue/get-sensors.py bridge2 -b 20)
if [[ -n "$result" ]]; then
- echo "${result}" | mail -s "Hue Battery Status $(cat /home/mischa/hue-bridge)" $(cat /home/mischa/hue-email)
+ echo "${result}" | mail -s "Hue Battery Status bridge1" $(cat /home/mischa/hue-email)
fi
if [[ -n "$result2" ]]; then
- echo "${result2}" | mail -s "Hue Battery Status $(cat /home/mischa/hue-bridge2)" $(cat /home/mischa/hue-email)
+ echo "${result2}" | mail -s "Hue Battery Status bridge2" $(cat /home/mischa/hue-email)
fi