uci-berry-utils/ha.be

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