class MQTT::Homie::Device

def initialize(id, name, root_topic: nil, mqtt: nil, clear_topics: true, &block)

def initialize(id, name, root_topic: nil, mqtt: nil, clear_topics: true, &block)
  super(id, name)
  @root_topic = @root_topic || "homie"
  @state = :init
  @nodes = {}
  @published = false
  @block = block
  mqtt = MQTT::Client.new(mqtt) if mqtt.is_a?(String)
  @mqtt = mqtt || MQTT::Client.new
  @mqtt.set_will("#{topic}/$state", "lost", retain: true, qos: 1)
  @mqtt.on_reconnect do
    each do |node|
      node.each do |property|
        property.subscribe
      end
    end
    mqtt.publish("#{topic}/$state", :init, retain: true, qos: 1)
    mqtt.publish("#{topic}/$state", state, retain: true, qos: 1) unless state == :init
  end
  @mqtt.connect
  self.clear_topics if clear_topics
end