Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions .gencode_hash.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
23553972c4b777768f0f70fc0f89a0ec81f580b64031169a96379ea22bb95e79 gencode/docs/building_config_entity.html
c21266e8de23b6e8acfac16a177db782375bf71df470c343c3f8eb8b822ef56a gencode/docs/commands_discovery.html
8aa5b5f48f97771deaf5585f8ee74c605c2a43568af04996ff8439843274cce9 gencode/docs/config.html
18c7a15e09ec8de5c7508e077c4baf60b9c9abb4f1919551d2c1a93042a40348 gencode/docs/config.html
0dcc1e8245bf0b2791a4bf9be15d8647acd89124ade475345ce4a9c56d62a824 gencode/docs/configuration_endpoint.html
40f078753386e07bfc200eaf3c35cb4362eb413101f4f00d87c88cde3ee53080 gencode/docs/configuration_execution.html
0e2f9b56fd0d3762ff7ce14e0f9fc119cba17a3c2eeb2dcdbf1ff2fad5c6c9d1 gencode/docs/configuration_pod.html
94bb566ac6a4b6b7f89cd2cf1911f658446cc0bea405014275104623f9964dd3 gencode/docs/configuration_pubber.html
1057fa40fb7a31a23bb2773d21c38cf4590a935bd8b5ea4218e695c6204f5dd9 gencode/docs/data_template.html
1d5294b4a1fea6555e23144e594523e4793c795069b6880ce607ad09a6015581 gencode/docs/equipment_translation.html
cc29a77c12a615e23d070c4bd6337c32f0fa057efa12df771a78c4be465aac9e gencode/docs/events.html
ad23d7fa3cf403b35565c7058f68c41f02c3e7c10614e95dcafa69f53b1e2c08 gencode/docs/events.html
70e57ad6ef39330d958727ebf9dcd61ef6ea30e4c8653eac412bf1867fdb3a70 gencode/docs/events_alarmset.html
2734f2b1fd0d22cdc2381d728376b031aecc4a3653a1faf5f743b973d43872dc gencode/docs/events_discovery.html
03b1c67910c9244476ab62e11ebc3c2c8c164e3b4f289f96446b1a3a24f62373 gencode/docs/events_discovery.html
eafcc3c48189f605f114cde051fea9d13fc5f1a3e395d64fb0a91cb53d4c9aeb gencode/docs/events_pointset.html
b65ce6e8061e61ba676a72c624f1c425bd238e152ce8e3ebb1e9c23f0e502bcb gencode/docs/events_streams.html
81043ba732caab75704d38e6977b32b1c2bcdad89d94ad2a259d0e70ca4aa40e gencode/docs/events_system.html
46fd37b577c655965346d1e3ececf559c4384791214900eeeea1ad8fc72a02b8 gencode/docs/events_udmi.html
baf59590b1a71a49e59d8f499ae5112a1b7a555294dbd72bc821203aecceefa3 gencode/docs/events_validation.html
8d77357337531f7df7b88c332d9cac934723095c5be45ca410e31c9d1f665ee1 gencode/docs/metadata.html
5141c93cffcd2e00e47538b8a0f1fc11eaa7706756e8ccdd1b4c803b8167b4ef gencode/docs/metadata.html
18178a591940c176371fb9196048eaacd40f1323997cf907ca11eb879a095c7e gencode/docs/monitoring.html
64d21cf916e20566171cf9d723e59c297b576bcba89e2a73aec2b018398cc7da gencode/docs/mosquitto_client_response.html
6f332da9cc64230df3551f9748a4eaa4060146e767cae967fc0e73b1f348be5b gencode/docs/persistent_device.html
Expand All @@ -26,7 +26,7 @@ eb6c623142496b61e3c9b00c9ead0ba8541af2050d76ce652e1721c84aa3a096 gencode/docs/r
165a29291d7d66653e46fd1ac5868f63e18f9d67c06ea9ebcb95d4830a528e68 gencode/docs/schema_doc.min.js
7ed934930aee763e0beebc349725ba3909115e8d346bb762f28bcbe745bb163a gencode/docs/schema_extras.js
7a1bbe014c739078d354ec484147325e1d0bd19468f275a53da38add43ebe089 gencode/docs/site_metadata.html
0993d21a1a0ae485bdb2f1794f279d13f782e841d07832f795624cc9f158ea93 gencode/docs/state.html
9bf177ae485395a95661f7deedbbefa54779de8d06337c039cafce145fc59b5f gencode/docs/state.html
275171b2329d64d497fa54f8877656920be7c4f79bc90f67a0ff1bae6700399b gencode/docs/state_validation.html
46347b31bc2a56bc74af9bb702ad40c7823887d5e9b1427903a4892cde3cd169 gencode/java/udmi/schema/AlarmAlarmsetConfig.java
520b12eb8cec4f043f81f898c4be12def09b7de138533922e17c038415fb8902 gencode/java/udmi/schema/AlarmAlarmsetEvents.java
Expand Down Expand Up @@ -66,7 +66,7 @@ c04302f973508295258d4d3a29b5da70bf3cd3a6e2c63a958fb70dd3d370276c gencode/java/u
52ae2afb2dcb7863259e7eea71888811663c010429c09760493f5f006a660c84 gencode/java/udmi/schema/Dimension.java
2bb1513817eea9c0486b28f3316ead16d53885a8bad9f6a42ee3d5f762335a68 gencode/java/udmi/schema/DiscoveryCommand.java
a572f17a61584a32ff19968356f7f7d7bcc8430131ac3701878d0bd221e1a1fa gencode/java/udmi/schema/DiscoveryConfig.java
9217b2c963003ca51ec61b9aadd40877634f2bea08d7fd412b51521e8ec61cfb gencode/java/udmi/schema/DiscoveryEvents.java
125646ad6cd48e61b743ed0342283b42efba15f072bbdb882c6d9871930154fd gencode/java/udmi/schema/DiscoveryEvents.java
af16026c143a592562b77012dd739c02364bd1a9d6bbd6c7ede4f3a5a38b7f4a gencode/java/udmi/schema/DiscoveryModel.java
0fd348086bfd8e38a54a06b0fd205f6d01fdc6236f07ccc8bef49a1832f8c767 gencode/java/udmi/schema/DiscoveryState.java
baef666f5f58f790b73ba7bed8f60eacdd75ba3151b9abc32265954a9da84faa gencode/java/udmi/schema/Electricity.java
Expand All @@ -77,9 +77,9 @@ f890a14567657f5c97c2d3c1c753d751025ee094700ef0659f63f448529cc529 gencode/java/u
9df1e0a689390bda0847a0acab5a13fd7ced8c09b8563c13a7ce000ef1ea4999 gencode/java/udmi/schema/Events.java
8aed152c906c51a72a9224e7aec14bcdbd9ac2e00c2b1fed6bd5515082f79488 gencode/java/udmi/schema/ExecutionConfiguration.java
a5a41a2bc809988efbbc121cdf730cbc1eb066372e046747fb6ae3f30e96a8b1 gencode/java/udmi/schema/FamilyDiscovery.java
0de804fb208fdf2ef198539ed5b828b780bc6c5cdd9e31b10067372165c4b7d4 gencode/java/udmi/schema/FamilyDiscoveryConfig.java
60286ff934d1ad721d90b2691538700073b73376207b06badfbd3f65e9d51b29 gencode/java/udmi/schema/FamilyDiscoveryConfig.java
6f9eaf4b56d3666caa65be4ded3344cb5b59aa9f838b454b5a4983d68061163e gencode/java/udmi/schema/FamilyDiscoveryModel.java
1d1f5a6ebf1db5f06976c6e4fb14f1404eec5460b9eb34f0508e1f95aa69e81b gencode/java/udmi/schema/FamilyDiscoveryState.java
9a786b1f9a4815f108e805ce0ffadea01a1577a4d051ba70d391f82a726c5f2f gencode/java/udmi/schema/FamilyDiscoveryState.java
180a65a6c61b76cbec7bb45bbfdfe0d4f26170d7f7e74aef9bd129f1dd451edf gencode/java/udmi/schema/FamilyLocalnetConfig.java
d6782eef0f60aa8dc9f57219ba6dd336a1a9d68e7ba174e59c7dfd6f0f05a4f4 gencode/java/udmi/schema/FamilyLocalnetModel.java
9ca698d84b784b87d52d1f6cbaaa08964a7f050dfefe338ea95afc440ccc9a9f gencode/java/udmi/schema/FamilyLocalnetState.java
Expand Down Expand Up @@ -176,7 +176,7 @@ e92d040fe84cc1bbc6e6b2d81a39dae156e1501e1c07a0b6cfc42e1599403e64 gencode/python
0feda2aadb7b5cbfbadc1ea6950292f428b765f8f27e874414d3ca9941f3746c gencode/python/udmi/schema/config_blobset.py
234b237a299d31b92dd873af6713c56e388345faeb79cbf2b46090c7d10ef00a gencode/python/udmi/schema/config_blobset_blob.py
246f6878e5a4b7f5e1a27d1c51aadd42bef07ee2113b9cd568bb623b24bc85de gencode/python/udmi/schema/config_discovery.py
5815f7f1ec7e5a2d5b7e3065060872d109ebb64f595c004a4b5b490c918684c2 gencode/python/udmi/schema/config_discovery_family.py
5445564598da1d534158603b7a0e42f1528629b8fdfcba3b4807e84510ff79e9 gencode/python/udmi/schema/config_discovery_family.py
326edbdbb90e376375294ba645fd789d1ae1809e8a98f3b32c3d04c2bc316ac1 gencode/python/udmi/schema/config_discovery_trace.py
0d100d1fec28c4e59cba704e5a512549972f427ea4da268c7472208fdccd96a6 gencode/python/udmi/schema/config_gateway.py
8119455e323f686da48ccf65d494d0dc2a26ad2a2a02d0f0167dc9a020740225 gencode/python/udmi/schema/config_localnet.py
Expand All @@ -203,7 +203,7 @@ ab1a8ee1f12d04dd88837b6f026030b5ed3550ef3bfbbfbcb4f77cc4df39e93a gencode/python
3dcf4daa94b8450b7360e58500e20e1fbe5701502ac28358112ee1a6bd2a87f1 gencode/python/udmi/schema/events.py
af48a2d32b4ec326df6e3f165d8944b994fb426bd4e663c42c1d592f5cb41f83 gencode/python/udmi/schema/events_alarmset.py
b58371ffa7979d1598502a35859f3010ae7a2ec2d851454c010c835e426c7a14 gencode/python/udmi/schema/events_alarmset_alarm.py
3996175098735e889730c87ffc9ce1648e6624d801694458f6d4bc147ff29741 gencode/python/udmi/schema/events_discovery.py
46ed7eb98290eee6a2a3b271be75269b6dc2d5a439c61150384c2f1efe9f68bb gencode/python/udmi/schema/events_discovery.py
84700f9d8a8975130ff9c62891003f7a12f367fa7dd1ca1db5f5fae7225bf005 gencode/python/udmi/schema/events_pointset.py
9f568bd573d4992e3efa3cc3cb8cdefecb95b15675b0442873abdc7850d108f9 gencode/python/udmi/schema/events_pointset_point.py
282439e4983ae9f310fda69dd6ff979567fa983ebdefcde407df42d631fe1bad gencode/python/udmi/schema/events_streams.py
Expand All @@ -212,7 +212,7 @@ e4cdab07942e52cae243b4dddbc72676794914947dd66df8add0f5969f31fd11 gencode/python
72559779680c79dace3c5903022709852cbad7b77ed42af97debc8d852d61cb7 gencode/python/udmi/schema/events_validation.py
a3ea178f98a4993da708e2ec41f5ede74aa92d742ffbe201a77adef803d4143a gencode/python/udmi/schema/events_validation_device.py
5660433b409bdaeacdce6b128660914586cca434e5373b3f94c04e89952642b4 gencode/python/udmi/schema/level.py
9577d11c5110af169aafd0e083d115c849ce17dfdc2b6b23b7186c69c1c333db gencode/python/udmi/schema/metadata.py
7595bc97beb84246bed974ec210c3c80f82926342c3cd062aa71d6805999eb35 gencode/python/udmi/schema/metadata.py
cd81df64d7db21ab06f84cdbd07a808a641612c7c1124f9f2d928a898c3c767e gencode/python/udmi/schema/model_alarmset.py
b80b7f580fd7527da0c2caff063218488cf5bbd091daa64a6a5f9a5d45b135c2 gencode/python/udmi/schema/model_alarmset_alarm.py
6d19eb94063acbc8e5432b9827e8b20f4f8cd02efa6ae760fabe60652c69542d gencode/python/udmi/schema/model_cloud.py
Expand Down Expand Up @@ -249,7 +249,7 @@ bc7fae9084e9511001e87409867ea5c1edd29892b21cd611d7d3689afa39ed68 gencode/python
c3aafb1bcd85fc43f50aaba1f30f51657108d70ef62ffd95444112be508973bb gencode/python/udmi/schema/state_blobset.py
a3b9848f8887b75e013276ebd353afad899f147bec7c1ea0d70d7833f5dbe212 gencode/python/udmi/schema/state_blobset_blob.py
450d9ef8aca6ac904a8231ab4b0d1c268f0f5d24693fd4757664bb4c71e4a7f6 gencode/python/udmi/schema/state_discovery.py
9332d44d29f5c6d5642aadc5564f83c39556eb94bfc55559eca955d2d53ea4ab gencode/python/udmi/schema/state_discovery_family.py
b9ec341b956f7b71b28b72ad372eca66e4d728670756b1c535fceb47993cdbc6 gencode/python/udmi/schema/state_discovery_family.py
ea2dc5ef443f91f2f6a6b5a0acc09e791870a275840a41acbb9bff82c3a4b8ee gencode/python/udmi/schema/state_gateway.py
2ca909da04032af58498600234f0a0c677c0f83b4705f4899bfb630b7aec05af gencode/python/udmi/schema/state_localnet.py
e3763677989966c0884163bb726094c759ec4f2eb5c103880cecd895a3315fd8 gencode/python/udmi/schema/state_localnet_family.py
Expand Down
44 changes: 44 additions & 0 deletions bin/gencode_py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,50 @@ bin/gencode_py_categories
# create bucket.py from docs/specs/buckets.md
bin/gencode_py_buckets

