#include <WiFi.h>
#include <WiFiUdp.h>
-#include <LibTeleinfo.h>
+#include <LibTeleinfo2Std.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include "garage-config.h"
+// #define TI_DEBUG
+
const char* wifi_ssid = WIFI_SSID;
const char* wifi_pass = WIFI_PASS;
long influxdb_port = INFLUXDB_PORT;
unsigned int localPort = 2390;
// MilliSeconds
+unsigned long previousMillis = millis();
long unsigned poll_int = POLL_INT;
String city = CITY;
String location = LOCATION;
#define DHTTYPE DHT22
DHT_Unified dht(DHTPIN, DHTTYPE);
-HardwareSerial TinfoSerial(1);
+// Uptime timer
+boolean tick1sec=0;// one for interrupt, don't mess with
+unsigned long uptime=0; // save value we can use in sketch even if we're interrupted
+
+// Used to indicate if we need to send all date or just modified ones
+boolean fulldata = false;
+
+HardwareSerial TinfoSerial(2);
TInfo tinfo;
+String tinfo_SINSTS;
+String tinfo_SINSTS1;
+String tinfo_SINSTS2;
+String tinfo_SINSTS3;
+String tinfo_IRMS1;
+String tinfo_IRMS2;
+String tinfo_IRMS3;
+String tinfo_URMS1;
+String tinfo_URMS2;
+String tinfo_URMS3;
+String tinfo_EAST;
+
+
void setup() {
Serial.begin(115200);
- TinfoSerial.begin(9600,SERIAL_8N1, 22, 23);
+ TinfoSerial.begin(9600,SERIAL_7E1,22,23);
+ pinMode(22, INPUT_PULLUP);
+
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
dht.temperature().getSensor(&sensor);
dht.humidity().getSensor(&sensor);
- tinfo.init(TINFO_MODE_STANDARD);
- // tinfo.attachNewFrame(NewTinfoFrame);
- // tinfo.attachUpdatedFrame(NewTinfoFrame);
- tinfo.attachData(NewTinfoFrame);
+ tinfo.init(TINFO_MODE_STD);
+ tinfo.attachDataStd(DataCallback);
}
void loop() {
-
- delay(POLL_INT);
+ if (millis() - previousMillis > POLL_INT)
+ {
+ fulldata = true;
+ previousMillis = millis();
+
// Check wifi connexion
- if ( WiFi.status() != WL_CONNECTED ) {
- int retry = 0;
- WiFi.mode(WIFI_STA);
- WiFi.begin(WIFI_SSID, WIFI_PASS);
- while (retry < 10 || WiFi.status() != WL_CONNECTED) {
- retry++;
- delay(500);
- }
- }
+ if ( WiFi.status() != WL_CONNECTED ) {
+ int retry = 0;
+ WiFi.mode(WIFI_STA);
+ WiFi.begin(WIFI_SSID, WIFI_PASS);
+ while (retry < 10 || WiFi.status() != WL_CONNECTED) {
+ retry++;
+ delay(500);
+ }
+ }
- if ( WiFi.status() == WL_CONNECTED ) {
- Serial.println("DEBUG");
- sensors_event_t event;
-
- dht.temperature().getEvent(&event);
- if (isnan(event.temperature)) {
- // Error
- } else {
- sendToInfluxDB("temperature,city="+city+",location="+location, "value", String(event.temperature));
- }
- dht.humidity().getEvent(&event);
- if (isnan(event.relative_humidity)) {
- // Error
- } else {
- sendToInfluxDB("humidity,city="+city+",location="+location, "value", String(event.relative_humidity));
- }
- if ( TinfoSerial.available() ) {
- Serial.println("DEBUG: process tinfo");
- tinfo.process(TinfoSerial.read());
- }
+ if ( WiFi.status() == WL_CONNECTED ) {
+ Serial.println("DEBUG wifi connected, start temp measure");
+ sensors_event_t event;
+
+ dht.temperature().getEvent(&event);
+ if (isnan(event.temperature)) {
+ // Error
+ } else {
+ sendToInfluxDB("temperature,city="+city+",location="+location, "value", String(event.temperature));
+ }
+ dht.humidity().getEvent(&event);
+ if (isnan(event.relative_humidity)) {
+ // Error
+ } else {
+ sendToInfluxDB("humidity,city="+city+",location="+location, "value", String(event.relative_humidity));
+ }
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS", tinfo_SINSTS);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS1", tinfo_SINSTS1);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS2", tinfo_SINSTS2);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS3", tinfo_SINSTS3);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS1", tinfo_IRMS1);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS2", tinfo_IRMS2);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "IRMS3", tinfo_IRMS3);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS1", tinfo_URMS1);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS2", tinfo_URMS2);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "URMS3", tinfo_URMS3);
+ sendToInfluxDB("teleinfo,city="+city+",location="+location, "EAST", tinfo_EAST);
+ }
+ }
+ if ( TinfoSerial.available() ) {
+ tinfo.process(TinfoSerial.read());
}
}
void sendToInfluxDB(String measure, String key, String value) {
String line = measure+" "+key+"="+value;
+ Serial.println("Sending to influxdb: "+line);
Udp.begin(localPort);
Udp.beginPacket(influxdb_ip, influxdb_port);
Udp.print(line);
Udp.endPacket();
}
-void NewTinfoFrame(ValueList * me, uint8_t flags)
+void DataCallback(char * tilabel, char * tihoro, char * tivalue)
{
- Serial.println("DEBUG NewFrame");
- if ( me ) {
- while (me->next) {
- me = me->next;
- Serial.println("DEBUG value");
- if (me->value && strlen(me->value)) {
- Serial.println("DEBUG name: "+String(me->name)+",value: "+String(me->value));
- boolean isNumber = true;
- uint8_t c;
- char * p = me->value;
-
- // check if value is number
- while (*p && isNumber) {
- if ( *p < '0' || *p > '9' ) {
- isNumber = false;
- }
- p++;
- }
-
- // this will add "" on not number values
- if (!isNumber) {
- // FIXME
- }
- // this will remove leading zero on numbers
- else {
- Serial.println("DEBUG influx, name: "+String(me->name)+",value: "+String(atol(me->value)));
- sendToInfluxDB("teleinfo,city="+city, String(me->name), String(atol(me->value)));
- }
+ if (strcmp(tilabel, "SINSTS") == 0 ) {
+ tinfo_SINSTS = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "SINSTS1") == 0 ) {
+ tinfo_SINSTS1 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "SINSTS2") == 0 ) {
+ tinfo_SINSTS2 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "SINSTS3") == 0 ) {
+ tinfo_SINSTS3 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "IRMS1") == 0 ) {
+ tinfo_IRMS1 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "IRMS2") == 0 ) {
+ tinfo_IRMS2 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "IRMS3") == 0 ) {
+ tinfo_IRMS3 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "URMS1") == 0 ) {
+ tinfo_URMS1 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "URMS2") == 0 ) {
+ tinfo_URMS2 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "URMS3") == 0 ) {
+ tinfo_URMS3 = String(atol(tivalue));
+ }
+ if (strcmp(tilabel, "EAST") == 0 ) {
+ tinfo_EAST = String(atol(tivalue));
}
- }
- }
}