Fixed it! i manually added the sensor in pimatic and now it works
derksuh
@derksuh
Best posts made by derksuh
-
RE: Not seeing child id 0 Humidity from DHT
Latest 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
-
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?
-
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()); } }
-
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. -
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()); } }
-
RE: Invert the relay in the sketch
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()); } }
-
RE: Invert the relay in the sketch
@blacey where should i put the code in your post?
-
RE: Invert the relay in the sketch
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. -
RE: Invert the relay in the sketch
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 -
RE: Invert the relay in the sketch
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.