Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. Wikibear
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Wikibear

    @Wikibear

    3
    Reputation
    9
    Posts
    358
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Wikibear Follow

    Best posts made by Wikibear

    • RE: Repeater Node and DHT11

      Thank you very much for this quick reply!

      I read a thread with gw.XXX commands. That confused me. API say only #define MY_REPEATER_FEATURE.

      Now it's more clear to me!

      posted in Development
      Wikibear
      Wikibear
    • RE: Combine a controller and a gateway in a raspberry pi

      I do this via Pimatic and Raspberry Pi 3

      posted in General Discussion
      Wikibear
      Wikibear
    • RE: Repeater Node and DHT11

      I'm not sure whats happened... But i think its working now. I try to investigate why it works now! If i find the reason i will post here. Thanks for help.

      posted in Development
      Wikibear
      Wikibear

    Latest posts made by Wikibear

    • RE: Motion Sensor triggering on its own

      Have this same issue and it makes me crazy... I use a step up converter DCDC 1.8V up to 3.3 input and output 3.3V. If solder from DCDC Out via 220uF direct soldered after stabilizer of HC501 direct on pcb and sometimes it will detect motion where no motion happens. I use two AA accu and i know that they have together 2,4V. Less voltage less current. But i try also with normal AA 3V then i have this issue not so often. But i have. It will much more if the voltage will more less.

      posted in Troubleshooting
      Wikibear
      Wikibear
    • RE: Serial Gateway + NRF24 with sleep mode enabled there

      OK, i misunderstood that. Sorry.

      posted in General Discussion
      Wikibear
      Wikibear
    • RE: Combine a controller and a gateway in a raspberry pi

      BTW you can create an arduino gw and plugin via USB. I must do this 'cause I'm using Zwave.me gateway parallel and with stretch i get an error with both over GPIO.

      posted in General Discussion
      Wikibear
      Wikibear
    • RE: Serial Gateway + NRF24 with sleep mode enabled there

      Why you don't use timer lib?

      https://playground.arduino.cc/Code/Timer

      posted in General Discussion
      Wikibear
      Wikibear
    • RE: Combine a controller and a gateway in a raspberry pi

      I do this via Pimatic and Raspberry Pi 3

      posted in General Discussion
      Wikibear
      Wikibear
    • RE: Repeater Node and DHT11

      I'm not sure whats happened... But i think its working now. I try to investigate why it works now! If i find the reason i will post here. Thanks for help.

      posted in Development
      Wikibear
      Wikibear
    • RE: Repeater Node and DHT11

      Thanks but it seems not to work. My serial Gateway is working well. My repeater works DHT sends temp and humidity but it seems that repeat function does not work. I'm a little bit far away from gateway. A stay beside my repeater with arduino mini pro direct connected via programmer powered with USB voltage. But i didn't get any connection. If i go beside my gateway all is fine.

      Repeater code:

      
      #define MY_DEBUG
      //#define MY_TRANSPORT_WAIT_READY_MS 1
      
      #define MY_RADIO_NRF24
      #define MY_NODE_ID 51
      #define MY_REPEATER_FEATURE
      #define MY_RF24_IRQ_PIN 2
      #define MY_RF24_PA_LEVEL   (RF24_PA_MAX)
       
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>
      
      #define DHT_DATA_PIN 3
      #define SENSOR_TEMP_OFFSET 0
      
      // Sleep time between sensor updates (in milliseconds)
      // Must be >1000ms for DHT22 and >2000ms for DHT11
      static const uint64_t UPDATE_INTERVAL = 60000;
      
      // Force sending an update of the temperature after n sensor reads, so a controller showing the
      // timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
      // the value didn't change since;
      // i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      
      #define CHILD_ID_HUM 1
      #define CHILD_ID_TEMP 0
      
      float lastTemp;
      float lastHum;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      bool metric = true;
      
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      DHT dht;
      
      
      void presentation()  
      { 
        // Send the sketch version information to the gateway
        sendSketchInfo("TemperatureAndHumidity", "1.1");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
      
        metric = getControllerConfig().isMetric;
      }
      
      
      void setup()
      {
        dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
        if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
          Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
        }
        // Sleep for the time of the minimum sampling period to give the sensor time to power up
        // (otherwise, timeout errors might occure for the first reading)
        sleep(dht.getMinimumSamplingPeriod());
      }
      
      
      void loop()      
      {  
        // Force reading sensor, so it works also after sleep()
        dht.readSensor(true);
      
        // Get temperature from DHT library
        float temperature = dht.getTemperature();
        if (isnan(temperature)) {
          Serial.println("Failed reading temperature from DHT!");
        } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
          lastTemp = temperature;
          if (!metric) {
            temperature = dht.toFahrenheit(temperature);
          }
          // Reset no updates counter
          nNoUpdatesTemp = 0;
          temperature += SENSOR_TEMP_OFFSET;
          send(msgTemp.set(temperature, 1));
      
          #ifdef MY_DEBUG
          Serial.print("T: ");
          Serial.println(temperature);
          #endif
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
      
        // Get humidity from DHT library
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
          Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
          // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
          lastHum = humidity;
          // Reset no updates counter
          nNoUpdatesHum = 0;
          send(msgHum.set(humidity, 1));
      
          #ifdef MY_DEBUG
          Serial.print("H: ");
          Serial.println(humidity);
          #endif
        } else {
          // Increase no update counter if the humidity stayed the same
          nNoUpdatesHum++;
        }
      
        // Sleep for a while to save energy
        wait(UPDATE_INTERVAL); 
      }
      
      

      Mini pro code:

      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached 
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      //#define MY_RS485
      
      #define MY_NODE_ID 52
      #define MY_PARENT_NODE_ID 51
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>
      
      // Set this to the pin you connected the DHT's data pin to
      #define DHT_DATA_PIN 3
      
      // Set this offset if the sensor has a permanent small offset to the real temperatures
      #define SENSOR_TEMP_OFFSET 0
      
      int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
      int oldBatteryPcnt = 0;
      
      // Sleep time between sensor updates (in milliseconds)
      // Must be >1000ms for DHT22 and >2000ms for DHT11
      static const uint64_t UPDATE_INTERVAL = 300000;
      
      // Force sending an update of the temperature after n sensor reads, so a controller showing the
      // timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
      // the value didn't change since;
      // i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      
      #define CHILD_ID_HUM 1
      #define CHILD_ID_TEMP 0
      
      float lastTemp;
      float lastHum;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      bool metric = true;
      
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      DHT dht;
      
      
      void presentation()  
      { 
        // Send the sketch version information to the gateway
        sendSketchInfo("TemperatureAndHumidity", "1.1");
        
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
        
        metric = getControllerConfig().isMetric;
      }
      
      
      void setup()
      {
        dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
        if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
          Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
        }
        // Sleep for the time of the minimum sampling period to give the sensor time to power up
        // (otherwise, timeout errors might occure for the first reading)
        sleep(dht.getMinimumSamplingPeriod());
        #if defined(__AVR_ATmega2560__)
          analogReference(INTERNAL1V1);
        #else
          analogReference(INTERNAL);
        #endif
      }
      
      
      void loop()      
      {  
        // Force reading sensor, so it works also after sleep()
        dht.readSensor(true);
        
        // Get temperature from DHT library
        float temperature = dht.getTemperature();
        if (isnan(temperature)) {
          Serial.println("Failed reading temperature from DHT!");
        } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
          lastTemp = temperature;
          if (!metric) {
            temperature = dht.toFahrenheit(temperature);
          }
          // Reset no updates counter
          nNoUpdatesTemp = 0;
          temperature += SENSOR_TEMP_OFFSET;
          send(msgTemp.set(temperature, 1));
      
          #ifdef MY_DEBUG
          Serial.print("T: ");
          Serial.println(temperature);
          #endif
          /////////////battery part////////////////
          int sensorValue = analogRead(BATTERY_SENSE_PIN);
        #ifdef MY_DEBUG
          Serial.println(sensorValue);
        #endif
        int batteryPcnt = sensorValue / 10;
        #ifdef MY_DEBUG
          float batteryV  = sensorValue * 0.003363075;
          Serial.print("Battery Voltage: ");
          Serial.print(batteryV);
          Serial.println(" V");
      
          Serial.print("Battery percent: ");
          Serial.print(batteryPcnt);
          Serial.println(" %");
        #endif
        if (oldBatteryPcnt != batteryPcnt) {
              // Power up radio after sleep
              if(batteryPcnt>100){ Serial.println("too much batt power"); batteryPcnt = 100; }
              sendBatteryLevel(batteryPcnt);
              oldBatteryPcnt = batteryPcnt;
          }
          
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
      
        // Get humidity from DHT library
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
          Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
          // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
          lastHum = humidity;
          // Reset no updates counter
          nNoUpdatesHum = 0;
          send(msgHum.set(humidity, 1));
          
          #ifdef MY_DEBUG
          Serial.print("H: ");
          Serial.println(humidity);
          #endif
        } else {
          // Increase no update counter if the humidity stayed the same
          nNoUpdatesHum++;
        }
      
        // Sleep for a while to save energy
        sleep(UPDATE_INTERVAL); 
      }
      

      Thanks for any help

      posted in Development
      Wikibear
      Wikibear
    • RE: Repeater Node and DHT11

      Thank you very much for this quick reply!

      I read a thread with gw.XXX commands. That confused me. API say only #define MY_REPEATER_FEATURE.

      Now it's more clear to me!

      posted in Development
      Wikibear
      Wikibear
    • Repeater Node and DHT11

      Hello together,

      i try to understand how does it works. Did i need really only #define MY_REPEATER_FEATURE ???
      Must i set some variables in loop or define more that i can use this as repeater?
      DHT11 takes some time to read out data. Normally we do this over sleep. But in this time the repeater feature will be blocked. I read so many threads and posts here at mysensors that i get more and more confused.

      What i understand at the moment, that i only need #define MY_REPEATER_FEATURE and loop does not contain any sleep. Is this right or not?

      Greetings Wikibear

      posted in Development
      Wikibear
      Wikibear