Navigation

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

    Posts made by derksuh

    • Node with Relay

      Hello all,

      I have a node to wher a dht22 is connected and a relais, this is to sitch on or off my fan in the bathroom. Before openhab i was using pimatic and that was working good i could see the temperature and humidity and i could turn on and off the relais. No with openhab i get the temperature and the humidity in the inbox but not the relay. Is it somehow possible to get this working?

      Greetings, Martijn

      posted in OpenHAB
      derksuh
      derksuh
    • RE: Relay not reacting first 3 seconds

      @rejoe2 said in Relay not reacting first 3 seconds:

      AVR board definition

      If this is the problem then could i do something about it?

      posted in Development
      derksuh
      derksuh
    • Relay not reacting first 3 seconds

      Hello all,

      I have the following sketch working with a pimatic installation. When i switch on the relay nothing happens
      when i keep switching it on and off than after 2 or 3 times it starts reacting. But every time i wait a couple of seconds
      i have to switch it on and off a couple of times before it reacts. This is th epimatic log output if i switch it on the first time.

      debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSF:MSG:LEN,2!=7
      19:53:48debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:READ,25-12-0,s=0,c=0,t=0,pt=0,l=0,sg=0:
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:INIT OK,TSP=1
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:STP
      19:45:45debug [pimatic-mysensors]: <- Presented Node  [ '0', '255', '0', '0', '18', '2.1.1' ]
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:REG:NOT NEEDED
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:READY:ID=0,PAR=0,DIS=0
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT:GW MODE
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT:TSP OK
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:WUR:MS=0
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.1.1
      19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSF:MSG:SEND,0-0-5-5,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=NACK:1
      19:45:44debug [pimatic-mysensors]: -> Sending  5;1;1;1;2;1
      

      if it starts reacting i get this output.

      debug [pimatic-mysensors]: <- MySensorDHT  { sender: 5, sensor: 1, type: 2, value: '1' }
      19:45:04debug [pimatic-mysensors]: <- MySensorSwitch  { sender: 5, sensor: 1, type: 2, value: '1' }
      19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:ACK
      19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:READ,5-5-0,s=1,c=1,t=2,pt=0,l=1,sg=0:1
      19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:SEND,0-0-5-5,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:1
      19:45:04debug [pimatic-mysensors]: -> Sending  5;1;1;1;2;1```
      
      
      This is the sketch i am using
      
      ```#define MY_NODE_ID 5
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>  
      
      #define CHILD_ID_HUM 1
      #define CHILD_ID_TEMP 2
      #define HUMIDITY_SENSOR_DIGITAL_PIN 6
      unsigned long WAIT_TIME = 30000; // Sleep time between reads (in milliseconds)
      unsigned long lastRefreshTime = 0; // Use this to implement a non-blocking delay function
      
      #define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define NUMBER_OF_RELAYS 1 // Total number of attached relays
      #define RELAY_ON 0  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
      
      
      
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true; 
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      
      void setup()  
      { 
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
        metric = getConfig().isMetric;
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);   
          // Set relay to last known state (using eeprom storage) 
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
          // Request the latest relay status from the gateway 
        Serial.println("Requesting initial value from controller");
        request(RELAY_1, V_STATUS);
      }
      
      void presentation()  
      { 
        // Send the Sketch Version Information to the Gateway
        sendSketchInfo("Badkamer", "1.3");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_LIGHT);
        }
      }
      
      
      void loop()      
      { 
        boolean needRefresh = (millis() - lastRefreshTime) > WAIT_TIME;
        if (needRefresh)
        {
            lastRefreshTime = millis();
            
            float temperature = dht.getTemperature();
            if (isnan(temperature)) {
                Serial.println("Failed reading temperature from DHT");
            } else if (temperature != lastTemp) {
              lastTemp = temperature;
              if (!metric) {
                temperature = dht.toFahrenheit(temperature);
              }
              send(msgTemp.set(temperature, 1));
              Serial.print("T: ");
              Serial.println(temperature);
            }
            
            float humidity = dht.getHumidity();
            if (isnan(humidity)) {
                Serial.println("Failed reading humidity from DHT");
            } else if (humidity != lastHum) {
                lastHum = humidity;
                send(msgHum.set(humidity, 1));
                Serial.print("H: ");
                Serial.println(humidity);
            }
      
        }
        
      }
      
      void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_LIGHT) {
           // Change relay state
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
           // Store state in eeprom
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
      }
      
      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      No it doesn't do that. If i switch on the relay in pimatic then it goes on.
      if i then rebot the node the relay stays off but the status in pimatic also changes to off.

      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey You mean like this?

      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik EKblad
       * 
       * DESCRIPTION
       * This sketch provides an example how to implement a humidity/temperature
       * sensor using DHT11/DHT-22 
       * http://www.mysensors.org/build/humidity
       */
      
      #define MY_NODE_ID 1
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>  
      
      #define CHILD_ID_HUM 1
      #define CHILD_ID_TEMP 2
      #define HUMIDITY_SENSOR_DIGITAL_PIN 6
      unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
      unsigned long lastRefreshTime = 0; // Use this to implement a non-blocking delay function
      
      #define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define NUMBER_OF_RELAYS 1 // Total number of attached relays
      #define RELAY_ON 0  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
      
      
      
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true; 
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      
      void setup()  
      { 
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
        metric = getConfig().isMetric;
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);   
          // Set relay to last known state (using eeprom storage) 
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
          // Request the latest relay status from the gateway 
        Serial.println("Requesting initial value from controller");
        request(RELAY_1, V_STATUS);
      }
      
      void presentation()  
      { 
        // Send the Sketch Version Information to the Gateway
        sendSketchInfo("Badkamer", "1.3");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_LIGHT);
        }
      }
      
      
      void loop()      
      { 
        boolean needRefresh = (millis() - lastRefreshTime) > SLEEP_TIME;
        if (needRefresh)
        {
            lastRefreshTime = millis();
            
            float temperature = dht.getTemperature();
            if (isnan(temperature)) {
                Serial.println("Failed reading temperature from DHT");
            } else if (temperature != lastTemp) {
              lastTemp = temperature;
              if (!metric) {
                temperature = dht.toFahrenheit(temperature);
              }
              send(msgTemp.set(temperature, 1));
              Serial.print("T: ");
              Serial.println(temperature);
            }
            
            float humidity = dht.getHumidity();
            if (isnan(humidity)) {
                Serial.println("Failed reading humidity from DHT");
            } else if (humidity != lastHum) {
                lastHum = humidity;
                send(msgHum.set(humidity, 1));
                Serial.print("H: ");
                Serial.println(humidity);
            }
      
        }
        
      }
      
      void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_LIGHT) {
           // Change relay state
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
           // Store state in eeprom
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
      }
      
      
      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey

      I did not get it working the way i would like. I now used a different sketch.
      here i had the same problem but i just set the relay_OFF from 0 to 1, and the Relay_ON from 1 to 0
      And with this sketch it worked fine.

      
      #define MY_NODE_ID 1
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>  
      
      #define CHILD_ID_HUM 1
      #define CHILD_ID_TEMP 2
      #define HUMIDITY_SENSOR_DIGITAL_PIN 6
      unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
      unsigned long lastRefreshTime = 0; // Use this to implement a non-blocking delay function
      
      #define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define NUMBER_OF_RELAYS 1 // Total number of attached relays
      #define RELAY_ON 0  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
      
      
      
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true; 
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      
      void setup()  
      { 
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
        metric = getConfig().isMetric;
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);   
          // Set relay to last known state (using eeprom storage) 
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
      }
      
      void presentation()  
      { 
        // Send the Sketch Version Information to the Gateway
        sendSketchInfo("Badkamer", "1.3");
      
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID_HUM, S_HUM);
        present(CHILD_ID_TEMP, S_TEMP);
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_LIGHT);
        }
      }
      
      
      void loop()      
      { 
        boolean needRefresh = (millis() - lastRefreshTime) > SLEEP_TIME;
        if (needRefresh)
        {
            lastRefreshTime = millis();
            
            float temperature = dht.getTemperature();
            if (isnan(temperature)) {
                Serial.println("Failed reading temperature from DHT");
            } else if (temperature != lastTemp) {
              lastTemp = temperature;
              if (!metric) {
                temperature = dht.toFahrenheit(temperature);
              }
              send(msgTemp.set(temperature, 1));
              Serial.print("T: ");
              Serial.println(temperature);
            }
            
            float humidity = dht.getHumidity();
            if (isnan(humidity)) {
                Serial.println("Failed reading humidity from DHT");
            } else if (humidity != lastHum) {
                lastHum = humidity;
                send(msgHum.set(humidity, 1));
                Serial.print("H: ");
                Serial.println(humidity);
            }
      
        }
        
      }
      
      void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_LIGHT) {
           // Change relay state
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
           // Store state in eeprom
           saveState(message.sensor, message.getBool());
           // Write some debug info
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
      }
      
      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey where should i put the code in your post?

      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey

      The node is working. The problem
      Is that when it is connected to the gateway then the relay gets turned on but The status in pimatic does say it is turned off.

      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey

      The sketch works, but i still need the relay output inverted.
      Changing the values from relay_on and relay_off does not do the trick

      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @blacey

      I reversed the lines and changed the values of relay off and relay on but that did not do the trick.
      This sketch i copied from a other project so i don't really know why debouncing is implemented.

      The example you scribed is exactly how it should work.

      posted in Development
      derksuh
      derksuh
    • RE: Invert the relay in the sketch

      @mfalkvidd is it nescessary to clear the eeprom before uploading the changef sketch?

      posted in Development
      derksuh
      derksuh
    • Invert the relay in the sketch

      Hello all,

      I used the sketch below to control a fan and to read the humidity and temperature from a sensor.
      Now when i start up the sensor in Pimatic it says it is off, but the relay is activated. Can i somehow invert it?

      #define MY_DEBUG
      #define MY_RADIO_NRF24
      #define MY_REPEATER_FEATURE
      #define MY_NODE_ID 1
      
       
      #include <SPI.h>
      #include <MySensors.h>
      #include <Bounce2.h>
      #include <DHT.h>
      
      // Set this to the pin you connected the DHT's data pin to
      #define DHT_DATA_PIN 6
      
      // Set this offset if the sensor has a permanent small offset to the real temperatures
      #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 0
      #define CHILD_ID_TEMP 1
      #define CHILD_ID_RLAY 2
      
      #define RELAY_PIN  3
      #define RELAY_ON 1  
      #define RELAY_OFF 0
      
      Bounce debouncer = Bounce();
      bool state = false;
      bool initialValueSent = false;
      
      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);
      MyMessage msgRlay(CHILD_ID_RLAY, V_STATUS);
      
      DHT dht;
      
      void presentation()   
      { 
        // Send the sketch version information to the gateway
        sendSketchInfo("TempHumidRelay", "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);
        present(CHILD_ID_RLAY, S_BINARY);
      
        metric = getConfig().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());
        
        // Make sure relays are off when starting up
        digitalWrite(RELAY_PIN, RELAY_OFF);
        pinMode(RELAY_PIN, OUTPUT);
      }
      
      void loop()      
      {  
          if (!initialValueSent) {
          Serial.println("Sending initial value");
          send(msgRlay.set(state?RELAY_ON:RELAY_OFF),2);
          Serial.println("Requesting initial value from controller");
          request(CHILD_ID_RLAY, V_STATUS);
          wait(2000, C_SET, V_STATUS);
        }
        if (debouncer.update()) {
          if (debouncer.read()==LOW) {
            state = !state;
            // Send new state and request ack back
            send(msgRlay.set(state?RELAY_ON:RELAY_OFF), true);
          }
        }
        dht.readSensor(true);
        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);
          }
          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++;
        }
       wait(2000);
      }
      
      void receive(const MyMessage &message) {
        if (message.isAck()) {
           Serial.println("This is an ack from gateway");
        }
      
        if (message.type == V_STATUS) {
          if (!initialValueSent) {
            Serial.println("Receiving initial value from controller");
            initialValueSent = true;
          }
          // Change relay state
          state = (bool)message.getInt();
          digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
          send(msgRlay.set(state?RELAY_ON:RELAY_OFF,2));
        }
      }```
      posted in Development
      derksuh
      derksuh
    • RE: Not seeing child id 0 Humidity from DHT

      Fixed it! i manually added the sensor in pimatic and now it works

      posted in Troubleshooting
      derksuh
      derksuh
    • Not seeing child id 0 Humidity from DHT

      Hello all,

      i made myself a sketch and uploaded it to a arduino nano.
      I'm using pimatic and can find the temperature and the relay but i don't see the humidity.

      This is the sketch.

      #include <SPI.h>
      #include <MySensor.h>
      #include <DHT.h>

      #define NODE_ID 5 // ID of node

      //child ids
      #define CHILD_ID_HUM 0
      #define CHILD_ID_TEMP 1
      #define CHILD_ID_VLIGHT0 2

      //pin definitions
      #define RELAY_PIN0 4
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3

      //relay state
      #define RELAY_ON 0
      #define RELAY_OFF 1
      #define NUMBER_OF_RELAYS 1

      //sleep timer settings
      unsigned long SLEEP_TIME = 1000; // Sleep time var, first read is 0
      unsigned long SLEEP_TIME_POST = 60000; // Sleep time var changes to this value after
      unsigned long LAST_SLEEP_TIME = millis(); // Sleep time between reads (in milliseconds)

      bool state;

      //mysensors setup
      MySensor gw;
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msgLSW0(CHILD_ID_VLIGHT0, V_LIGHT);

      //dht setup
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true;

      void setup()
      {
      // Make sure relays are off when starting up
      digitalWrite(RELAY_PIN0, RELAY_OFF);
      // Then set relay pins in output mode
      pinMode(RELAY_PIN0, OUTPUT);
      dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);

      // mysensor startup and Send the Sketch Version Information to the Gateway
      gw.begin(incomingMessage, NODE_ID, true);
      gw.sendSketchInfo("DHT&relay&button", "1.1");
      // Register all sensors to gw (they will be created as child devices)
      gw.present(CHILD_ID_HUM, S_HUM);
      gw.present(CHILD_ID_TEMP, S_TEMP);
      gw.present(CHILD_ID_VLIGHT0, S_LIGHT);
      delay(1000);
      metric = gw.getConfig().isMetric;
      // Set relay to last known state (using eeprom storage)
      state = gw.loadState(CHILD_ID_VLIGHT0);
      digitalWrite(RELAY_PIN0, state?RELAY_ON:RELAY_OFF);
      }

      void loop()
      {

       if (millis() - LAST_SLEEP_TIME > SLEEP_TIME) {   
      

      dhtupdate();
      LAST_SLEEP_TIME=millis();
      if (SLEEP_TIME < SLEEP_TIME_POST) {
      SLEEP_TIME=SLEEP_TIME_POST;
      }

      }

      gw.process();

      }

      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) {
      if (message.sensor == CHILD_ID_VLIGHT0){
      // Change relay state
      digitalWrite(RELAY_PIN0, message.getBool()?RELAY_ON:RELAY_OFF);
      // Store state in eeprom
      gw.saveState(message.sensor, message.getBool());
      // Write some debug info
      Serial.print("Incoming change for relay1 sensor:");
      Serial.print(message.sensor);
      Serial.print(", New status: ");
      Serial.println(message.getBool());
      }
      }
      }

      void dhtupdate() {
      float temperature = dht.getTemperature();
      if (isnan(temperature)) {
      Serial.println("Failed reading temperature from DHT");
      } else if (temperature != lastTemp) {
      lastTemp = temperature;
      if (!metric) {
      temperature = dht.toFahrenheit(temperature);
      }
      gw.send(msgTemp.set(temperature, 1));
      Serial.print("T: ");
      Serial.println(temperature);
      }

      float humidity = dht.getHumidity();
      if (isnan(humidity)) {
      Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum) {
      lastHum = humidity;
      gw.send(msgHum.set(humidity, 1));
      Serial.print("H: ");
      Serial.println(humidity);
      }

      }

      posted in Troubleshooting
      derksuh
      derksuh
    • LM393 remove LEDS

      Hello all,

      Is it possible to cut the LED's on an lm 393 circuit board. t has two leds.
      one is connected to a digital output and the other one is the power LED.
      in my sketch i use the Analogue output.

      Thanks in advance

      posted in Hardware
      derksuh
      derksuh
    • RE: Light sensor with battery level problem

      @boozz

      I see what you did but that means that have to put a resistor in line with the battery and put that on A1. The sketch i meant measured the voltage supplied on vcv in the atmega 328

      posted in Development
      derksuh
      derksuh
    • Light sensor with battery level problem

      Hello all,

      I made a light sensor node and uploaded the example sketch. This is working fine!.
      But the node will be supplies by 2 AA batteries so i would like to see the battery level. I tried it like this but it does not work can anyone help me?

      #include <SPI.h>
      #include <MySensor.h>  
      
      #define NODE_ID 1
      #define CHILD_ID_LIGHT 0
      #define LIGHT_SENSOR_ANALOG_PIN 0
      
      unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
      
      MySensor gw;
      MyMessage msg(CHILD_ID_LIGHT, V_LIGHT_LEVEL);
      int lastLightLevel;
      
      void setup()  
      { 
        gw.begin(NULL, NODE_ID, false);
      
        // Send the sketch version information to the gateway and Controller
        gw.sendSketchInfo("Light Sensor", "1.0");
      
        // Register all sensors to gateway (they will be created as child devices)
        gw.present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);
      }
      
      void loop()      
      {     
        int lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23; 
        Serial.println(lightLevel);
        if (lightLevel != lastLightLevel) {
            gw.send(msg.set(lightLevel));
            lastLightLevel = lightLevel;
        }
        gw.sleep(SLEEP_TIME);
      }
      
      #define MIN_V 2700
      #define MAX_V 3200
      int batteryPcnt = min(map(readVcc(), MIN_V, MAX_V, 0, 100), 100); // Convert voltage to percentage
      
      long readVcc() {
        // Read 1.1V reference against AVcc
        // set the reference to Vcc and the measurement to the internal 1.1V reference
        #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
          ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
        #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
          ADMUX = _BV(MUX5) | _BV(MUX0);
        #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
          ADMUX = _BV(MUX3) | _BV(MUX2);
        #else
          ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
        #endif  
       
        delay(2); // Wait for Vref to settle
        ADCSRA |= _BV(ADSC); // Start conversion
        while (bit_is_set(ADCSRA,ADSC)); // measuring
       
        uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
        uint8_t high = ADCH; // unlocks both
       
        long result = (high<<8) | low;
       
        result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
        return result; // Vcc in millivolts
      }
      ``
      posted in Development
      derksuh
      derksuh