Switch tinfo to standard mode
[manu/arduino-maison.git] / garage / garage.ino
index 0c11eaa..bb4ecaf 100644 (file)
@@ -1,7 +1,9 @@
 #include <WiFi.h>
 #include <WiFiUdp.h>
-#include <TeleInfo.h>
-#include <SimpleDHT.h>
+#include <LibTeleinfo.h>
+#include <Adafruit_Sensor.h>
+#include <DHT.h>
+#include <DHT_U.h>
 
 #include "garage-config.h"
 
@@ -18,46 +20,67 @@ String city = CITY;
 String location = LOCATION;
 WiFiUDP Udp;
 
-int pinDHT22 = 13;
-SimpleDHT22 dht22(pinDHT22);
+// Temp
+#define DHTPIN 19
+#define DHTTYPE DHT22
+DHT_Unified dht(DHTPIN, DHTTYPE);
 
-TeleInfo teleinfo(&Serial);
+TInfo tinfo;
 
 void setup() {
 
-  Serial.begin(1200);
+  Serial.begin(9600);
   WiFi.mode(WIFI_STA);
   WiFi.begin(WIFI_SSID, WIFI_PASS);
 
   while (WiFi.status() != WL_CONNECTED) {
     delay(500);
   }
+
+  dht.begin();
+  sensor_t sensor;
+  dht.temperature().getSensor(&sensor);
+  dht.humidity().getSensor(&sensor);
+
+  tinfo.init(TINFO_MODE_STANDARD);
+  tinfo.attachNewFrame(NewTinfoFrame);
+
 }
 
 void loop() {
-  float temperature = 0;
-  float humidity = 0;
-  int err = SimpleDHTErrSuccess;
-  if ((err = dht22.read2(&temperature, &humidity, NULL)) == SimpleDHTErrSuccess) {
-    sendToInfluxDB("temperature,city="+city+",location="+location, "value", String(temperature));
-    sendToInfluxDB("humidity,city="+city+",location="+location, "value", String(humidity));
-  }
   
-  teleinfo.process();
-  if(teleinfo.available()){
-    long I1 = teleinfo.getLongVal("IINST1");
-    long I2 = teleinfo.getLongVal("IINST2");
-    long I3 = teleinfo.getLongVal("IINST3");
-    long PAPP = teleinfo.getLongVal("PAPP");
-    long BASE = teleinfo.getLongVal("BASE");
-    sendToInfluxDB("teleinfo,city="+city+",phase=1", "IINST", String(I1));
-    sendToInfluxDB("teleinfo,city="+city+",phase=2", "IINST", String(I2));
-    sendToInfluxDB("teleinfo,city="+city+",phase=3", "IINST", String(I3));
-    sendToInfluxDB("teleinfo,city="+city, "PAPP", String(PAPP));
-    sendToInfluxDB("teleinfo,city="+city, "BASE", String(BASE));
-    teleinfo.resetAvailable();
-  }
   delay(POLL_INT);
+
+  // 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 ) {
+      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 ( Serial.available() ) {
+        tinfo.process(Serial.read());
+      }
+  }
 }
 
 void sendToInfluxDB(String measure, String key, String value) {
@@ -67,3 +90,38 @@ void sendToInfluxDB(String measure, String key, String value) {
   Udp.print(line);
   Udp.endPacket();
 }
+
+void NewTinfoFrame(ValueList * me)
+{
+  Serial.print("DEBUG NewFrame");
+  if ( me ) {
+    while (me->next) {
+      me = me->next;
+      Serial.print("DEBUG value");
+      if (me->value && strlen(me->value)) {
+        Serial.print("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.print("DEBUG influx, name: "+String(me->name)+",value: "+String(atol(me->value)));
+          sendToInfluxDB("teleinfo,city="+city, String(me->name), String(atol(me->value)));
+        }
+      }
+    }
+  }
+}