WeatherFlow Tempest API & Developer Platform

Most third-party Tempest apps and integrations are designed for the personal use by a single Tempest System owner. 

To start using the REST or WS API, all you need is an access token. Your app or integration must ensure that the user viewing the station data is the owner of that station by authenticating the user’s account. There are two options for authentication: Oauth or the Personal Access Token.

To create a WeatherFlow login:
Download the Tempest app from the app stores.

GW1000 EcoWitt

WIFI Weather Station Gateway: Receives Ecowitt and Ambient Weather sensor data from external sensors (sold separately): outdoor temperature and humidity, multi-channel (max 8) temperature and humidity, rain, wind, soil moisture(max 8), PM2.5(max 4) and so on; Allowing you to remote monitor weather data on our free WS View APP

Studing a bit their API to access the data over a TCP “pull” connection

Cumulus MX source implemented it and their code is opensource

Specific part about the GW1000

and an extract to showcase how elegant is their solution (not):

// sample data = in-temp, in-hum, abs-baro, rel-baro, temp, hum, dir, speed, gust, light, UV uW, UV-I, rain-rate, rain-day, rain-week, rain-month, rain-year, PM2.5, PM-ch1, Soil-1, temp-2, hum-2, temp-3, hum-3, batt
//byte[] data = new byte[] { 0xFF,0xFF,0x27,0x00,0x5D,0x01,0x00,0x83,0x06,0x55,0x08,0x26,0xE7,0x09,0x26,0xDC,0x02,0x00,0x5D,0x07,0x61,0x0A,0x00,0x89,0x0B,0x00,0x19,0x0C,0x00,0x25,0x15,0x00,0x00,0x00,0x00,0x16,0x00,0x00,0x17,0x00,0x0E,0x00,0x3C,0x10,0x00,0x1E,0x11,0x01,0x4A,0x12,0x00,0x00,0x02,0x68,0x13,0x00,0x00,0x14,0xDC,0x2A,0x01,0x90,0x4D,0x00,0xE3,0x2C,0x34,0x1B,0x00,0xD3,0x23,0x3C,0x1C,0x00,0x60,0x24,0x5A,0x4C,0x04,0x00,0x00,0x00,0xFF,0x5C,0xFF,0x00,0xF4,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xBA };
//byte[] data = new byte[] { 0xFF, 0xFF, 0x27, 0x00, 0x6D, 0x01, 0x00, 0x96, 0x06, 0x3C, 0x08, 0x27, 0x00, 0x09, 0x27, 0x49, 0x02, 0x00, 0x16, 0x07, 0x61, 0x0A, 0x00, 0x62, 0x0B, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x15, 0x00, 0x01, 0x7D, 0x40, 0x16, 0x00, 0x00, 0x17, 0x00, 0x0E, 0x00, 0x00, 0x10, 0x00, 0x00, 0x11, 0x00, 0xF7, 0x12, 0x00, 0x00, 0x01, 0x5C, 0x13, 0x00, 0x00, 0x15, 0x54, 0x2A, 0x06, 0x40, 0x4D, 0x00, 0xAB, 0x1A, 0xFF, 0x3E, 0x22, 0x39, 0x1B, 0x00, 0x3D, 0x23, 0x51, 0x1C, 0x00, 0xA0, 0x24, 0x45, 0x1D, 0x00, 0xA4, 0x25, 0x3C, 0x1E, 0x00, 0x9D, 0x26, 0x3E, 0x4C, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xA4, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x19, 0x00, 0x1A, 0x8F };

        // expected response
        // 0 - 0xff - header
        // 1 - 0xff
        // 2 - 0x27 - live data command
        // 3 - 0x?? - size of response1
        // 4 - 0x?? - size of response2
        // 5-X      - data - NOTE format is Bigendian
        // Y - 0x?? - checksum

CH-AW 0.4

QRCode sneaked in.
Was easier than expected.
Based on ZXing implementation.

Now focus on the status bar temperature. I forgot how underutilized/underestimated/badly supported are those space up there and the whole android notification ecosystem.

Notifications should be a huge part of an OS workflow and user experience but nobody seem to really realize how powerful they could be.

Time to re-utilize some of the tricks I used with this notification volume control.