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