Here are the details about the protocol of the serial communication between Argus Monitor and the Argus Controller hardware.

As long as this protocol is respected, you can develop and use a completely different hardware than our Arduino example together with Argus Monitor.


Command

Argus Monitor request

Argus Controller answer

ProbeDevice

AA 02 01 crc8

C5 <byteCnt> 01 <DEVICE_ID> crc8

GetTempCount

AA 02 20 crc8

C5 <byteCnt> 20 <tempCount> crc8

GetTemp

AA 02 21 crc8

C5 <byteCnt> 21 <tempCount> temp0_H temp0_L temp1_H temp1_L temp2_H temp2_L temp3_H temp3_L crc8

GetFanCount

AA 02 30 crc8

C5 <byteCnt> 30 <fanCount> crc8

GetFanRpm

AA 02 31 crc8

C5 <byteCnt> 31 <fanCount> rpm0_H rpm0_L rpm1_H rpm1_L crc8

GetFanPwm

AA 03 32 <channel> crc8

C5 <byteCnt> 32 <channel> <pwm> crc8

SetFanPwm

AA 04 33 <channel> <pwm> crc8

C5 <byteCnt> 33 crc8   (answer byte2: 33 = ok, FF = error)


Only for the ProbeDevice command, Argus Monitor expects the answer from the device within 200msec. This has to do with internal initialization constraints within the HW monitoring modules.

If you write your own software for an Argus Controller device, please make sure you answer this query fast enough.


Data formats:

Temperature: int16_t, Celsius, scaled by 10

RPM: uint16_t

PWM: uint8_t [0..100 %]


Communication parameters:

57600 Baud, 8N1


CRC8 calculation:

uint8_t crc8(uint8_t crc, uint8_t data) {

crc = crc ^ data;

for (uint8_t i = 0; i < 8; i++) {

if (crc & 0x01)

crc = (crc >> 1) ^ 0x8C;

else

crc >>= 1;

}

return crc;

}