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
  1. Home
  2. Development
  3. help to pass version 2 mysensors

help to pass version 2 mysensors

Scheduled Pinned Locked Moved Development
4 Posts 2 Posters 1.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Z Offline
    Z Offline
    zrom69
    wrote on last edited by
    #1

    Hello
    I am a beginner in programming and excuse me
    my english
    i tried to go to v 2 his function not these you can m help thank you in advance[0_1514023990085_sketch_dec23b.ino](Envoi en cours 100%)

    Z 1 Reply Last reply
    0
    • Z zrom69

      Hello
      I am a beginner in programming and excuse me
      my english
      i tried to go to v 2 his function not these you can m help thank you in advance[0_1514023990085_sketch_dec23b.ino](Envoi en cours 100%)

      Z Offline
      Z Offline
      zrom69
      wrote on last edited by gohan
      #2

      @zrom69 said in help to pass version 2 mysensors:

      Hello
      I am a beginner in programming and excuse me
      my english
      i tried to go to v 2 his function not these you can m help thank you in advance[0_1514023990085_sketch_dec23b.ino](Envoi en cours 100%)

      // Example sketch för a "light switch" where you can control light or something 
      // else from both vera and a local physical button (connected between digital
      // pin 3 and GND).
      // This node also works as a repeader for other nodes
      
      #include <MySensor.h>
      #include <SPI.h>
      #include <DHT.h> 
      
      unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
      
      //pin sensori
      #define PIR_PIN 2                   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
      #define HUMIDITY_TEMPERATURE_PIN 3  // sensore temperatura umidita
      #define RELAY_PIN  4                // relay pin
      int BATTERY_SENSE_PIN = A1;         // Pin carica batteria o pannello solare
      int FOTORESIST_SENSE_PIN = A2;      // Pin fotoresistenza
      
      //interupt per sleep arduino
      #define INTERRUPT PIR_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      
      //id per vera
      #define CHILD_ID_RELE 1   // Id relay
      #define CHILD_ID_HUM 2    // id temperatura
      #define CHILD_ID_TEMP 3   // id umidita
      #define CHILD_ID_PIR 4    // Id pir
      #define CHILD_ID_LIGHT 5  // Id luminosita (fotoresistenza)
      
      //definizione per nodo vera
      #define NODE_ID 10
      #define SN "meteo station"
      #define SV "1.4"
      
      //variabili
      bool state_relay;                 //stato relay
      float batt_valore;                //dichiaro la variabile valore che memorizzerà il valore della batteria dal pin analogico
      float batt_volt;                  //volt batteria
      float batt_charged_percent;       //percentuale carica batteria
      float last_batt_charged_percent;  //percentuale carica batteria precedente
      float batt_min_voltage = 0.5;     //tensione minima batteria
      float batt_max_voltage = 5;       //tensione massima batteria
      float fotoresistenza_valore;      //dichiaro la variabile valore che memorizzerà il valore della fotoresistenza dal pin analogico
      float last_fotoresistenza_valore; //dichiaro la variabile valore precedente
      
      int lux_vera;                      //valore luminosita da inviare a vera
      
      MySensor gw;
      
      // sensore temperatura umidita
      DHT dht_int;
      float lastTemp_int = -1;
      float lastHum_int = -1;
      
      boolean metric = true; 
      
      MyMessage msgRelay(CHILD_ID_RELE,V_LIGHT);
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msgPir(CHILD_ID_PIR, V_TRIPPED);
      MyMessage msgLux(CHILD_ID_LIGHT, V_LIGHT_LEVEL);
      
      void setup()  
      {  
        gw.begin(incomingMessage, NODE_ID, false);    
        
        gw.sendSketchInfo(SN, SV); 
      
        //Sensore umidita temperatura
        dht_int.setup(HUMIDITY_TEMPERATURE_PIN);
        
        gw.present(CHILD_ID_RELE, S_LIGHT);       //light vera
        gw.present(CHILD_ID_HUM, S_HUM);          //umidity vera
        gw.present(CHILD_ID_TEMP, S_TEMP);           // temp vera
        gw.present(CHILD_ID_PIR, S_MOTION);          // motion vera
        gw.present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);  //light level (fotoresistenza)
        
        metric = gw.getConfig().isMetric;
        
        // Then set relay pins in output mode
        pinMode(RELAY_PIN, OUTPUT);   
        
        //PIR
        pinMode(PIR_PIN, INPUT);
        
        state_relay = 0;  
        //GestisciRelay();
        digitalWrite(RELAY_PIN, LOW);
        gw.send(msgRelay.set(state_relay)); 
           
      }
      
      void loop() 
      { 
          gw.process();
        
          //sensore temperatura umidita
          delay(dht_int.getMinimumSamplingPeriod());
      
          float temperature_int = dht_int.getTemperature();
          if (isnan(temperature_int)) 
          {
              lastTemp_int = -1;
              Serial.println("Failed reading temperature from DHT");
          } 
          else if (temperature_int != lastTemp_int) 
          {
            lastTemp_int = temperature_int;
            if (!metric) 
            {
              temperature_int = dht_int.toFahrenheit(temperature_int);
            }
            gw.send(msgTemp.set(temperature_int, 1));
            Serial.print("T int: ");
            Serial.println(temperature_int);
          }
        
          float humidity_int = dht_int.getHumidity();
          if (isnan(humidity_int)) 
          {
              lastHum_int = -1;
              Serial.println("Failed reading humidity from DHT");
          } 
          else if (humidity_int != lastHum_int) 
          {
              lastHum_int = humidity_int;
              gw.send(msgHum.set(humidity_int, 1));
              Serial.print("H int: ");
              Serial.println(humidity_int);
          }
          //sensore temperatura umidita
          
          //fotoresistenza    
          for(int i=0;i<150;i++)
          {
            fotoresistenza_valore += analogRead(FOTORESIST_SENSE_PIN);  //read the input voltage from battery or solar panel      
            delay(2);
          }
          fotoresistenza_valore = fotoresistenza_valore / 150;    
                 
          Serial.print ("fotoresistenza: ");
          Serial.println(fotoresistenza_valore); 
      
          if (fotoresistenza_valore != last_fotoresistenza_valore) 
          {
            lux_vera = (int) fotoresistenza_valore;
            gw.send(msgLux.set(lux_vera));
            last_fotoresistenza_valore = fotoresistenza_valore;
          }    
          //fotoresistenza
          
          //pir relay
          // Read digital motion value
          boolean tripped = digitalRead(PIR_PIN) == HIGH; 
          Serial.println("pir:");      
          Serial.println(tripped);
          gw.send(msgPir.set(tripped?"1":"0"));  // Send tripped value to gw 
          
          //accende la luce con il buio
          if (fotoresistenza_valore < 200)  //poca luce
          {
            if (tripped == 1) 
            {
               state_relay = 1;     
            }
            else
            {
               state_relay = 0;     
            }
          }
          //accende la luce con il buio
          
          GestisciRelay();
          //pir relay
          
          //battery    
          for(int i=0;i<150;i++)
          {
            batt_valore += analogRead(BATTERY_SENSE_PIN);  //read the input voltage from battery or solar panel      
            delay(2);
          }
          batt_valore = batt_valore / 150;    
                 
          Serial.print ("batt_valore: ");
          Serial.println(batt_valore);
          
          batt_volt = (batt_valore / 1024) * batt_max_voltage;
          Serial.print ("batt_volt: ");
          Serial.println(batt_volt);
          
          ////////////////////////////////////////////////
         //The map() function uses integer math so will not generate fractions
         // so I multiply battery voltage with 10 to convert float into a intiger value
         // when battery voltage is 6.0volt it is totally discharged ( 6*10 =60)
         // when battery voltage is 7.2volt it is fully charged (7.2*10=72)
         // 6.0v =0% and 7.2v =100%
         //batt_charged_percent = batt_volt*10;   
         //batt_charged_percent = map(batt_volt*10, 60 , 72, 0, 100);
          batt_charged_percent = batt_volt * 10;   
          batt_charged_percent = map(batt_volt * 10, batt_min_voltage * 10 , batt_max_voltage * 10, 0, 100);
          //batt_charged_percent = (batt_volt / batt_max_voltage) * 100;
          Serial.print ("batt_charged_percent: ");
          Serial.println(batt_charged_percent);
             
          if (last_batt_charged_percent != batt_charged_percent) 
          {
              gw.sendBatteryLevel(batt_charged_percent);
              last_batt_charged_percent = batt_charged_percent;        
          }
          //battery
          
          delay(50);
          
          // Sleep until interrupt comes in on motion sensor. Send update every two minute.   
          gw.sleep(INTERRUPT, CHANGE, SLEEP_TIME);
          
          
      } 
       
      void incomingMessage(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.isAck()) {
           Serial.println("This is an ack from gateway");
        }
      
        if (message.type == V_LIGHT) {
           // Change relay state_relay
           state_relay = message.getBool();
           GestisciRelay();
          
           // Write some debug info
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
         
        
      }
      
      
      
      void GestisciRelay()
      {
          //Serial.print(" GestisciRelay state_relay:");
          //Serial.println(state_relay);
        
          if (state_relay == 0)
          {
            digitalWrite(RELAY_PIN, LOW);
            gw.send(msgRelay.set(state_relay));
            //Serial.println("SPENTO RELAY");
          }
          else 
         {
            digitalWrite(RELAY_PIN, HIGH);
            gw.send(msgRelay.set(state_relay));
            //Serial.println("ACCESO RELAY");
         } 
      
        
      }
      
      1 Reply Last reply
      0
      • gohanG Offline
        gohanG Offline
        gohan
        Mod
        wrote on last edited by
        #3

        Hi
        did you read this? https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x

        Z 1 Reply Last reply
        1
        • gohanG gohan

          Hi
          did you read this? https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x

          Z Offline
          Z Offline
          zrom69
          wrote on last edited by gohan
          #4

          @gohan

          you can check i add module rain

          // Example sketch för a "light switch" where you can control light or something 
          // else from both vera and a local physical button (connected between digital
          // pin 3 and GND).
          // This node also works as a repeader for other nodes
          // Enable debug prints to serial monitor
          #define MY_DEBUG 
          
          // Enable and select radio type attached
          #define MY_RADIO_NRF24
          //#define MY_RADIO_RFM69
          
          #define MY_NODE_ID 2
          #define MY_PARENT_NODE_ID  0
          #define MY_PARENT_NODE_IS_STATIC
          #include <MySensors.h>
          #include <SPI.h>
          #include <DHT.h> 
          
          unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
          
          //pin sensori
          #define PIR_PIN 6                   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
          #define HUMIDITY_TEMPERATURE_PIN 3  // sensore temperatura umidita
          #define RELAY_PIN  4   // relay pin
          #define DIGITAL_INPUT_RAIN_SENSOR 5
          int BATTERY_SENSE_PIN = A1;         // Pin carica batteria o pannello solare
          int FOTORESIST_SENSE_PIN = A2;      // Pin fotoresistenza
          
          //interupt per sleep arduino
          #define INTERRUPT PIR_PIN-6 // Usually the interrupt = pin -2 (on uno/nano anyway)
          #define INTERRUPT DIGITAL_INPUT_RAIN_SENSOR-2
          
          //id per vera
          #define CHILD_ID_RELE 1   // Id relay
          #define CHILD_ID_HUM 2    // id temperatura
          #define CHILD_ID_TEMP 3   // id umidita
          #define CHILD_ID_PIR 4    // Id pir
          #define CHILD_ID_LIGHT 5  // Id luminosita (fotoresistenza)
          #define CHILD_ID_RAIN 6
          
          //definizione per nodo vera
          #define NODE_ID 10
          #define SN "meteo station"
          #define SV "1.4"
          
          //variabili
          bool state_relay;                 //stato relay
          float batt_valore;                //dichiaro la variabile valore che memorizzerà il valore della batteria dal pin analogico
          float batt_volt;                  //volt batteria
          float batt_charged_percent;       //percentuale carica batteria
          float last_batt_charged_percent;  //percentuale carica batteria precedente
          float batt_min_voltage = 0.5;     //tensione minima batteria
          float batt_max_voltage = 5;       //tensione massima batteria
          float fotoresistenza_valore;      //dichiaro la variabile valore che memorizzerà il valore della fotoresistenza dal pin analogico
          float last_fotoresistenza_valore; //dichiaro la variabile valore precedente
          int lastRainValue = -1;
          int nRainVal;
          boolean bIsRaining = false;
          String strRaining = "NO";
          int lux_vera;                      //valore luminosita da inviare a vera
          
          
          
          // sensore temperatura umidita
          DHT dht_int;
          float lastTemp_int = -1;
          float lastHum_int = -1;
          
          boolean metric = true; 
          
          MyMessage msgRelay(CHILD_ID_RELE,V_LIGHT);
          MyMessage msgHum(CHILD_ID_HUM, V_HUM);
          MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
          MyMessage msgPir(CHILD_ID_PIR, V_TRIPPED);
          MyMessage msgLux(CHILD_ID_LIGHT, V_LIGHT_LEVEL);
          MyMessage msgRain(CHILD_ID_RAIN, V_TRIPPED);
          
          void setup()  
          {  
           metric = getControllerConfig().isMetric;
            // Then set relay pins in output mode
            pinMode(RELAY_PIN, OUTPUT);
          
            pinMode(DIGITAL_INPUT_RAIN_SENSOR, INPUT);
            
            //PIR
            pinMode(PIR_PIN, INPUT);
            
            state_relay = 0;  
            //GestisciRelay();
            digitalWrite(RELAY_PIN, LOW);
            send(msgRelay.set(state_relay)); 
               
          }
          
          
          void presentation() 
          {
                
            
            sendSketchInfo(SN, SV); 
          
            //Sensore umidita temperatura
            dht_int.setup(HUMIDITY_TEMPERATURE_PIN);
            
            present(CHILD_ID_RELE, S_LIGHT);       //light vera
            present(CHILD_ID_HUM, S_HUM);          //umidity vera
            present(CHILD_ID_TEMP, S_TEMP);           // temp vera
            present(CHILD_ID_PIR, S_MOTION);          // motion vera
            present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);  //light level (fotoresistenza)
            present(CHILD_ID_RAIN, S_MOTION, "WS Rain");
          
          }
          void loop() 
          { 
              
            
              //sensore temperatura umidita
              delay(dht_int.getMinimumSamplingPeriod());
          
              float temperature_int = dht_int.getTemperature();
              if (isnan(temperature_int)) 
              {
                  lastTemp_int = -1;
                  Serial.println("Failed reading temperature from DHT");
              } 
              else if (temperature_int != lastTemp_int) 
              {
                lastTemp_int = temperature_int;
                if (!metric) 
                {
                  temperature_int = dht_int.toFahrenheit(temperature_int);
                }
                send(msgTemp.set(temperature_int, 1));
                Serial.print("T int: ");
                Serial.println(temperature_int);
              }
            
              float humidity_int = dht_int.getHumidity();
              if (isnan(humidity_int)) 
              {
                  lastHum_int = -1;
                  Serial.println("Failed reading humidity from DHT");
              } 
              else if (humidity_int != lastHum_int) 
              {
                  lastHum_int = humidity_int;
                  send(msgHum.set(humidity_int, 1));
                  Serial.print("H int: ");
                  Serial.println(humidity_int);
              }
              //sensore temperatura umidita
              
              //fotoresistenza    
              for(int i=0;i<150;i++)
              {
                fotoresistenza_valore += analogRead(FOTORESIST_SENSE_PIN);  //read the input voltage from battery or solar panel      
                delay(2);
              }
              fotoresistenza_valore = fotoresistenza_valore / 150;    
                     
              Serial.print ("fotoresistenza: ");
              Serial.println(fotoresistenza_valore); 
          
              if (fotoresistenza_valore != last_fotoresistenza_valore) 
              {
                lux_vera = (int) fotoresistenza_valore;
                send(msgLux.set(lux_vera));
                last_fotoresistenza_valore = fotoresistenza_valore;
              }    
              //fotoresistenza
              
              //pir relay
              // Read digital motion value
              boolean tripped = digitalRead(PIR_PIN) == HIGH; 
              Serial.println("pir:");      
              Serial.println(tripped);
              send(msgPir.set(tripped?"1":"0"));  // Send tripped value to gw 
              
              //accende la luce con il buio
              if (fotoresistenza_valore < 200)  //poca luce
              {
                if (tripped == 1) 
                {
                   state_relay = 1;     
                }
                else
                {
                   state_relay = 0;     
                }
              }
              //accende la luce con il buio
              
              GestisciRelay();
              //pir relay
              
              //battery    
              for(int i=0;i<150;i++)
              {
                batt_valore += analogRead(BATTERY_SENSE_PIN);  //read the input voltage from battery or solar panel      
                delay(2);
              }
              batt_valore = batt_valore / 150;    
                     
              Serial.print ("batt_valore: ");
              Serial.println(batt_valore);
              
              batt_volt = (batt_valore / 1024) * batt_max_voltage;
              Serial.print ("batt_volt: ");
              Serial.println(batt_volt);
              
              ////////////////////////////////////////////////
             //The map() function uses integer math so will not generate fractions
             // so I multiply battery voltage with 10 to convert float into a intiger value
             // when battery voltage is 6.0volt it is totally discharged ( 6*10 =60)
             // when battery voltage is 7.2volt it is fully charged (7.2*10=72)
             // 6.0v =0% and 7.2v =100%
             //batt_charged_percent = batt_volt*10;   
             //batt_charged_percent = map(batt_volt*10, 60 , 72, 0, 100);
              batt_charged_percent = batt_volt * 10;   
              batt_charged_percent = map(batt_volt * 10, batt_min_voltage * 10 , batt_max_voltage * 10, 0, 100);
              //batt_charged_percent = (batt_volt / batt_max_voltage) * 100;
              Serial.print ("batt_charged_percent: ");
              Serial.println(batt_charged_percent);
                 
              if (last_batt_charged_percent != batt_charged_percent) 
              {
                  sendBatteryLevel(batt_charged_percent);
                  last_batt_charged_percent = batt_charged_percent;        
              }
              
              bIsRaining = !(digitalRead(DIGITAL_INPUT_RAIN_SENSOR));
                if(bIsRaining){
                    strRaining = "YES";
                }
                else{
                    strRaining = "NO";
                }
            
                //Serial.print("Raining?: ");
                //Serial.print(strRaining);  
                //Serial.print("\t Moisture Level: ");
                //Serial.println(nRainVal);
                //http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-rain-sensor-module-guide-and-tutorial/
          
                send(msgRain.set(bIsRaining, 1));
              
              //battery
              
              delay(50);
              
              // Sleep until interrupt comes in on motion sensor. Send update every two minute.   
              sleep(INTERRUPT, CHANGE, SLEEP_TIME);
              
              
          } 
           
          void incomingMessage(const MyMessage &message) {
            // We only expect one type of message from controller. But we better check anyway.
            if (message.isAck()) {
               Serial.println("This is an ack from gateway");
            }
          
            if (message.type == V_LIGHT) {
               // Change relay state_relay
               state_relay = message.getBool();
               GestisciRelay();
              
               // Write some debug info
               Serial.print("Incoming change for sensor:");
               Serial.print(message.sensor);
               Serial.print(", New status: ");
               Serial.println(message.getBool());
             } 
             
            
          }
          
          
          
          void GestisciRelay()
          {
              //Serial.print(" GestisciRelay state_relay:");
              //Serial.println(state_relay);
            
              if (state_relay == 0)
              {
                digitalWrite(RELAY_PIN, LOW);
                send(msgRelay.set(state_relay));
                //Serial.println("SPENTO RELAY");
              }
              else 
             {
                digitalWrite(RELAY_PIN, HIGH);
                send(msgRelay.set(state_relay));
                //Serial.println("ACCESO RELAY");
             } 
          
            
          }
          
          1 Reply Last reply
          0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          25

          Online

          12.0k

          Users

          11.2k

          Topics

          113.4k

          Posts


          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
          • Login

          • Don't have an account? Register

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