3 #include <LibTeleinfo2Std.h>
5 #include <DallasTemperature.h>
6 #include <HardwareSerial.h>
8 #include "garage-config.h"
12 const char* wifi_ssid = WIFI_SSID;
13 const char* wifi_pass = WIFI_PASS;
16 IPAddress influxdb_ip(INFLUXDB_IP);
17 long influxdb_port = INFLUXDB_PORT;
18 unsigned int localPort = 2390;
20 unsigned long previousMillis = millis();
21 long unsigned poll_int = POLL_INT;
23 String location = LOCATION;
27 // GPIO where the DS18B20 is connected to
28 const int oneWireBus = 19;
29 // Setup a oneWire instance to communicate with any OneWire devices
30 // ROM = 28 C6 C9 81 E3 6E 3C C ROM = 28 31 A7 1D 13 21 1 F6 ROM = 28 15 8E 4B 13 21 1 46 No more addresses.
31 DeviceAddress sensor_heater_out = {0x28, 0x31, 0xA7, 0x1D, 0x13, 0x21, 0x01, 0xF6};
32 DeviceAddress sensor_serre = {0x28, 0x15, 0x8E, 0x4B, 0x13, 0x21, 0x01, 0x46};
33 DeviceAddress sensor_heater_in = {0x28, 0xC6, 0xC9, 0x81, 0xE3, 0x6E, 0x3C ,0x0C};
34 OneWire oneWire(oneWireBus);
35 // Pass our oneWire reference to Dallas Temperature sensor
36 DallasTemperature sensors(&oneWire);
39 boolean tick1sec=0;// one for interrupt, don't mess with
40 unsigned long uptime=0; // save value we can use in sketch even if we're interrupted
42 // Used to indicate if we need to send all date or just modified ones
43 boolean fulldata = false;
45 HardwareSerial TinfoSerial(2);
65 TinfoSerial.begin(9600,SERIAL_7E1,22,23);
66 pinMode(22, INPUT_PULLUP);
69 WiFi.begin(WIFI_SSID, WIFI_PASS);
72 while (WiFi.status() != WL_CONNECTED) {
73 WiFi.begin(wifi_ssid, wifi_pass);
75 if (WiFi.status() != WL_CONNECTED) {
82 tinfo.init(TINFO_MODE_STD);
83 tinfo.attachDataStd(DataCallback);
89 if (millis() - previousMillis > POLL_INT)
92 previousMillis = millis();
94 // Reconnect if needed
95 while (WiFi.status() != WL_CONNECTED) {
96 WiFi.begin(WIFI_SSID, WIFI_PASS);
98 if (WiFi.status() != WL_CONNECTED) {
103 if ( WiFi.status() == WL_CONNECTED ) {
104 Serial.println("DEBUG wifi connected, start temp measure");
106 sensors.requestTemperatures();
107 float serre_tempC = sensors.getTempC(sensor_serre);
108 float heater_out_tempC = sensors.getTempC(sensor_heater_out);
109 float heater_in_tempC = sensors.getTempC(sensor_heater_in);
111 if(serre_tempC == DEVICE_DISCONNECTED_C) {
114 sendToInfluxDB("temperature,city="+city+",location=serre-semis", "value", String(serre_tempC));
117 if(heater_out_tempC == DEVICE_DISCONNECTED_C) {
120 sendToInfluxDB("temperature,city="+city+",location=heater,direction=out", "value", String(heater_out_tempC));
123 if(heater_in_tempC == DEVICE_DISCONNECTED_C) {
126 sendToInfluxDB("temperature,city="+city+",location=heater,direction=in", "value", String(heater_in_tempC));
129 sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS", tinfo_SINSTS);
130 sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS1", tinfo_SINSTS1);
131 sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS2", tinfo_SINSTS2);
132 sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS3", tinfo_SINSTS3);
133 sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS1", tinfo_IRMS1);
134 sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS2", tinfo_IRMS2);
135 sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS3", tinfo_IRMS3);
136 sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS1", tinfo_URMS1);
137 sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS2", tinfo_URMS2);
138 sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS3", tinfo_URMS3);
139 sendToInfluxDB("teleinfo,city="+city+",location="+location, "EAST", tinfo_EAST);
142 if ( TinfoSerial.available() ) {
143 tinfo.process(TinfoSerial.read());
147 void sendToInfluxDB(String measure, String key, String value) {
148 String line = measure+" "+key+"="+value;
149 Serial.println("Sending to influxdb: "+line);
150 Udp.begin(localPort);
151 Udp.beginPacket(influxdb_ip, influxdb_port);
156 void DataCallback(char * tilabel, char * tihoro, char * tivalue)
158 if (strcmp(tilabel, "SINSTS") == 0 ) {
159 tinfo_SINSTS = String(atol(tivalue));
161 if (strcmp(tilabel, "SINSTS1") == 0 ) {
162 tinfo_SINSTS1 = String(atol(tivalue));
164 if (strcmp(tilabel, "SINSTS2") == 0 ) {
165 tinfo_SINSTS2 = String(atol(tivalue));
167 if (strcmp(tilabel, "SINSTS3") == 0 ) {
168 tinfo_SINSTS3 = String(atol(tivalue));
170 if (strcmp(tilabel, "IRMS1") == 0 ) {
171 tinfo_IRMS1 = String(atol(tivalue));
173 if (strcmp(tilabel, "IRMS2") == 0 ) {
174 tinfo_IRMS2 = String(atol(tivalue));
176 if (strcmp(tilabel, "IRMS3") == 0 ) {
177 tinfo_IRMS3 = String(atol(tivalue));
179 if (strcmp(tilabel, "URMS1") == 0 ) {
180 tinfo_URMS1 = String(atol(tivalue));
182 if (strcmp(tilabel, "URMS2") == 0 ) {
183 tinfo_URMS2 = String(atol(tivalue));
185 if (strcmp(tilabel, "URMS3") == 0 ) {
186 tinfo_URMS3 = String(atol(tivalue));
188 if (strcmp(tilabel, "EAST") == 0 ) {
189 tinfo_EAST = String(atol(tivalue));