# Resolve mutual circular imports by moving them to the bottom of the module (after class definitions)
python3 - "$PYTHON_OUTPUT_DIR" << 'EOF'
import os, re, sys

out_dir = sys.argv[1]
import_re = re.compile(r"^from \.([a-zA-Z0-9_]+) import .+$")
deps = {}
lines_by_mod = {}

for fname in sorted(os.listdir(out_dir)):
if not fname.endswith(".py") or fname == "__init__.py":
continue
mod = fname[:-3]
path = os.path.join(out_dir, fname)
with open(path, "r", encoding="utf-8") as f:
lines = f.readlines()
lines_by_mod[mod] = (path, lines)
deps[mod] = set()
for line in lines:
m = import_re.match(line.strip())
if m:
deps[mod].add(m.group(1))

for mod, (path, lines) in lines_by_mod.items():
cyclic_targets = {target for target in deps[mod] if mod in deps.get(target, set())}
if not cyclic_targets:
continue
kept = []
deferred = []
for line in lines:
m = import_re.match(line.strip())
if m and m.group(1) in cyclic_targets:
deferred.append(line.rstrip("\n") + "\n")
else:
kept.append(line)
if deferred:
if kept and not kept[-1].endswith("\n"):
kept[-1] += "\n"
kept.append("\n")
kept.extend(deferred)
with open(path, "w", encoding="utf-8") as f:
f.writelines(kept)
EOF

