Comments (8)
for a general installation
setup.py install --dev
to install as a service
setup.py install --dev --service
I was pretty crafty with the service portion of it. If you install it as a service it does not need to be on the same machine as the automation program accessing the ZWave network.
For example, if you have the computer that hosts the automation software on a PC at one end of a large house with the original design this will cause congestion problems on the network because only a small number of nodes would be in contact with the controller and everything would have to be forwarded through those nodes. With the new setup you have the ability to plug a ZStick into say a Raspberry Pi and install pyopenzwave as a service on that Pi and then install a "client" onto the PC. The Pi being as small as it is makes it easy to centrally locate in a home. You can use a wired network connection or a WiFi connection to allow the PC to communicate with the Pi. The data sent between the 2 is encrypted.
use --help against the service script to list the options.
to build the documentation
setup.py build_docs
There are actual command classes now. The command classes are only going to have functions available that are specific to that command class. All you have to do is create a subclass of a command class to be able to inject any GUI/operation code. As an example for a dimmer you want to be able to show a slider code for the dimming portion which you would do by sub classing the SwitchMultilevel command class. Because dimmer switches are also a simple on off switch you subclass the SwitchBinary command class. Each one of those sub classed command classes would have a method added that would build the GUI control that represents that command class. In the case of SwitchMultilevel you would make a slider control and for SwitchBinary you would create a simple on/off switch. So when you want to display the GUI controls for a device you access the device and then iterate over the list of command classes the device has and call that method you added to build the controls.
it has been a while since I have run it and I do not remember how much of it I have finished up. I believe that most of it is good to go and that the documentation may be lacking.
There is an important property when setting the options. ZWaveOption.single_notification_handler. In the past python openzwave was incredibly slow, not only in starting up but also in running. What this option does is it changes from using single threaded system to handle the notifications to having a thread for each node on the network. Fear not there is not going to be 200 threads always running if a network has 200 nodes. If a node thread is idle for a few seconds the thread will shut down so it doesn't hold up resources. When a notification comes in it will start up. I believe that timeout is 10 seconds, I would have to double check tho.
The first time a network is loaded takes the longest for it to startup. after that is takes only a few seconds for enough information to populate so a representation of available devices can be displayed. Being able to control a specific device may not be ready right away and the length of time it takes to be able to control it will vary based on when it get checked and also how many devices are on the network and how much congestion there is on the network. so a 200 node network and the device being queried last is going to take a few minutes until it is able to be controlled.
from plugins.
@kdschlosser thanks for sharing your work. Wouldn't it make sense to put it on pypi as a package?
Doing so would possibly provide a way to just get it with pip install
from plugins.
WARNING
REALLY LONG READ
It would cause a conflict with the one that is currently on pypi. There is a whole lot that would have to be changed just to change the name of the package. Can't do a simple replacement across the files and the code would have to be gone over line by line. The paths to config files would have to change an the c extension names would have to change as well. That's only a couple of things.
Then I would also want to get permission from the library author if it is OK that I release the package under a different name and also to change the licensing from GPL to MIT or the like due to the GPL needing to be the primary license on a project that may want to use the library. So if a library that wants to use python-openzwave is licensed using the MIT or some other license currently in order to use python-openzwave that library would have to change their license to GPL in order to use it. where is if python-openzwave is MIT and the library is GPL then it can be used without the need to change any licensing.
I have to look and see what the license is for openzwave and that could be the thing that is forcing python-openzwave to be GPL.
I had a falling out with the developer of openzwave because he had wanted me to make changes that specifically tailored python-openzwave to the needs of HomeAssistant. HomeAssistant should have made changes to make it compatible with python-openzwave but the author of HomeAssistant didn't want to make change to his software in order to make it work properly. HomeAssistant overrides quite a bit of the standard library and that was done with no regard to making those changes to keep the original functionality of the overridden component. This caused issues with python-openzwave and they wanted additional code to be added to Python-openzwave so it would specifically would work with HomeAssistant. Adding that code would cause issues for other projects wanting to use python-openzwave. I refused to do it and removed all traces of the version of python-openzwave I created so my code would not be used in a manner that I deemed not correct. That was 2 years ago and since then HomeAssistant had stated originally that they were going to write a new connector to openzwav and apparently jumped ship on that idea and is now using a javascript driver instead. Personally I feel that to be a bad idea because of how much of a resource hog javascript is. to each their own.
So I pulled the code that I had written and I walked away. I am not being paid to make the changes I made and I made the changes to suit my own needs and wanted to share it with other people that saw value in the changes I had made. But to have someone sit on the sidelines and tell me that I am doing things wrong and offering no help to do them the way they felt was right or even offer information as to why they felt it was wrong because an annoyance. Once I started getting aggravated over it then I am not going to offer my assistance anymore. That is pretty much how it went. Oh the other thing that rubbed me the wrong way is I am the person that got python-openzwave to work properly on Windows based PC's It would not compile. So anyone wanting to use python-openzwave on a windows computer couldn't do it. I spent 4 months writing a damned near bulletproof script to detect Visual C and Windows SDKs that are installed to set up an identical build environment that Visual Studio creates when compiling in order to compile openzwave and the extension modules for python-openzwave properly on Windows. I did not use the vcvars* scripts that are included with Visual C, Visual Studio or Visual Studio Build Tools because vcvars* doesn't always set up a correct build environment and there are bugs int it.
I never got 1 thank you from neither the author of Home Assistant or the author of openzwave for making it possible to run their software and have zwave support possible on some 1,500,000,000 (1.5 billion) devices or 73% of the computers in the world.
So that is the way it went and it sucks because folks like yourself and this project are ultimately the ones who got the crap end of the stick in the deal. Seeing that it is 2 years later and the chances of my code getting used are now pretty slim I am OK with posting it up again for people to use if they like. There really isn't that much left that is original and when I have the time to rewrite the last bit of code that is original I will be able to release it under a different name and with a different license without any possible backlash. I will make a repository for it and provide support for those that want to use it when i make those final changes.
from plugins.
I would recommend to drop the plugin, because of the python version from open-zwave and run zwave-js btw. zwave-js-ui like I do and connect it with MQTT together.
Maybe, if needed, we can hook up to the Websocket Implementation for Home Assistant, which is included in the project.
from plugins.
This is how I connect my Fibaro ZWave Plug to zwave-js using MQTT:
zwSteckdose1:
name: Esszimmer
type: bool
on_change: .mqtt_out = value if not sh..self.changed_by() == "On_Change:{}".format(sh..mqtt_in.property.path) else None
mqtt_in:
type: dict
visu_acl: ro
mqtt_topic_in: zwave/2/37/0/currentValue
on_change: .. = value['value']
mqtt_out:
type: bool
visu_acl: ro
mqtt_topic_out: zwave/2/37/0/targetValue/set
watt:
type: num
visu_acl: ro
watt_dict:
type: dict
visu_acl: ro
mqtt_topic_in: zwave/2/49/0/Power
on_change: ..watt = value['value']
wh:
type: num
visu_acl: ro
eval: sh...kwh() * 1000
eval_trigger: ..kwh
kwh:
type: num
visu_acl: ro
kwh_dict:
type: dict
visu_acl: ro
mqtt_topic_in: zwave/2/50/0/value/65537
on_change: ..kwh = value['value']
It has Node ID 2, thats why it has topic zwave/2/....
But you need to take care on your settings. I recommend the following settings in zwave-js .
For better understanding / finding the right topic I can recommend MQTT Explorer
from plugins.
I am working on releasing a new binder to openzwave.. it is almost finished. It supports multi instance nodes and also association groups. It is easy to integrate into a GUI because of how command class identification is handled.
from plugins.
To be honest I like the idea of having a direct connection instead of a detour via mqtt.
@kdschlosser When you are ready with your binder to openzwave I would try to implement it. Unless it is proven that the current plugin is useless I would not drop it in favour of a mqtt solution.
from plugins.
well here is the beauty of some of the things that I have done.
One of the most problematic things about ZWave and any of the controllers that are made is that the controller it's self is horribly under powered and they are usually slow as molasses. so when a person decides to go the route of using a ZWave USB stick and plugging it onto something that has a bit more giddy up the location of said device is usually not able to be placed centrally in a home.
So what I did is I made it so the library can be run as a service or a daemon and placed onto something like a raspberry pi and that raspberry would have the ZWave USB stick plugged into it and then elsewhere in the home the library gets would then get installed into the "controller" or the machine that you want to use to control the ZWave devices. you can then connect the 2 together and the API is identical as if it the ZWave stick was plugged into the controller. The communications between the 2 is encrypted and can optionally be encrypted with user made certificates,
The other nice thing about a design like this is the controller can be rebooted without having to reboot the zwave stack. restarting the zwave stack takes some time to do and unless it needs to be reset there is no reason to do it even if the controller needs to be restarted.
This same kind of a setup can be done all on a single machine as well to allow the controller to operate separately from the zwave stack.
if you tell me what OS you are using I can get you a copy of the compiled library.
There is a whole slew of features that make it way better than the original library. the library is incredibly fast compared to python-openzwave. and it is a whole lot easier to integrate into a GUI.
from plugins.
Related Issues (20)
- UZSU plugin: implement holidays and alarm features
- rtr2: can't pass rtr2_settings or rtr2_controller_settings HOT 6
- viessmann: cant parse datetime reply from heater HOT 6
- smartvisu plugin: error reading deprecated.yaml HOT 2
- svNG Plugin join: Missing "say" and "language" commands HOT 3
- svNG plugin harmony: PowerOff handling not correct HOT 2
- svNG plugin harmony: Harmony prefix not registered in plugin.yaml HOT 2
- telegram: Plugin should be improved to use async HOT 2
- database: Increase duration of previous db entry when deleting HOT 2
- database: Plugin does not work with mysql when using a password that starts with numbers HOT 3
- uzsu: Own interpolation code instead of scipy
- database: Verwaiste Datenreihen neu zuordnen
- rtr: Plugin might have issue with newest core changes? Deprecated anyhow? HOT 2
- db_addon: Duplicate values for verbrauch_heute_minus3 and verbrauch_heute_minus2 HOT 10
- influxdb, influxdb2: Add database data retrospectively HOT 4
- sml2 Plugin hat keine auto reconnect Funktion
- ebus: fix version and connect problem HOT 1
- db_addon: sometimes values aren't recalculated
- database: Wrong return value for item.db() function for sparsely filled databases HOT 4
- AttributeError: 'UZSU' object has no attribute '_schedulers' / AttributeError: 'KNX' object has no attribute '_schedulers' HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from plugins.