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