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

View File

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