-
Notifications
You must be signed in to change notification settings - Fork 8
Home
- Buy and install smappee – the device to measure your gas, water and electrical power consumption
- Get the Client Id and Client Secret by e-mail from [email protected]
- Install Python3
- Install the Smappy package with pip3
- Run a test Python script
- Use Pandas to do data analysis
Once your smappee device is installed and online connected to the Smappee server (currently running on AWS) you can access the data from the server (and not from the gateway) via this REST API. If you want to access the Smappee gateway in your local network directly please check out this
In order to access the REST API you need 4 things
- a) your Smappee user name from your Smappee app (iOS or Android)
- b) your Smappee user password from your Smappee app
- c) Client Id for identifying the origin of your API calls at the Smappee server
- d) Client secret for initially getting an access token from the Smappee server via OAuth2
a) and b) are under your own control from the set-up of Smappee. Whereas c) and d) you receive by (unencrypted!) e-mail from [email protected]
Get your distribution from python.org or use the Anaconda installer. Python3 comes as the standard Python flavour on Ubuntu 16 and onwards.
sudo pip3 install smappy
or
sudo pip install smappy
depending on your pip installation
Start Python3 from your shell and enter the following commands line by line. You have to replace client id, client secrect, user name, user password with yours:
$ python3
>>> import smappy
>>> s = smappy.Smappee("client id", "client secret")
>>> s.authenticate("user name", "user password")
>>> service_location_id = s.get_service_locations()['serviceLocations'][0]['serviceLocationId']
>>> print ("id: ", service_location_id)
id: 314
In this case the authorization worked if you get a valid service_location_ID. I have picked the first smappee device in the service location list. get_service_locations
returns a dict
which contains a list of all possible service locations associated with your Smappee account.
>>> s.get_service_locations()
{'appName': 'MyFirstApp', 'serviceLocations': [{'name': 'Home', 'serviceLocationId': 314}]}
If you have multiple smappee devices you have to use the right index instead of [0].
And now we can get data. Here is how you get data from the last week:
>>> import datetime as dt
>>> end = dt.datetime.utcnow()
>>> start = end - dt.timedelta(weeks=1)
>>> s.get_consumption(service_location_id=service_location_id, start=start, end=end, aggregation=3)
{'consumptions': [{'solar': 0.0, 'consumption': 3970.4, 'alwaysOn': 15131.0, 'timestamp': 1475445600000},
{'solar': 0.0, 'consumption': 12245.3, 'alwaysOn': 14976.0, 'timestamp': 1475532000000},
{'solar': 0.0, 'consumption': 12717.7, 'alwaysOn': 15288.0, 'timestamp': 1475618400000},
{'solar': 0.0, 'consumption': 6538.7, 'alwaysOn': 18818.0, 'timestamp': 1475704800000},
{'solar': 0.0, 'consumption': 10552.6, 'alwaysOn': 20552.0, 'timestamp': 1475791200000},
{'solar': 0.0, 'consumption': 7814.7, 'alwaysOn': 21457.0, 'timestamp': 1475877600000},
{'solar': 0.0, 'consumption': 7101.0, 'alwaysOn': 17550.0, 'timestamp': 1475964000000}], 'serviceLocationId': 314}
Now you can start your real project…
You can get your consumption as a Pandas Dataframe, so you can immediately start analysing your data!
>>> df = s.get_consumption_dataframe(service_location_id=service_location_id, start=start, end=end, aggregation=3)
>>> df
alwaysOn consumption solar
timestamp
2016-10-04 00:00:00+02:00 13153.0 7895.9 0.0
2016-10-05 00:00:00+02:00 13248.0 10286.3 0.0
2016-10-06 00:00:00+02:00 13248.0 6094.5 0.0
2016-10-07 00:00:00+02:00 13248.0 10009.8 0.0
2016-10-08 00:00:00+02:00 13478.0 9107.1 0.0
2016-10-09 00:00:00+02:00 13824.0 6477.5 0.0
2016-10-10 00:00:00+02:00 10965.0 3268.5 0.0
>>> df.consumption.mean()
7591.3714285714286
>>> df.consumption.sum()
53139.599999999999
>>>