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 726 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.
  • zrom69Z Offline
    zrom69Z 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%)

    zrom69Z 1 Reply Last reply
    0
    • zrom69Z 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%)

      zrom69Z Offline
      zrom69Z 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

        zrom69Z 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

          zrom69Z Offline
          zrom69Z 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
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          5

          Online

          11.7k

          Users

          11.2k

          Topics

          113.1k

          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