file: blogr24_sbd_msg.html
21 May 2013

BLOGR24 SBD Iridium Message Format

The current hourly message format is the same for both MET and WMO messages for ease of decoding. The MET message contains hourly averaged values (except wind compass). The WMO message contains averages of the last ten minutes of the hour for Wind East and Wind North speeds; the other values are the last minute spot values of the hour. Messages are based upon a 'C' language structure shown here:

/* 34 byte packed MET data record (note flag value to identify MET vs WMO message) */
struct IRIDIUM_record
   {
   unsigned char hour;   /* time is not packed for ease of verifying */
   unsigned char min;
   unsigned char day;
   unsigned char mon;
   unsigned char year;   /* year is offset from 2000 (no good after year 2255 :-) */
   unsigned short record;   /* sequential record number from startup */   
   short we,wn;   /* wind speed m/sec */
                  /* (short)(we * 100) ==> +/- 327.67 m/s */
                  /* (short)(wn * 100) ==> +/- 327.67 m/s */

   short compass;  /* last compass degrees */
                   /* (short)(compass * 10) ==> +/- 3276.7 degrees */

   unsigned short bp;   /* barometer millibars */
                        /* (ushort)((bp - 900.0) * 100) ==> 900.00 - 1555.35 mbar */

   short rh;           /* humidity %, deg C */
   unsigned short th;  /* (short)(rh * 100) ==> +/- 327.67 %RH */
                       /* (ushort)((th + 20.0) * 1000) ==> -20.000 to +45.535 degC */

   short sr;  /* short wave w/m^2 */
              /* (ushort)(sr * 10) ==> +/- 3276.7 w/m^2 */

   short lwflux;  /* lwr flux */
                  /* (short)(lwflux * 10) ==> +/-3276.7 w/m^2 */

   short prlev;  /* precipitation values */
                 /* (short)(prlev * 100) ==> +/-327.67 mm */

   unsigned short sct; /* SeaCat sea temp deg C */
                       /* (ushort)((sct + 5.0) * 1000) ==> -5.000 to +60.535 degC */
   unsigned short scc; /* SeaCat conductivity Siemens */
                       /* (ushort)(scc * 1000) ==> 0.000 to +6.5535 Siemens/meter */

   unsigned short wsavg;   	/* wind speed average m/sec */
   							/* (short)(wind speed * 100) ==> +/- 327.67 m/s */

   unsigned char flag;	/* zero for MET message, 0xFF for WMO message */
   unsigned char spare2;  	/* these last 2 bytes used for 0xA5A5 flag */
   unsigned char spare3;
   };


A typical 34 byte binary record looks something like this (in HEX-ASCII):

0A222D150707CE01........FE0C3E247F4500F07F00A5A5

Wow! So now what!

First, note the following:
All integers are 2 bytes, stored LS byte first.

From the structures above, note that time is stored first, so:



TIME:
Bytes 0 - 4

0A22150700 is time as follows:



SEQUENTIAL RECORD NUMBER:
Bytes 5,6

A sequential record number is kept from power up - possibly useful for untangling problem data records with bad time ?? (may be eliminated in future software versions)



DATA VALUES (more detail later...):
Bytes 7 - 30

Refer to the 'C' structure above for position and packing of each 2-byte integer data value (remember, LS byte first)



FLAG
Byte 31

To identify which data an SBD message contains, the flag is cleared to 0 (zero) for regular MET messages, and set to 0xFF for WMO messages.



USED TAG
Bytes 32 - 33

These bytes are used to indicate that a record in SD Card storage has been written by the BLOGR24. Currently maintained here for convenience in debugging - may remove in future.