On version 4.9700 Still, does not work.
PKG_HASH:=2772d9f64cc552d02a8c44f5e076b58f13b39d69
On version 4.9700 Still, does not work.
PKG_HASH:=2772d9f64cc552d02a8c44f5e076b58f13b39d69
MDRemote Unsolved
MDRemote Problem
please someone look for the problem.
thank you.
Type: Light/Switch, MDRemote not working any more in Stable Release 3.8153
On Stable Release 3.5877 was working fine.
Error sending switch command, check device/hardware !
in logs
2017-04-17 16:03:45.166 Error: MySensors: Light command received for unknown node_id: 433433433
I am sorry, but the problem still exists.
Error sending switch command, check device/hardware !
on
PKG_SOURCE_URL:=https://github.com/domoticz/domoticz.git
PKG_SOURCE_VERSION:=5d708b35d3f6f16d749574f7bf75b2242d47790c
and even on last beta
PKG_SOURCE_URL:=https://github.com/domoticz/domoticz.git
PKG_SOURCE_VERSION:=b4b59b0762a1715d4ecf574ebae060f6a77b9fae
Now everything is alright with latest build.
PKG_SOURCE_URL:=https://github.com/domoticz/domoticz.git
PKG_SOURCE_VERSION:=5d708b35d3f6f16d749574f7bf75b2242d47790c
Hi. I am using IR receiver/sender, but after upgrading to last beta it stop working.
Type: Light/Switch, MDRemote not working any more in beta PKG_SOURCE_VERSION:=1a234df617dc0a09518a4157249b8800fc39330d
Error sending switch command, check device/hardware !
in logs
2017-04-17 16:03:45.166 Error: MySensors: Light command received for unknown node_id: 433433433
I tried set rate in domoticz and by stty -F /dev/ttyS0 9600 clocal cread cs8 -cstopb -parenb
but after a time it come back to rate what set in
cat /proc/cmdline
console=ttyS0,115200n8 root=/dev/mtdblock4 rootfstype=squashfs
it looks like i need to recompile firmware.
I tried 57600. Right now i tried on Padavan firmware on Xiaomi router 3.
And i can't compile firmware with lower than 57600
But I start domoticz with -verbose 0 -loglevel 0, and it working better. Need to test more.
it works, but now i see it unstable. a lot of garbage received
2;5;1;0;35;184.367
;0.13;1;1;013;6;1;0;16;1
;4;1;0;24;121056
2;4;1;0;35;121.056```
why esp8266 gateway shows only debug info?
when i comment //#define MY_DEBUG
where is no any serial output.
MySensors and Domoticz are the best!
I did not think it would be so easy.
I did not have to make changes to the router's firmware.
All i need set speed in serial gateway
#define MY_BAUD_RATE 115200
On router make
ln -s /dev/ttyS0 /dev/ttyUSB1
found some thing - How to terminate console on serial port (UART)
am i on right direction?
It is possible to connect Serial Gateway to router's TX RX pins?
Will be nice not using router's usb port, and leave it for someone else.
Would like to use MySensors wit Domoticz installed on router.
Right now WiFi Gateway used.
try this. working fine for me.
//#include <EEPROM.h>
//
// Use this sensor to measure volume and flow of your house watermeter.
// You need to set the correct pulsefactor of your meter (pulses per m3).
// The sensor starts by fetching current volume reading from gateway (VAR 1).
// Reports both volume and flow back to gateway.
//
#include <SPI.h>
#include <MySensor.h>
#define RADIO_ID 2
#define CHILD_ID_HUM 0
#define CHILD_ID_TEMP 1
unsigned long HUM_TEMP_SEND_FREQUENCY = 30; // Minimum time between send (in seconds). We don't want to spam the gateway.
#define WATER_LEAK_SENSOR_DIGITAL_PIN 6
#define HUMIDITY_SENSOR_DIGITAL_PIN 5
#define HOT_WATER_SENSOR_DIGITAL_PIN 4
#define COLD_WATER_SENSOR_DIGITAL_PIN 3
#define PULSE_FACTOR 1000 // Nummber of blinks per m3 of your meter (One rotation/liter)
#define CHILD_ID_HOT_WATER 5
#define CHILD_ID_COLD_WATER 4 // Id of the sensor child
#define CHILD_ID_WATER_LEAK 2
unsigned long SEND_FREQUENCY = 20; // Minimum time between send (in seconds). We don't want to spam the gateway.
MySensor gw;
double ppl = ((double)PULSE_FACTOR) / 1000; // Pulses per liter
volatile unsigned long pulseCountHot = 0;
volatile unsigned long pulseCountCold = 0;
volatile unsigned long lastBlinkHot = 0;
volatile unsigned long lastBlinkCold = 0;
volatile double flowHot = 0;
volatile double flowCold = 0;
unsigned long oldPulseCountHot = 0;
unsigned long oldPulseCountCold = 0;
unsigned long newBlinkHot = 0;
unsigned long newBlinkCold = 0;
double oldflowHot = 0;
double oldflowCold = 0;
double oldtripped = 0;
double volumeHot;
double volumeCold;
double oldvolumeHot;
double oldvolumeCold;
unsigned long lastSendHot;
unsigned long lastSendCold;
unsigned long lastSendHumTemp;
unsigned long lastPulseHot;
unsigned long lastPulseCold;
unsigned long currentTimeHot;
unsigned long currentTimeCold;
unsigned long currentHumTemp;
boolean pcReceivedHot = false;
boolean pcReceivedCold = false;
int lastSensorStateHot = 1; // the previous reading from the input pin
int sensorStateHot; // the current reading from the input pin
long lastDebounceTimeHot = 0; // the last time the output pin was toggled
long debounceDelayHot = 50; // the debounce time; increase if the output flickers
int lastSensorStateCold = 1; // the previous reading from the input pin
int sensorStateCold; // the current reading from the input pin
long lastDebounceTimeCold = 0; // the last time the output pin was toggled
long debounceDelayCold = 50; // the debounce time; increase if the output flickers
boolean metric;
MyMessage flowMsgHot(CHILD_ID_HOT_WATER, V_FLOW);
MyMessage volumeMsgHot(CHILD_ID_HOT_WATER, V_VOLUME);
MyMessage pcMsgHot(CHILD_ID_HOT_WATER, V_VAR1);
MyMessage flowMsgCold(CHILD_ID_COLD_WATER, V_FLOW);
MyMessage volumeMsgCold(CHILD_ID_COLD_WATER, V_VOLUME);
MyMessage pcMsgCold(CHILD_ID_COLD_WATER, V_VAR1);
MyMessage msg(CHILD_ID_WATER_LEAK, V_TRIPPED);
void setup() {
gw.begin(incomingMessage, RADIO_ID);
delay(40);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Water Meter", "1.0");
delay(40);
// Register this device as Waterflow sensor
gw.present(CHILD_ID_COLD_WATER, S_WATER);
delay(40);
gw.present(CHILD_ID_HOT_WATER, S_WATER);
delay(40);
gw.present(CHILD_ID_WATER_LEAK, S_MOTION);
delay(40);
// Fetch last known pulse count value from gw
lastSendCold = millis();
lastSendHot = millis();
pinMode(COLD_WATER_SENSOR_DIGITAL_PIN, INPUT);
pinMode(HOT_WATER_SENSOR_DIGITAL_PIN, INPUT);
gw.request(CHILD_ID_COLD_WATER, V_VAR1);
gw.request(CHILD_ID_HOT_WATER, V_VAR1);
}
void incomingMessage(const MyMessage &message) {
if (message.type == V_VAR1 && message.sensor == 4) {
pulseCountCold = oldPulseCountCold = message.getLong();
Serial.print("Received last pulse count from gw for sensor:");
Serial.print(message.sensor);
Serial.print(" pulseCountCold ");
Serial.println(pulseCountCold);
pcReceivedCold = true;
}
else if (message.type == V_VAR1 && message.sensor == 5) {
pulseCountHot = oldPulseCountHot = message.getLong();
Serial.print("Received last pulse count from gw for sensor:");
Serial.print(message.sensor);
Serial.print(" pulseCountHot ");
Serial.println(pulseCountHot);
pcReceivedHot = true;
}
}
void loop() {
gw.process();
int readingCold = digitalRead(COLD_WATER_SENSOR_DIGITAL_PIN);
// If the switch changed, due to noise or pressing:
if (readingCold != lastSensorStateCold) {
// reset the debouncing timer
lastDebounceTimeCold = millis();
}
if ((millis() - lastDebounceTimeCold) > debounceDelayCold) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (readingCold != sensorStateCold) {
sensorStateCold = readingCold;
// only toggle the LED if the new button state is HIGH
if (sensorStateCold == 0) {
pulseCountCold++;
unsigned long newBlinkCold = micros();
unsigned long intervalCold = newBlinkCold - lastBlinkCold;
lastPulseCold = millis();
flowCold = (60000000.0 / intervalCold) / ppl;
lastBlinkCold = newBlinkCold;
Serial.print("flowCold");
Serial.println(flowCold);
}
}
}
int readingHot = digitalRead(HOT_WATER_SENSOR_DIGITAL_PIN);
// If the switch changed, due to noise or pressing:
if (readingHot != lastSensorStateHot) {
// reset the debouncing timer
lastDebounceTimeHot = millis();
}
if ((millis() - lastDebounceTimeHot) > debounceDelayHot) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (readingHot != sensorStateHot) {
sensorStateHot = readingHot;
// only toggle the LED if the new button state is HIGH
if (sensorStateHot == 0) {
pulseCountHot++;
unsigned long newBlinkHot = micros();
unsigned long intervalHot = newBlinkHot - lastBlinkHot;
lastPulseHot = millis();
flowHot = (60000000.0 / intervalHot) / ppl;
lastBlinkHot = newBlinkHot;
Serial.print("flowHot");
Serial.println(flowHot);
}
}
}
currentTimeCold = millis();
currentTimeHot = millis();
// No Pulse count in 2min reset flow
if (currentTimeCold - lastPulseCold > 120000) {
flowCold = 0;
if (flowCold != oldflowCold) {
gw.send(flowMsgCold.set(flowCold, 2)); // Send flow value to gw
oldflowCold = flowCold;
Serial.println("flowCold Reset");
}
}
// No Pulse count in 2min reset flow
if (currentTimeHot - lastPulseHot > 120000) {
flowHot = 0;
if (flowHot != oldflowHot) {
gw.send(flowMsgHot.set(flowHot, 2)); // Send flow value to gw
oldflowHot = flowHot;
Serial.println("flowHot Reset");
}
}
// Only send values at a maximum frequency
if ((currentTimeCold - lastSendCold > 1000 * SEND_FREQUENCY) || (currentTimeHot - lastSendHot > 1000 * SEND_FREQUENCY)) {
// Pulse count has changed
if (pulseCountCold != oldPulseCountCold) {
gw.send(pcMsgCold.set(pulseCountCold)); // Send volumevalue to gw VAR1
// gw.sendVariable(CHILD_ID_COLD_WATER, V_VAR1, pulseCountCold); // Send volumevalue to gw VAR1
double volumeCold = ((double)pulseCountCold / ((double)PULSE_FACTOR));
oldPulseCountCold = pulseCountCold;
Serial.print("PulseCold count:");
Serial.println(pulseCountCold);
if (volumeCold != oldvolumeCold) {
gw.send(volumeMsgCold.set(volumeCold, 3));
// gw.sendVariable(CHILD_ID_COLD_WATER, V_VOLUME, volumeCold, 3); // Send volume value to gw
Serial.print("m3Cold:");
Serial.println(volumeCold, 3);
oldvolumeCold = volumeCold;
}
if (flowCold != oldflowCold) {
gw.send(flowMsgCold.set(flowCold, 2));
//gw.sendVariable(CHILD_ID_COLD_WATER, V_FLOW, flowCold, 2); // Send flow value to gw
Serial.print("l/min Cold:");
Serial.println(flowCold);
oldflowCold = flowCold;
}
lastSendCold = currentTimeCold;
}
// Pulse count has changed
if (pulseCountHot != oldPulseCountHot) {
gw.send(pcMsgHot.set(pulseCountHot)); // Send volumevalue to gw VAR1
//gw.sendVariable(CHILD_ID_HOT_WATER, V_VAR1, pulseCountHot); // Send volumevalue to gw VAR1
double volumeHot = ((double)pulseCountHot / ((double)PULSE_FACTOR));
oldPulseCountHot = pulseCountHot;
Serial.print("PulseHot count:");
Serial.println(pulseCountHot);
if (volumeHot != oldvolumeHot) {
gw.send(volumeMsgHot.set(volumeHot, 3));
//gw.sendVariable(CHILD_ID_HOT_WATER, V_VOLUME, volumeHot, 3); // Send volume value to gw
Serial.print("m3Hot:");
Serial.println(volumeHot, 3);
oldvolumeHot = volumeHot;
}
if (flowHot != oldflowHot) {
gw.send(flowMsgHot.set(flowHot, 2));
//gw.sendVariable(CHILD_ID_HOT_WATER, V_FLOW, flowHot, 2); // Send flow value to gw
Serial.print("l/min Hot:");
Serial.println(flowHot);
oldflowHot = flowHot;
}
lastSendHot = currentTimeHot;
}
}
lastSensorStateCold = readingCold;
lastSensorStateHot = readingHot;
boolean tripped = digitalRead(WATER_LEAK_SENSOR_DIGITAL_PIN) == LOW;
if (tripped != oldtripped) {
Serial.println(tripped);
gw.send(msg.set(tripped?"1":"0")); // Send tripped value to gw
//gw.sendVariable(CHILD_ID_WATER_LEAK, V_TRIPPED, tripped?"1":"0"); // Send tripped value to gw
oldtripped = tripped;
}
}
or this, can't remember which is final one
#include <SPI.h>
#include <MySensor.h>
#define RADIO_ID 2
#define WATER_LEAK_SENSOR_DIGITAL_PIN 6
#define HOT_WATER_SENSOR_DIGITAL_PIN 4
#define COLD_WATER_SENSOR_DIGITAL_PIN 3
#define PULSE_FACTOR 1000 // Nummber of blinks per m3 of your meter (One rotation/liter)
#define CHILD_ID_HOT_WATER 5
#define CHILD_ID_COLD_WATER 4 // Id of the sensor child
#define CHILD_ID_WATER_LEAK 2
unsigned long SEND_FREQUENCY = 20; // Minimum time between send (in seconds). We don't want to spam the gateway.
MySensor gw;
double ppl = ((double)PULSE_FACTOR) / 1000; // Pulses per liter
volatile unsigned long pulseCountHot = 0;
volatile unsigned long pulseCountCold = 0;
volatile unsigned long lastBlinkHot = 0;
volatile unsigned long lastBlinkCold = 0;
volatile double flowHot = 0;
volatile double flowCold = 0;
unsigned long oldPulseCountHot = 0;
unsigned long oldPulseCountCold = 0;
unsigned long newBlinkHot = 0;
unsigned long newBlinkCold = 0;
double oldflowHot = 0;
double oldflowCold = 0;
double oldtripped = 0;
double volumeHot;
double volumeCold;
double oldvolumeHot;
double oldvolumeCold;
unsigned long lastSendHot;
unsigned long lastSendCold;
unsigned long lastPulseHot;
unsigned long lastPulseCold;
unsigned long currentTimeHot;
unsigned long currentTimeCold;
boolean pcReceivedHot = false;
boolean pcReceivedCold = false;
int readingCold;
int readingHot;
int lastSensorStateHot = 1; // the previous reading from the input pin
int sensorStateHot; // the current reading from the input pin
long lastDebounceTimeHot = 0; // the last time the output pin was toggled
long debounceDelayHot = 50; // the debounce time; increase if the output flickers
int lastSensorStateCold = 1; // the previous reading from the input pin
int sensorStateCold; // the current reading from the input pin
long lastDebounceTimeCold = 0; // the last time the output pin was toggled
long debounceDelayCold = 50; // the debounce time; increase if the output flickers
boolean metric;
MyMessage flowMsgHot(CHILD_ID_HOT_WATER, V_FLOW);
MyMessage volumeMsgHot(CHILD_ID_HOT_WATER, V_VOLUME);
MyMessage pcMsgHot(CHILD_ID_HOT_WATER, V_VAR1);
MyMessage flowMsgCold(CHILD_ID_COLD_WATER, V_FLOW);
MyMessage volumeMsgCold(CHILD_ID_COLD_WATER, V_VOLUME);
MyMessage pcMsgCold(CHILD_ID_COLD_WATER, V_VAR1);
MyMessage msg(CHILD_ID_WATER_LEAK, V_TRIPPED);
void setup() {
gw.begin(incomingMessage, RADIO_ID);
delay(90);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Water Meter", "1.0");
delay(90);
// Register this device as Waterflow sensor
gw.present(CHILD_ID_COLD_WATER, S_WATER);
delay(90);
gw.present(CHILD_ID_HOT_WATER, S_WATER);
delay(90);
gw.present(CHILD_ID_WATER_LEAK, S_MOTION);
delay(90);
// Fetch last known pulse count value from gw
gw.request(CHILD_ID_COLD_WATER, V_VAR1);
gw.request(CHILD_ID_HOT_WATER, V_VAR1);
lastSendCold = millis();
lastSendHot = millis();
pinMode(COLD_WATER_SENSOR_DIGITAL_PIN, INPUT);
pinMode(HOT_WATER_SENSOR_DIGITAL_PIN, INPUT);
}
void incomingMessage(const MyMessage &message) {
if (message.type == V_VAR1 && message.sensor == 4 && pcReceivedCold == false) {
pulseCountCold = oldPulseCountCold = message.getLong();
Serial.print("Received last pulse count from gw for sensor:");
Serial.print(message.sensor);
Serial.print(" pulseCountCold ");
Serial.println(pulseCountCold);
pcReceivedCold = true;
delay(100);
gw.request(CHILD_ID_HOT_WATER, V_VAR1);
}
else if (message.type == V_VAR1 && message.sensor == 5 && pcReceivedHot == false) {
pulseCountHot = oldPulseCountHot = message.getLong();
Serial.print("Received last pulse count from gw for sensor:");
Serial.print(message.sensor);
Serial.print(" pulseCountHot ");
Serial.println(pulseCountHot);
pcReceivedHot = true;
delay(100);
gw.request(CHILD_ID_COLD_WATER, V_VAR1);
}
}
void loop() {
gw.process();
currentTimeCold = millis();
bool sendTimeCold = currentTimeCold - lastSendCold > 1000 * SEND_FREQUENCY;
if (pcReceivedCold) {
readingCold = digitalRead(COLD_WATER_SENSOR_DIGITAL_PIN);
// If the switch changed, due to noise or pressing:
if (readingCold != lastSensorStateCold) {
// reset the debouncing timer
lastDebounceTimeCold = millis();
}
if ((millis() - lastDebounceTimeCold) > debounceDelayCold) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (readingCold != sensorStateCold) {
sensorStateCold = readingCold;
// only toggle the LED if the new button state is HIGH
if (sensorStateCold == 0) {
pulseCountCold++;
Serial.print(" pulseCountCold ");
Serial.println(pulseCountCold);
unsigned long newBlinkCold = micros();
unsigned long intervalCold = newBlinkCold - lastBlinkCold;
lastPulseCold = millis();
flowCold = (60000000.0 / intervalCold) / ppl;
lastBlinkCold = newBlinkCold;
Serial.print("flowCold");
Serial.println(flowCold);
}
}
}
}else if (sendTimeCold) {
// No count received. Try requesting it again
gw.request(CHILD_ID_COLD_WATER, V_VAR1);
}
currentTimeHot = millis();
bool sendTimeHot = currentTimeHot - lastSendHot > 1000 * SEND_FREQUENCY;
if (pcReceivedHot) {
readingHot = digitalRead(HOT_WATER_SENSOR_DIGITAL_PIN);
// If the switch changed, due to noise or pressing:
if (readingHot != lastSensorStateHot) {
// reset the debouncing timer
lastDebounceTimeHot = millis();
}
if ((millis() - lastDebounceTimeHot) > debounceDelayHot) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
// if the button state has changed:
if (readingHot != sensorStateHot) {
sensorStateHot = readingHot;
// only toggle the LED if the new button state is HIGH
if (sensorStateHot == 0) {
pulseCountHot++;
Serial.print(" pulseCountHot ");
Serial.println(pulseCountHot);
unsigned long newBlinkHot = micros();
unsigned long intervalHot = newBlinkHot - lastBlinkHot;
lastPulseHot = millis();
flowHot = (60000000.0 / intervalHot) / ppl;
lastBlinkHot = newBlinkHot;
Serial.print("flowHot");
Serial.println(flowHot);
}
}
}
}else if (currentTimeHot) {
// No count received. Try requesting it again
gw.request(CHILD_ID_HOT_WATER, V_VAR1);
}
// Only send values at a maximum frequency
if (pcReceivedCold && sendTimeCold) {
// No Pulse count in 2min reset flow
if (currentTimeCold - lastPulseCold > 120000) {
flowCold = 0;
if (flowCold != oldflowCold) {
gw.send(flowMsgCold.set(flowCold, 2)); // Send flow value to gw
oldflowCold = flowCold;
Serial.println("flowCold Reset");
}
}
// Pulse count has changed
if (pulseCountCold != oldPulseCountCold) {
gw.send(pcMsgCold.set(pulseCountCold)); // Send volumevalue to gw VAR1
double volumeCold = ((double)pulseCountCold / ((double)PULSE_FACTOR));
oldPulseCountCold = pulseCountCold;
Serial.print("PulseCold count:");
Serial.println(pulseCountCold);
if (volumeCold != oldvolumeCold) {
gw.send(volumeMsgCold.set(volumeCold, 3));
Serial.print("m3Cold:");
Serial.println(volumeCold, 3);
oldvolumeCold = volumeCold;
}
if (flowCold != oldflowCold) {
gw.send(flowMsgCold.set(flowCold, 2));
Serial.print("l/min Cold:");
Serial.println(flowCold);
oldflowCold = flowCold;
}
lastSendCold = currentTimeCold;
}
}
if (pcReceivedHot && sendTimeHot) {
// No Pulse count in 2min reset flow
if (currentTimeHot - lastPulseHot > 120000) {
flowHot = 0;
if (flowHot != oldflowHot) {
gw.send(flowMsgHot.set(flowHot, 2)); // Send flow value to gw
oldflowHot = flowHot;
Serial.println("flowHot Reset");
}
}
// Pulse count has changed
if (pulseCountHot != oldPulseCountHot) {
gw.send(pcMsgHot.set(pulseCountHot)); // Send volumevalue to gw VAR1
double volumeHot = ((double)pulseCountHot / ((double)PULSE_FACTOR));
oldPulseCountHot = pulseCountHot;
Serial.print("PulseHot count:");
Serial.println(pulseCountHot);
if (volumeHot != oldvolumeHot) {
gw.send(volumeMsgHot.set(volumeHot, 3));
Serial.print("m3Hot:");
Serial.println(volumeHot, 3);
oldvolumeHot = volumeHot;
}
if (flowHot != oldflowHot) {
gw.send(flowMsgHot.set(flowHot, 2));
Serial.print("l/min Hot:");
Serial.println(flowHot);
oldflowHot = flowHot;
}
lastSendHot = currentTimeHot;
}
}
lastSensorStateCold = readingCold;
lastSensorStateHot = readingHot;
boolean tripped = digitalRead(WATER_LEAK_SENSOR_DIGITAL_PIN) == LOW;
if (tripped != oldtripped) {
Serial.println(tripped);
gw.send(msg.set(tripped?"1":"0"));
oldtripped = tripped;
}
}
@hek is still it works in 1.4.
after pressing one of light-switch buttons (on vera) next received IR code leads what sending are looped
and only next light-switch buttons press stops it loop
Vera
50 03/15/15 13:36:06.195 luup_log:27: Arduino: Set variable: 10;1;1;1;2;1 <0x3073c680>
50 03/15/15 13:36:21.179 luup_log:27: Arduino: Sending: 10;1;1;1;2;0 <0x2afdc000>
50 03/15/15 13:36:21.216 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:21.310 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.509 luup_log:27: Arduino: Set variable: 10;1;1;0;24;0410a857 <0x3073c680>
50 03/15/15 13:36:37.783 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.787 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.791 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.795 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.877 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:37.965 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.054 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.140 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.226 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.312 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.409 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.485 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.573 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.659 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.800 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.832 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:38.920 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.009 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.094 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.181 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.267 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.353 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.439 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.523 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.614 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.700 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.786 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.872 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:39.979 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.783 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.788 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.793 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.798 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.802 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.810 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.814 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.818 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.832 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.836 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:40.913 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.001 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.087 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.176 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.262 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.348 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.434 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.521 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.607 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.693 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.785 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.867 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:41.954 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.034 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.126 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.212 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.301 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.387 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.475 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.561 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.647 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.734 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.820 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.908 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:42.994 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:43.081 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:43.167 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
50 03/15/15 13:36:43.253 luup_log:27: Arduino: Set variable: 10;1;1;1;2;0 <0x3073c680>
Arduino
read: 0-0-10 s=1,c=1,t=2,pt=0,l=1:1
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:1
read: 0-0-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
Decoded NEC(1): Value:410A857 (32 bits)
Raw samples(68): Gap:38608
Head: m8750 s4450
0:m500 s600 1:m500 s600 2:m450 s600 3:m500 s600
4:m450 s650 5:m450 s1700 6:m500 s600 7:m450 s600
8:m500 s600 9:m450 s600 10:m500 s600 11:m450 s1750
12:m450 s600 13:m500 s600 14:m450 s600 15:m500 s600
16:m450 s1700 17:m500 s600 18:m500 s1700 19:m500 s550
20:m500 s1700 21:m500 s600 22:m450 s600 23:m500 s600
24:m450 s600 25:m500 s1700 26:m500 s600 27:m450 s1700
28:m500 s600 29:m500 s1700 30:m450 s1700 31:m500 s1700
32:m500
Extent=59300
Mark min:450 max:500
Space min:550 max:1750
send: 10-10-0-0 s=1,c=1,t=24,pt=0,l=8,st=ok:0410a857
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
send: 10-10-0-0 s=1,c=1,t=2,pt=0,l=1,st=ok:0
read: 0-1-10 s=1,c=1,t=2,pt=0,l=1:0
one from Node 10 to 13 with msgOn.setDestination(13);
and redirect message through 13 to gateway
am i understood right?
not good enough explained first time.
I got Arduino SceneCtrl 13:3 and i can control it from this node.
13;3;1;0;19;3
13;3;1;0;20;3
And I want send the same command to the gateway
13;3;1;0;19;3
13;3;1;0;20;3
but from Node 10
From sensor with ID 3 want to send message for scene controller ID 10.
Can't see if it possible?
May be possible add this way ?
MyMessage msgOn(CHILD_ID_SCENE, V_SCENE_ON, NODE_ID);
Vera Plugin ScaleSensor
ScaleSensor.zip
@ServiceXp said:
Wild!
How will you use this? (Its not apparent to me this late at night )
Every morning, when you stepped on scale, your weight will be sended to Vera, and stored at Datamine Graphing and Logging Plugin.
Thanks to http://quo.vadis.stojkovic.ch/hacking-a-weighing-scale/ and http://troels.leegaard.org/misc/grundtal20047/ I hacked Momert 5848-9 bathroom scale http://momert.eu/index.php/en/products?page=shop.product_details&flypage=flypage.tpl&category_id=16&product_id=158
Pin arrangement the same as on IKEA Grundtal scales http://troels.leegaard.org/misc/grundtal20047/grundtal20047.pdf
Putting 3V to each lcd pin you can figure out what is each pin for. I used 13 lcd pins from 16. https://www.youtube.com/watch?v=yGe3wtwzqf0
Some photos
CODE:
#include <Sleep_n0m1.h>
#include <SPI.h>
#include <EEPROM.h>
#include <RF24.h>
#include <Sensor.h>
#define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!)
#define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
#define DI_ID 1 // Id of the sensor child
#define SA_ID 2 // Id of the sensor child
#define VI_ID 3 // Id of the sensor child
#define ALL_ID 4 // Id of the sensor child
#define DEBUG 1
int pa,pb,pc,pd;
int lcdA=0,lcdB=0,lcdC=0,lcdD=0;
bool lcd1,lcd2,lcd3,lcd4,lcd5,lcd6,lcd7,lcd8,lcd9;
unsigned int SAn, SBn, SCn, SDn;
unsigned int SA[9], SB[9], SC[9], SD[9];
bool A[9], B[9], C[9], D[9];
double weight;
double oldweight=0;
Sensor gw;
Sleep sleep;
//calculate weight
int getDigit(int d)
{
// d=0,1,2,3
int i = 2*d+0;
int j = 2*d+1;
if ( A[i] && A[j] && !B[i] && B[j] && C[i] && C[j] && D[i]) return 0; //ok
if (!A[i] && !A[j] && !B[i] && B[j] && !C[i] && C[j] && !D[i]) return 1; //ok
if (!A[i] && A[j] && B[i] && B[j] && C[i] && !C[j] && D[i]) return 2; //ok
if (!A[i] && A[j] && B[i] && B[j] && !C[i] && C[j] && D[i]) return 3; //ok
if ( A[i] && !A[j] && B[i] && B[j] && !C[i] && C[j] && !D[i]) return 4; //ok
if ( A[i] && A[j] && B[i] && !B[j] && !C[i] && C[j] && D[i]) return 5; //ok
if ( A[i] && A[j] && B[i] && !B[j] && C[i] && C[j] && D[i]) return 6; //ok
if (!A[i] && A[j] && !B[i] && B[j] && !C[i] && C[j] && !D[i]) return 7; //ok
if ( A[i] && A[j] && B[i] && B[j] && C[i] && C[j] && D[i]) return 8; //ok
if ( A[i] && A[j] && B[i] && B[j] && !C[i] && C[j] && D[i]) return 9; //ok
return 0;
}
void setup()
{
gw.begin();
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Weight Meter", "1.0");
pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input
// Register all sensors to gw (they will be created as child devices)
gw.sendSensorPresentation(DI_ID, S_WEIGHT);
gw.sendSensorPresentation(SA_ID, S_WEIGHT);
gw.sendSensorPresentation(VI_ID, S_WEIGHT);
gw.sendSensorPresentation(ALL_ID, S_WEIGHT);
}
void loop()
{
getweightnow();
#if DEBUG
Serial.println("Sleeping.");
#endif
delay(400); //delay to allow serial to fully print before sleep
gw.powerDown();
sleep.pwrDownMode(); //set sleep mode
sleep.sleepInterrupt(INTERRUPT,CHANGE);
}
void getweightnow() {
lcdA = analogRead(A0);
lcdB = analogRead(A1);
lcdC = analogRead(A2);
lcdD = analogRead(A3);
// waiting for display (interruption will continue from here)
#if DEBUG
Serial.println("Stepped on scale");
#endif
// make sure that LCD is active
// starts measuring
#if DEBUG
Serial.println("Mesuring");
#endif
SAn = SBn = SCn = SDn = 0;
for (int i=0; i<9; i++)
SA[i] = SB[i] = SC[i] = SD[i] = 0;
int i=0;
//run while backplanes are active
while ((lcdA!=0 || lcdB!=0 || lcdC!=0 || lcdD!=0)) {
lcdA = analogRead(A0);
lcdB = analogRead(A1);
lcdC = analogRead(A2);
lcdD = analogRead(A3);
lcd1 = digitalRead(A4);
lcd2 = digitalRead(A5);
lcd3 = digitalRead(2);
lcd4 = digitalRead(3);
lcd5 = digitalRead(4);
lcd6 = digitalRead(5);
lcd7 = digitalRead(6);
lcd8 = digitalRead(7);
lcd9 = digitalRead(8);
// decode A, B, C and D signals to -1, 0, 1
pa = 0;
if (lcdA < 300) pa=-1; else if (lcdA > 600) pa=1;
pb = 0;
if (lcdB < 300) pb=-1; else if (lcdB > 600) pb=1;
pc = 0;
if (lcdC < 300) pc=-1; else if (lcdC > 600) pc=1;
pd = 0;
if (lcdD < 300) pd=-1; else if (lcdD > 600) pd=1;
lcdA = pa; lcdB = pb; lcdC = pc; lcdD = pd;
if (lcdA!=0 && lcdB==0 && lcdC==0 && lcdD==0 ||
lcdA==0 && lcdB!=0 && lcdC==0 && lcdD==0 ||
lcdA==0 && lcdB==0 && lcdC!=0 && lcdD==0 ||
lcdA==0 && lcdB==0 && lcdC==0 && lcdD!=0)
{
if (lcdA==1 || lcdB==1 || lcdC==1 || lcdD==1)
{
lcd1 = 1-lcd1;
lcd2 = 1-lcd2;
lcd3 = 1-lcd3;
lcd4 = 1-lcd4;
lcd5 = 1-lcd5;
lcd6 = 1-lcd6;
lcd7 = 1-lcd7;
lcd8 = 1-lcd8;
lcd9 = 1-lcd9;
}
if (lcdA != 0)
{
SA[0] += lcd1;
SA[1] += lcd2;
SA[2] += lcd3;
SA[3] += lcd4;
SA[4] += lcd5;
SA[5] += lcd6;
SA[6] += lcd7;
SA[7] += lcd8;
SA[8] += lcd9;
SAn++;
}
if (lcdB != 0)
{
SB[0] += lcd1;
SB[1] += lcd2;
SB[2] += lcd3;
SB[3] += lcd4;
SB[4] += lcd5;
SB[5] += lcd6;
SB[6] += lcd7;
SB[7] += lcd8;
SB[8] += lcd9;
SBn++;
}
if (lcdC!=0)
{
SC[0] += lcd1;
SC[1] += lcd2;
SC[2] += lcd3;
SC[3] += lcd4;
SC[4] += lcd5;
SC[5] += lcd6;
SC[6] += lcd7;
SC[7] += lcd8;
SC[8] += lcd9;
SCn++;
}
if (lcdD!=0)
{
SD[0] += lcd1;
SD[1] += lcd2;
SD[2] += lcd3;
SD[3] += lcd4;
SD[4] += lcd5;
SD[5] += lcd6;
SD[6] += lcd7;
SD[7] += lcd8;
SD[8] += lcd9;
SDn++;
}
i++;
}
if (lcdA==-1 && lcdB==-1 && lcdC==-1 && lcdD==-1 && lcd9==0 && (SA[0]+SA[1]+SA[2]+SA[3]+SA[4]+SA[5]+SA[6]+SA[7]+SA[8]>0)) {
// measuring is done
#if DEBUG
Serial.println("Done");
#endif
// finding the average of signals values during measuring period
// not 100% correct, but the fastest way I could think of
for (int i=0;i<9;i++)
{
A[i] = (1.0 * SA[i] / SAn >0.5);
B[i] = (1.0 * SB[i] / SBn >0.5);
C[i] = (1.0 * SC[i] / SCn >0.5);
D[i] = (1.0 * SD[i] / SDn >0.5);
}
// decoding
float weight = 100.0*getDigit(0) + 10.0*getDigit(1) + 1.0*getDigit(2) + 0.1*getDigit(3);
#if DEBUG
Serial.print("Weight is: ");
Serial.println(weight);
#endif
if (weight != oldweight) {
gw.sendVariable(DI_ID, V_WEIGHT, weight,3); // Send volume value to gw
#if DEBUG
Serial.println("Sent");
#endif
oldweight = weight;
}
break;
} //end of if
} //end of while
}
And now is the question S_WEIGHT sensor-type are working on MySensors Arduino Library (v1.3) and VERA Lite as controller. Or do i need *Sensor1.json *Sensor1.xml files for it working? Because when i included scales node to Vera and restarted Luup, after that all nodes stoped working. Only restoring VERA from backup are helped.
it is possible to add hardware button to the setup and control the relay.