diff --git a/drivers/delta/api.cr b/drivers/delta/api.cr index 864ef618d6..5e7580baef 100644 --- a/drivers/delta/api.cr +++ b/drivers/delta/api.cr @@ -70,7 +70,7 @@ class Delta::API < PlaceOS::Driver devices.push(Models::Device.new(id: key.to_u32, base: value["$base"].to_s, node_type: value["nodeType"].to_s, display_name: value["displayName"].to_s)) end - break if body.json_unmapped.keys.size < 1000 + break unless body.next_req.presence skip += 1000 end @@ -96,7 +96,7 @@ class Delta::API < PlaceOS::Driver objects.push(Models::Object.new(object_type, instance, base: value["$base"].to_s, display_name: value["displayName"].to_s)) end - break if body.json_unmapped.keys.size < 1000 + break unless body.next_req.presence skip += 1000 end diff --git a/drivers/delta/models/list_devices_by_site_name_response.cr b/drivers/delta/models/list_devices_by_site_name_response.cr index 3d45f92443..6eabb08839 100644 --- a/drivers/delta/models/list_devices_by_site_name_response.cr +++ b/drivers/delta/models/list_devices_by_site_name_response.cr @@ -12,6 +12,9 @@ module Delta # returns this when there are no more results @[JSON::Field(key: "Collection")] property collection : String? = nil + + @[JSON::Field(key: "next")] + property next_req : String? = nil end end end diff --git a/drivers/delta/models/list_objects_by_device_number_response.cr b/drivers/delta/models/list_objects_by_device_number_response.cr index e6d58bcca9..84c04bbd05 100644 --- a/drivers/delta/models/list_objects_by_device_number_response.cr +++ b/drivers/delta/models/list_objects_by_device_number_response.cr @@ -11,6 +11,9 @@ module Delta @[JSON::Field(key: "nodeType")] property node_type : String + + @[JSON::Field(key: "next")] + property next_req : String? = nil end end end diff --git a/drivers/delta/uno_next.cr b/drivers/delta/uno_next.cr index eaa0b75a97..f089d03e6e 100644 --- a/drivers/delta/uno_next.cr +++ b/drivers/delta/uno_next.cr @@ -175,19 +175,13 @@ class Delta::UNOnext < PlaceOS::Driver NO_OBJECTS = [] of Models::Object - def cache_sensor_data(zone_id : String? = nil, sensor : SensorType? = nil, device_id : UInt32? = nil) : Nil + protected def cache_sensor_data : Nil + logger.debug { "caching sensor data" } + # grab all the UNONext manager objects site = site_name all_objects = manager_mappings.flat_map do |man_map| - if zone = zone_id - next NO_OBJECTS unless zone.in?({man_map.building_zone, man_map.level_zone}) - end - man_map.managers.flat_map do |id| - if device = device_id - next NO_OBJECTS unless id == device - end - begin Array(Models::Object).from_json(delta_api.list_device_objects(site, id).get.to_json) .select(&.display_name.includes?("UnoNext")) @@ -204,6 +198,8 @@ class Delta::UNOnext < PlaceOS::Driver end end + logger.debug { "found #{all_objects.size} UnoNext objects" } + # parse them into sensor data all_objects.each_slice(7) do |objects| SENSOR_TYPES.each do |index, type|