Categorygithub.com/tommzn/hdb-datasource-indoorclimate

# README

Go Reference GitHub go.mod Go version GitHub release (latest by date) Go Report Card Actions Status

HomeDashboard Indoor Climate DataSource

Fetches indoor climate data from Bluetooth sensor devices, e.g. Xiaomi Mi Temperature and Humidity Monitor 2, and publishes this data to specified targets. Indooe climate data can be collected in two ways.

  • Running on a M5Stack Core2, using ESP32 Wifi and Bluetooth
  • Running on a host with Bluetooth device, e.g. a Raspberry PI

M5Stack

IndoorClimate provides a sketch which can be uploaded to a M5Stack Core2. With a few adjustements, e.g. skip LCD updates, this sketch can be uploaded to a lot of other ESP32 boards.

Config

You have to add AWS IOT settings at settings.h and necessary certificates to certs.h. For WiFi connections add you SSID and password to wifi_credentials.h.

AWS IOT Setup

To setup AWS IOT device, certificate, policy and rule have a look at AWS IOT Setup. A lambda function to process IOT events is available at lambda.

Sensor Data Collector

Collector can be compiled to a binary and executed as a deamon.

Define Devices and Characteristics

You've to add a list of devices and characteristics you want to observe in config.

indoorclimate:
  schedule: 10m
  devices:
    - id: "A4:XX:XX:XX:26:41"
  characteristics:
    - uuid: "00002a6e-0000-1000-8000-00805f9b34fb"
      type: "temperature"
    - uuid: "00002a6f-0000-1000-8000-00805f9b34fb"
      type: "humidity"
    - uuid: "00002a19-0000-1000-8000-00805f9b34fb"
      type: "battery"

Schedule

This value defines how often sensor data should be read. See Config for more details about supported values.

Devices

Provide a list of MAC addesses for Bluetooth environment sensors.

Characteristics

Define a list of observed characteristics by their UUID and specifiy a indoor cliamte data type.

Targets

By default a SensorDataCollector doesn't have any target assigned. This means your indoor climate date get lost. Targets package provides different publishers you can assign to a SensorDataCollector to send indoor climate data to a target.

Usage

After creating a new collector you can call it's Run method to start consuming new indoor climate data from MQTT broker. By default all received indoor climate data are send to default target which is a logger, only. Collector will run until you cancel passed context.


    import (
      "fmt"
      "context"

       indoorclimate "github.com/tommzn/hdb-datasource-indoorclimate"  
       targets "github.com/tommzn/hdb-datasource-indoorclimate(targets"  
       config "github.com/tommzn/go-config"
	     log "github.com/tommzn/go-log"
    )
    
    conf, _ := config.NewConfigSource().Load()
    if err != nil {
        panic(err)
    }
    logger := log.NewLoggerFromConfig(conf, nil)

    datacollector := indoorclimate.NewSensorDataCollector(conf, logger)
    if err != nil {
        panic(err)
    }

    datacollector.AppendTarget(targets.NewStdoutTarget())
    if err := datacollector.Run(context.Background()); err != nil {
      fmt.Println)err  
    }
    

Links

# Functions

NewMockPlugin creates a new mock plugin.
No description provided by the author
NewMqttCollector returns a new collector listen for MQTT messages to obtain indoor climate data.
NewMqttLivenessObserver creates a new liveness probe for MQTT.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

Characteristic is a songle sensor value.
IndoorClimateMeasurement is a metric read from a sensor device.
MockPlugin can be used for testing.
MockTarget can be used for testing.
MqttCollector subcribes to MQTT topics to extract indoor climate date from published messages.
MqttLivenessObserver can be use to observer a MQTT server.
MqttSubscriptionConfig define a MQTT topic and it's message handler plugin.

# Interfaces

DevicePlugin is used to subscribe to MQTT topics and extract measurements from published data.
MqttSubscription is used to handle messages received from subscribes MQTT topics.
Publisher sends given measuremnts to different targets.

# Type aliases

DevicePluginKey defines a plugin for devices of a specific manufacturer.
MeasurementType is a indoor climate date type, e.g.