/weatherflow

Go module for streaming observations from the WeatherFlow Tempest API

Primary LanguageGoMIT LicenseMIT

weatherflow

weatherflow is a Go module for streaming rapid observations from the WeatherFlow Tempest API.

Installation

go get -u github.com/tris/weatherflow

Example

import (
	"fmt"
	"log"
	"github.com/tris/weatherflow"
)

func main() {
	client := weatherflow.NewClient("your-token-here", nil, log.Printf)

	client.AddDevice(12345)

	client.Start(func(msg weatherflow.Message) {
		switch m := msg.(type) {
		case *weatherflow.MessageObsSt:
			fmt.Printf("Observation: %+v\n", m)
		case *weatherflow.MessageRapidWind:
			fmt.Printf("Rapid wind: %+v\n", m)
		}
	})

	time.Sleep(30 * time.Second)

	client.Stop()
}

Limitations

  • Only Tempest and Rapid Wind observations are passed:
    • Acknowledgement (ack)
    • Rain Start Event (evt_precip)
    • Lightning Strike Event (evt_strike)
    • Device Online Event (evt_device_online)
    • Device Offline Event (evt_device_offline)
    • Station Online Event (evt_station_online)
    • Station Offline Event (evt_station_online)
    • Rapid Wind (3 sec) (rapid_wind)
    • Observation (Air) (obs_air)
    • Observation (Sky) (obs_sky)
    • Observation (Tempest) (obs_st)

TODO

  • Track delayed observations (occasionally the API will emit several obs_st in a batch which are up to 10 minutes old)
  • Track missing observations
  • Track duplicate observations (occasionally the API will emit up to four rapid observations for the same timestamp)

Credit

I took a bit of inspiration from the excellent goweatherflow module, which you should use instead if your Tempest is on the same LAN.