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. Hardware
  3. Interval/sleep sensor settings

Interval/sleep sensor settings

Scheduled Pinned Locked Moved Hardware
6 Posts 4 Posters 2.7k Views 1 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.
  • M Offline
    M Offline
    marceltrapman
    Mod
    wrote on last edited by
    #1

    Let's assume I have a temperature sensor and let's assume I want to set it to sleep for 30 minutes before reporting any change (if any) makes me thing the following:

    1. Is it possible to change this interval through the controller/gateway currently or can I and do I need to add this myself?
    2. When I do this the sensor is asleep and can not receive any request from the controller (if I am correct). Will the request be queued or do I have to create a queue on the controller?
    3. When I have to create a queue on the controller how is it reported that the request did not arrive?
    4. And, lastly, is it possible to wake the sensor up with a special request (I assume not)?

    Fulltime Servoy Developer
    Parttime Moderator MySensors board

    I use Domoticz as controller for Z-Wave and MySensors (previously Indigo and OpenHAB).
    I have a FABtotum to print cases.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mitekg
      wrote on last edited by hek
      #2

      here is my solution for dht-22 battery driven sensor:

        #include <Sleep_n0m1.h>
        #include <SPI.h>
        #include <EEPROM.h>  
        #include <RF24.h>
        #include <Sensor.h>  
        #include <DHT.h>  
        
        
        // Set RADIO_ID to something unique in your sensor network (1-254)
        // or set to AUTO if you want gw to assign a RADIO_ID for you.
        #define RADIO_ID AUTO
        #define CHILD_ID_HUM 0
        #define CHILD_ID_TEMP 1
        #define HUMIDITY_SENSOR_DIGITAL_PIN 3
        // Send the Battery Percentage to the Gateway
        
        #define VBatMax 4.0            // The voltage of New Batteries
        #define VBatDropout  2.0    // The battery dropout voltage
        
        unsigned long SLEEP_TIME = 30; // Sleep time between reads (in seconds)
        float SENSOR_TOLERANCE = 0.1; // Tempereture or humidity sensetive change +- 0.1 will not go to data transmit
        unsigned long SEND_FREQ = 1; // If the temperature doesn't change for this period, force data transition of battery level to reset TTL on vera gate. 1 = means send each time the sensor wake-up
        unsigned long SETTINGS_REQ_FREQ = 1; // How often node reqsts a new settings 1 = means req. each time the sensor wake-up. NOTE: Settings reqsts each time the sensor resets.
        int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
        
        
        struct port_param_t{String name; String value;};
        #define MAX_PARAMS 20 // ������� ���������� ����������� �� ����� �������
        port_param_t params[MAX_PARAMS]; // � ���� ������ ����� ��������� ���� ��������� ���������
        byte parsedParams=0; // ������� ���������� ��� ������� ���������
        
        Sensor gw(9, 10);
        DHT dht;
        Sleep sleep;
        
        float lastTemp;
        float lastHum;
        float lastSend = 0;
        float lastReq = 0;
        float lastBattLevel;
        boolean metric = true; 
        
        void setup()  
        { 
          
          delay(2000);
          // use the 1.1 V internal reference
          analogReference(INTERNAL);
        
          Serial.begin(BAUD_RATE);  // Used to type in characters
          gw.begin(RADIO_ID);
          dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
          gw.sendSketchInfo("Humidity", "1.2");
          // Register all sensors to gw (they will be created as child devices)
          gw.sendSensorPresentation(CHILD_ID_HUM, S_HUM);
          gw.sendSensorPresentation(CHILD_ID_TEMP, S_TEMP);
          
          metric = gw.isMetricSystem();
          
          veraCfgread();
          
        }
        
        void veraCfgread()
        {
        	char* defCfg="1,1,30,1"; 
        	char* Cfg = gw.getStatus(RADIO_ID, V_VAR1); // getting cfg
        	Serial.println("parsed:");
        	parseParams(Cfg);
        	if (parsedParams==0)
        		gw.sendVariable(RADIO_ID, V_VAR1, defCfg);
        	else
        	{
        		SENSOR_TOLERANCE = float(strtoint(params[0].value))/10;
        		SEND_FREQ = strtoint(params[1].value);
        		SLEEP_TIME = strtoint(params[2].value);
        		SETTINGS_REQ_FREQ = strtoint(params[3].value);
        	}
        	Serial.print(SENSOR_TOLERANCE);
        	Serial.print(",");
        	Serial.print(SEND_FREQ);
        	Serial.print(",");
        	Serial.print(SLEEP_TIME);
        	Serial.print(",");
        	Serial.print(SETTINGS_REQ_FREQ);
        	Serial.print(".");
        }
        
        // Read the Battery
        long readVcc() {
            long result;
            // Read 1.1V reference against AVcc
            ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
            delay(2); // Wait for Vref to settle
            ADCSRA |= _BV(ADSC); // Convert
            while (bit_is_set(ADCSRA,ADSC));
            result = ADCL;
            result |= ADCH<<8;
            result = 1125300L / result; // Back-calculate AVcc in mV
            return result;
        }
        
        
        int strtoint(String str) // ��������� ��������������� ������ � �����
        {
          int tempInt;
          char rez[str.length()+1];
          str.toCharArray(rez, sizeof(rez));
          tempInt = atoi(rez);
          return tempInt;
        }
        
        void parseParams(char* inputString)
        {
        	parsedParams=0; // ���� ������ �� ���������
        	String message = inputString;
        	int commaPosition;  // the position of the next comma in the string
        	do
        	{
              commaPosition = message.indexOf(',');
              if(commaPosition != -1)
              {
                  params[parsedParams].value = message.substring(0,commaPosition);
        		  parsedParams++;
                  message = message.substring(commaPosition+1, message.length());
              }
              else
              {  // here after the last comma is found
                 if(message.length() > 0)
                   params[parsedParams].value = message;  // if there is text after the last comma
              }
           }
           while(commaPosition >=0);
        }
        
        void loop()      
        {     
          lastSend--;
          lastReq--;
          // -1------------------------------------------
          delay(dht.getMinimumSamplingPeriod());
          float temperature = dht.getTemperature();
          if (isnan(temperature)) 
          {
              Serial.println("Failed reading temperature from DHT");
          } 
          else if (temperature != lastTemp || lastSend == 0)
        		{
        			Serial.print("TR: ");
        			Serial.println(temperature);
        
        			float delta = lastTemp - temperature;
        			delta = abs (delta);
        			if (delta > SENSOR_TOLERANCE || lastSend == 0)
        			{
        				lastTemp = temperature;
        				if (!metric) 
        					{
        						temperature = dht.toFahrenheit(temperature);
        					}
        				gw.sendVariable(CHILD_ID_TEMP, V_TEMP, temperature, 1);
        				Serial.print("T: ");
        				Serial.println(temperature);
        			}
        		}
          // -2------------------------------------------
        
          float humidity = dht.getHumidity();
          if (isnan(humidity)) 
          {
              Serial.println("Failed reading humidity from DHT");
          } 
          else if (humidity != lastHum || lastSend == 0) 
        	   {
        		   Serial.print("HR: ");
        		   Serial.println(humidity);
        		   float delta = lastHum - humidity;
        		   delta = abs (delta);
        		   if (delta > SENSOR_TOLERANCE || lastSend == 0)
        		   {
        			   lastHum = humidity;
          Serial.println(lastSend);
          if (lastSend <= 0)
        	  lastSend = SEND_FREQ; 
          Serial.print("LastSndAfter: ");
          Serial.println(lastSend);
        
          if (lastReq <= 0)
          {
        	  veraCfgread();
        	  lastReq = SETTINGS_REQ_FREQ;
          }
          // -3------------------------------------------
          long curVcc;// = readVcc();
          float pct;  // = (curVcc-(VBatDropout*1000)) /(((VBatMax-VBatDropout) *1000))*100;
          
          
          int sensorValue = analogRead(BATTERY_SENSE_PIN);
          float batteryV  = sensorValue * 0.003363075;
          int batteryPcnt = sensorValue / 10;
        
          curVcc = batteryV*1000;
          pct = batteryPcnt;
        
          if (pct != lastBattLevel)
          {
        	  lastBattLevel = pct;
        	  gw.sendBatteryLevel(pct);
        	  
        	  /*Serial.print("Batt%: ");
              Serial.println(pct);
        	  Serial.print("Vcc: ");
              Serial.println(batteryV);*/
        	  
        	  gw.sendVariable(RADIO_ID, V_VAR2, curVcc);
          }
          // -------------------------------------------
          // Power down the radio.  Note that the radio will get powered back up
          // on the next write() call.
          delay(1000); //delay to allow serial to fully print before sleep
          gw.powerDown();
          sleep.pwrDownMode(); //set sleep mode
          sleep.sleepDelay(SLEEP_TIME * 1000); //sleep for: sleepTime 
        }
        			   gw.sendVariable(CHILD_ID_HUM, V_HUM, humidity, 1);
        			   Serial.print("H: ");
        			   Serial.println(humidity);
        		   }
        	   }
          // -------------------------------------------
          Serial.print("LastSndBefore: ");
      
      1 Reply Last reply
      0
      • M Offline
        M Offline
        marceltrapman
        Mod
        wrote on last edited by
        #3

        Wow thank you but... Can you please correct the formatting :)

        Fulltime Servoy Developer
        Parttime Moderator MySensors board

        I use Domoticz as controller for Z-Wave and MySensors (previously Indigo and OpenHAB).
        I have a FABtotum to print cases.

        1 Reply Last reply
        0
        • H Offline
          H Offline
          hek
          Admin
          wrote on last edited by
          #4

          Thanks for the example @mitekg

          Took the liberty to fix the formatting in your post.

          Start a line with 4 spaces or tab to format as code.

          M 1 Reply Last reply
          0
          • H hek

            Thanks for the example @mitekg

            Took the liberty to fix the formatting in your post.

            Start a line with 4 spaces or tab to format as code.

            M Offline
            M Offline
            mitekg
            wrote on last edited by
            #5

            @hek, thx4fix!)
            @marceltrapman, if u have any questions, u r welcome)

            R 1 Reply Last reply
            0
            • M mitekg

              @hek, thx4fix!)
              @marceltrapman, if u have any questions, u r welcome)

              R Offline
              R Offline
              RJ_Make
              Hero Member
              wrote on last edited by
              #6

              @mitekg
              Have you converted you sketch to v 1.4?

              RJ_Make

              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


              43

              Online

              11.9k

              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