Skip to content

Instantly share code, notes, and snippets.

@rct
Last active August 25, 2022 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rct/b144c4c873aaa469545b06052c8f4136 to your computer and use it in GitHub Desktop.
Save rct/b144c4c873aaa469545b06052c8f4136 to your computer and use it in GitHub Desktop.

Acurite Sensor Message Format

Collected information based on investigation for implementing rtl_433 decoders.

Devices that share a common header and envelope

Note: these are generally compatible with the Acurite Access RF->Network gateway

  • Notos (3-n-1) Weather station
  • Iris (5-n-1) Weather station
  • Atlas (7-n-1) Weather station
  • 592TXR/6002 "Tower" temperature and humidity sensors
  • 6044m Indoor temperature and humidity sensor (aka room sensor)
  • 6045m Lightning detector
  • 899 Rain sensor
  • 515 Refrigerator / Freezer Sensor (*)
  • 1192m Water Alarm (*)

(*) Not (yet?) listed as compatible with Acurite Access but shares the same message envelope

Note: 00275m outdoor monitor, monitor with leak, soil temperature, or spot check sensor likely is part of this message family. They are listed as My Acurite compatible (so works with Acurite Access) but are implemented in rtl_433 as a separate protocol. TBD if these could be folded under the same protocol, or if there is any compelling reason to do so.

Message Length

Bytes/Bits (*note demodulator returns extra bits in certain cases)

Bytes Bits Device
6 48/50* 515 Refrigerator/Freezer
7 56/57+* "Tower" sensors (592TXR and others)
7 56/? 1192 Water alarm
8 64 5n1/Iris Weather Station
8 64 3n1/Notos Weather Station
8 64 Atlas Weather Station without lightning sensor
8 64 899 Rain Gauge
9 72 6045M Lightning sensor
10 80 Atlas Weather Stations with lightning sensor installed

Common Data Elements

  • Channel
  • ID
  • Message type
  • Battery OK/Low
  • Sequence (5n1 and Atlas weather stations only)

Device ID

Unless otherwise noted, IDs are fixed at the factory and will not change.

  • Acurite 6045m Lightning 14 bits - 0x3fff - 16383 possible IDs,
  • Acurite 5n1 12 bits - 0x0FFF - 4095 possible IDs
  • Acurite Atlas 10 bits (1023 possible IDs)

Wire encoding of common elements

  • Byte 0:
    • Channel (Mask 0xc0) (4 bits, A,B,C) (no parity)
    • Sequence number (5n1 and Atlas only)
      • 5n1 (mask 0x30)
      • Atlas (mas 0x0c)
      • (TBD does 3n1 use this?)
    • ID MSB bits (Mask 0x3f or 0x0f or 0x03)
  • Byte 1: ID LSB bits (All 8 bits, no parity)
  • Byte 2:
    • Parity bit
    • Battery Ok/Low (Mask 0x40)
    • Message type (Mask 0x3f)
  • Byte 3 - (n - 1): device specific data, parity checked
  • Byte n: 8 bit checksum (no parity)

Message Integrity Check

  • Checksum, 8 bits, bytes 0 - (n-1)
  • Parity on bytes other than 0, 1, n
    • (any exceptions TBD)

Message Type

Message type is encoded in the lower 6 bits (0x3f) of the third byte. 64 possible values.

#define ACURITE_MSGTYPE_LEAK_DETECTOR                   0x01

#define ACURITE_MSGTYPE_TOWER_SENSOR                    0x04
#define ACURITE_MSGTYPE_ATLAS_WNDSPD_TEMP_HUM           0x05
#define ACURITE_MSGTYPE_ATLAS_WNDSPD_RAIN               0x06
#define ACURITE_MSGTYPE_ATLAS_WNDSPD_UV_LUX             0x07
#define ACURITE_MSGTYPE_515_REFRIGERATOR                0x08
#define ACURITE_MSGTYPE_515_FREEZER                     0x09

#define ACURITE_MSGTYPE_3N1_WINDSPEED_TEMP_HUMIDITY     0x20

#define ACURITE_MSGTYPE_ATLAS_WNDSPD_TEMP_HUM_LTNG      0x25
#define ACURITE_MSGTYPE_ATLAS_WNDSPD_RAIN_LTNG          0x26
#define ACURITE_MSGTYPE_ATLAS_WNDSPD_UV_LUX_LTNG        0x27

#define ACURITE_MSGTYPE_6045M                           0x2f
#define ACURITE_MSGTYPE_899_RAINFALL                    0x30
#define ACURITE_MSGTYPE_5N1_WINDSPEED_WINDDIR_RAINFALL  0x31

#define ACURITE_MSGTYPE_5N1_WINDSPEED_TEMP_HUMIDITY     0x38



Notes:

  • There are likely message types reserved for the 0275m sensors

Device Message encoding Overview

"Tower"/TXR Temperature and Humidity sensors

  • Message Type 0x04, 7 bytes
Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
CCII IIII IIII IIII pB00 0100 pHHH HHHH p??T TTTT pTTT TTTT KKKK KKKK
  • C: Channel 00: C, 10: B, 11: A, (01 is invalid)
  • I: Device ID (14 bits)
  • B: Battery, 1 is battery OK, 0 is battery low
  • M: Message type (6 bits), 0x04
  • T: Temperature Celsius (11 - 14 bits?), + 1000 * 10
  • H: Relative Humidity (%) (7 bits)
  • K: Checksum (8 bits)
  • p: Parity bit

