[SOLVED] GW reports wrong value after node restart
-
Hi guys
First of all, I want to say thank you for such a great lib as MySensors :)
I'm pretty new and experimenting.
And possibly, there is some bug...
Config: MySensorsESP8266MQTT gw + Domoticz + one node (merge batteryPowered + dimmableLight).
There are two sensors in node: 0 - switch, 1 - dimmer.
I know you want to see sources, here it is/* 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-2018 Sensnology AB Full contributor list: https://github.com/mysensors/MySensors/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. ******************************* DESCRIPTION This is an example that demonstrates how to report the battery level for a sensor Instructions for measuring battery capacity on A0 are available here: http://www.mysensors.org/build/battery */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM69 //#define MY_RADIO_RFM95 #include <MySensors.h> int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point uint32_t SLEEP_TIME = 900000; // sleep time between reads (seconds * 1000 milliseconds) int oldBatteryPcnt = 0; #define LED_PIN 3 // Arduino pin attached to MOSFET Gate pin #define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim) static int16_t currentLevel = 0; // Current dim level... MyMessage lightMsg(0, V_LIGHT); MyMessage dimmerMsg(1, V_DIMMER); void setup() { // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif request( 1, V_DIMMER ); } void presentation() { present( 0, S_LIGHT ); present( 1, S_DIMMER ); sendSketchInfo("Battery dimmer", "1.1"); } uint32_t readVcc() { auto admux = ADMUX; // Read 1.1V reference against AVcc // set the reference to Vcc and the measurement to the internal 1.1V reference #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) ADMUX = _BV(MUX5) | _BV(MUX0); #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) ADMUX = _BV(MUX3) | _BV(MUX2); #else ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); #endif delay(2); // Wait for Vref to settle ADCSRA |= _BV(ADSC); // Start conversion while (bit_is_set(ADCSRA, ADSC)); // measuring uint8_t low = ADCL; // must read ADCL first - it then locks ADCH uint8_t high = ADCH; // unlocks both uint32_t result = (high << 8) | low; result = 1125300 / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 ADMUX = admux; delay(2); // Wait for Vref to settle return result; // Vcc in millivolts } void receive(const MyMessage &message) { if (message.type == V_LIGHT || message.type == V_DIMMER) { // Retrieve the power or dim level from the incoming request message int requestedLevel = atoi( message.data ); // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on] requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 ); // Clip incoming level to valid range of 0 to 100 requestedLevel = requestedLevel > 100 ? 100 : requestedLevel; requestedLevel = requestedLevel < 0 ? 0 : requestedLevel; Serial.print( "Changing level to " ); Serial.print( requestedLevel ); Serial.print( ", from " ); Serial.println( currentLevel ); fadeToLevel( requestedLevel ); // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value... send(lightMsg.set(currentLevel > 0)); // hek comment: Is this really nessesary? send( dimmerMsg.set(currentLevel) ); } } /*** This method provides a graceful fade up/down effect */ void fadeToLevel( int toLevel ) { int delta = ( toLevel - currentLevel ) < 0 ? -1 : 1; while ( currentLevel != toLevel ) { currentLevel += delta; analogWrite( LED_PIN, (int)(currentLevel / 100. * 255) ); delay( FADE_DELAY ); } } void loop() { static long lastMillis = millis() - 60001; if (millis() - lastMillis < 60000) { return; } lastMillis = millis(); Serial.print("Voltage: "); Serial.println(readVcc()); // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN); #ifdef MY_DEBUG Serial.println(sensorValue); #endif // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts // 3.44/1023 = Volts per bit = 0.003363075 int batteryPcnt = sensorValue / 10; batteryPcnt = 90; #ifdef MY_DEBUG float batteryV = sensorValue * 0.003363075; Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); #endif if (oldBatteryPcnt != batteryPcnt) { // Power up radio after sleep sendBatteryLevel(batteryPcnt, true); oldBatteryPcnt = batteryPcnt; } }The problem is: when I turn to switch off in domoticz and restart the node, it goes back to the previous dimmer value.
17526 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/90/1/2/0/3, MSG RECEIVED 17534 TSF:MSG:SEND,0-0-90-90,s=1,c=2,t=3,pt=0,l=2,sg=0,ft=0,st=OK:50 <-- set dimmer to 50 18043 TSF:MSG:READ,90-90-0,s=0,c=1,t=2,pt=1,l=1,sg=0:1 18048 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/0/1/0/2,MSG SENT 18055 TSF:MSG:READ,90-90-0,s=1,c=1,t=3,pt=2,l=2,sg=0:50 18060 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/1/1/0/3,MSG SENT 66986 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 66992 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 174098 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 174104 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 281211 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 281217 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 387296 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 387302 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 465838 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/90/1/1/0/2, MSG RECEIVED 465838 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/90/1/1/0/2, MSG RECEIVED <-- receive command from domoticz 465846 TSF:MSG:SEND,0-0-90-90,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:0 <-- set dimmer to 0 466355 TSF:MSG:READ,90-90-0,s=0,c=1,t=2,pt=1,l=1,sg=0:0 <-- confirm for switch 466360 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/0/1/0/2,MSG SENT 466367 TSF:MSG:READ,90-90-0,s=1,c=1,t=3,pt=2,l=2,sg=0:0 <-- confirm for dimmer 466372 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/1/1/0/3,MSG SENT 490926 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 490932 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 596418 TSF:MSG:READ,90-90-255,s=255,c=3,t=7,pt=0,l=0,sg=0: -- rebooting node 596424 TSF:MSG:BC 596425 TSF:MSG:FPAR REQ,ID=90 596428 TSF:PNG:SEND,TO=0 596430 TSF:CKU:OK 596432 TSF:MSG:GWL OK 596902 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0 598039 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/0/0/3/0/18, MSG RECEIVED 598045 GWT:TPS:TOPIC=domoticz/in/MyMQTT/0/255/3/0/22,MSG SENT 598466 TSF:MSG:READ,90-90-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1 598471 TSF:MSG:PINGED,ID=90,HP=1 598481 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1 598494 TSF:MSG:READ,90-90-0,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 598502 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 598508 TSF:MSG:READ,90-90-0,s=255,c=0,t=17,pt=0,l=5,sg=0:2.3.1 598514 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/255/0/0/17,MSG SENT 598521 TSF:MSG:READ,90-90-0,s=255,c=3,t=6,pt=1,l=1,sg=0:0 598526 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/255/3/0/6,MSG SENT 598654 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/90/255/3/0/6, MSG RECEIVED 598662 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=OK:M 598669 TSF:MSG:READ,90-90-0,s=0,c=0,t=3,pt=0,l=0,sg=0: 598674 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/0/0/0/3,MSG SENT 598680 TSF:MSG:READ,90-90-0,s=1,c=0,t=4,pt=0,l=0,sg=0: 598685 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/1/0/0/4,MSG SENT 598692 TSF:MSG:READ,90-90-0,s=255,c=3,t=11,pt=0,l=14,sg=0:Battery dimmer 598698 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/255/3/0/11,MSG SENT 598705 TSF:MSG:READ,90-90-0,s=255,c=3,t=12,pt=0,l=3,sg=0:1.1 598711 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/255/3/0/12,MSG SENT 598718 TSF:MSG:READ,90-90-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2 598730 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=OK:1 598740 TSF:MSG:READ,90-90-0,s=1,c=2,t=3,pt=0,l=0,sg=0: 598745 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/1/2/0/3,MSG SENT 598757 TSF:MSG:READ,90-90-0,s=255,c=3,t=0,pt=1,l=1,sg=0:90 598762 TSF:MSG:ACK REQ 598766 TSF:MSG:SEND,0-0-90-90,s=255,c=3,t=0,pt=1,l=1,sg=0,ft=0,st=OK:90 598772 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/255/3/0/0,MSG SENT 599267 GWT:IMQ:TOPIC=domoticz/out/MyMQTT/90/1/2/0/3, MSG RECEIVED 599275 TSF:MSG:SEND,0-0-90-90,s=1,c=2,t=3,pt=0,l=2,sg=0,ft=0,st=OK:50 <-- here is a wrong value received 599785 TSF:MSG:READ,90-90-0,s=0,c=1,t=2,pt=1,l=1,sg=0:1 599790 GWT:TPS:TOPIC=domoticz/in/MyMQTT/90/0/1/0/2,MSG SENT 599796 TSF:MSG:READ,90-90-0,s=1,c=1,t=3,pt=2,l=2,sg=0:50 <-- confirmedI appreciate any help with this problem. Thanks!
-
Well, seems like the problem is on domoticz side.
I've change note to request switch state (instead of dimmer) from controller on boot.-- set dimmer to 31 7/7/2019, 10:50:07 PMnode: 2be13ec4.72cdd2 domoticz/out/MyMQTT/90/1/1/0/3 : msg.payload : string[2] "31" 7/7/2019, 10:50:07 PMnode: 2be13ec4.72cdd2 domoticz/out : msg.payload : string[265] "{↵ "Battery" : 255,↵ "Level" : 31,↵ "RSSI" : 12,↵ "description" : "",↵ "dtype" : "Light/Switch",↵ "id" : "0000005A",↵ "idx" : 2,↵ "name" : "Light",↵ "nvalue" : 2,↵ "stype" : "AC",↵ "svalue1" : "31",↵ "switchType" : "Dimmer",↵ "unit" : 1↵}↵" 7/7/2019, 10:50:08 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/0/1/0/2 : msg.payload : string[1] "1" 7/7/2019, 10:50:09 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/1/1/0/3 : msg.payload : string[2] "31" -- switch off 7/7/2019, 10:50:10 PMnode: 2be13ec4.72cdd2 domoticz/out/MyMQTT/90/1/1/0/2 : msg.payload : string[1] "0" 7/7/2019, 10:50:11 PMnode: 2be13ec4.72cdd2 domoticz/out : msg.payload : string[265] "{↵ "Battery" : 255,↵ "Level" : 31,↵ "RSSI" : 12,↵ "description" : "",↵ "dtype" : "Light/Switch",↵ "id" : "0000005A",↵ "idx" : 2,↵ "name" : "Light",↵ "nvalue" : 0,↵ "stype" : "AC",↵ "svalue1" : "31",↵ "switchType" : "Dimmer",↵ "unit" : 1↵}↵" -- confirm from node 7/7/2019, 10:50:12 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/0/1/0/2 : msg.payload : string[1] "0" 7/7/2019, 10:50:13 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/1/1/0/3 : msg.payload : string[1] "0" 7/7/2019, 10:50:14 PMnode: 2be13ec4.72cdd2 domoticz/out : msg.payload : string[248] "{↵ "Battery" : 90,↵ "RSSI" : 12,↵ "description" : "",↵ "dtype" : "Light/Switch",↵ "id" : "0000005A",↵ "idx" : 1,↵ "name" : "Light",↵ "nvalue" : 0,↵ "stype" : "AC",↵ "svalue1" : "100",↵ "switchType" : "On/Off",↵ "unit" : 0↵}↵" -- reboot node 7/7/2019, 10:50:22 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/255/0/0/17 : msg.payload : string[5] "2.3.1" 7/7/2019, 10:50:22 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/255/3/0/6 : msg.payload : string[1] "0" 7/7/2019, 10:50:23 PMnode: 2be13ec4.72cdd2 domoticz/out/MyMQTT/90/255/3/0/6 : msg.payload : string[1] "M" 7/7/2019, 10:50:24 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/0/0/0/3 : msg.payload : string[0] "" 7/7/2019, 10:50:25 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/1/0/0/4 : msg.payload : string[0] "" 7/7/2019, 10:50:26 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/255/3/0/11 : msg.payload : string[14] "Battery dimmer" 7/7/2019, 10:50:27 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/255/3/0/12 : msg.payload : string[3] "1.1" -- i assume this is request from node 7/7/2019, 10:50:28 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/0/2/0/3 : msg.payload : string[0] "" 7/7/2019, 10:50:29 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/255/3/0/0 : msg.payload : string[2] "90" -- here is switch 100(????) from domoticz 7/7/2019, 10:50:30 PMnode: 2be13ec4.72cdd2 domoticz/out/MyMQTT/90/0/2/0/3 : msg.payload : string[3] "100" 7/7/2019, 10:50:31 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/0/1/0/2 : msg.payload : string[1] "1" 7/7/2019, 10:50:32 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/90/1/1/0/3 : msg.payload : string[3] "100" 7/7/2019, 10:50:32 PMnode: 2be13ec4.72cdd2 domoticz/out : msg.payload : string[248] "{↵ "Battery" : 90,↵ "RSSI" : 12,↵ "description" : "",↵ "dtype" : "Light/Switch",↵ "id" : "0000005A",↵ "idx" : 1,↵ "name" : "Light",↵ "nvalue" : 1,↵ "stype" : "AC",↵ "svalue1" : "100",↵ "switchType" : "On/Off",↵ "unit" : 0↵}↵" 7/7/2019, 10:50:32 PMnode: 2be13ec4.72cdd2 domoticz/out : msg.payload : string[266] "{↵ "Battery" : 90,↵ "Level" : 100,↵ "RSSI" : 12,↵ "description" : "",↵ "dtype" : "Light/Switch",↵ "id" : "0000005A",↵ "idx" : 2,↵ "name" : "Light",↵ "nvalue" : 1,↵ "stype" : "AC",↵ "svalue1" : "100",↵ "switchType" : "Dimmer",↵ "unit" : 1↵}↵" 7/7/2019, 10:51:22 PMnode: 2be13ec4.72cdd2 domoticz/out/MyMQTT/0/0/3/0/18 : msg.payload : string[4] "PING" 7/7/2019, 10:51:22 PMnode: 2be13ec4.72cdd2 domoticz/in/MyMQTT/0/255/3/0/22 : msg.payload : string[7] "1899265" -
Sorry guys, the problem is on my side:
// instead of request( 0, S_LIGHT ); // should be request( 0, V_LIGHT );I don't know why this mistake leads to such behavior, but now it's ok.
-
Sorry guys, the problem is on my side:
// instead of request( 0, S_LIGHT ); // should be request( 0, V_LIGHT );I don't know why this mistake leads to such behavior, but now it's ok.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login