openHAB 2.0 binding
-
@gonzalonal said:
Regarding STOP functionality for the binding, I have read somewhere that the supported commands by OpenHAB, for RollerShutter items, are Up, Down and StopMove. Have yoy tried something like this?
Yeah, my problem till yesterday was, that I was not able to cast the given state to StopMoveType in case of Stop, while casting the state to UpDownType for Up and Down was no problem. :-)
I changed the way how the binding handles this type of message and it works now.
@TimO
Can we clone the latest source code from this binding? I think that your github repository is outdated and I want to work this weekend with it, 'cause I would like to integrate the mysensors 2.0-beta "smartSleep" feature with your binding in my home sensors setup (ESP8266 Ethernet GW).Also, if there are any ISSUE y your TODO list in which I can help you, please tell me.
Regards
-
@TimO
Can we clone the latest source code from this binding? I think that your github repository is outdated and I want to work this weekend with it, 'cause I would like to integrate the mysensors 2.0-beta "smartSleep" feature with your binding in my home sensors setup (ESP8266 Ethernet GW).Also, if there are any ISSUE y your TODO list in which I can help you, please tell me.
Regards
Hi Sebastián, what repository have you checked? Currently the development is not on the old https://github.com/wishmoooop/openhab2/tree/master/addons/binding/org.openhab.binding.mysensors but was moved here: https://github.com/tobof/openhab2-addons/tree/MySensors/addons/binding/org.openhab.binding.mysensors
Hope this help :)
-
Hi Sebastián, what repository have you checked? Currently the development is not on the old https://github.com/wishmoooop/openhab2/tree/master/addons/binding/org.openhab.binding.mysensors but was moved here: https://github.com/tobof/openhab2-addons/tree/MySensors/addons/binding/org.openhab.binding.mysensors
Hope this help :)
@andreacioni said:
Hi Sebastián, what repository have you checked? Currently the development is not on the old https://github.com/wishmoooop/openhab2/tree/master/addons/binding/org.openhab.binding.mysensors but was moved here: https://github.com/tobof/openhab2-addons/tree/MySensors/addons/binding/org.openhab.binding.mysensors
Hope this help :)
Thanks @andreacioni
I was working on the old repo! :) -
I've updated the first posting in this thread. You'll find the current repo there (also). ;-)
I've added a Wiki to the repo and made a brief description of the installation and configuration process.
https://github.com/tobof/openhab2-addons/wiki
The current binding (jar) is also in the repo now. You'll find the link in the wiki under "Installation".
Modifications in the current version:
- RollerShutter now supports STOP
- Performance of the binding improved. Big thanks to @andreacioni !!
- Stability improved. Also big thanks to @andreacioni
- Error handling on connection loss improved
- The baud rate of the serial gateway is now adjustable. (@andreacioni again!)
- some code cleanup: removed not needed debug output etc.
Please let me know if you found the time to test the binding and what the results are. :-)
-
I've updated the first posting in this thread. You'll find the current repo there (also). ;-)
I've added a Wiki to the repo and made a brief description of the installation and configuration process.
https://github.com/tobof/openhab2-addons/wiki
The current binding (jar) is also in the repo now. You'll find the link in the wiki under "Installation".
Modifications in the current version:
- RollerShutter now supports STOP
- Performance of the binding improved. Big thanks to @andreacioni !!
- Stability improved. Also big thanks to @andreacioni
- Error handling on connection loss improved
- The baud rate of the serial gateway is now adjustable. (@andreacioni again!)
- some code cleanup: removed not needed debug output etc.
Please let me know if you found the time to test the binding and what the results are. :-)
@TimO said:
I've updated the first posting in this thread. You'll find the current repo there (also). ;-)
I've added a Wiki to the repo and made a brief description of the installation and configuration process.
https://github.com/tobof/openhab2-addons/wiki
The current binding (jar) is also in the repo now. You'll find the link in the wiki under "Installation".
Modifications in the current version:
- RollerShutter now supports STOP
- Performance of the binding improved. Big thanks to @andreacioni !!
- Stability improved. Also big thanks to @andreacioni
- Error handling on connection loss improved
- The baud rate of the serial gateway is now adjustable. (@andreacioni again!)
- some code cleanup: removed not needed debug output etc.
Please let me know if you found the time to test the binding and what the results are. :-)
Thank you @TimO !
This weekend I started migrating from my OH1.8 + mqtt GW setup to OH 2 beta + your binding. At the moment all is working fine, I spent some time learning about OH2 / Eclipse smartHome and watching your code, because I want to implement the smartSleep feature (https://github.com/mysensors/Arduino/pull/271) in the mysensors binding.My idea is: when the handler don't receive an ACK from a message, it store the message for a while, waiting a heartbeat from a node, and, if the binding has some message stored for this node, then send it again. I don't know if this is correct, or if you thinks there is a better solution.
Regards
-
@Sebastián-Zaffarano said:
This weekend I started migrating from my OH1.8 + mqtt GW setup to OH 2 beta + your binding. At the moment all is working fine, I spent some time learning about OH2 / Eclipse smartHome and watching your code, because I want to implement the smartSleep feature (https://github.com/mysensors/Arduino/pull/271) in the mysensors binding.
My idea is: when the handler don't receive an ACK from a message, it store the message for a while, waiting a heartbeat from a node, and, if the binding has some message stored for this node, then send it again. I don't know if this is correct, or if you thinks there is a better solution.
That sounds like a good plan. The binding already uses a queue where messages that should be send are buffered and you are able to specify how long a message is hold in the queue (when it is time to send again).
I've already implemented a mechanism to request for an ACK message. This mechanism sends a message to the node, but holds this message in the queue and increments the number of retries (currently 4 retries, with different/longer delays). If the node responds with an ACK or the number of retries exceeds 4 the message is removed from queue. So you could indicate, with a configuration setting, that the node is an smartSleep node and thus only send the message once and if no ACK is received store the message for 10 minutes (for example) in the queue.
Here is the implementation: https://github.com/tobof/openhab2-addons/blob/MySensors/addons/binding/org.openhab.binding.mysensors/src/main/java/org/openhab/binding/mysensors/protocol/MySensorsWriter.java
BUT: The reader and the writer are working in different threads (asynchronus), so we have to sync the threads (the queue), if we receive an ACK and remove a message from the queue. I'm still struggling with that and that is the reason why the request for ACK should not be used at the moment and this will be a problem for smartSleep too.
According to the ACK feature: if the binding don't receive an ACK after 4 timeouts it will revert the status of the thing to the last value. So if you for example try to switch on your light and the message is not acknowledged, the binding will revert the switch state to off. I've removed the code for this, because of the issue above, but will add it again in the future.
-
Hello everyone
I'm testing MySensor Ethernet gateway with a relay code on it. My understanding that Gateway stores the current state of the relay (or GPIO port) in it's EPROM. Can the binding periodically check the state of the port or should I rely on OH persistence functionality? Please advise what is the right way to keep the states synced between the Gateway and OH.
Thanks
Andrew -
Hi Andrew!
Good question. Polling is currently not supported by the binding itself, but what you could do is: send a message from the node to the gateway, when the node restarts (the moment after you read the EEPROM and set the output of the pin).
Greetings
Tim -
Hi Andrew!
Good question. Polling is currently not supported by the binding itself, but what you could do is: send a message from the node to the gateway, when the node restarts (the moment after you read the EEPROM and set the output of the pin).
Greetings
Tim -
Hi Tim0.
I have read all your instructions in the GitHub Repo.
Is there any special reason why you suggest to add things in manual, text way, rather than with the PaperUI?I have done it with the PaperUI and manually restarting my nodes and everything works just fine.
Let me know what you think.
Regards -
Hi Tim0.
I have read all your instructions in the GitHub Repo.
Is there any special reason why you suggest to add things in manual, text way, rather than with the PaperUI?I have done it with the PaperUI and manually restarting my nodes and everything works just fine.
Let me know what you think.
RegardsI wondered that but I'm quite new to OpenHab so did some looking in to how various things work..
PaperUi uses something called MapDB which is basically a non-human readable configuration file. If you add "things" via PaperUi as far as I can tell you've still got to link the thing to an item for OpenHab to work with as far as I can tell..
I opted to do everything manually like in the wiki, seems much simpler
I get the impression PaperUi is still very new and not for production yet... its not compatible with sitemaps as they are waiting to implement a version of sitemaps in PaperUI or something.. I think it all boils down to the fact they want to keep V2 100% compatible with V1 configs and bindings etc so all the new stuff in V2 isn't quite ready yet...
Anyway might have totally got the wrong impression but that's what I see as a new OpenHab user going straight to v2.
On another note the work your doing TimO is awesome!
-
Hi Tim0.
I have read all your instructions in the GitHub Repo.
Is there any special reason why you suggest to add things in manual, text way, rather than with the PaperUI?I have done it with the PaperUI and manually restarting my nodes and everything works just fine.
Let me know what you think.
RegardsI totally agree with @Qu3Uk ! :-)
Both ways work and currently I like the configuration with the .items file more.In an early version of the PaperUI it was possible to change the status of items (switch lights on and off). Maybe something like this will return or habmin2 will fill the gap.
-
I need support for HVAC device, how much work is there to be done to get that included.
I have made a thermostat controller for my Wirsbo floor project can be found under myprojects wirsbo uponor thermostat replacement
-
I need support for HVAC device, how much work is there to be done to get that included.
I have made a thermostat controller for my Wirsbo floor project can be found under myprojects wirsbo uponor thermostat replacement
-
@Denke What is it exactly what you need? Which types?
How is the setpoint set (request/send)?Greetings
Tim@TimO
Hi Tim
I use gw.present(0, S_HVAC); to present the sensor to the controllerI use the following messages to send information
MyMessage msgTemp(0,V_TEMP); //temperature of thermostat
MyMessage msgFlowState(0,V_HVAC_FLOW_STATE); //tells if the thermostat is active HeatOn or off
MyMessage msgSetpointHeat(0,V_HVAC_SETPOINT_HEAT); //used for setting wanted temperature
MyMessage msgKnobTemp(0,V_VAR1); //gives the wanted manual temperature set on the thermostat knob (used for fallback when home automation dont work
MyMessage msgRunningMode(0,V_VAR2); //running mode internal or external internal = knob value used, external set by home automation
MyMessage msgHystLow(0,V_VAR3); //used if hysteresis needs to be changed (low value)
MyMessage msgHystHigh(0,V_VAR4); //used if hysteresis needs to be changed (high value)
MyMessage msgUpdateTime(0,V_VAR5); //used to set system sampling/update timeAll of the above values are sent out from the thermostat at update sampling time interval.
V_HVAC_SETPOINT_HEAT(msgSetpointHeat), V_VAR3(msgHystLow), V_VAR4(msgHystHigh), V_VAR5(msgUpdateTime) can be set from the controller to update the thermostat parameters
-
Hi TimO.
I am trying to do a gw.request from one of my nodes that requires the value of a numeric item from OpenHAB.
Have you tested this? I am unable to make it work.
I have created a rule:
rule "Heart Rate request" when Item Heart_Rate received command then if (receivedCommand == "REQUEST") { logInfo( "Heart Rate", "Heart rate request") sendCommand(Heart_Rate, Heart_Rate.state); } endPlease, let me know if I am doing it the wrong way.
Regards. -
I seem to be having some issues with the dimmer function and I'm not entirely sure if its OpenHab, the binding or MySensors... but I seem to be able to crash the gateway once OpenHab boots up... The node is basically running DimmerLED stretch
20:31:13.030 [DEBUG] [g.mysensors.protocol.MySensorsReader] - 7;1;1;0;0;33.8 ... 20:31:13.596 [INFO ] [smarthome.event.ItemCommandEvent ] - Item 'Light_APT_Lounge_TV' received command ON 20:31:13.598 [DEBUG] [g.mysensors.protocol.MySensorsWriter] - Sending to MySensors: 8;0;1;0;2;1 20:31:13.602 [INFO ] [marthome.event.ItemStateChangedEvent] - Light_APT_Lounge_TV changed from NULL to 100 20:31:14.599 [DEBUG] [g.mysensors.protocol.MySensorsReader] - 0;0;3;0;14;Gateway startup complete. 20:31:27.963 [WARN ] [g.mysensors.protocol.MySensorsReader] - Connection to Gateway lost! 20:31:27.964 [DEBUG] [g.mysensors.protocol.MySensorsReader] - Stopping Reader thread 20:31:27.965 [INFO ] [me.event.ThingStatusInfoChangedEvent] - 'mysensors:bridge-eth:gateway' changed from ONLINE to OFFLINEI notice the ItemState is null and that sort of makes sense why if OpenHab has been restarted but surely if it is null it shouldn't cause the gateway to go offline? Also it doesn't reconnect which is probably more of an issue.
Bridge mysensors:bridge-eth:gateway [ ipAddress="192.168.1.150", tcpPort=5003, sendDelay=200 ] { dimmer light08 [ nodeId="8", childId="0" ] }Items
Dimmer Light_APT_Lounge_TV "TV Lights" <light> (Lights, APT_Lounge) { channel="mysensors:dimmer:gateway:light08:dimmer" } -
I finally found some time to develop on the binding.
A new version is available with the following changes:
-
On startup the binding will request I_VERSION from gateway to ensure its proper startup. Thanks @andreacioni for the PR!!
-
HVAC (V_VAR1, V_VAR2 ...) are now available. Thanks @Denke for the PR!!
-
The request for ACK feature is now available for testing. It works for light/status for me. If a message is NOT acknowledged by a node the binding retries to send the message five times. If no ACK is received after that the binding will try to revert the item to its old state. This only works, if a state is known (not NULL, for example at startup).
Additionally I've tested the binding with multiple gateways (one EthernetGW, one SerialGW), works fine.
-
-
I finally found some time to develop on the binding.
A new version is available with the following changes:
-
On startup the binding will request I_VERSION from gateway to ensure its proper startup. Thanks @andreacioni for the PR!!
-
HVAC (V_VAR1, V_VAR2 ...) are now available. Thanks @Denke for the PR!!
-
The request for ACK feature is now available for testing. It works for light/status for me. If a message is NOT acknowledged by a node the binding retries to send the message five times. If no ACK is received after that the binding will try to revert the item to its old state. This only works, if a state is known (not NULL, for example at startup).
Additionally I've tested the binding with multiple gateways (one EthernetGW, one SerialGW), works fine.
Hi @TimO.
I have just installed the new release and I believe I've found a little bug. I am using Serial Gateway with version 1.5.3At boot up time, I am getting the followinf error:
03:07:52.644 [ERROR] [s.internal.MySensorsBridgeConnection] - Cannot start reading/writing thread, probably sync message (I_VERSION) not receivedI have read that this new release, request the gateway for its version so as to prove proper start up.
What I have found is that the binding might be asking for the Gateway version al little too soon.
03:07:50.895 [DEBUG] [g.mysensors.protocol.MySensorsWriter] - Sending to MySensors: 0;0;3;0;2; 03:07:50.912 [DEBUG] [g.mysensors.protocol.MySensorsReader] - 0;0;3;0;14;Gateway startup complete. 03:07:52.644 [ERROR] [s.internal.MySensorsBridgeConnection] - Cannot start reading/writing thread, probably sync message (I_VERSION) not received 03:07:52.647 [DEBUG] [col.serial.MySensorsSerialConnection] - Shutting down serial connection! 03:07:52.659 [DEBUG] [g.mysensors.protocol.MySensorsWriter] - Stopping Writer thread 03:07:52.661 [WARN ] [g.mysensors.protocol.MySensorsWriter] - Writer thread interrupted 03:07:52.666 [DEBUG] [g.mysensors.protocol.MySensorsReader] - Stopping Reader threadI have tested this manually and found that the gateway ONLY answers its version after its startup is finished and the message "0;0;3;0;14;Gateway startup complete." is sent.
When the binding starts, It makes (somehow) the gateway to reboot. So, the gateway runs its setup() method and when it's done, it send the message "0;0;3;0;14;Gateway startup complete"
Let me know if you can reproduce this error. Maybe it's just some problem with my setup, but with the previus version I was having no issues.
Regards!
-
-
Hi @TimO.
I have just installed the new release and I believe I've found a little bug. I am using Serial Gateway with version 1.5.3At boot up time, I am getting the followinf error:
03:07:52.644 [ERROR] [s.internal.MySensorsBridgeConnection] - Cannot start reading/writing thread, probably sync message (I_VERSION) not receivedI have read that this new release, request the gateway for its version so as to prove proper start up.
What I have found is that the binding might be asking for the Gateway version al little too soon.
03:07:50.895 [DEBUG] [g.mysensors.protocol.MySensorsWriter] - Sending to MySensors: 0;0;3;0;2; 03:07:50.912 [DEBUG] [g.mysensors.protocol.MySensorsReader] - 0;0;3;0;14;Gateway startup complete. 03:07:52.644 [ERROR] [s.internal.MySensorsBridgeConnection] - Cannot start reading/writing thread, probably sync message (I_VERSION) not received 03:07:52.647 [DEBUG] [col.serial.MySensorsSerialConnection] - Shutting down serial connection! 03:07:52.659 [DEBUG] [g.mysensors.protocol.MySensorsWriter] - Stopping Writer thread 03:07:52.661 [WARN ] [g.mysensors.protocol.MySensorsWriter] - Writer thread interrupted 03:07:52.666 [DEBUG] [g.mysensors.protocol.MySensorsReader] - Stopping Reader threadI have tested this manually and found that the gateway ONLY answers its version after its startup is finished and the message "0;0;3;0;14;Gateway startup complete." is sent.
When the binding starts, It makes (somehow) the gateway to reboot. So, the gateway runs its setup() method and when it's done, it send the message "0;0;3;0;14;Gateway startup complete"
Let me know if you can reproduce this error. Maybe it's just some problem with my setup, but with the previus version I was having no issues.
Regards!
@gonzalonal I've implemented the check on startup. On serial gateway with the last version I'm not having any issue, so I would like to know: what hardware are you using? I think that probably is only a timing issue because, for exaple, Arduino UNO reset itself on opening connection and the message for request I_VERSION is sent immediately after connection is opened. I'll suggest you to try adding something like this:
Thread.sleep(3000)After line 49 on MySensorsSerialConnection.java. Should become:
serialConnection = new NRSerialPort(serialPort, baudRate); if (serialConnection.connect()) { logger.debug("Successfully connected to serial port."); Thread.sleep(3000); mysConReader = new MySensorsSerialReader(serialConnection.getInputStream(), this); mysConWriter = new MySensorsSerialWriter(serialConnection.getOutputStream(), this, sendDelay); connected = startReaderWriterThread(mysConReader, mysConWriter); } else { logger.error("Can't connect to serial port. Wrong port?"); }I can't do this test because I do not have an appropriate hardware, can you try the suggested code modification?
Thanks!
UPDATE: I've upload a temp build here: https://drive.google.com/file/d/0B11IarucpGdUdFJ2ZjVtZENsb2c/view?usp=sharing if you can't do the modification you can use this. Let me know!