Skip to content

Latest commit

 

History

History
68 lines (53 loc) · 2.03 KB

README.md

File metadata and controls

68 lines (53 loc) · 2.03 KB

hass-discovery

Provides the structures nessecary to create MQTT Discovery messages for use with Home Assistant.

Usage

Create an entry for the type of device you want to announce. Then publish to a valid topic. A valid topic can be generated from the device entry with device.AnnounceTopic(prefix). The default prefix in homeassistant, but is configurable your configuration.yaml file.

Example:

func PublishBinarySensor(cli mqtt.Client) error {
  uid := "someuniqueidentifier"

  s := BinarySensor{
    StateTopic:    "some/sensor",
    Name:          "ON/OFF Sensor",
    DeviceClass:   "safety",
    UniqueId:      uid,
    ExpireAfter:   60 * 60 * 12,
    ValueTemplate: "{{ value_json.state }}",
    PayloadOn:     "on",
    PayloadOff:    "off",
    Device: &Device{
      Identifiers:   []string{uid},
      Manufacturer:  "Super Widgets Inc.",
      Model:         "Widget 1.0",
      Name:          "Widget",
      SuggestedArea: "outside",
      SWVersion:     "v0.0.3",
    },
  }

  bs, err := json.Marshal(s)
  if err != nil {
    return fmt.Errorf("could not marshal Binary Sensor: %v", err)
  }

  announceTopic := s.AnnounceTopic("homeassistant")
  cli.Publish(announceTopic, 0, true, bs)

  return nil
}

Generation

The structs are created directly from the documentation for the mqtt devices that support discovery.
Recreate the structs with go generate ./...

Sources

It's much easier to generate the structs from the yaml used to create the documentation than it is to scrape https://www.home-assistant.io/integrations/#search/mqtt . So the actual scraping is done on markdown found on github.com.

Issues

  • Device and Availability structs are hard coded and defined in
  • hassdiscovery.go.