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
N

Newzwaver

@Newzwaver
About
Posts
79
Topics
19
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • Issues Reading Sensors in Vera Plus
    N Newzwaver

    Hi Everyone,

    Has anyone noticed that they no longer receive sensor readings into the Vera Plus? Not sure why and maybe looking to move controllers. Any suggestions on what controller works best without the monthly cost?

    Vera

  • Ethernet Gateway Using PCBWAY board Fifisoft57
    N Newzwaver

    @Yveaux

    Should have dove deeper when you fist said radio, looks like everything was taken care off except the radio power. Jumped a wire over there and bang worked.

    Thanks again for the help.

    General Discussion gateway pcb mysensors gateway ethernet

  • Ethernet Gateway Using PCBWAY board Fifisoft57
    N Newzwaver

    HI All.

    Still having problems and this is my first purchase from PCBway not sure if the code need to be changed for this board but I am using PCB MySensors Gateway Ethernet 3.0 developed by fifisoft57. The radios work on other projects and it is almost like the pins are not correct I traced them and they appear right but......... Has anyone used this board if so did you have any issues? I would say it is my solder job but I did 3 boards one should work.

    ANy help would be great.

    General Discussion gateway pcb mysensors gateway ethernet

  • Ethernet Gateway Using PCBWAY board Fifisoft57
    N Newzwaver

    @Yveaux thanks

    General Discussion gateway pcb mysensors gateway ethernet

  • Ethernet Gateway Using PCBWAY board Fifisoft57
    N Newzwaver

    Hi Everyone,

    I am trying to add a gateway to anther project and this time I am using the W5100 mini and the PCBWAY board designed by FIFIsoft57 (hopefully you see this). The code for the gateway I beleive had to be changed. PLease see my modes below any guidance would be greatly appreciated. This is the PCB MySensors Gateway Ethernet 3.0.

    /*
     * 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-2019 Sensnology AB
     * Full contributor list: https://github.com/mysensors/MySensors/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
     * Contribution by a-lurker and Anticimex
     * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
     * Contribution by Tomas Hozza <thozza@gmail.com>
     *
     *
     * DESCRIPTION
     * The EthernetGateway sends data received from sensors to the ethernet link.
     * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
     *
     * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
     *
     * LED purposes:
     * - To use the feature, uncomment MY_DEFAULT_xxx_LED_PIN in the sketch below
     * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
     * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
     * - ERR (red) - fast blink on error during transmission error or receive crc error
     *
     * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
     *
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_RF24
    //#define MY_RADIO_NRF5_ESB
    //#define MY_RADIO_RFM69
    //#define MY_RADIO_RFM95
    
    // Enable gateway ethernet module type
    #define MY_GATEWAY_W5100
    
    // W5100 Ethernet module SPI enable (optional if using a shield/module that manages SPI_EN signal)
    #define MY_W5100_SPI_EN 4
    
    // Enable Soft SPI for NRF radio (note different radio wiring is required)
    // The W5100 ethernet module seems to have a hard time co-operate with
    // radio on the same spi bus.
    #if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
    #define MY_SOFTSPI
    #define MY_SOFT_SPI_SCK_PIN A0 // CHanged from D14
    #define MY_SOFT_SPI_MISO_PIN A2 // CHanged from D16
    #define MY_SOFT_SPI_MOSI_PIN A1 // Changed from D15
    #endif
    
    // When W5100 is connected we have to move CE/CSN pins for NRF radio
    #ifndef MY_RF24_CE_PIN
    #define MY_RF24_CE_PIN 5
    #endif
    #ifndef MY_RF24_CS_PIN
    #define MY_RF24_CS_PIN 6
    #endif
    
    // Enable UDP communication
    //#define MY_USE_UDP  // If using UDP you need to set MY_CONTROLLER_IP_ADDRESS or MY_CONTROLLER_URL_ADDRESS below
    
    // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
    #define MY_IP_ADDRESS 192,168,2,203
    
    // If using static ip you can define Gateway and Subnet address as well
    //#define MY_IP_GATEWAY_ADDRESS 192,168,178,1
    //#define MY_IP_SUBNET_ADDRESS 255,255,255,0
    
    // Renewal period if using DHCP
    //#define MY_IP_RENEWAL_INTERVAL 60000
    
    // The port to keep open on node server mode / or port to contact in client mode
    #define MY_PORT 5003
    
    // Controller ip address. Enables client mode (default is "server" mode).
    // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
    //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 254
    //#define MY_CONTROLLER_URL_ADDRESS "my.controller.org"
    
    // The MAC address can be anything you want but should be unique on your network.
    // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
    // Note that most of the Arduino examples use  "DEAD BEEF FEED" for the MAC address.
    #define MY_MAC_ADDRESS 0xDD, 0xDD, 0xBE, 0xEF, 0xFE, 0xED
    
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    //#define MY_INCLUSION_BUTTON_FEATURE
    // Set inclusion mode duration (in seconds)
    #define MY_INCLUSION_MODE_DURATION 60
    // Digital pin used for inclusion mode button
    //#define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Flash leds on rx/tx/err
    // Uncomment to override default HW configurations
    #define MY_DEFAULT_ERR_LED_PIN 8  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  7  // Receive led pin
    #define MY_DEFAULT_TX_LED_PIN  9  // Transmit led pin
    
    #if defined(MY_USE_UDP)
    #include <EthernetUdp.h>
    #endif
    #include <Ethernet.h>
    #include <MySensors.h>
    
    void setup()
    {
    	// Setup locally attached sensors
    }
    
    void presentation()
    {
    	// Present locally attached sensors here
    }
    
    void loop()
    {
    	// Send locally attached sensors data here
    }
    

    and this is what message I receive.

    0 MCO:BGN:INIT GW,CP=RNNGA---,FQ=16,REL=255,VER=2.3.2
    4 TSM:INIT
    5 TSF:WUR:MS=0
    11 !TSM:INIT:TSP FAIL
    13 TSM:FAIL:CNT=1
    15 TSM:FAIL:DIS
    16 TSF:TDI:TSL
    0 MCO:BGN:INIT GW,CP=RNNGA---,FQ=16,REL=255,VER=2.3.2
    4 TSM:INIT
    5 TSF:WUR:MS=0
    11 !TSM:INIT:TSP FAIL
    13 TSM:FAIL:CNT=1
    15 TSM:FAIL:DIS
    16 TSF:TDI:TSL
    10019 TSM:FAIL:RE-INIT
    10021 TSM:INIT
    10028 !TSM:INIT:TSP FAIL
    10030 TSM:FAIL:CNT=2
    10032 TSM:FAIL:DIS
    10034 TSF:TDI:TSL
    
    General Discussion gateway pcb mysensors gateway ethernet

  • 💬 Soil Moisture Sensor
    N Newzwaver

    Hi

    Thank you for your reply and I understand that, if you look at the code you will see that pin 3 isn't named/defined in the coed. Unless I am missing something

    Thanks

    Announcements

  • 💬 Soil Moisture Sensor
    N Newzwaver

    Hi,

    I see in the pictures of the connection that the soil sensor is attached to 3.3V, GND and D3 but I can't see where D3 is named. How do you obtain a read from D3 if it isn't named in the code?

    Announcements

  • Another Automatic Kettle Project
    N Newzwaver

    Hi All,

    I am using the Pete B. Push button concept to turn my kettle on and start boiling and need a little help. When I press the button it will not send the code to turn the kettle on. I used the same wire diagram as Petes ground sample. It is a ground and a simple touch button as I can touch the wires tomorrow to simulate a button and confirmed it’s ground. Has anyone complete code for this and if so can I use it?
    Thanks
    Tim

    My Project

  • BBQ Probes for the Perfect Steak
    N Newzwaver

    Hit post to quick sorry, my plan is to have 4 probes each on a timer. Press the button and put on the steak have Alexa tell you to flip after 2 minutes for rare and the another 2 minutes and she will tell you done with a temp of 125f.....

    My Project

  • BBQ Probes for the Perfect Steak
    N Newzwaver

    @alowhum all help greatly appreciated

    My Project

  • BBQ Probes for the Perfect Steak
    N Newzwaver

    Hi All,

    I am developing a BBQ Sensor that will set a timer for each probe and tell me when to turn it over depending on what I am cooking (i.e 135F = rare, 2 minutes side one and 2 minutes side 2). Any idea if anyone has developed something like this already? I found the smoker files but I am BBQ fellow not a smoker.....

    Thanks

    My Project

  • Human detecting Sensor
    N Newzwaver

    Any ideas on how to start? Maybe we can all help.

    My Project

  • Combining relay and temperature sketch
    N Newzwaver

    I figured why wait, this has the temp, hum and 2 relays working not problem. One relay controls my fan for my AV and the other controls my doorbell for my HTD Lync system.

    /**
     * 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
     * Version 1.1 - 2016-07-20: Converted to MySensors v2.0 and added various improvements - Torben Woltjen (mozzbozz)
     * 
     * DESCRIPTION
     * This sketch provides an example of how to implement a humidity/temperature
     * sensor using a DHT11/DHT-22.
     *  
     * For more information, please visit:
     * http://www.mysensors.org/build/humidity
     * 
     */
    
    // Enable debug prints
    #define MY_DEBUG
    #define MY_NODE_ID 29
    // Enable and select radio type attached 
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    //#define MY_RS485
    
    // Enable repeater functionality for this node
    #define MY_REPEATER_FEATURE
    
    
    #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
    
    #define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define RELAY_2  5  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    
    #define NUMBER_OF_RELAYS 2 // Total number of attached relays
    #define RELAY_ON 1  // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
    
    // 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 28
    #define CHILD_ID_TEMP 30
    
    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 before()
    {
      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("AVCABRelayTempAndHumidity", "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 receive(const MyMessage &message)     
    {  
      // 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));
      if (message.type==V_STATUS) {
    
        // Change relay state
        digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
        // Store state in eeprom
        saveState(message.sensor, message.getBool());
        #ifdef MY_DEBUG
        Serial.print("H: ");
        Serial.println(humidity);
        Serial.print("Incoming change for sensor:");
        Serial.print(message.sensor);
        Serial.print(", New status: ");
        Serial.println(message.getBool());
        #endif
      } else {
        // Increase no update counter if the humidity stayed the same
        nNoUpdatesHum++;
      }
    
      // Sleep for a while to save energy
      sleep(UPDATE_INTERVAL); 
      }}
    
    Troubleshooting

  • Combining relay and temperature sketch
    N Newzwaver

    HI

    I did get it to work and will post the sketch later today after work. I have it working on the ESP8266 and Arduino.

    Troubleshooting

  • ESP8266 + Radio + Relay Working Fine
    N Newzwaver

    HI Everyone,

    I noticed that I couldn't find a relay working with ESP8266MOD, I was messing with it over the last few days and figured out that the following sketch works. The big fix was in the sketch you use pin 0 for the relay and actually attach it to pin 3. This works great with WEMOS ESP8266.

    '''
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    #define MY_NODE_ID 97 //esp8266relay
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69

    // Enable repeater functionality for this node
    #define MY_REPEATER_FEATURE

    #include <MySensors.h>

    #define RELAY_1 0 // 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 1 // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay

    void before()
    {
    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 setup()
    {

    }

    void presentation()
    {
    // Send the sketch version information to the gateway and Controller
    sendSketchInfo("Relay", "1.0");

    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_BINARY);
    }
    

    }

    void loop()
    {

    }

    void receive(const MyMessage &message)
    {
    // We only expect one type of message from controller. But we better check anyway.
    if (message.type==V_STATUS) {
    // 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());
    }
    }
    ""

    My Project

  • DHT plus two relays
    N Newzwaver

    This works whether its correct or not it is working again.
    // Enable debug prints to serial monitor
    #define MY_DEBUG

    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    #define MY_NODE_ID 31
    // Enable repeater functionality for this node
    #define MY_REPEATER_FEATURE

    #include <MyConfig.h>
    #include <MySensors.h>
    #include <SPI.h>
    #include <DHT.h>

    #define DHT_DATA_PIN 3
    #define RELAY_1 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define CHILD_ID_HUM 28
    #define CHILD_ID_TEMP 27
    #define NUMBER_OF_RELAYS 2 // Total number of attached relays
    #define RELAY_ON 1 // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay

    // 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 = 10000;

    // 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;

    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 before()
    {
    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 and Controller
    sendSketchInfo("TempHum2Relay", "1.1B");
    // 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;
    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_BINARY);
    }
    }

    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
    sleep(UPDATE_INTERVAL);
    }

    void receive(const MyMessage &message)
    {
    // We only expect one type of message from controller. But we better check anyway.
    if (message.type==V_STATUS) {
    // 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());

    } }

    Troubleshooting

  • DHT plus two relays
    N Newzwaver

    HI Everyone,

    I have my temp/hum sensor in my AV cab and what two computer fans to cool it down. I have tried this and it originally worked with one relay and I got creative and screwed it up. When i tried to get it back to the original version i couldn't as I yes saved over it. I have checked on the forum and see projects like this but they don't appear to work. Can should one give a few pointers?

    #define MY_DEBUG
    #define MY_RADIO_NRF24
    #define MY_REPEATER_FEATURE
    #define MY_NODE_ID 29
    
    #include <MyConfig.h>
    #include <MySensors.h>
    #include <SPI.h>
    #include <DHT.h>
    
    
    #define DHT_DATA_PIN 3
    #define RELAY_1  4 
    #define CHILD_ID_HUM 28
    #define CHILD_ID_TEMP 29
    #define NUMBER_OF_RELAYS 1
    #define RELAY_ON 1 
    #define RELAY_OFF 0
    #define SENSOR_TEMP_OFFSET 0
    
    static const uint64_t UPDATE_INTERVAL = 40000;
    static const uint8_t FORCE_UPDATE_N_READS = 10;
    
    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 before()
    {
    for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    pinMode(pin, OUTPUT);
    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
    }
    }
    
    void presentation()
    {
    sendSketchInfo("TempHumRelay", "1.2");
      present(CHILD_ID_HUM, S_HUM);
      present(CHILD_ID_TEMP, S_TEMP);
      metric = getControllerConfig().isMetric;
      for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
      present(sensor, S_BINARY);
    }
    }
    
    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(dht.getMinimumSamplingPeriod());
    }
    void loop()
    {
       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) {
        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 {
        nNoUpdatesTemp++;
      }
      float humidity = dht.getHumidity();
      if (isnan(humidity)) {
        Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
        lastHum = humidity;
        nNoUpdatesHum = 0;
        send(msgHum.set(humidity, 1));
    
        #ifdef MY_DEBUG
        Serial.print("H: ");
        Serial.println(humidity);
        #endif
      } else {
        nNoUpdatesHum++;
      }
      sleep(UPDATE_INTERVAL); 
    }
    void receive(const MyMessage &message)
    {
      if (message.type==V_STATUS) {
        digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
        saveState(message.sensor, message.getBool());
        Serial.print("Incoming change for sensor:");
        Serial.print(message.sensor);
        Serial.print(", New status: ");
        Serial.println(message.getBool());
      }  }
    
    Troubleshooting

  • Can't change Node ID
    N Newzwaver

    Thanks, that worked.

    Troubleshooting

  • Can't change Node ID
    N Newzwaver

    Hi
    Thanks and I have changed the ID as follows;
    #define MY__ID 9 //Manually set the ID here. Comment out to auto assign
    //#define MY__ID 9 //Manually set the ID here. Comment out to auto assign

    No matter what i do I still get node 254,. Still most be something I am missing, any ideas?

    Troubleshooting

  • Can't change Node ID
    N Newzwaver

    HI Everyone,

    This is the fridge sensor that Bulldog and Pete B put together, I had it working but since the vera update any new mysensors loading always load with the same node id even when i try to change it manually as in the sketch below, any idea what I am doing wrong? The node loads only as 254 node......

    Please help.

    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include <Bounce2.h>

    //MySensors configuration options
    #define MY_DEBUG //Uncomment to enable MySensors related debug messages (additional debug options are below)
    #define MY_RADIO_NRF24 // Enable and select radio type attached
    #define MY__ID 9 //Manually set the ID here. Comment out to auto assign
    #include <MySensors.h>

    #define SKETCH_NAME "White Refrigerator Monitor"
    #define SKETCH_VERSION "1.1b"

    #define DWELL_TIME 20 //value used in all wait calls (in milliseconds) this allows for radio to come back to power after a transmission, ideally 0

    #define ONE_WIRE_BUS 3 // Pin where dallas sensors are connected
    #define TEMPERATURE_PRECISION 12 //The resolution of the sensor

    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature dallasTemp(&oneWire); // Pass our oneWire reference to Dallas Temperature.

    //MySensor gw;
    unsigned long tempDelay = 225000;
    float lastTemperature[2];
    unsigned long tempMillis;
    bool metric = false;

    // arrays to hold device addresses
    DeviceAddress dallasAddresses[] = {
    {0x28, 0xFF, 0x4F, 0x87, 0x70, 0x17, 0x4, 0x9D}, //Freezer Address -- 1 Modify for your sensors
    {0x28, 0xFF, 0x25, 0x59, 0x70, 0x17, 0x4, 0x25} //Fridge Address -- 2 Modify for your sensors
    };

    //Set up debouncer (used for door sensors)
    Bounce debouncer[] = {
    Bounce(),
    Bounce()
    };

    //Make sure to match the order of doorPins to doorChildren.
    //The pins on your Arduino
    int doorPins[] = {4, 5};
    //The child ID that will be sent to your controller
    int doorChildren[] = {32, 33};
    //Freezer temp will be Child 0 and Fridge temp will be Child 1

    //used to keep track of previous values contact sensor values
    uint8_t oldValueContact[] = {1, 1};

    uint8_t doorLedPins[] = {6, 7};

    // Initialize temperature message
    MyMessage dallasMsg(0, V_TEMP);
    MyMessage doorMsg(0, V_TRIPPED);

    void presentation()
    {
    // Send the sketch version information to the gateway
    sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);

    // Register all sensors to gw (they will be created as child devices)
    // Present temp sensors to controller
    for (uint8_t i = 0; i < 2; i++) {
    present(i, S_TEMP);
    wait(DWELL_TIME);
    }
    // Present door sensors to controller
    for (uint8_t i = 0; i < 2; i++) {
    present(doorChildren[i], S_DOOR);
    wait(DWELL_TIME);
    }
    }

    void setup()
    {
    // Startup OneWire
    dallasTemp.begin();

    // set the temp resolution
    for (uint8_t i = 0; i < 2; i++) {
    dallasTemp.setResolution(dallasAddresses[i], TEMPERATURE_PRECISION);
    }

    // // Startup and initialize MySensors library. Set callback for incoming messages.
    // gw.begin(NULL, NODE_ID);
    //
    // // Send the sketch version information to the gateway and Controller
    // gw.sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);

    //Set up door contacts & LEDs
    for (uint8_t i = 0; i < 2; i++) {

    // Setup the pins & activate internal pull-up
    pinMode(doorPins[i], INPUT_PULLUP);
    
    // Activate internal pull-up
    //digitalWrite(doorPins[i], HIGH);
    
    // After setting up the button, setup debouncer
    debouncer[i].attach(doorPins[i]);
    debouncer[i].interval(700); //This is set fairly high because when my door was shut hard it caused the other door to bounce slightly and trigger open.
    
    //Set up LEDs
    pinMode(doorLedPins[i], OUTPUT);
    digitalWrite(doorLedPins[i], LOW);
    

    }

    }

    void loop()
    {
    unsigned long currentMillis = millis();

    if (currentMillis - tempMillis > tempDelay) {
    // Fetch temperatures from Dallas sensors
    dallasTemp.requestTemperatures();

    // Read temperatures and send them to controller
    for (uint8_t i = 0; i < 2; i++) {
    
      // Fetch and round temperature to one decimal
      float temperature = static_cast<float>(static_cast<int>((metric ? dallasTemp.getTempC(dallasAddresses[i]) : dallasTemp.getTempF(dallasAddresses[i])) * 10.)) / 10.;
      // Only send data if temperature has changed and no error
      if (lastTemperature[i] != temperature && temperature != -127.00) {
    
        // Send in the new temperature
        send(dallasMsg.setSensor(i).set(temperature, 1));
        lastTemperature[i] = temperature;
      }
    }
    tempMillis = currentMillis;
    

    }

    for (uint8_t i = 0; i < 2; i++) {
    debouncer[i].update();
    // Get the update value
    uint8_t value = debouncer[i].read();
    if (value != oldValueContact[i]) {
    // Send in the new value
    send(doorMsg.setSensor(doorChildren[i]).set(value == HIGH ? "1" : "0"));
    digitalWrite(doorLedPins[i], value);
    oldValueContact[i] = value;
    }
    }

    }

    Troubleshooting
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular