Categorygithub.com/tommzn/hdb-datasource-indoorclimate
repositorypackage
1.8.2
Repository: https://github.com/tommzn/hdb-datasource-indoorclimate.git
Documentation: pkg.go.dev

# 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