fixes
This commit is contained in:
@ -35,25 +35,38 @@ MqttClient::MqttClient(RequestSender *meterBusMaster) :
|
||||
m_disconnectState(3), m_disconnectTime(millis()), m_uptime(0)
|
||||
{
|
||||
for (uint8_t i = 0; i < NUM_OF_DEVICES; i++) {
|
||||
m_mbusDevTuple[i].address = 0;
|
||||
m_mbusDevTuple[i].queryPeriod = 0;
|
||||
m_mbusDevTuple[i].timer = 0;
|
||||
m_mbusDevTuple[i] = { 0, 0, 0 };
|
||||
}
|
||||
|
||||
m_mbusDevTuple[0].address = 0x53;
|
||||
m_mbusDevTuple[0].queryPeriod = 60;
|
||||
m_mbusDevTuple[0].timer = m_mbusDevTuple[0].queryPeriod;
|
||||
m_mbusDevTuple[0] = { 0x53, 60, 0 }; // light meter
|
||||
}
|
||||
|
||||
void MqttClient::sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength) {
|
||||
char strbuf[256];
|
||||
memset(strbuf, sizeof(strbuf), 0);
|
||||
PString buf = PString(strbuf, sizeof(strbuf));
|
||||
|
||||
|
||||
buf << "{ \"metadata\": { \"device\": \"MeterbusHub\" }, " <<
|
||||
"\"data\": {" <<
|
||||
"\"uptime\": " << m_uptime <<
|
||||
"}" <<
|
||||
"}" << endl;
|
||||
"\"uptime\": " << m_uptime << ", "
|
||||
"\"telegram\": \"";
|
||||
|
||||
uint16_t i = 0;
|
||||
while (true) {
|
||||
if (responseBuffer[i] <= 0x0f) {
|
||||
buf.print("0");
|
||||
}
|
||||
buf.print(responseBuffer[i], HEX);
|
||||
buf.print(" ");
|
||||
i++;
|
||||
if (i == responseBufferLength) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
buf << "\"}}";
|
||||
|
||||
if (m_disconnectState == 0) {
|
||||
m_mqttClient.publish("MeterbusHub.Measurement", strbuf);
|
||||
} else {
|
||||
@ -119,11 +132,19 @@ void MqttClient::exec() {
|
||||
|
||||
|
||||
for (uint8_t i = 0; i < NUM_OF_DEVICES; i++) {
|
||||
m_mbusDevTuple[i].timer -= 1;
|
||||
if (m_mbusDevTuple[i].timer == 0) {
|
||||
if ((m_mbusDevTuple[i].address != 0) && (m_mbusDevTuple[i].timer == 0)) {
|
||||
m_mbusDevTuple[i].timer = m_mbusDevTuple[i].queryPeriod;
|
||||
Serial << "Issue request for device " << m_mbusDevTuple[i].address << endl;
|
||||
|
||||
uint8_t *sendBuffer = m_meterBusMaster->getSendBuffer();
|
||||
sendBuffer[0] = 0x10;
|
||||
sendBuffer[1] = 0x5b;
|
||||
sendBuffer[2] = m_mbusDevTuple[i].address;
|
||||
sendBuffer[3] = (uint8_t)(sendBuffer[1] + sendBuffer[2]);
|
||||
sendBuffer[4] = 0x16;
|
||||
m_meterBusMaster->sendBufferReady(5, this);
|
||||
}
|
||||
m_mbusDevTuple[i].timer -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,7 +241,7 @@ void MeterBusMaster::exec() {
|
||||
|
||||
if (m_cmdReadyToSend) {
|
||||
sample();
|
||||
Serial << "MeterBusMaster: sending " << m_sendBufLen << " octets." << endl;
|
||||
// Serial << "MeterBusMaster: sending " << m_sendBufLen << " octets." << endl;
|
||||
Serial3.write(m_sendBuffer, m_sendBufLen);
|
||||
Serial3.flush();
|
||||
hold();
|
||||
@ -267,7 +267,7 @@ void MeterBusMaster::exec() {
|
||||
|
||||
int serialInChar = Serial3.read();
|
||||
if (serialInChar != -1) {
|
||||
Serial << "Got: " << _HEX(serialInChar) << endl;
|
||||
// Serial << "Got: " << _HEX(serialInChar) << endl;
|
||||
}
|
||||
if ((serialInChar != -1) && m_expectResponse) {
|
||||
prepareResponse(false, (uint8_t)serialInChar);
|
||||
|
Reference in New Issue
Block a user