63 lines
2.2 KiB
Plaintext
63 lines
2.2 KiB
Plaintext
import string
|
|
import mqtt
|
|
import json
|
|
import object
|
|
|
|
def entity_create(Name,opts)
|
|
# opts = { type: (sensor/binary-sensor), jsonkey: , icon:, topic_prefix, topic, unit, custom}
|
|
if !Name
|
|
print('must pass a name for the home assistant entity')
|
|
return nil
|
|
end
|
|
opts = object(opts)
|
|
opts.type = opts.type ? opts.type : 'sensor'
|
|
print('######### creating Home Assitant entity:',Name, '#############')
|
|
var mac = string.tolower(string.split(tasmota.wifi()['mac'],':').concat())
|
|
# var mac = '1q2w3e4r5t'
|
|
var name = string.tolower(string.split(Name,' ').concat('_'))
|
|
var id = mac+'-'+name
|
|
# print(mac,name, id)
|
|
var topic = tasmota.cmd('topic')['Topic']
|
|
var Device = tasmota.cmd('status')['Status']['DeviceName']
|
|
var device = string.tolower(string.split(Device,' ').concat('_'))
|
|
# var topic = 'tastmotatesting'
|
|
# var dis_topic = 'tasmota/discovery/'+id+'/sensors/config'
|
|
var dis_topic = 'homeassistant/sensor/'+mac+'/'+ name +'/config'
|
|
print(dis_topic)
|
|
var p = object() # payload
|
|
p.name = Device + ' ' + Name
|
|
p.uniq_id = id
|
|
p.device = {'cns': [['mac',mac]]}
|
|
if opts.topic
|
|
p.state_topic = opts.topic
|
|
else
|
|
if opts.topic_prefix
|
|
p.state_topic = opts.topic_prefix + '/' + device + '/' + name
|
|
else
|
|
p.state_topic = 'stat/'+ topic + '/'+ name
|
|
end
|
|
end
|
|
if opts.unit p.unit_of_measurement = opts.unit end
|
|
if opts.icon p.icon = opts.icon end
|
|
if opts.jsonkey p.value_template = '{{ value_json.'+ opts.jsonkey + ' }}' end
|
|
if opts.value_template p.value_template = opts.value_template end
|
|
if opts.custom
|
|
# opts.custom = type(opts.custom == 'string') ? json.load(opts.custom) : opts.custom
|
|
print('merged custom', opts.custom)
|
|
p.merge(opts.custom,true)
|
|
print(p.get())
|
|
end
|
|
print(p.dump())
|
|
print("############ Entity Created #######################")
|
|
|
|
# (topic:string, payload:string[, retain:bool, start:int, len:int]) -
|
|
mqtt.publish(dis_topic,p.dump(), true)
|
|
|
|
return [p.get(), dis_topic, mac , device]
|
|
|
|
end
|
|
|
|
var ha = module('ha')
|
|
ha.entity_create = entity_create
|
|
return ha
|