diff --git a/MqttClient.cpp b/MqttClient.cpp index 248e341..30f3d35 100644 --- a/MqttClient.cpp +++ b/MqttClient.cpp @@ -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; } } diff --git a/meterBusMaster.cpp b/meterBusMaster.cpp index 34f4b79..449db14 100644 --- a/meterBusMaster.cpp +++ b/meterBusMaster.cpp @@ -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);