@gohan
Due to work related schedule problems I won't be able to work on this code for a few weeks......
Posts made by Tim76
-
RE: Combining relay and temperature sketch
-
RE: Combining relay and temperature sketch
@gohan hey Gohan,
I will not be able to continue to work on my code till after the weekend.... -
RE: Combining relay and temperature sketch
@gohan oh.... ok..... pretty new at coding, but I guess you allready figured that out.....;-)
-
RE: Combining relay and temperature sketch
@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 -
RE: Combining relay and temperature sketch
@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.....
-
RE: Combining relay and temperature sketch
@gohan seems like it's only early for one of us...... I,ll change it later today.....
-
RE: Combining relay and temperature sketch
@gohan seems like it's early for both of us.....;-)
-
RE: Combining relay and temperature sketch
@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); } }```
-
RE: Combining relay and temperature sketch
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()); } }```
-
RE: Combining relay and temperature sketch
@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); } }
-
RE: Combining relay and temperature sketch
@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
-
RE: Combining relay and temperature sketch
@gohan aha! Will be trying that later tonight..... I'll keep you posted! Thx man!
-
RE: Combining relay and temperature sketch
@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...... -
RE: Combining relay and temperature sketch
@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.... -
RE: Combining relay and temperature sketch
@gohan again, thx for your fast reply,
How could I miss that... lol...
I'll try it later today....Thx upfront!
Timu
-
RE: Combining relay and temperature sketch
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); }
-
RE: Combining relay and temperature sketch
@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..... -
Combining relay and temperature sketch
Hey guys!
Question....
I'm trying to combine the temperature and relay sketch from the build section on the website, but for some reason I only see the relays showing up in Domotics.
I understand that there is a bug in the relay sketch so I have that starting spawning childs at adress 1 till 16. Now I would like to have the temp sensors starting at 17 till 32, but for some reason I can't get it to work......
Not able to upload my sketch for now.... hoping to get this solved quickly...... Purpose is to automate my greenhouse with aquaponics and hydroponics systems so I need to have 16 relays and 16 ds18b's to monitor the whole process.... -
RE: One adruino four soil moisture sensors
@damien
Is there an update for this sketch to use in V2? -
RE: Node does not get an ID: !TSM:ID:FAIL
@ascanious Had the same problem......replaced the radio on the node..... problem solved......