This commit is contained in:
hg
2015-05-09 18:55:15 +02:00
parent 8608583a58
commit 9c4bf9db30
2 changed files with 34 additions and 13 deletions

View File

@ -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;
}
}