hahn-th / homematicip-rest-api Goto Github PK
View Code? Open in Web Editor NEWA python wrapper for the homematicIP REST API (Access Point Based)
Home Page: https://hahn-th.github.io/homematicip-rest-api/
License: GNU General Public License v3.0
A python wrapper for the homematicIP REST API (Access Point Based)
Home Page: https://hahn-th.github.io/homematicip-rest-api/
License: GNU General Public License v3.0
Hello,
I'm thinking of dropping the support for python 2.7 and just use 3.X in the future. I've started the project with 2.7, because of some online surveys most people are still using 2.7. 3.X on the other hand has some nice features on which the project could really benefit from and implementing everything twice (e.g. for asyncio in 3.X) or check the compatibility on both python versions is really frustrating.
What do you guys think?
Hi,
it feels like this is the absolute noob question; and indeed it is my first contact to python. Please excuse me, in case it is very dumb :-).
I tried to get the scripts running on a PI3 running recent openhabian.
sudo python3 generate_auth_token.py Please enter the accesspoint id (SGTIN): 3014-F711-A000-03D7-xxxx-xxxx Please enter the PIN (leave Blank if there is none): Please enter the client/devicename (leave blank to use default): Traceback (most recent call last): File "generate_auth_token.py", line 20, in <module> home.init(access_point) AttributeError: 'Home' object has no attribute 'init'
Export and chmods where tipps i googled...
I feel like i have overseen something fundamental here - can you please give me a hint?
Best
Michael
In py3:
An incoming websocket message is being converted to json in __ws_on_message
in home.py
.
This throws an error as incoming is bytes. not str.
error from callback <bound method Home.__ws_on_message of id(6b3ac3aa-be94-42d4-8af8-aa800070e0cf) id(6b3ac3aa-be94-42d4-8af8-aa800070e0cf)>: the JSON object must be str, not 'bytes'
File "C:\virtualenvs\homematicip\lib\site-packages\websocket\_app.py", line 269, in _callback
callback(self, *args)
File "C:\virtualenvs\homematicip\lib\site-packages\homematicip\home.py", line 348, in __ws_on_message
js = json.loads(message)
File "C:\Users\steun\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
error from callback <bound method Home.__ws_on_message of id(6b3ac3aa-be94-42d4-8af8-aa800070e0cf) id(6b3ac3aa-be94-42d4-8af8-aa800070e0cf)>: the JSON object must be str, not 'bytes'
File "C:\virtualenvs\homematicip\lib\site-packages\websocket\_app.py", line 269, in _callback
callback(self, *args)
File "C:\virtualenvs\homematicip\lib\site-packages\homematicip\home.py", line 348, in __ws_on_message
js = json.loads(message)
File "C:\Users\steun\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
I've added this room control device.
Afterwards I get the error
There is no class for ROOM_CONTROL_DEVICE yet
Can you implement this device?
Thank you in advance!
I am making progress on my fiddler setup, but now I get stuck when trying to create a websocket connection..
I get a 504
error when trying to connect to https://hmip1-1.homematic.com:8888
. The fiddler log reports
14:04:59:1864 Fiddler.Network.ProtocolViolation - [#13] Incorrectly formed Request-Line. abs_path was empty (e.g. missing /). RFC2616 Section 5.1.2
meaning there is no url provided. Does anyone have an idea how to bypass this ?
Hi,
I started to add support for HomematicIP to HomeAssistant based on your library.
home-assistant/core#12761
I plan to add support for a few more devices which I own in the next days.
Are you going to release a new version of all the changes and new devices you have added soon?
Ciao Mattias
After generating a new auth token with VERSION 8 and calling list_devices.py I get the following error:
{
"errorCode" : "CLIENT_VERSION_NOT_SUPPORTED"
}
Has anyone run this script successfully with the new Version?
I am wondering whether you have considered implementing an asyncio version, especially implementing the aiohttp request and websocket component ?
I did a fork and started doing it myself, just to realise this means practically rewriting the whole package.
But I'd still like to put effort in achieving this. Do you have any ideas or plans for a more integrated approach?
Again, I'd love to help.
Sander.
When using the newest API Version, I get an error on establishing the connection with error 403.
My host system is MacOS Version 10.13.
I recently installed python 3, Version 3.6.3
The required packages are installed in following Versions:
Name: requests, Version: 2.18.4
Name: websocket-client, Version: 0.44.0
Name: future, Version: 0.16.0
My config-file is the same I successfully used with the Python2 Version from 2 days ago. My Pi still runs the old Version (without Python3 changes and connection class) and works like a charm.
With activated debug I see the following Console output:
2017-11-09 09:52:53,473 - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): hmip1-1.homematic.com
2017-11-09 09:52:53,606 - urllib3.connectionpool - DEBUG - https://hmip1-1.homematic.com:6969 "POST /hmip/home/getCurrentState HTTP/1.1" 403 43
2017-11-09 09:52:53,610 - homematicip.connection - DEBUG - _restcall result: Errorcode=403 content({'errorCode': 'INVALID_AUTHORIZATION'})
2017-11-09 09:52:53,610 - homematicip.home - ERROR - Could not get the current configuration. Error: INVALID_AUTHORIZATION
Do you have an idea what is going wrong?
My first throw at this api is trying to get the homematicip-cli.py
running.
I generate id and token. Put it in the config.py like so:
ACCESS_POINT = 'f02ae3a8-e9ab' #with the dashes)
AUTH_TOKEN = '6BB8F04728D79' #long one without dashes
When I run the cli:
homematicip-cli.py --list-devices
it returns with an error:
2017-06-27 13:48:51,973 - homematicip.home - ERROR - Could not get the current configuration. Error: INVALID_AUTHORIZATION
It seems to be happening with the method on line 121 home.get_current_state():
Can anyone confirm whether this occurring to him too ? Or am I doing something wrong.
BTW. My homematicip app reports 'homematicip-python' has been added as a device. So something has gone correct too !
Path: home/security/setZonesDeviceAssignment
Post:
{
"zonesDeviceAssignment": {
"INTERNAL": [ <DEVICEID>, <DEVICEID>, ... ],
"EXTERNAL": [ <DEVICEID>, <DEVICEID>, ... ]
}
}
Result:
None on success
The home class doesn't have any "functionalHomes" implemented yet.
I cannot connect anymore. Possibly the api has changed ?
Sander.
With the amount of devices growing should we be putting each device in a separate package and put these in a separate devices module ?
Hi,
if I use python3 I got this error:
python3 dump_devicevalues.py
Traceback (most recent call last):
File "dump_devicevalues.py", line 59, in <module>
write_wallmountedthermostatpro(d)
File "dump_devicevalues.py", line 48, in write_wallmountedthermostatpro
"{};{};{}%;{}°C\n".format(device.id, unicode(device.lastStatusUpdate), d.humidity, d.actualTemperature))
NameError: name 'unicode' is not defined
https://stackoverflow.com/questions/6812031/how-to-make-unicode-string-with-python3
Best regards,
David
Hi short questions is it possible to control the heating element temperature ?
My Homeatic IP Device
Homematic IP Heizkörperthermostat HMIP-eTRV/2 140280
tried
python3 homematicip_cli.py --device ID --set-display setpoint 20
but didnt worked, is it even possible ?
Hi,
in line 20 I got an error because in my version I must change from "d.open" to "d.windowState".
Best regards,
David
Hi i cant run the python script get the following error, could somebody help:
before i did: $ sudo pip install homematicip
python ./generate_auth_token.py
Traceback (most recent call last):
File "./generate_auth_token.py", line 2, in
import homematicip.auth
File "/home/pi/homematicip-rest-api/homematicip/auth.py", line 14
def init(self,home:Home):
^
SyntaxError: invalid syntax
thanks in advanced
The API should also use the websocket connection to get updates on devices/groups/... as soon as they happen
Hello,
running debian 9, python 3.5.3 , python-pip 9.0.1-2, but when running:
pip install homematicip
I do get get:
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in
from pip import main
ImportError: No module named 'pip'
Any hint is welcome.
regards
kuzco1
homematicip_cli and generate_auth_token.py should be added to the pip installation
Read your request and I thought to make an issue out of it. Good place to discuss this I guess.
To move the cli
tool inside the python package you should be able to refer to a config file located somewhere else on your computer.
It would make sense to:
cli
toolThe new APIVersion 10 uses a new "CLIENTAUTH" header. At the moment it looks like it would be the same for each device.
Hi, somehow device updates have been broken between the last release and the current dev.
Mainly in home.py the following fix has broken my updates in home-assistant:
def _get_devices(self, json_state):
+ self.devices = []. <<<<<
for id_, raw in json_state["devices"].items():
I use self._device.on_update(self._device_changed) but I don't have a dedicated home.get_current_state() in the called _device_changed function.
Bug or feature?
Path: group/switching/linked/createExtendedLinkedSwitchingGroup
Post: { "label" : <LABEL> }
Result:
{
"assignableSensorChannels" : [ ],
"assignableActuatorChannels" : [ {
"deviceId" : "<DEVICEID>",
"channelIndex" : 1
} ],
"unassignableSensorChannels" : [ ],
"unassignableActuatorChannels" : [ ],
"sensorGroupLimit" : 0,
"actuatorGroupLimit" : 10,
"groupId" : "<THE NEW GROUP ID>"
}
Path: group/switching/linked/setGroupActuatorChannels
Post:
{ "groupId" : <groupId>
, "channels" : [ {
"deviceId" : "<DEVICEID>",
"channelIndex" : 1
} ]
}
Result:
{
"assignableSensorChannels" : [ ],
"assignableActuatorChannels" : [ {
"deviceId" : "<DEVICEID>",
"channelIndex" : 1
} ],
"unassignableSensorChannels" : [ ],
"unassignableActuatorChannels" : [ ],
"sensorGroupLimit" : 0,
"actuatorGroupLimit" : 10,
}
Path: group/switching/linked/setGroupSensorChannels
Post:
{ "groupId" : <groupId>
, "channels" : [ {
"deviceId" : "<DEVICEID>",
"channelIndex" : 1
} ]
}
Result:
{
"assignableSensorChannels" : [ ],
"assignableActuatorChannels" : [ {
"deviceId" : "<DEVICEID>",
"channelIndex" : 1
} ],
"unassignableSensorChannels" : [ ],
"unassignableActuatorChannels" : [ ],
"sensorGroupLimit" : 0,
"actuatorGroupLimit" : 10,
}
Are we to adhere to PEP8 and keep the line length at a max of 79 characters ? My autoformatting keeps reformatting and suggesting commits ;-)
FYI:
https://www.python.org/dev/peps/pep-0008/#maximum-line-length
python homematicip_cli.py
Traceback (most recent call last):
File "homematicip_cli.py", line 18, in <module>
logger = create_logger();
File "homematicip_cli.py", line 13, in create_logger
handler = logging.handlers.TimedRotatingFileHandler(config.LOGGING_FILENAME, when='midnight', backupCount=5) if config.LOGGING_FILENAME else logging.StreamHandler()
AttributeError: 'module' object has no attribute 'handlers'
Hi,
generate_auth_token.py
did not work for me. It just repeated: "Please press the blue button on the access point" even though I pressed the button. So I added some print statements to isRequestAcknowledged
.
This is what is send
{'deviceId': '###MY_UUID###'}
and this is what I receive:
{
"errorCode" : "INVALID_REQUEST"
}
Is there anything I can do from here?
Hi,
I forgot that I configured a pin in our AP and I got no error message. I got only the loop with the message "press the blue button". It would be very helpful if the error messages are on the screen.
Regards,
David
Hi!
Can someone help me in this point ?
I installed clean hassabian with home assistant 0.69.1 and upgraded and updated today homematicip as well but all same.
pi@hassbian:~/.local/bin $ python3 hmip_generate_auth_token.py
Please enter the accesspoint id (SGTIN): 3014-f711-a000-03d5-699f-xxxx
Traceback (most recent call last):
File "hmip_generate_auth_token.py", line 70, in <module>
main()
File "hmip_generate_auth_token.py", line 20, in main
home=Home()
File "/home/pi/.local/lib/python3.5/site-packages/homematicip/home.py", line 127, in __init__
connection = Connection()
File "/home/pi/.local/lib/python3.5/site-packages/homematicip/base/base_connection.py", line 44, in __init__
"language": locale.getdefaultlocale()[0],
File "/usr/lib/python3.5/locale.py", line 558, in getdefaultlocale
return _parse_localename(localename)
File "/usr/lib/python3.5/locale.py", line 486, in _parse_localename
raise ValueError('unknown locale: %s' % localename)
ValueError: unknown locale: UTF-8
actually whatever I put in SGTIN id - (in xxxx-xxxx-xxxx-xxxx-xxxx-xxxx format) the answer is alway the same.
Hi,
can you please have a look on the BrandSwitchMeasuring, seems it is implemented but I get:
There is no class for BRAND_SWITCH_MEASURING yet
Thanks Mattias
Working with the homematicip-cli
tool I now get an INVALID_REQUEST error right at the start of the run.
Error occurs at get_current_state
in home.py
.
I feel reluctant filing this one after https://github.com/coreGreenberet/homematicip-rest-api/issues/25 ,
but after double double checking I am sure they are unrelated...
Async becomes a protected keyword when 3.7 is released.
Hi @sander76 ,
The word async
in the import path e.g. from homematicip.async.auth import AsyncAuth
seems to work fine if import is global at the begin of a file. But its not working if the import is in a function!
Log messages are formatted using the .format
method which is not advised.
See here for info.
http://reinout.vanrees.org/weblog/2015/06/05/logging-formatting.html
I feel we should change to that.
There should be an optional parameter for --dump-configuration to anonymize the data.
This will provide a secure way to publish the config for contributors for implementing new devices
Hi @coreGreenberet and @sander76, I started to implement the config flow of HomeAssistent. This helps users to generate the auth token directly with the web gui.
I would need your help with the async implementation of the functions to generate the auth token.
I saw this passing by in a pull request. I also see it as part of the json payload.
What does it mean ?
I have a HMIP-WRC2 device. I am trying to catch individual key presses of this device, but I am only getting a "DEVICE CHANGED" event which does not say which of two buttons are actually pressed.
Anyone any idea how to catch individual key presses of this device (did the same with the 8 button remote control without succes).
json.loads doesn't support bytes before python 3.6.
2018-05-07 17:25:51,098 - websocket - ERROR - error from callback <bound method Home._ws_on_message of <homematicip.home.Home object at 0xb72a39ec>>: the JSON object must be str, not 'bytes'
File "/usr/local/lib/python3.5/dist-packages/websocket/_app.py", line 315, in _callback
callback(self, *args)
File "/usr/local/lib/python3.5/dist-packages/homematicip/home.py", line 466, in _ws_on_message
js = json.loads(message)
File "/usr/lib/python3.5/json/init.py", line 312, in loads
s.class.name))
Hi,
I've tried to get a AuthToken for my homematicip but it keeps looping the https://lookup.homematic.com:48335/getHost call.
Using the clientCharacteristics
json and doing a curl post on the terminal results in Response code 400 INVALID_REQUEST:
curl -X POST -d "json={'clientCharacteristics': {'applicationVersion': '1.0', 'language': 'de_DE', 'osType': 'Darwin', 'deviceType': 'Computer', 'applicationIdentifier': 'homematicip-python', 'osVersion': '15.6.0', 'apiVersion': '10', 'deviceManufacturer': 'none'}, 'id': '<my-id>'}" https://lookup.homematic.com:48335/getHost
Do you have any idea how I can debug this?
Cheers,
Jan
When I list my devices, I get the message:
homematicip.home - WARNING - There is no class for PLUGGABLE_DIMMER yet
Could you add support for a dimmer so that the lights can be dimmed?
The cli needs a switch to de/activate the routing functionality on all devices which are supporting it
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.