Monitor for central heating system (e.g. 2zones+hw) Supports up to 15 temp probes (DS18B20/DS18S20) 3 valve monitors Gas pulse meter recording Use stand-alone or with nodeEnergyServer See http://robdobson.com/2015/09/central-heating-monitor
Dependencies: EthernetInterfacePlusHostname NTPClient Onewire RdWebServer SDFileSystem-RTOS mbed-rtos mbed-src
main.cpp
- Committer:
- Bobty
- Date:
- 2015-02-02
- Revision:
- 4:0d3a207680b0
- Parent:
- 3:9f00be404f8f
- Child:
- 5:5bccf48799d4
File content as of revision 4:0d3a207680b0:
#include "mbed.h" #include "EthernetInterface.h" #include "PulsePin.h" #include "SDFileSystem.h" SDFileSystem sd(p5, p6, p7, p8, "sd"); DigitalIn gpPin(p21); PulsePin pulsePin(gpPin, false, 200); DigitalOut led(LED1); const int BROADCAST_PORT = 42853; // Arbitrarily chosen port number Serial pc(USBTX, USBRX); int main() { pc.baud(115200); printf("Gas Monitor - Rob Dobson 2014\n"); EthernetInterface eth; eth.init(); //Use DHCP UDPSocket sendSocket; Endpoint broadcast; // Connection establishment/re-establishment Timer connectRetryTimer; connectRetryTimer.start(); bool isConnected = false; // Count of gas pulses int gasCount = 0; // Forever while (true) { // Check if already connected to ethernet if (!isConnected) { if (connectRetryTimer.read_ms() > 1000) { isConnected = eth.connect() == 0; connectRetryTimer.reset(); if (isConnected) { printf("Eth Connected - IP Address is %s - MAC is %s\n", eth.getIPAddress(), eth.getMACAddress()); sendSocket.init(); sendSocket.set_broadcasting(); broadcast.set_address("255.255.255.255", BROADCAST_PORT); } else { printf("Eth Connect Attempt Failed\n"); } } } else { led = gpPin; // Check for an edge bool edgeDetected = pulsePin.Service(); if (edgeDetected) { gasCount++; char outBuf[200]; sprintf(outBuf, "{\"e\":[{\"n\":\"gasCount\",\"v\":%d},{\"n\":\"gasInterPulse\",\"v\":%d,\"u\":\"ms\"}]}", gasCount, pulsePin.GetLastCycleTimeMs()); int bytesToSend = strlen(outBuf); int rslt = sendSocket.sendTo(broadcast, outBuf, bytesToSend); if (rslt == bytesToSend) { printf("Sent ok %s\n", outBuf); } else if (rslt == -1) { printf("Failed to send %s\n", outBuf); isConnected = false; } else { printf("Didn't send all of %s\n", outBuf); isConnected = false; } } // See if anything has failed if (!isConnected) { sendSocket.close(); eth.disconnect(); Thread::wait(1000); } } } }