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

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?

UserRevisionLine numberNew 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 }