85 lines
2.0 KiB
C++
85 lines
2.0 KiB
C++
#include "HM_Abstract.h"
|
|
#include "HoymilesRadio.h"
|
|
#include "crc.h"
|
|
|
|
HM_Abstract::HM_Abstract(uint64_t serial)
|
|
: InverterAbstract(serial) {};
|
|
|
|
bool HM_Abstract::sendStatsRequest(HoymilesRadio* radio)
|
|
{
|
|
struct tm timeinfo;
|
|
if (!getLocalTime(&timeinfo)) {
|
|
return false;
|
|
}
|
|
|
|
time_t now;
|
|
time(&now);
|
|
|
|
inverter_transaction_t payload;
|
|
|
|
memset(payload.payload, 0, MAX_RF_PAYLOAD_SIZE);
|
|
|
|
payload.target.u64 = serial();
|
|
payload.mainCmd = 0x15;
|
|
payload.subCmd = 0x80;
|
|
payload.timeout = 200;
|
|
payload.len = 16;
|
|
|
|
payload.payload[0] = 0x0b;
|
|
payload.payload[1] = 0x00;
|
|
|
|
HoymilesRadio::u32CpyLittleEndian(&payload.payload[2], now); // sets the 4 following elements {2, 3, 4, 5}
|
|
payload.payload[9] = 0x05;
|
|
|
|
uint16_t crc = crc16(&payload.payload[0], 14);
|
|
payload.payload[14] = (crc >> 8) & 0xff;
|
|
payload.payload[15] = (crc)&0xff;
|
|
|
|
payload.requestType = RequestType::Stats;
|
|
|
|
radio->enqueTransaction(&payload);
|
|
return true;
|
|
}
|
|
|
|
bool HM_Abstract::sendAlarmLogRequest(HoymilesRadio* radio)
|
|
{
|
|
struct tm timeinfo;
|
|
if (!getLocalTime(&timeinfo)) {
|
|
return false;
|
|
}
|
|
|
|
if (hasChannelFieldValue(CH0, FLD_EVT_LOG)) {
|
|
if ((uint8_t)getChannelFieldValue(CH0, FLD_EVT_LOG) == _lastAlarmLogCnt) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
_lastAlarmLogCnt = (uint8_t)getChannelFieldValue(CH0, FLD_EVT_LOG);
|
|
|
|
time_t now;
|
|
time(&now);
|
|
|
|
inverter_transaction_t payload;
|
|
|
|
memset(payload.payload, 0, MAX_RF_PAYLOAD_SIZE);
|
|
|
|
payload.target.u64 = serial();
|
|
payload.mainCmd = 0x15;
|
|
payload.subCmd = 0x80;
|
|
payload.timeout = 200;
|
|
payload.len = 16;
|
|
|
|
payload.payload[0] = 0x11;
|
|
payload.payload[1] = 0x00;
|
|
|
|
HoymilesRadio::u32CpyLittleEndian(&payload.payload[2], now); // sets the 4 following elements {2, 3, 4, 5}
|
|
|
|
uint16_t crc = crc16(&payload.payload[0], 14);
|
|
payload.payload[14] = (crc >> 8) & 0xff;
|
|
payload.payload[15] = (crc)&0xff;
|
|
|
|
payload.requestType = RequestType::AlarmLog;
|
|
|
|
radio->enqueTransaction(&payload);
|
|
return true;
|
|
} |