Combining relay and temperature sketch
-
DHT sensor doesn't like to work very quickly, it needs some resting time between measurements :D
-
Ok, now I have another problem.
When I build the relay/dht node, I first made the thing work with the relay with button actuator sketch alone (the DHT was plugged, but it was an additional feature I wanted to add).
Now, it seems that my power source doesn't have enough power to make the relay to close. The led on my relay board blinks when the relay is on and off, but nothing.
That's weird.. I'll try running the relay sketch alone, just to see.
-
@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....😑😑@Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.
-
@Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.
-
@Tim76 ok, let's go back to the beginning. Try with one sensors only, if everything works then add one relay, then add the second and keep adding the sensors until you see something wrong. You need to go step by step, otherwise with all that stuff you have it will be impossible to debug.
@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......😒😒 -
if use something like this in presentation?
for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { present(i+3, S_TEMP);you get the idea, just shift the child id of the dallas sensors and leave the first 4-5 IDs for relays
-
if use something like this in presentation?
for (int i=1; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { present(i+3, S_TEMP);you get the idea, just shift the child id of the dallas sensors and leave the first 4-5 IDs for relays
@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
-
@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); } } -
@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); } }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()); } }``` -
@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); } }``` -
@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); } }``` -
you only have present(i, S_TEMP) but you also need to add present(sensor, S_BINARY) in the relay section otherwise you will not present any relay at all.
-
you only have present(i, S_TEMP) but you also need to add present(sensor, S_BINARY) in the relay section otherwise you will not present any relay at all.
@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:12so 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.....
-
There must be a bug in the relay section, I can't check it today, I'm out all day.
Try to add some debug serial print to see what values are being exchanged@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