# add import statements to udmi/schema/__init__.py
find "$PYTHON_OUTPUT_DIR" -name "*.py" -not -name "__init__.py" -print0 | while IFS= read -r -d $'\0' file; do
module_name=$(basename "$file" .py)
Expand Down
3 changes: 2 additions & 1 deletion bin/gencode_root_schemas
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ IGNORE_LIST = ['events.json']
# These are sometimes referenced (e.g. by pubber) but should be considered root
ALWAYS_ROOT = ['configuration_endpoint.json',
'events_system.json',
'events_discovery.json']
'events_discovery.json',
'metadata.json']

def parse_command_line_args():
parser = argparse.ArgumentParser()
Expand Down
28 changes: 28 additions & 0 deletions bin/gendocs.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,34 @@

from json_schema_for_humans.generate import generate_from_filename
from json_schema_for_humans.generation_configuration import GenerationConfiguration
import json_schema_for_humans.schema.intermediate_representation as ir
from json_schema_for_humans.schema.schema_node import SchemaNode

# pylint: disable=protected-access,invalid-name
orig_has_ref_to_parent = ir._has_reference_to_parent
orig_node_is_parent = SchemaNode.node_is_parent


def _has_reference_to_parent(referenced_schema_path, anchor_part, current_node):
node = current_node
while node:
if orig_has_ref_to_parent(referenced_schema_path, anchor_part, node):
return True
node = node.parent
return False