Notes:

  • Temperature
    • Encoded as Celsius + 1000 * 10
    • only 11 bits needed for specified range -40 C to 70 C (-40 F - 158 F)
    • However 14 bits available for temperature, giving possible range of -100 C to 1538.4 C,
    • @todo - check if high 3 bits ever used for anything else

6045m lighting detector

Message Type 0x2f, 9 bytes

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7 Byte 8
CCII IIII IIII IIII pB10 1111 pHHH HHHH pA?T TTTT pTTT TTTT pLLL LLLL pLRD DDDD KKKK KKKK

Acurite 5n1 (aka Iris) Weather Station

  • 8 Bytes
  • Two message types:

Message Type 0x31 Wind speed and direction, rain

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7
ccss IIII IIII IIII pB11 0001 p??W WWWW pWWW DDDD pRRR RRRR pRRR RRRR KKKK KKKK

Message Type 0x38 Tmperature and Humidity

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7
ccss IIII IIII IIII pB11 0001 p??W WWWW pWWW TTTT pTTT TTTT pHHH HHHH KKKK KKKK
  • c: Channel 00: C, 10: B, 11: A (01 is invalid)
  • s: Sequence Number/Repeat Number (00 first copy, 01 second, 02 third)
  • I: Device ID (12 bits)
  • B: Battery, 1 is battery OK, 0 is battery low
  • M: Message type (6 bits), 0x31 Wind & Rain, 0x38 Wind, temperature, humidity
  • W: Wind speed (8 bits) (number of cup rotations per 4 second interval)
  • D: Wind direction (uses modified Gray code)
  • R: Rain tip counter (14 bits) 1 tip == 0.01 inch,
  • T: Temperature Fahrenheit (12 bits)
  • H: Humidity
  • K: Checksum (8 bits)
  • p: Parity bit

Notes:

  • Wind speed, raw is number of cup rotations/4 seconds,
  • Rain tip counter is 14 bits (range 16383)
    • 1 tip == 0.01 inch
    • TBD Wraps at 99.99 or 163.83 inches?
  • Temperature
    • Spec range: -40 to 158 F

Acurite Atlas Weather Station

  • Specs: https://www.acurite.com/media/documents/AcuRite-Atlas-Specifications.pdf
  • 8 bytes without lightning detector, 10 bytes with it installed
  • 6 message types
    • 0x05 Wind speed, Temperature, Humidity,
      • 0x25 adds lightning strike count, estimaated distance
    • 0x06 Wind Speed, Wind direction, Rain
      • 0x26 adds lightning strike count, estimated distance
    • 0x07 Wind speed, UV, Lux
      • 0x27 adds lightning strike count, estimated distance

Message Type 0x25 (Wind Speed, Temperature, Relative Humidity, Lightning)

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7 Byte 8 Byte 9
cc?? ssII IIII IIII pb01 0101 pWWWWWWW pW?? TTTT pTTT TTTT pHHH HHHH pCCC CCCC pCCD DDDD kkkkkkkkk

Notes:

  • Spec: temperature range -40 to 158 F
  • There seem to be 13 bits for temperature but only 11 needed.
  • TBD what is b[4] & 0x30 used for?
  • Encoded temperature is Fahrenheit * 10 + 400 (No sign)

Message Type 0x26 (Wind Speed, Wind Vector, Rain Counter, Lightning)

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7 Byte 8 Byte 9
cc?? ssII IIII IIII pb01 0101 pWWWWWWW pW?V VVVV pVVV VVRR pRRR RRRR pCCC CCCC pCCD DDDD kkkk kkkk
CHANNEL:2b xx ~SEQ:2d ~DEVICE:10d xx ~TYPE:6h SPEED:x~7bx~1b DIR:x~5bx~5bxx x~7b x~7b x~7b CHK:8h

Note:

  • Wind is in degrees
    • 10 bits for wind vector(direction) is too much, should only be 9 bits?
    • TBD what is b[4] & 0x30 used for?
  • Rain counter, 0.01 inch accumulated per increment
    • 9 bits - wraps after 5.11 inches

Message Type 0x27 (Wind Speed, UV, Lux data, lightning)

Byte 1   Byte 2   Byte 3   Byte 4   Byte 5   Byte 6   Byte 7   Byte 8   Byte 9   Byte 10
cc??ssdd dddddddd pb011101 pWWWWWWW pW??UUUU pLLLLLLL pLLLLLLL pCCCCCCC pCCDDDDD kkkkkkkkk

515 Refrigerator / Freezer Sensors

  • 6 bytes, two message types 0x08 and 0x09
Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5
CCII IIII IIII IIII pBMM MMMM bTTT TTTT bTTT TTTT KKKK KKKK
  • C: Channel 00: C, 10: B, 11: A
  • I: Device ID (14 bits), volatie, resets at power up
  • B: Battery, 1 is battery OK, 0 is battery low
  • M: Message type (6 bits), 0x8: Refrigerator, 0x9: Freezer
  • T: Temperature Fahrenheit (14 bits?), + 1480 * 10
  • K: Checksum (8 bits)
  • p: Parity bit

Issues, Open Questions

. 3n1 and 899 rain sensors implementation currently shares part of the 5n1 code, but do those use the sequences bits, or are those ID bits. This is probably best determined by verifying IDs for those devices in My Acurite. Are any of these higher than 1024?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment