Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
fredokF

fredok

@fredok
About
Posts
16
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • SCT-013-030 current monitor sensor
    fredokF fredok

    Hello, at the end i write a v2.0 of the sketch

    //#include <Arduino.h>
    #define MY_DEBUG
    #define MY_RADIO_NRF24
    // EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3  ***/
    #include <SPI.h>
    #include <MySensors.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include "EmonLib.h"             // Include Emon Library
    EnergyMonitor emon1;             // Create an instance
    EnergyMonitor emon2;
    
    #define CHILD_ID_CLAMP1 0
    #define CHILD_ID_CLAMP2 1
    #define CHILD_ID_TEMP 2
    #define CHILD_ID_LDR 3
    
    #define PIN_ANALOG_I1 A2 //pince amperemetrique1
    #define PIN_ANALOG_I2 A3
    #define PIN_LDR A0 // LDR
    #define PIN_DALLAS 3
    
    //Definition de dallas
    #define MAX_ATTACHED_DS18B20 1
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    OneWire oneWire(PIN_DALLAS);
    DallasTemperature sensors(&oneWire);
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors = 1;
    bool receivedConfig = false;
    bool metric = true; //truc v2.0
    
    //int compat = 0;
    unsigned long lastSend_temp = millis();
    unsigned long lastSend_power = millis();
    unsigned long lastSend_c;
    unsigned long SEND_FREQUENCY = 120000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
    unsigned long SEND_FREQUENCY_TEMP = 300000; //delais d'emission entre 2 mesures de temps
    unsigned long SEND_FREQUENCY_C = SEND_FREQUENCY / 30;
    int index = 0;
    double Irms1 = 0;
    double Irms2 = 0;
    boolean pcReceived1 = false;
    boolean pcReceived2 = false;
    boolean first_time_temp = HIGH;
    
    float nrj1 = 0, old_nrj1;
    float nrj2 = 0, old_nrj2;
    int ldr = 0, old_ldr;
    
    MyMessage IrmsMsg1(CHILD_ID_CLAMP1, V_WATT);
    MyMessage kWhMsg1(CHILD_ID_CLAMP1, V_KWH);
    MyMessage pcMsg1(CHILD_ID_CLAMP1, V_VAR1);
    MyMessage IrmsMsg2(CHILD_ID_CLAMP2, V_WATT);
    MyMessage kWhMsg2(CHILD_ID_CLAMP2, V_KWH);
    MyMessage pcMsg2(CHILD_ID_CLAMP2, V_VAR2);
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    MyMessage msgLight(CHILD_ID_LDR, V_LIGHT_LEVEL);
    
    void before() {
      sensors.begin();
    }
    
    
    void presentation()
    {
    
      sendSketchInfo("Multisensors_Entree", "2.0");  // Send the sketch version information to the gateway and Controller
      present(CHILD_ID_CLAMP1, S_POWER);   // Register this device as power sensor
      request(CHILD_ID_CLAMP1, V_VAR1);
      present(CHILD_ID_CLAMP2, S_POWER);   // Register this device as power sensor
      request(CHILD_ID_CLAMP2, V_VAR2);
      numSensors = sensors.getDeviceCount(); //compte le nb de ds18
      present(CHILD_ID_TEMP, S_TEMP);
      present(CHILD_ID_LDR, S_LIGHT_LEVEL);
    }
    
    
    void receive(const MyMessage &message)
    {
      if (message.type == V_VAR1)
      {
        nrj1 = old_nrj1 = message.getFloat();
        Serial.print("Received last nrj count from gw:");
        Serial.println(nrj1);
        pcReceived1 = true;
      }
    
      if (message.type == V_VAR2)
      {
        nrj2 = old_nrj2 = message.getFloat();
        Serial.print("Received last nrj count from gw:");
        Serial.println(nrj2);
        pcReceived2 = true;
      }
    
    }
    
    void setup()
    {
      sensors.setWaitForConversion(false);
      emon1.current(PIN_ANALOG_I1, 30.0);       // Current: input pin, calibration.
      emon2.current(PIN_ANALOG_I2, 30.0);
      Serial.println("SETUP completed");
    }
    
    void envoi_donnees(double intrms, int id_clamp)
    {
      Serial.print("Envoi des donnees .... clamp="); Serial.println(id_clamp);
      double energie = (intrms * 232.0 * SEND_FREQUENCY / 1000) / 3.6E6;
      switch (id_clamp)
      {
        case 1:
          {
            send(IrmsMsg1.set(intrms * 232.0, 1));
            nrj1 += energie;
            send(kWhMsg1.set(nrj1, 5));
            send(pcMsg1.set(nrj1, 5));
            old_nrj1 = nrj1;
          }
          break;
        case 2:
          {
            send(IrmsMsg2.set(intrms * 232.0, 1));
            nrj2 += energie;
            send(kWhMsg2.set(nrj2, 5));
            send(pcMsg2.set(nrj2, 5));
            old_nrj2 = nrj2;
          }
          break;
      }
    }
    
    void loop() {
      unsigned long now = millis();
      bool sendTime_c = now - lastSend_c > SEND_FREQUENCY_C;
      // Calcul de Irms1 et Irms2
      if (sendTime_c) //calcul Irms moy clamp1/clamp2
      {
        if (index == 0)
        {
          Irms1 = emon1.calcIrms(1480);
          Irms2 = emon2.calcIrms(1480);
        }
        else  
        {
          Irms1 = (index * Irms1 + emon1.calcIrms(1480)) / (index + 1);
          Irms2 = (index * Irms2 + emon2.calcIrms(1480)) / (index + 1);
        }
        lastSend_c = now;
        index++;
      }
    
      bool sendTime_temp = now - lastSend_temp > SEND_FREQUENCY_TEMP;
      if (sendTime_temp || first_time_temp)
      {
        Serial.println("........ quoiqu'il arrive, on envoi la temp+ldr");
        first_time_temp = LOW;
        //Send Temp
        // Envoi Température d'après https://github.com/mysensors/MySensorsArduinoExamples/blob/master/examples/DallasTemperatureSensor/DallasTemperatureSensor.ino
        sensors.requestTemperatures();
        sleep(750);
        for (int i = 0; i < numSensors && i < MAX_ATTACHED_DS18B20; i++)
          {
         // float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric ? sensors.getTempCByIndex(i) : sensors.getTempFByIndex(i)) * 10.)) / 10.;
          float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
          if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00)
          {
    
            // Send in the new temperature
            send(msgTemp.setSensor(i).set(temperature, 1));
            Serial.println(".....................Envoi Temp");
            // Save new temperatures for next compare
            lastTemperature[i] = temperature;
          }
        }
     
      //Send light LDR
      //Envoi Light LDR
      ldr = (1023 - analogRead(PIN_LDR)) / 10.23;
      if (old_ldr != ldr)
      {
        send(msgLight.set(ldr));
        old_ldr = ldr;
      }
       lastSend_temp=now;
      }
    
    
    
     bool sendTime_power = now - lastSend_power > SEND_FREQUENCY;
    
     if (sendTime_power)
    {
    
      // Envoi ou request Puissance1
      if (pcReceived1) envoi_donnees(Irms1, 1);
      else     {
        request(CHILD_ID_CLAMP1, V_VAR1);
        Serial.println("Request VAR1");
      }
    
    
      // Envoi ou request Puissance2
      if (pcReceived2) envoi_donnees(Irms2, 2);
      else     {
        request(CHILD_ID_CLAMP2, V_VAR2);
        Serial.println("Request VAR2");
      }
      //on reinitialise les compteurs
      lastSend_power = now;
      index = 0;
      }
    }
    
    
    
    
    
    

    attention, i use in the same node a ds18b20 for temp and LRD for light measurment
    so u need to delete part of sketch.
    i just compiling/Verifying this with mysensors v2.1 (but not loaded in arduino pro) and no error
    for emonlib => https://github.com/openenergymonitor/EmonLib

    Hardware

  • SCT-013-030 current monitor sensor
    fredokF fredok

    .... u must to look the monitor for see "Envoi des données .... clamp=0" and after (a few minutes after) "Envoi des données .... clamp=1"
    Look after ur domotic soft for see if your gw become something.
    0_1490792642229_clamp1.jpg
    0_1490792655751_clamp2.jpg

    bye.

    Hardware
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular