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
5 changes: 5 additions & 0 deletions thread_tracking_sensor/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
name: "thread_tracking"
packageKey: "thread_tracking"
permissions:
lan: {}
discovery: {}
3 changes: 3 additions & 0 deletions thread_tracking_sensor/get_info.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#! /bin/bash

curl -k -l http://$1:$2/info
14 changes: 14 additions & 0 deletions thread_tracking_sensor/profiles/thread_tracking_sensor-profile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: "thread_tracking_sensor.v1"
components:
- id: main
capabilities:
- id: contactSensor
version: 1
- id: temperatureMeasurement
version: 1
- id: airQualitySensor
version: 1
- id: switch
version: 1
- id: switchLevel
version: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: thread_tracking_sensor_bridge.v1
components:
- id: main
capabilities:
- id: honestadmin11679.targetcreate
version: 1
- id: honestadmin11679.targetCount
version: 1
- id: honestadmin11679.currentUrl
version: 1
1 change: 1 addition & 0 deletions thread_tracking_sensor/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# HTTP Sensor
91 changes: 91 additions & 0 deletions thread_tracking_sensor/src/disco.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
local json = require 'dkjson'
local log = require 'log'
local utils = require 'st.utils'

--- Add a new device to this driver
---
---@param driver Driver The driver instance to use
---@param device_number number|nil If populated this will be used to generate the device name/label if not, `get_device_list`
--- will be called to provide this value
local function add_sensor_device(driver, device_number, parent_device_id)
log.trace('add_sensor_device')
if device_number == nil then
log.debug('determining current device count')
local device_list = driver.device_api.get_device_list()
device_number = #device_list
end
local device_name = 'Thread Sensor ' .. device_number
log.debug('adding device ' .. device_name)
local device_id = utils.generate_uuid_v4() .. tostring(device_number) .. '2'
local device_info = {
type = 'LAN',
deviceNetworkId = device_id,
label = device_name,
parent_device_id = parent_device_id,
profileReference = 'thread_tracking_sensor.v1',
vendorProvidedName = device_name,
}
local device_info_json = json.encode(device_info)
local success, msg = driver.device_api.create_device(device_info_json)
if success then
log.debug('successfully created device')
return device_name, device_id
end
log.error(string.format('unsuccessful create_device (sensor) %s', msg))
return nil, nil, msg
end

local function add_bridge_device(driver)
log.trace('add_bridge_device')
local device_id = utils.generate_uuid_v4()
local device_name = "Thread Sensor Bridge"
local device_info = {
type = 'LAN',
deviceNetworkId = device_id,
label = device_name,
profileReference = 'thread_tracking_sensor_bridge.v1',
vendorProvidedName = device_name,
}
local device_info_json = json.encode(device_info)
local success, msg = driver.device_api.create_device(device_info_json)
if success then
log.debug('successfully created device')
return device_name, device_id
end
log.error(string.format('unsuccessful create_device (bridge) %s', msg))
return nil, nil, msg
end

--- A discovery pass that will discover exactly 1 device
--- for a driver. I any devices are already associated with
--- this driver, no devices will be discovered
---
---@param driver Driver the driver name to use when discovering a device
---@param opts table the discovery options
---@param cont function function to check if discovery should continue
local function disco_handler(driver, opts, cont)
log.trace('disco')

if cont() then
local device_list = driver:get_devices()
log.trace('starting discovery')
for _idx, device in ipairs(device_list or {}) do
if device:supports_capability_by_id("honestadmin11679.targetcreate") then
return
end
end
local device_name, device_id, err = add_bridge_device(driver)
if err ~= nil then
log.error(err)
return
end
log.info('added new device ' .. device_name)
end
end



return {
disco_handler = disco_handler,
add_sensor_device = add_sensor_device,
}
1 change: 1 addition & 0 deletions thread_tracking_sensor/src/driver_name.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
return "thread_tracking_sensor"
Loading