def _node_is_parent(self, node_to_check):
node = self
while node:
if orig_node_is_parent(node, node_to_check):
return True
node = node.parent
return False


ir._has_reference_to_parent = _has_reference_to_parent
SchemaNode.node_is_parent = _node_is_parent

config = GenerationConfiguration(copy_css=True,
expand_buttons=True,
Expand Down
53 changes: 52 additions & 1 deletion bin/test_uufi_client
Original file line number Diff line number Diff line change
Expand Up @@ -196,5 +196,56 @@ restore_metadata
trap - EXIT
echo "System Model Update SUCCESS: Received matching model update message on bus"

# 4. Site Model Discovery Test
echo "Starting Site Model Discovery test..."
DISC_LOG_FILE=$(mktemp)
DISC_GEN=$(date -u +%Y-%m-%dT%H:%M:%SZ)
echo "Subscribing to /r/$REGISTRY_ID/d/+/+/discovery for Model Discovery sequence (gen: $DISC_GEN)..."
mosquitto_sub $MQTT_ARGS -i "${CLIENT_ID}_disc_sub" -t "/r/$REGISTRY_ID/d/+/+/discovery" -F "%t %p" | while read -r topic payload; do
GEN=$(echo "$payload" | jq -r '.generation // .families.iot.generation' 2>/dev/null)
if [[ "$GEN" == "$DISC_GEN" ]]; then
echo "$topic $payload" >> "$DISC_LOG_FILE"
if grep -q '"phase":"active"' "$DISC_LOG_FILE" && \
grep -q '"event_no":0' "$DISC_LOG_FILE" && \
grep -q "/r/$REGISTRY_ID/d/$DUT_ID/events/discovery" "$DISC_LOG_FILE" && \
grep -q '"phase":"stopped"' "$DISC_LOG_FILE"; then
kill -USR1 $$ 2>/dev/null || true
exit 0
fi
fi
done &
SUB_DISC_PID=$!

GOT_DISC=0
trap "GOT_DISC=1" USR1
sleep 2

DISC_CONFIG="{\"subType\":\"config\",\"subFolder\":\"discovery\",\"deviceRegistryId\":\"$REGISTRY_ID\",\"payload\":{\"version\":\"1.5.7\",\"timestamp\":\"$DISC_GEN\",\"generation\":\"$DISC_GEN\",\"families\":{\"iot\":{\"generation\":\"$DISC_GEN\",\"depth\":\"details\",\"source\":\"model\"}}}}"
echo "Publishing Model Discovery config to /uufi/r/$REGISTRY_ID/c/config/discovery: $DISC_CONFIG"
mosquitto_pub $MQTT_ARGS -i "${CLIENT_ID}_disc_pub" -t "/uufi/r/$REGISTRY_ID/c/config/discovery" -m "$DISC_CONFIG"

TIMEOUT=30
while [ $GOT_DISC -eq 0 ] && [ $TIMEOUT -gt 0 ]; do
echo "Waiting for Model Discovery completion... ($TIMEOUT)"
sleep 1
TIMEOUT=$((TIMEOUT - 1))
done

kill $SUB_DISC_PID 2>/dev/null || true

if [ $GOT_DISC -eq 0 ]; then
echo "ERROR: Timed out waiting for Model Discovery sequence completion" >&2
cat "$DISC_LOG_FILE" || true
exit 1
fi

# Verify active state, event_no=0 count, AHU-1 model event, source:model, and stopped state on target stream
grep -q '"phase":"active"' "$DISC_LOG_FILE" || { echo "ERROR: Missing active DiscoveryState in Model Discovery" >&2; cat "$DISC_LOG_FILE"; exit 1; }
grep -q '"event_no":0' "$DISC_LOG_FILE" || { echo "ERROR: Missing event_no=0 DiscoveryEvents in Model Discovery" >&2; cat "$DISC_LOG_FILE"; exit 1; }
grep -q "/r/$REGISTRY_ID/d/$DUT_ID/events/discovery" "$DISC_LOG_FILE" || { echo "ERROR: Missing $DUT_ID DiscoveryEvents in Model Discovery" >&2; cat "$DISC_LOG_FILE"; exit 1; }
grep -q '"source":"model"' "$DISC_LOG_FILE" || { echo "ERROR: Missing source:model in Model Discovery messages" >&2; cat "$DISC_LOG_FILE"; exit 1; }
grep -q '"phase":"stopped"' "$DISC_LOG_FILE" || { echo "ERROR: Missing stopped DiscoveryState in Model Discovery" >&2; cat "$DISC_LOG_FILE"; exit 1; }
echo "Site Model Discovery SUCCESS: Verified start state, event_no=0 count, device model events, and stop state"

echo "UUFI Comprehensive Integration Test PASSED"
rm -f "$REPLY_FILE" "$STATE_REPLY_FILE" "$MODEL_REPLY_FILE"
rm -f "$REPLY_FILE" "$STATE_REPLY_FILE" "$MODEL_REPLY_FILE" "$DISC_LOG_FILE"
9 changes: 7 additions & 2 deletions butler/src/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,13 @@ def _resolve_endpoint(self):
self.username = f"/r/{ns_prefix}UDMI-REFLECT/d/{self.actual_registry}"
self.password = derived_pass

def get_discovery_topics(self, device_id):
"""Returns list of topics to publish discovery config for target device."""
def get_discovery_topics(self, device_id=None):
"""Returns list of topics to publish discovery config for target device or registry."""
if not device_id:
uufi_topic = f"/uufi/r/{self.actual_registry}/c/config/discovery"
if self.prefix:
uufi_topic = f"/{self.prefix}{uufi_topic}"
return [uufi_topic]
if self.provider in ("gbos", "clearblade"):
return [
f"/devices/{device_id}/commands/discovery",
Expand Down
32 changes: 25 additions & 7 deletions butler/src/discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,28 @@
from butler.src.connection import ButlerConnection


def run_discovery(conn_spec, registry_id, device_id, target_families, site_model=None):
def run_discovery(conn_spec, registry_id, device_id=None, target_families=None, site_model=None):
"""Dispatches discovery configuration message over the configured project spec / broker."""
connection = ButlerConnection(conn_spec, registry_id, site_model, device_id)
is_registry_discovery = not device_id
actual_device_id = None if is_registry_discovery else device_id
connection = ButlerConnection(conn_spec, registry_id, site_model, actual_device_id)
actual_registry = connection.actual_registry

now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
families_dict = {}
if is_registry_discovery and not target_families:
target_families = ["iot"]

if target_families:
for f in target_families:
families_dict[f] = {"generation": now}
if f == "iot":
families_dict[f] = {
"generation": now,
"depth": "details",
"source": "model",
}
else:
families_dict[f] = {"generation": now}
else:
families_dict = {
"vendor": {"generation": now},
Expand All @@ -30,25 +42,31 @@ def run_discovery(conn_spec, registry_id, device_id, target_families, site_model
tx_id = f"TXN-{uuid.uuid4().hex[:8]}"
source_id = "butler"
payload = {
"version": "1.5.2",
"version": "1.5.7",
"timestamp": now,
"generation": now,
"families": families_dict,
"enumerations": {"families": "entries", "points": "entries", "features": "entries"},
}
if not is_registry_discovery:
payload["enumerations"] = {
"families": "entries",
"points": "entries",
"features": "entries",
}
msg = {
"subType": "config",
"subFolder": "discovery",
"deviceRegistryId": actual_registry,
"deviceId": device_id,
"projectId": connection.project or "vibrant",
"transactionId": tx_id,
"publishTime": now,
"source": source_id,
"principal": source_id,
"payload": payload,
}
if actual_device_id:
msg["deviceId"] = actual_device_id

topics = connection.get_discovery_topics(device_id)
topics = connection.get_discovery_topics(actual_device_id)
topic_message_pairs = [(t, msg) for t in topics]
connection.publish_messages(topic_message_pairs)
Loading
Loading