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.2k 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.
  • marceltrapmanM Offline
    marceltrapmanM 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
      • marceltrapmanM Offline
        marceltrapmanM 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
        • hekH Offline
          hekH 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
          • hekH 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)

            RJ_MakeR 1 Reply Last reply
            0
            • M mitekg

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

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


              21

              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