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