Skip to content

Commit

Permalink
add lightgroup
Browse files Browse the repository at this point in the history
  • Loading branch information
hendriksen-mark committed Dec 15, 2024
1 parent 1085898 commit 8c5def5
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 8 deletions.
47 changes: 40 additions & 7 deletions BridgeEmulator/HueObjects/Group.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def __init__(self, data):
self.dxState = {"all_on": None, "any_on": None}

streamMessage = {"creationtime": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"data": [self.getV2Room() if self.type == "Room" else self.getV2Zone()],
"data": [self.getV2Room() if self.type == "Room" else self.getV2Zone() if self.type == "Zone" else self.getV2lightgroup()],
"id": str(uuid.uuid4()),
"type": "add"
}
Expand Down Expand Up @@ -55,8 +55,7 @@ def __del__(self):
streamMessage["id_v1"] = "/groups/" + self.id_v1
StreamEvent(streamMessage)
### room / zone ####
elementId = self.getV2Room(
)["id"] if self.type == "Room" else self.getV2Zone()["id"]
elementId = self.getV2Room()["id"] if self.type == "Room" else self.getV2Zone()["id"] if self.type == "Zone" else self.getV2lightgroup()["id"],
elementType = "room" if self.type == "Room" else "zone"
streamMessage = {"creationtime": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"data": [{"id": elementId, "id_v1": "/groups/" + self.id_v1, "type": elementType}],
Expand All @@ -68,8 +67,7 @@ def __del__(self):

def add_light(self, light):
self.lights.append(weakref.ref(light))
elementId = self.getV2Room(
)["id"] if self.type == "Room" else self.getV2Zone()["id"]
elementId = self.getV2Room()["id"] if self.type == "Room" else self.getV2Zone()["id"] if self.type == "Zone" else self.getV2lightgroup()["id"]
elementType = "room" if self.type == "Room" else "zone"
streamMessage = {"creationtime": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"data": [{"alert": {"action_values": ["breathe"]}, "id": self.id_v2, "id_v1": "/groups/" + self.id_v1, "on":{"on": self.action["on"]}, "type": "grouped_light", }],
Expand Down Expand Up @@ -116,7 +114,7 @@ def update_attr(self, newdata):
setattr(self, key, value)

streamMessage = {"creationtime": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
"data": [self.getV2Room() if self.type == "Room" else self.getV2Zone()],
"data": [self.getV2Room() if self.type == "Room" else self.getV2Zone() if self.type == "Zone" else self.getV2lightgroup()],
"id": str(uuid.uuid4()),
"type": "update"
}
Expand Down Expand Up @@ -180,7 +178,7 @@ def genStreamEvent(self, v2State):
streamMessage = {"creationtime": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"data": [{"id": self.id_v2,"id_v1": "/groups/" + self.id_v1, "type": "grouped_light",
"owner": {
"rid": self.getV2Room()["id"] if self.type == "Room" else self.getV2Zone()["id"],
"rid": self.getV2Room()["id"] if self.type == "Room" else self.getV2Zone()["id"] if self.type == "Zone" else self.getV2lightgroup()["id"],
"rtype": "room" if self.type == "Room" else "zone"
}
}],
Expand Down Expand Up @@ -287,6 +285,41 @@ def getV2Zone(self):
result["type"] = "zone"
return result

def getV2lightgroup(self):
result = {"children": [], "services": []}
for light in self.lights:
if light():
result["children"].append({
"rid": str(uuid.uuid5(
uuid.NAMESPACE_URL, light().id_v2 + 'device')),
"rtype": "device"
})

#result["grouped_services"].append({
# "rid": self.id_v2,
# "rtype": "grouped_light"
#})
result["id"] = str(uuid.uuid5(uuid.NAMESPACE_URL, self.id_v2 + 'lightgroup'))
result["id_v1"] = "/groups/" + self.id_v1
result["metadata"] = {
"archetype": self.icon_class.replace(" ", "_").replace("'", "").lower(),
"name": self.name
}
for light in self.lights:
if light():
result["services"].append({
"rid": light().id_v2,
"rtype": "light"
})

result["services"].append({
"rid": self.id_v2,
"rtype": "grouped_light"
})

result["type"] = "lightgroup"
return result

def getV2GroupedLight(self):
result = {}
result["alert"] = {
Expand Down
7 changes: 6 additions & 1 deletion BridgeEmulator/flaskUI/restful.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def post(self):

response[0]["success"]["clientkey"] = client_key
bridgeConfig["apiUsers"][username] = ApiUser.ApiUser(username, postDict["devicetype"], client_key)
logging.debug(response)
logging.info(response)
configManager.bridgeConfig.save_config()
return response
else:
Expand Down Expand Up @@ -173,6 +173,9 @@ def post(self, username, resource):
elif postDict["type"] == "Room":
v2Resource = "room"
bridgeConfig[resource][new_object_id] = Group.Group(postDict)
elif postDict["type"] == "LightGroup":
v2Resource = "lightgroup"
bridgeConfig[resource][new_object_id] = Group.Group(postDict)
elif postDict["type"] == "Entertainment":
v2Resource = "entertainment_configuration"
bridgeConfig[resource][new_object_id] = EntertainmentConfiguration.EntertainmentConfiguration(postDict)
Expand Down Expand Up @@ -248,6 +251,8 @@ def post(self, username, resource):
streamMessage["data"].append(newObject.getV2Room())
elif v2Resource == "zone":
streamMessage["data"].append(newObject.getV2Zone())
elif v2Resource == "lightgroup":
streamMessage["data"].append(newObject.getV2lightgroup())
elif v2Resource == "entertainment_configuration":
streamMessage["data"].append(newObject.getV2Api())
else:
Expand Down
10 changes: 10 additions & 0 deletions BridgeEmulator/flaskUI/v2restapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@ def get(self):
data.append(group.getV2Room())
elif group.type == "Zone":
data.append(group.getV2Zone())
elif group.type == "LightGroup":
data.append(group.getV2lightgroup())
# behavior_instance
for key, instance in bridgeConfig["behavior_instance"].items():
data.append(instance.getV2Api())
Expand Down Expand Up @@ -343,6 +345,10 @@ def get(self, resource):
for key, group in bridgeConfig["groups"].items():
if group.type == "Zone":
response["data"].append(group.getV2Zone())
elif resource == "lightgroup":
for key, group in bridgeConfig["groups"].items():
if group.type == "LightGroup":
response["data"].append(group.getV2lightgroup())
elif resource == "grouped_light":
for key, group in bridgeConfig["groups"].items():
response["data"].append(group.getV2GroupedLight())
Expand Down Expand Up @@ -576,6 +582,10 @@ def get(self, resource, resourceid):
return {"errors": [], "data": [object.getV2Api()]}
elif resource == "room":
return {"errors": [], "data": [object.getV2Room()]}
elif resource == "zone":
return {"errors": [], "data": [object.getV2Zone()]}
elif resource == "lightgroup":
return {"errors": [], "data": [object.getV2lightgroup()]}
elif resource == "grouped_light":
return {"errors": [], "data": [object.getV2GroupedLight()]}
elif resource == "device":
Expand Down
5 changes: 5 additions & 0 deletions BridgeEmulator/functions/scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ def findScene(element):
elif element["group"]["rtype"] == "zone":
if obj.id_v2 == element["recall"]["rid"] and obj.group().getV2Zone()["id"] == element["group"]["rid"]:
return obj
elif element["group"]["rtype"] == "lightgroup":
if obj.id_v2 == element["recall"]["rid"] and obj.group().getV2lightgroup()["id"] == element["group"]["rid"]:
return obj
return False

def findGroup(id_v2):
Expand All @@ -23,6 +26,8 @@ def findGroup(id_v2):
return obj
elif obj.getV2Zone()["id"] == id_v2:
return obj
elif obj.getV2lightgroup()["id"] == id_v2:
return obj
return False

def triggerScript(behavior_instance):
Expand Down

0 comments on commit 8c5def5

Please sign in to comment.