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@2:6bfef0839102, 2014-11-07 (annotated)
- Committer:
- Bobty
- Date:
- Fri Nov 07 16:09:15 2014 +0000
- Revision:
- 2:6bfef0839102
- Parent:
- 1:518f39df3485
- Child:
- 3:9f00be404f8f
Working - detects between pulse time and counts total pulses
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bobty | 0:f6611c8f453c | 1 | #include "mbed.h" |
Bobty | 0:f6611c8f453c | 2 | #include "EthernetInterface.h" |
Bobty | 2:6bfef0839102 | 3 | #include "PulsePin.h" |
Bobty | 0:f6611c8f453c | 4 | |
Bobty | 0:f6611c8f453c | 5 | DigitalIn gpPin(p21); |
Bobty | 2:6bfef0839102 | 6 | PulsePin pulsePin(gpPin, false, 200); |
Bobty | 0:f6611c8f453c | 7 | DigitalOut led(LED1); |
Bobty | 0:f6611c8f453c | 8 | |
Bobty | 0:f6611c8f453c | 9 | const int BROADCAST_PORT = 42853; // Arbitrarily chosen port number |
Bobty | 0:f6611c8f453c | 10 | Serial pc(USBTX, USBRX); |
Bobty | 0:f6611c8f453c | 11 | |
Bobty | 0:f6611c8f453c | 12 | int main() |
Bobty | 0:f6611c8f453c | 13 | { |
Bobty | 0:f6611c8f453c | 14 | pc.baud(115200); |
Bobty | 0:f6611c8f453c | 15 | printf("Gas Monitor - Rob Dobson 2014\n"); |
Bobty | 0:f6611c8f453c | 16 | |
Bobty | 0:f6611c8f453c | 17 | EthernetInterface eth; |
Bobty | 0:f6611c8f453c | 18 | eth.init(); //Use DHCP |
Bobty | 0:f6611c8f453c | 19 | UDPSocket sendSocket; |
Bobty | 0:f6611c8f453c | 20 | Endpoint broadcast; |
Bobty | 0:f6611c8f453c | 21 | |
Bobty | 0:f6611c8f453c | 22 | // Connection establishment/re-establishment |
Bobty | 0:f6611c8f453c | 23 | Timer connectRetryTimer; |
Bobty | 0:f6611c8f453c | 24 | connectRetryTimer.start(); |
Bobty | 0:f6611c8f453c | 25 | bool isConnected = false; |
Bobty | 2:6bfef0839102 | 26 | |
Bobty | 2:6bfef0839102 | 27 | // Count of gas pulses |
Bobty | 2:6bfef0839102 | 28 | int gasCount = 0; |
Bobty | 0:f6611c8f453c | 29 | |
Bobty | 0:f6611c8f453c | 30 | // Forever |
Bobty | 0:f6611c8f453c | 31 | while (true) |
Bobty | 0:f6611c8f453c | 32 | { |
Bobty | 0:f6611c8f453c | 33 | // Check if already connected to ethernet |
Bobty | 0:f6611c8f453c | 34 | if (!isConnected) |
Bobty | 0:f6611c8f453c | 35 | { |
Bobty | 0:f6611c8f453c | 36 | if (connectRetryTimer.read_ms() > 1000) |
Bobty | 0:f6611c8f453c | 37 | { |
Bobty | 0:f6611c8f453c | 38 | isConnected = eth.connect() == 0; |
Bobty | 0:f6611c8f453c | 39 | connectRetryTimer.reset(); |
Bobty | 0:f6611c8f453c | 40 | if (isConnected) |
Bobty | 0:f6611c8f453c | 41 | { |
Bobty | 0:f6611c8f453c | 42 | printf("Eth Connected - IP Address is %s - MAC is %s\n", eth.getIPAddress(), eth.getMACAddress()); |
Bobty | 0:f6611c8f453c | 43 | sendSocket.init(); |
Bobty | 0:f6611c8f453c | 44 | sendSocket.set_broadcasting(); |
Bobty | 0:f6611c8f453c | 45 | broadcast.set_address("255.255.255.255", BROADCAST_PORT); |
Bobty | 0:f6611c8f453c | 46 | } |
Bobty | 0:f6611c8f453c | 47 | else |
Bobty | 0:f6611c8f453c | 48 | { |
Bobty | 0:f6611c8f453c | 49 | printf("Eth Connect Attempt Failed\n"); |
Bobty | 0:f6611c8f453c | 50 | } |
Bobty | 0:f6611c8f453c | 51 | } |
Bobty | 0:f6611c8f453c | 52 | } |
Bobty | 0:f6611c8f453c | 53 | else |
Bobty | 0:f6611c8f453c | 54 | { |
Bobty | 2:6bfef0839102 | 55 | led = gpPin; |
Bobty | 2:6bfef0839102 | 56 | // Check for an edge |
Bobty | 2:6bfef0839102 | 57 | bool edgeDetected = pulsePin.Service(); |
Bobty | 2:6bfef0839102 | 58 | if (edgeDetected) |
Bobty | 0:f6611c8f453c | 59 | { |
Bobty | 2:6bfef0839102 | 60 | gasCount++; |
Bobty | 2:6bfef0839102 | 61 | char outBuf[200]; |
Bobty | 2:6bfef0839102 | 62 | sprintf(outBuf, "[{\"n\":\"gasCount\",\"v\":%d},{\"n\":\"gasInterPulse\",\"v\":%d,\"u\":\"ms\"}]", |
Bobty | 2:6bfef0839102 | 63 | gasCount, pulsePin.GetLastCycleTimeMs()); |
Bobty | 2:6bfef0839102 | 64 | int bytesToSend = strlen(outBuf); |
Bobty | 2:6bfef0839102 | 65 | int rslt = sendSocket.sendTo(broadcast, outBuf, bytesToSend); |
Bobty | 2:6bfef0839102 | 66 | if (rslt == bytesToSend) |
Bobty | 0:f6611c8f453c | 67 | { |
Bobty | 2:6bfef0839102 | 68 | printf("Sent ok %s\n", outBuf); |
Bobty | 2:6bfef0839102 | 69 | } |
Bobty | 2:6bfef0839102 | 70 | else if (rslt == -1) |
Bobty | 2:6bfef0839102 | 71 | { |
Bobty | 2:6bfef0839102 | 72 | printf("Failed to send %s\n", outBuf); |
Bobty | 2:6bfef0839102 | 73 | isConnected = false; |
Bobty | 2:6bfef0839102 | 74 | } |
Bobty | 2:6bfef0839102 | 75 | else |
Bobty | 2:6bfef0839102 | 76 | { |
Bobty | 2:6bfef0839102 | 77 | printf("Didn't send all of %s\n", outBuf); |
Bobty | 2:6bfef0839102 | 78 | isConnected = false; |
Bobty | 0:f6611c8f453c | 79 | } |
Bobty | 0:f6611c8f453c | 80 | } |
Bobty | 1:518f39df3485 | 81 | |
Bobty | 1:518f39df3485 | 82 | // See if anything has failed |
Bobty | 1:518f39df3485 | 83 | if (!isConnected) |
Bobty | 1:518f39df3485 | 84 | { |
Bobty | 1:518f39df3485 | 85 | sendSocket.close(); |
Bobty | 1:518f39df3485 | 86 | eth.disconnect(); |
Bobty | 1:518f39df3485 | 87 | Thread::wait(1000); |
Bobty | 1:518f39df3485 | 88 | } |
Bobty | 0:f6611c8f453c | 89 | } |
Bobty | 0:f6611c8f453c | 90 | } |
Bobty | 0:f6611c8f453c | 91 | } |