openHab binding 2.4.0 Variable Problem ( 2.4.0.201806211605)
-
@TimO I posted something in the thread https://forum.mysensors.org/topic/9346/getting-mysensors-mqtt-gateway-working-on-openhab-2-2-stable/40 but just did another full round of testing to be sure so adding a new thread to get the conversation started. I have just set a test node that sits on my desk and have added the var1 item to an already well working test node - it is a switch and was not using any vars etc. So I editted the node code and added a loop request for var1 every 30 seconds.
Here is the code for this node
/** * 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 * Example sketch showing how to control physical relays. * This example will remember relay state after power failure. * http://www.mysensors.org/build/relay */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_RF24_CHANNEL 82 #define MY_RF24_IRQ_PIN 2 #define MY_RX_MESSAGE_BUFFER_FEATURE #define MY_NODE_ID 27 // Set this to fix your Radio ID or use Auto // Enable repeater functionality for this node //#define MY_REPEATER_FEATURE #define MY_TRANSPORT_SANITY_CHECK #include <MySensors.h> #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 #define RELAY_UNKNOWN 2 int CurrentState[] = {RELAY_UNKNOWN, RELAY_UNKNOWN, RELAY_UNKNOWN, RELAY_UNKNOWN}; int SetState[] = {RELAY_OFF, RELAY_OFF, RELAY_OFF, RELAY_OFF}; unsigned long requestVar1Last = millis(); unsigned long requestVar1Time = 30000; MyMessage relayMsg(0, V_STATUS); void before() { wdt_enable(WDTO_2S); } void setup() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); SetState[sensor] = RELAY_OFF; request(sensor, V_STATUS); delay(50); request(sensor, V_VAR1); } } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Power Socket (7)", "4.1"); for (int sensor=1; sensor<=NUMBER_OF_RELAYS; sensor++) { // Register all sensors to gw (they will be created as child devices) present(sensor, S_BINARY); } } void loop() { wdt_reset(); for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { if (CurrentState[sensor] != SetState[sensor] && SetState[sensor] != RELAY_UNKNOWN) { digitalWrite(pin, SetState[sensor]?RELAY_ON:RELAY_OFF); CurrentState[sensor] = SetState[sensor]; resend(relayMsg.setSensor(sensor).set(CurrentState[sensor]), 5); } } if (requestVar1Last + requestVar1Time < millis()) { request(1, V_VAR1); requestVar1Last = millis(); } } void resend(MyMessage &msg, int repeats) { int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (send(msg)) { sendOK = true; } else { sendOK = false; Serial.print("Send Failed: "); Serial.println(repeat); repeatdelay += 50; } repeat++; wait(repeatdelay); } } void receive(const MyMessage &message) { int sensor = message.sensor; // We only expect one type of message from controller. But we better check anyway. if (message.type==V_STATUS) { // Change relay state SetState[sensor] = message.getBool(); // Write some debug info Serial.print(F("Incoming change for sensor:")); Serial.print(message.sensor); Serial.print(F(", New status: ")); Serial.println(message.getBool()); } if (message.type == V_VAR1) { int variable1 = atoi(message.data);// RUN_ALL_ZONES time Serial.print(F("Recieved variable1: ")); Serial.println(variable1); } }I added the item to openHab ad follows:
Switch Desktop_Debug_Light "Desktop Debug Light" <light> (gDevices,gRoom_Office) [ "iss:type:DevSwitch", "iss:room:Entry" ] {channel="mysensors:light:gateway:Desktop_Debug_Light:status"} Number Desktop_Debug_Var1 "Desktop Debug Light- Var1 [%d]" <selfruntime> (gDevices,gRoom_Office) {channel="mysensors:light:gateway:Desktop_Debug_Light:var1"}I used Paper UI and set the variable to 10 - this pushed the update to the node correctly. I then rebooted openHab which using persistance restores the variable 1 value back to 10 however when the node requests var1 from the controller after the reboot it receives 0. I have found this to be the same if I do an postUpdate. The var1 container on openHab has the 10 value in it I have confirmed this with a Rest API commnd the GET the item.
Here is the logs from the openHab log:tail and also the node I have added comments where the reboot happened and you will see the results:
2018-08-28 08:23:22.581 [.ItemChannelLinkAddedEvent] - Link 'Desktop_Debug_Var1-mysensors:light:gateway:Desktop_Debug_Light:var1' has been added. 2018-08-28 08:24:08.812 [ome.event.ItemCommandEvent] - Item 'Desktop_Debug_Var1' received command 10 2018-08-28 08:24:08.829 [vent.ItemStateChangedEvent] - Desktop_Debug_Var1 changed from NULL to 10 REBOOTED THE OPENHAB SERVER 2018-08-28 08:27:40.145 [temChannelLinkRemovedEvent] - Link 'Desktop_Debug_Var1 => mysensors:light:gateway:Desktop_Debug_Light:var1' has been removed. 2018-08-28 08:28:57.469 [.ItemChannelLinkAddedEvent] - Link 'Desktop_Debug_Var1-mysensors:light:gateway:Desktop_Debug_Light:var1' has been added. 2018-08-28 08:29:08.389 [vent.ItemStateChangedEvent] - Desktop_Debug_Var1 changed from NULL to 10.02280 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 2286 MCO:BGN:INIT OK,TSP=1 2290 TSF:MSG:SEND,27-27-0-0,s=1,c=1,t=2,pt=2,l=2,sg=0,ft=0,st=OK:1 2317 TSF:MSG:READ,0-0-27,s=1,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:1, New status: 1 2521 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10 Recieved variable1: 10 30002 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 30026 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10 Recieved variable1: 10 ***** REBOOT OF OPENHAB SERVER ******* 60010 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 90018 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 120026 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 150038 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: ***** OPENHAB UP AGAIN ******** 150090 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0 180046 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 180071 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0 210054 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 210073 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0You can see the PaperUI update at 2018-08-28 08:24:08.829 which corresponds with the 30026 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10. I then rebooted and the server restored the value of 10 but the node continues to receive 0 and does so for ever - it never gets the value 10.
Here is the output of the item using the REST API which is taken well after the reboot and after many request(1,V_VAR1)'s is still reporting 0.
http://openhabianpi:8080/rest/items/Desktop_Debug_Var1 { "link": "http://openhabianpi:8080/rest/items/Desktop_Debug_Var1", "state": "10.0", "stateDescription": { "pattern": "%d", "readOnly": false, "options": [] }, "editable": false, "type": "Number", "name": "Desktop_Debug_Var1", "label": "Desktop Debug Light- Var1", "category": "selfruntime", "tags": [], "groupNames": [ "gDevices", "gRoom_Office" ] } http://openhabianpi:8080/rest/items/Desktop_Debug_Var1/state 10.0As mentioned the variable received at the node never updates also if we use a postUpdate in openHab it will continue to receive 0 until we issue a sendCommand at which time it will update until the next postUpdate or server reboot.
-
@TimO I posted something in the thread https://forum.mysensors.org/topic/9346/getting-mysensors-mqtt-gateway-working-on-openhab-2-2-stable/40 but just did another full round of testing to be sure so adding a new thread to get the conversation started. I have just set a test node that sits on my desk and have added the var1 item to an already well working test node - it is a switch and was not using any vars etc. So I editted the node code and added a loop request for var1 every 30 seconds.
Here is the code for this node
/** * 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 * Example sketch showing how to control physical relays. * This example will remember relay state after power failure. * http://www.mysensors.org/build/relay */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_RF24_CHANNEL 82 #define MY_RF24_IRQ_PIN 2 #define MY_RX_MESSAGE_BUFFER_FEATURE #define MY_NODE_ID 27 // Set this to fix your Radio ID or use Auto // Enable repeater functionality for this node //#define MY_REPEATER_FEATURE #define MY_TRANSPORT_SANITY_CHECK #include <MySensors.h> #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 #define RELAY_UNKNOWN 2 int CurrentState[] = {RELAY_UNKNOWN, RELAY_UNKNOWN, RELAY_UNKNOWN, RELAY_UNKNOWN}; int SetState[] = {RELAY_OFF, RELAY_OFF, RELAY_OFF, RELAY_OFF}; unsigned long requestVar1Last = millis(); unsigned long requestVar1Time = 30000; MyMessage relayMsg(0, V_STATUS); void before() { wdt_enable(WDTO_2S); } void setup() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); SetState[sensor] = RELAY_OFF; request(sensor, V_STATUS); delay(50); request(sensor, V_VAR1); } } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Power Socket (7)", "4.1"); for (int sensor=1; sensor<=NUMBER_OF_RELAYS; sensor++) { // Register all sensors to gw (they will be created as child devices) present(sensor, S_BINARY); } } void loop() { wdt_reset(); for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) { if (CurrentState[sensor] != SetState[sensor] && SetState[sensor] != RELAY_UNKNOWN) { digitalWrite(pin, SetState[sensor]?RELAY_ON:RELAY_OFF); CurrentState[sensor] = SetState[sensor]; resend(relayMsg.setSensor(sensor).set(CurrentState[sensor]), 5); } } if (requestVar1Last + requestVar1Time < millis()) { request(1, V_VAR1); requestVar1Last = millis(); } } void resend(MyMessage &msg, int repeats) { int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (send(msg)) { sendOK = true; } else { sendOK = false; Serial.print("Send Failed: "); Serial.println(repeat); repeatdelay += 50; } repeat++; wait(repeatdelay); } } void receive(const MyMessage &message) { int sensor = message.sensor; // We only expect one type of message from controller. But we better check anyway. if (message.type==V_STATUS) { // Change relay state SetState[sensor] = message.getBool(); // Write some debug info Serial.print(F("Incoming change for sensor:")); Serial.print(message.sensor); Serial.print(F(", New status: ")); Serial.println(message.getBool()); } if (message.type == V_VAR1) { int variable1 = atoi(message.data);// RUN_ALL_ZONES time Serial.print(F("Recieved variable1: ")); Serial.println(variable1); } }I added the item to openHab ad follows:
Switch Desktop_Debug_Light "Desktop Debug Light" <light> (gDevices,gRoom_Office) [ "iss:type:DevSwitch", "iss:room:Entry" ] {channel="mysensors:light:gateway:Desktop_Debug_Light:status"} Number Desktop_Debug_Var1 "Desktop Debug Light- Var1 [%d]" <selfruntime> (gDevices,gRoom_Office) {channel="mysensors:light:gateway:Desktop_Debug_Light:var1"}I used Paper UI and set the variable to 10 - this pushed the update to the node correctly. I then rebooted openHab which using persistance restores the variable 1 value back to 10 however when the node requests var1 from the controller after the reboot it receives 0. I have found this to be the same if I do an postUpdate. The var1 container on openHab has the 10 value in it I have confirmed this with a Rest API commnd the GET the item.
Here is the logs from the openHab log:tail and also the node I have added comments where the reboot happened and you will see the results:
2018-08-28 08:23:22.581 [.ItemChannelLinkAddedEvent] - Link 'Desktop_Debug_Var1-mysensors:light:gateway:Desktop_Debug_Light:var1' has been added. 2018-08-28 08:24:08.812 [ome.event.ItemCommandEvent] - Item 'Desktop_Debug_Var1' received command 10 2018-08-28 08:24:08.829 [vent.ItemStateChangedEvent] - Desktop_Debug_Var1 changed from NULL to 10 REBOOTED THE OPENHAB SERVER 2018-08-28 08:27:40.145 [temChannelLinkRemovedEvent] - Link 'Desktop_Debug_Var1 => mysensors:light:gateway:Desktop_Debug_Light:var1' has been removed. 2018-08-28 08:28:57.469 [.ItemChannelLinkAddedEvent] - Link 'Desktop_Debug_Var1-mysensors:light:gateway:Desktop_Debug_Light:var1' has been added. 2018-08-28 08:29:08.389 [vent.ItemStateChangedEvent] - Desktop_Debug_Var1 changed from NULL to 10.02280 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 2286 MCO:BGN:INIT OK,TSP=1 2290 TSF:MSG:SEND,27-27-0-0,s=1,c=1,t=2,pt=2,l=2,sg=0,ft=0,st=OK:1 2317 TSF:MSG:READ,0-0-27,s=1,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:1, New status: 1 2521 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10 Recieved variable1: 10 30002 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 30026 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10 Recieved variable1: 10 ***** REBOOT OF OPENHAB SERVER ******* 60010 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 90018 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 120026 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 150038 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: ***** OPENHAB UP AGAIN ******** 150090 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0 180046 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 180071 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0 210054 TSF:MSG:SEND,27-27-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=0,st=OK: 210073 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=1,sg=0:0 Recieved variable1: 0You can see the PaperUI update at 2018-08-28 08:24:08.829 which corresponds with the 30026 TSF:MSG:READ,0-0-27,s=1,c=1,t=24,pt=0,l=2,sg=0:10. I then rebooted and the server restored the value of 10 but the node continues to receive 0 and does so for ever - it never gets the value 10.
Here is the output of the item using the REST API which is taken well after the reboot and after many request(1,V_VAR1)'s is still reporting 0.
http://openhabianpi:8080/rest/items/Desktop_Debug_Var1 { "link": "http://openhabianpi:8080/rest/items/Desktop_Debug_Var1", "state": "10.0", "stateDescription": { "pattern": "%d", "readOnly": false, "options": [] }, "editable": false, "type": "Number", "name": "Desktop_Debug_Var1", "label": "Desktop Debug Light- Var1", "category": "selfruntime", "tags": [], "groupNames": [ "gDevices", "gRoom_Office" ] } http://openhabianpi:8080/rest/items/Desktop_Debug_Var1/state 10.0As mentioned the variable received at the node never updates also if we use a postUpdate in openHab it will continue to receive 0 until we issue a sendCommand at which time it will update until the next postUpdate or server reboot.
@itbeyond said in openHab binding 2.4.0 Variable Problem ( 2.4.0.201806211605):
Bug reported to Github issues at: https://github.com/tobof/openhab2-addons/issues/126
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