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
Tim76T

Tim76

@Tim76
About
Posts
23
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan
    Due to work related schedule problems I won't be able to work on this code for a few weeks...... :angry:

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan hey Gohan,
    I will not be able to continue to work on my code till after the weekend....😑

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan oh.... ok..... pretty new at coding, but I guess you allready figured that out.....;-)

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan output of the serial port

    0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
    3 MCO:BGN:BFR
    144 TSM:INIT
    145 TSF:WUR:MS=0
    153 TSM:INIT:TSP OK
    154 TSM:INIT:STATID=51
    157 TSF:SID:OK,ID=51
    158 TSM:FPAR
    195 TSF:MSG:SEND,51-51-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    986 TSF:MSG:READ,0-0-51,s=255,c=3,t=8,pt=1,l=1,sg=0:0
    990 TSF:MSG:FPAR OK,ID=0,D=1
    2202 TSM:FPAR:OK
    2203 TSM:ID
    2204 TSM:ID:OK
    2206 TSM:UPL
    2211 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
    2232 TSF:MSG:READ,0-0-51,s=255,c=3,t=25,pt=1,l=1,sg=0:1
    2237 TSF:MSG:PONG RECV,HP=1
    2240 TSM:UPL:OK
    2241 TSM:READY:ID=51,PAR=0,DIS=1
    2246 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
    2284 TSF:MSG:READ,0-0-51,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    2291 TSF:MSG:SEND,51-51-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.1.1
    2301 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
    4329 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=11,pt=0,l=25,sg=0,ft=0,st=OK:Greenhouse main controlle
    4340 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.0
    4350 TSF:MSG:SEND,51-51-0-0,s=17,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=OK:
    4359 TSF:MSG:SEND,51-51-0-0,s=18,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=OK:
    4369 TSF:MSG:SEND,51-51-0-0,s=1,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4376 TSF:MSG:SEND,51-51-0-0,s=2,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4384 TSF:MSG:SEND,51-51-0-0,s=3,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4397 TSF:MSG:SEND,51-51-0-0,s=4,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4407 TSF:MSG:SEND,51-51-0-0,s=5,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4418 TSF:MSG:SEND,51-51-0-0,s=6,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4434 TSF:MSG:SEND,51-51-0-0,s=7,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4449 TSF:MSG:SEND,51-51-0-0,s=8,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4459 TSF:MSG:SEND,51-51-0-0,s=9,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4489 TSF:MSG:SEND,51-51-0-0,s=10,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4505 TSF:MSG:SEND,51-51-0-0,s=11,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4515 TSF:MSG:SEND,51-51-0-0,s=12,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4528 TSF:MSG:SEND,51-51-0-0,s=13,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4540 TSF:MSG:SEND,51-51-0-0,s=14,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4556 TSF:MSG:SEND,51-51-0-0,s=15,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4564 TSF:MSG:SEND,51-51-0-0,s=16,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=OK:
    4571 MCO:REG:REQ
    4576 TSF:MSG:SEND,51-51-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
    4583 TSF:MSG:READ,0-0-51,s=255,c=3,t=27,pt=1,l=1,sg=0:1
    4588 MCO:PIM:NODE REG=1
    4590 MCO:BGN:STP
    4591 MCO:BGN:INIT OK,TSP=1
    4596 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
    4601 MCO:SLP:TPD
    4602 MCO:SLP:WUP=-1
    4636 TSF:MSG:SEND,51-51-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.2
    4690 TSF:MSG:SEND,51-51-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.5
    4755 TSF:MSG:SEND,51-51-0-0,s=2,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.4
    7763 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
    7768 MCO:SLP:TPD
    7770 MCO:SLP:WUP=-1
    10898 MCO:SLP:MS=750,SMS=0,I1=255,M1=255,I2=255,M2=255
    10902 MCO:SLP:TPD
    10904 MCO:SLP:WUP=-1

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan so I fixed that....... and now I get this in Domoticz....

    0 Unknown! #1. V_TEMP (20.7) true 2017-05-10 11:44:39
    1 S_LIGHT/S_BINARY #1. V_TEMP (20.7) true 2017-05-10 11:44:43
    2 S_LIGHT/S_BINARY #1. V_TEMP (20.9) true 2017-05-10 11:44:04
    3 S_LIGHT/S_BINARY true 2017-05-10 11:34:13
    4 S_LIGHT/S_BINARY true 2017-05-10 11:34:14
    5 S_LIGHT/S_BINARY true 2017-05-10 11:34:15
    6 S_LIGHT/S_BINARY true 2017-05-10 11:34:15
    7 S_LIGHT/S_BINARY true 2017-05-10 11:34:16
    8 S_LIGHT/S_BINARY true 2017-05-10 11:34:17
    9 S_LIGHT/S_BINARY true 2017-05-10 11:34:17
    10 S_LIGHT/S_BINARY true 2017-05-10 11:34:18
    11 S_LIGHT/S_BINARY true 2017-05-10 11:34:18
    12 S_LIGHT/S_BINARY true 2017-05-10 11:34:19
    13 S_LIGHT/S_BINARY true 2017-05-10 11:34:19
    14 S_LIGHT/S_BINARY true 2017-05-10 11:34:20
    15 S_LIGHT/S_BINARY true 2017-05-10 11:34:20
    16 S_LIGHT/S_BINARY true 2017-05-10 11:34:21
    17 S_TEMP true 2017-05-10 11:34:12
    18 S_TEMP true 2017-05-10 11:34:12
    255 S_ARDUINO_NODE 2.1.1 false 2017-05-10 11:34:12

    so it seems I do get temp Id's from 17 to 32, but the values stay in 0,1,2 where the relays 1 and 2 don't work.....

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan 😳😳😳 seems like it's only early for one of us...... I,ll change it later today.....

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan seems like it's early for both of us.....;-)

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan no I didn't...

      // Present all sensors to controller
      for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(i, S_TEMP);
      }
      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);
      }
    }```
    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    here's the complete code as she is right now...

    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    #define MY_RF24_CE_PIN 49
    #define MY_RF24_CS_PIN 53
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #define MY_NODE_ID 30
    
    #include <SPI.h>
    #include <MySensors.h>  
    #include <DallasTemperature.h>
    #include <OneWire.h>
    
    
    
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    
    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
    #define MAX_ATTACHED_DS18B20 16
    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors=0;
    bool receivedConfig = false;
    bool metric = true;
    // Initialize temperature message
    MyMessage msgTemp(0,V_TEMP);
    
    
    #define RELAY_1  30  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 16 // 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
    
    void before()
    {
      // Startup up the OneWire library
      sensors.begin();
    }
    
    void setup()  
    { 
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
    }
    
    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Greenhouse main controller", "1.0");
    
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(i, S_TEMP);
      }
      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 loop()     
    {     
      // Fetch temperatures from Dallas sensors
      sensors.requestTemperatures();
    
      // query conversion time and sleep until conversion completed
      int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
      sleep(conversionTime);
    
      // Read temperatures and send them to controller 
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
    
        // Fetch and round temperature to one decimal
        float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
    
        // Only send data if temperature has changed and no error
        #if COMPARE_TEMP == 1
        if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
        #else
        if (temperature != -127.00 && temperature != 85.00) {
        #endif
    
          // Send in the new temperature
          send(msgTemp.setSensor(i).set(temperature,1));
          // Save new temperatures for next compare
          lastTemperature[i]=temperature;
        }
      }
      wait(3000);
      }
      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

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan tried this again...... same result.....

    
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(i, S_TEMP);
      }
      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);
      }
    }
    
    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan soooooo...... I tried this:

    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Temperature Sensor", "1.1");
    
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(i+16, S_TEMP);
      }
      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);
      }
    }
    
    

    now I get the temp sensors with child id's 1 to 16 and no relays at all

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan aha! Will be trying that later tonight..... I'll keep you posted! 😊 Thx man!

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan both sketches work perfectly stand alone.... but I think the problem lies within the assingment of the child id's...
    James Bruce talks about this "bug" in his video on how to combine sketches.....
    They relay sketch assigns from 1 to 16
    And the temp sketch assigns from 0 to 15
    So they both try to use the same id's for their children when you try to combine them....
    I need a way to get around that and have relays on 1-16 and temp on 17 to 32......
    Or there might just be the same "bug" in the temperature sketch.....😬😬 wich might mean that they can't be combined for now......😒😒

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan ok

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan modfied my code..... still the same.... I get 16 children (relays) and no temp...... I have 4 ds18b20's connected.....
    And I get the error switch command on the relays....😑😑

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan apparently..... 😂😂😉

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan again, thx for your fast reply,

    How could I miss that...😳😳 lol...
    I'll try it later today....

    Thx upfront!

    Timu

    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    hereby the code that doesn't seem to work...

    // Enable debug prints to serial monitor
    //#define MY_DEBUG 
    
    #define MY_RF24_CE_PIN 49
    #define MY_RF24_CS_PIN 53
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #define MY_NODE_ID 5
    #include <SPI.h>
    #include <MySensors.h>  
    #include <DallasTemperature.h>
    #include <OneWire.h>
    
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    
    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
    #define MAX_ATTACHED_DS18B20 16
    unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors=0;
    bool receivedConfig = false;
    bool metric = true;
    // Initialize temperature message
    MyMessage msg(0,V_TEMP);
    
    #define RELAY_1  30  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 16 // 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()
    {
      // Startup up the OneWire library
      sensors.begin();
      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()  
    { 
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
    }
    
    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Temperature Sensor", "1.1");
    
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      for (int i=17; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         present(i, 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_BINARY);
      }
      }
    }
    
    void loop()     
    {     
      // Fetch temperatures from Dallas sensors
      sensors.requestTemperatures();
    
      // query conversion time and sleep until conversion completed
      int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
      sleep(conversionTime);
    
      // Read temperatures and send them to controller 
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
    
        // Fetch and round temperature to one decimal
        float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
    
        // Only send data if temperature has changed and no error
        #if COMPARE_TEMP == 1
        if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
        #else
        if (temperature != -127.00 && temperature != 85.00) {
        #endif
    
          // Send in the new temperature
          send(msg.setSensor(i).set(temperature,1));
          // Save new temperatures for next compare
          lastTemperature[i]=temperature;
        }
      }
     
    }
    
    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());
      }
       sleep(SLEEP_TIME);
    }
    
    Troubleshooting

  • Combining relay and temperature sketch
    Tim76T Tim76

    @gohan thx for your fast reply...
    I wasn't anywhere near my laptop, so I couldn't post the code.

    the reason for that many sensors is:

    pretty big greenhouse with a few aquaponics and hydroponics systems.
    for instance, I have 4 vertical towers from wich I want to monitor the water temp and the temp inside the pvs towers.
    that alone are allready 2 temp sensors and a relay for the pump.....

    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