Commit graph

835 commits

Author SHA1 Message Date
Fabio Manganiello
1404d59865 Fixed response encoding 2018-10-04 10:22:23 +02:00
Fabio Manganiello
fbce006772 Fixed send_note pushbullet method 2018-10-01 15:06:26 +02:00
Fabio Manganiello
d419419487 Fix for if statements 2018-09-27 02:20:25 +02:00
Fabio Manganiello
570ef6f109 Replaced EventAction with Procedure to allow more flexibility in event hooks and cronjobs 2018-09-27 01:52:35 +02:00
Fabio Manganiello
38fdb8be08 Implemented support for else statements in if(s) 2018-09-27 01:09:00 +02:00
Fabio Manganiello
7ec6221a7f Implemented nested if(s), solves #53 2018-09-26 22:31:27 +02:00
Fabio Manganiello
b88f7fcecc Added play_if_paused_or_stopped method to mpd plugin 2018-09-25 19:40:00 +02:00
Fabio Manganiello
13c1895295 Support for runtime arguments on procedures 2018-09-25 19:20:34 +02:00
Fabio Manganiello
38f61298f8 Support for bulk mpd add 2018-09-25 09:42:46 +02:00
Fabio Manganiello
f79de2e708 Reverted bus post logic for HTTP backend 2018-09-25 00:31:51 +02:00
Fabio Manganiello
88d2fbd366 Response can't be null 2018-09-25 00:26:06 +02:00
Fabio Manganiello
d78e66df7c Don't return status() over video stop, as the process should already be dead and playback status call will fail 2018-09-25 00:19:53 +02:00
Fabio Manganiello
65ec2458d8 MQTT backend should call on_message instead of posting directly to the bus 2018-09-24 23:21:02 +02:00
Fabio Manganiello
d215410a6a More consistent flow for messages received by a backend 2018-09-24 23:13:44 +02:00
Fabio Manganiello
59d84c4fcb - Calling on_message on Redis backend to trigger the right logic
instead of `self.bus.post` directly

- For consistency `mset` now returns back the map of the set variables

- Redis backend enabled on tests
2018-09-24 22:07:13 +02:00
Fabio Manganiello
a4f075a4c1 Added support for ApplicationStartedEvent and ApplicationStoppedEvent 2018-09-24 09:18:46 +00:00
Fabio Manganiello
badb739a8c Increased response queue read timeout to 60 seconds 2018-09-20 13:13:36 +00:00
Fabio Manganiello
44962dd919 Removed timeout from get_plugin lock; Added Redis server to tests configuration 2018-09-20 10:59:18 +00:00
Fabio Manganiello
6449504e26 Switched the bus to a Redis bus 2018-09-20 10:49:57 +00:00
Fabio Manganiello
661563d1f1 Added Redis bus 2018-09-20 09:41:27 +02:00
Fabio Manganiello
6bbae19d39 Lock timeout and reset in case a plugin takes too long to initialize or the lock is incorrectly marked as locked in multiprocess context 2018-09-18 20:25:31 +02:00
Fabio Manganiello
db5d3e6e3f Prevent the plugin from being initialized again within the lock scope if another thread had it initialized in the meantime 2018-09-18 19:19:41 +02:00
Fabio Manganiello
98d24b061a Added joystick backend 2018-09-18 18:58:23 +02:00
Fabio Manganiello
1d50e91b27 Removed unneeded lock acquire 2018-09-16 23:45:25 +02:00
Fabio Manganiello
2ee54b5220 Replaced fadeIn with show to make transitions less CPU heavy on RPi 2018-09-15 18:25:58 +02:00
Fabio Manganiello
5762c51019 Added support for Redis-stored variables in variables plugin 2018-09-06 09:31:31 +02:00
Fabio Manganiello
cccb48c533 Implemented mget and mset actions for Redis plugin 2018-09-06 03:38:10 +02:00
Fabio Manganiello
63890f7670 Return of get_measurement should always be a dict 2018-09-06 03:14:11 +02:00
Fabio Manganiello
5b5e861f94 Implemented distance sensors backend 2018-09-06 03:02:16 +02:00
Fabio Manganiello
5d1fd3a02f Precision parameter added to accelerometer plugin 2018-09-06 02:47:47 +02:00
Fabio Manganiello
98a8874084 Added accelerometer sensor backend 2018-09-06 02:31:01 +02:00
Fabio Manganiello
692d33a071 Added empty __init__.py to lib module 2018-09-06 02:23:54 +02:00
Fabio Manganiello
96157a31bf Return the accelerometer position in degrees between -90 and 90 2018-09-06 02:18:08 +02:00
Fabio Manganiello
b3f20ca0de Added accelerometer sensors plugin 2018-09-06 02:11:41 +02:00
Fabio Manganiello
53ba5f6628 Wrap camera stop and connection close in two distinct try-catch blocks 2018-09-05 15:29:14 +00:00
Fabio Manganiello
5cfbd75250 Prevent RuntimeError on lock release if lock acquisition failed 2018-09-05 02:26:55 +02:00
Fabio Manganiello
3b8c580611 Revert "serial.write should have a blocking wait if the serial port is busy"
This reverts commit 0537d1fcac.
2018-09-05 02:04:10 +02:00
Fabio Manganiello
0537d1fcac serial.write should have a blocking wait if the serial port is busy 2018-09-05 01:59:55 +02:00
Fabio Manganiello
938526d521 Added write action to the serial plugin 2018-09-04 22:54:14 +02:00
Fabio Manganiello
6e867e9fb2 Support for multiple thresholds for the same sensor 2018-08-25 12:29:20 +02:00
Fabio Manganiello
2df9c5a890 Fixed gpio css 2018-08-22 21:01:37 +02:00
Fabio Manganiello
a9b4c1b8bf Fixed gpio ui 2018-08-22 20:22:34 +02:00
Fabio Manganiello
2c369cb86d Added web interface for gpio plugin 2018-08-22 19:50:30 +02:00
Fabio Manganiello
335d3e3cd7 Typo 2018-08-22 19:20:24 +02:00
Fabio Manganiello
ba1eca29fc Reversed pin configuration/mapping as name->number instead of number->name 2018-08-22 19:12:26 +02:00
Fabio Manganiello
133dd4570e Added PIN mappings to gpio plugin, support for read/write by PIN name and read_all method 2018-08-22 19:09:17 +02:00
Fabio Manganiello
a6339de159 Assigning plugins[plugin_name] inside of the synchronized block 2018-08-22 02:32:53 +02:00
Fabio Manganiello
4c6b38a6e2 Double lock check to make get_plugin thread-safe 2018-08-22 02:11:51 +02:00
Fabio Manganiello
105d5bb2fc Lock to prevent race conditions where multiple initializations of a plugin can occur 2018-08-22 02:04:16 +02:00
Fabio Manganiello
e5d67c9393 Being more robust against multiple concurrent plugin initializations with a lock 2018-08-21 09:11:01 +02:00
Fabio Manganiello
09d7d98ae3 Retry logic for Mercury API 2018-08-19 21:52:01 +00:00
Fabio Manganiello
d2bd49b364 Sync changes on playback volume or state with events and web UI 2018-08-18 01:11:14 +02:00
Fabio Manganiello
fc1e15504d Implemented Hue lights toggle command 2018-08-16 19:24:20 +02:00
Fabio Manganiello
f2d077354c Typo fix 2018-08-16 01:26:10 +02:00
Fabio Manganiello
0e2ead6826 Default to configured lights if no lights/groups args are passed to Hue delta actions 2018-08-16 01:23:22 +02:00
Fabio Manganiello
a41e804ff9 Implemented delta_bri, delta_sat and delta_hue methods to change light
properties by deltas (from -100% to +100%)
2018-08-16 01:13:43 +02:00
Fabio Manganiello
822e0a1e25 Better fix for broken async variables and attributes after Python 3.7 migration 2018-08-07 22:00:11 +00:00
Fabio Manganiello
ee5e4dff92 Revert "In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async"
This reverts commit f0577733b6.
2018-08-07 21:52:07 +00:00
Fabio Manganiello
b023618950 Revert "In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async"
This reverts commit e625861edf.
2018-08-07 21:52:02 +00:00
Fabio Manganiello
f0577733b6 In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async 2018-08-07 21:28:06 +00:00
Fabio Manganiello
e625861edf In Python 3.7 async is a strict language keyword that can't be used for variables names - replaces occurrences with _async 2018-08-07 21:26:57 +00:00
Fabio Manganiello
bbdf11b9ce Added shuffle method to music.mpd 2018-08-06 22:44:02 +02:00
Fabio Manganiello
ec38ecbaf3 More pylint fixes 2018-07-30 23:18:01 +02:00
Fabio Manganiello
81803a364d Fixed some pylint warnings 2018-07-30 22:08:06 +02:00
Fabio Manganiello
a0ac30e9b6 Version bump 0.8 -> 0.9 2018-07-29 14:35:52 +02:00
Fabio Manganiello
6ebab5de25 Animation thread wrapped in a try-except to prevent the thread from exiting in case of temporary errors 2018-07-28 14:05:19 +02:00
Fabio Manganiello
61e211ee07 Added Kafka plugin 2018-07-28 01:55:19 +02:00
Fabio Manganiello
d0fea0c9c6 All the arguments to send_location_data are actually required 2018-07-25 12:34:16 +00:00
Fabio Manganiello
e4fce17b7b Added elevation parameter to the Adafruit send_location_data method 2018-07-25 12:31:50 +00:00
Fabio Manganiello
8846af6a94 Added send_location_data method to Adafruit IO plugin 2018-07-25 12:08:49 +00:00
Fabio Manganiello
0dafa16958 Added get_elevation_from_latlng method to Google Maps plugin 2018-07-25 12:01:27 +00:00
Fabio Manganiello
423fc492cf Guard the start of the data throttler thread with a lock to prevent multiple launches 2018-07-25 03:04:00 +02:00
Fabio Manganiello
cd52128e44 Reverted batch instead of mean value 2018-07-25 02:30:58 +02:00
Fabio Manganiello
5d8cc403dc Handling Adafruit throttling exceptions with a sleep before retrying 2018-07-25 02:26:11 +02:00
Fabio Manganiello
b777bbcfa8 Reset the timer as soon as you start processing the batch 2018-07-25 02:21:38 +02:00
Fabio Manganiello
6dc86635a4 Send the whole batch of values in the throttler thread instead of getting the mean 2018-07-25 02:18:20 +02:00
Fabio Manganiello
db98e6e05a Added throttle support to Adafruit IO plugin 2018-07-25 01:53:56 +02:00
Fabio Manganiello
3ab77e32f4 Doc fixes 2018-07-24 15:01:01 +00:00
Fabio Manganiello
79834a43a5 Added __init__.py for Adafruit folder 2018-07-24 09:17:09 +02:00
Fabio Manganiello
826e0c7204 Added Adafruit IO plugin 2018-07-24 09:06:05 +02:00
Fabio Manganiello
d95b07f09b Added plugin to manage system clipboard 2018-07-24 00:35:28 +02:00
Fabio Manganiello
32838efa36 Added IFTTT plugin 2018-07-23 02:49:53 +02:00
Fabio Manganiello
1ec0bd40d9 Updated docstrings 2018-07-23 02:11:16 +02:00
Fabio Manganiello
3775327aea Updated variable plugin documentation 2018-07-20 19:19:59 +02:00
Fabio Manganiello
26a57c9d6f Preventing inconsistent reads from the serial port by making sure that only one reader can read at the time 2018-07-20 15:54:31 +02:00
Fabio Manganiello
0b4cfec8e7 More robust HTTP backend in case Redis wasn't configured 2018-07-20 11:13:49 +02:00
Fabio Manganiello
bc895dd984 If the http.request plugin gets a proper JSON message as a response, then extract the Platypush message out of the original response 2018-07-19 20:07:15 +02:00
Fabio Manganiello
72543c26a9 Added logger plugin 2018-07-19 00:03:19 +02:00
Fabio Manganiello
6508ef29a1 Don't overwrite the output variable 2018-07-18 20:23:15 +02:00
Fabio Manganiello
c4d3e6b467 Graceful sleep between failed serial read attempts 2018-07-17 23:51:30 +02:00
Fabio Manganiello
5bc7319933 Optimized serial plugin 2018-07-17 23:47:13 +02:00
Fabio Manganiello
95d86829aa Plugin action decorators can now be inherited from parent classes 2018-07-17 01:23:12 +02:00
Fabio Manganiello
35c5e2d8f7 Serial plugin now extends the general sensor plugin class 2018-07-17 00:59:02 +02:00
Fabio Manganiello
86754534ae Fixed omxplayer plugin doc 2018-07-16 23:17:00 +02:00
Fabio Manganiello
72d490456f Fixed docstring 2018-07-16 22:58:56 +02:00
Fabio Manganiello
2888cb3a4b Propagate the docstring of the wrapped function when using an @action annotation 2018-07-16 22:56:07 +02:00
Fabio Manganiello
b9c77b15f8 Fixed docstring 2018-07-16 22:12:02 +02:00
Fabio Manganiello
cba40744fb No need to commit without opening a transaction first 2018-07-15 20:33:09 +02:00
Fabio Manganiello
2fda066e39 - Support for Platypush main configuration db, where plugins and backends can store their data
- Support for permanent cross-process storage of session variables through SQLite db
- Support for db.select with table+filter instead of raw SQL query
2018-07-15 20:12:23 +02:00
Fabio Manganiello
7114d8bcaa Implemented update and delete method for the db plugin and ON DUPLICATE UPDATE logic for insert 2018-07-15 19:31:11 +02:00
Fabio Manganiello
42fa8360f3 Only propagate the values above/below threshold in case of a sensor threshold crossing, excluding the sensors that haven't crossed the threshold 2018-07-15 17:28:17 +02:00
Fabio Manganiello
b3e3621c5a Removed unneeded imports 2018-07-15 17:28:17 +02:00
Fabio Manganiello
67ebe10c60 typo 2018-07-15 02:57:12 +02:00
Fabio Manganiello
a2898f63c3 - Unwrap the response in the decorator if we got a Response object from the decorated plugin
- No need for @action wrappers around omxplayer event handlers
2018-07-15 02:03:24 +02:00
Fabio Manganiello
b94ec36d0f Added documentation to events 2018-07-09 22:38:08 +02:00
Fabio Manganiello
0288f7ee1b Propagate the token in procedures and event hooks to make sure that the inner requests can be executed 2018-07-09 14:51:20 +00:00
Fabio Manganiello
c81534875a Get Redis object on each interaction in case the backend wasn't ready before 2018-07-08 22:12:30 +02:00
Fabio Manganiello
e1ead3c25f s/_token/token/ 2018-07-08 22:00:28 +02:00
Fabio Manganiello
2647bd3881 Implemented token verification over HTTP calls.
The token can be provided either:

* GET parameter (``?token=abc``)
* JSON payload request (``{..your_request.., "_token":"abc"})
* HTTP header (``X-Token: abc``)
* Basic HTTP auth (any username works, password: token)
2018-07-08 21:36:58 +02:00
Fabio Manganiello
4ebdda80f9 More robust support for Redis configuration in web socket server 2018-07-08 12:24:33 +02:00
Fabio Manganiello
b443df7947 Parametrized the HTTP backend Redis object by using the same configuration used on the Redis backend 2018-07-08 12:13:43 +02:00
Fabio Manganiello
88d9f9d3ac Stability fixes 2018-07-06 03:38:14 +02:00
Fabio Manganiello
85cdd8e5af Removed old Response reference 2018-07-06 03:35:47 +02:00
Fabio Manganiello
6cf0f39a03 Added call to parent constructor in db plugin 2018-07-06 03:03:09 +02:00
Fabio Manganiello
cfda6e019c Don't wrap events in a Response object twice 2018-07-06 02:55:36 +02:00
Fabio Manganiello
b8665b7fbb Added another @action decorator 2018-07-06 02:41:43 +02:00
Fabio Manganiello
c0b1b70e4e Added call to parent constructor in the remaining plugins 2018-07-06 02:37:47 +02:00
Fabio Manganiello
eb229a6fbe Added call to parent constructor in media.ctrl 2018-07-06 02:37:47 +02:00
Fabio Manganiello
d0e7b96ed4 Fixed missed self on some of the new constructors 2018-07-06 02:34:12 +02:00
Fabio Manganiello
a4c7b06e4c Forgot an @action annotation 2018-07-06 02:27:44 +02:00
Fabio Manganiello
b5fb6ecf93 Added call to parent constructor in lastfm plugin 2018-07-06 02:21:38 +02:00
Fabio Manganiello
66d78c8615 [#61] Plugins actions refactoring
- Using `@action` annotation to indicate methods that are allowed to be
executed as actions

- The output and errors of an action are automatically wrapped into a
`Response` object without any response build required on the plugin side
2018-07-06 02:08:38 +02:00
Fabio Manganiello
81a81312e3 Basic support for token authentication on request level 2018-07-05 09:15:53 +02:00
Fabio Manganiello
7ad0724f0e while True loop for recording 2018-07-01 19:35:23 +02:00
Fabio Manganiello
6ba71b52e7 Improved camera.pi logic 2018-06-29 11:25:18 +02:00
Fabio Manganiello
57baa0c64a Try to decode the message event if it's not a Platypush message 2018-06-29 11:09:28 +02:00
Fabio Manganiello
3872276234 Better way to handle plugins->backends communication through Redis 2018-06-29 10:21:19 +02:00
Fabio Manganiello
f3bdeaf418 Fixed Spotify URIs conversion 2018-06-27 08:56:25 +02:00
Fabio Manganiello
b55c070e46 Fixed missed dependencies for RTD build 2018-06-26 23:19:35 +02:00
Fabio Manganiello
4163a414bf Caching switch.tplink devices and supporting lookup by alias 2018-06-26 22:59:33 +02:00
Fabio Manganiello
65f9610cce Added switch.tplink web widget 2018-06-26 22:14:11 +02:00
Fabio Manganiello
0f3895ad41 Added plugin to control a TP-Link HS100 and similar smart plugs/switches 2018-06-26 19:10:53 +02:00
Fabio Manganiello
94ffaf2099 Commented out optional requirements that break RTD build 2018-06-26 01:06:23 +02:00
Fabio Manganiello
e6fdcaa068 Make sure that the Redis thread gets the stop event propagated when the application terminates 2018-06-26 00:57:26 +02:00
Fabio Manganiello
8e16f31603 fixed regex 2018-06-26 00:46:13 +02:00
Fabio Manganiello
7398107570 Completed documentation for backends 2018-06-26 00:36:01 +02:00
Fabio Manganiello
8a0ca64e4d Merge branch 'master' into docs 2018-06-26 00:17:28 +02:00
Fabio Manganiello
28862d743d Adding backends documentation 2018-06-26 00:16:39 +02:00
Fabio Manganiello
0939cdedf8 Added utility to scan for messages on the ZeroBorg infrared sensor 2018-06-26 00:16:04 +02:00
Fabio Manganiello
85c7faf21b Merge branch 'master' into docs 2018-06-25 20:25:10 +02:00
Fabio Manganiello
cb30a0418f Don't play icon animation to prevent the browser on a tiny RPi to freeze 2018-06-25 20:09:45 +02:00
Fabio Manganiello
b876f17f81 Completed documentation for plugins 2018-06-25 19:57:43 +02:00
Fabio Manganiello
1cbef67f2c Merge branch 'master' into docs 2018-06-25 00:49:51 +02:00
Fabio Manganiello
ad1c87b2be Adding more plugins documentation 2018-06-25 00:49:45 +02:00
Fabio Manganiello
49333d892e Remove and then re-add the skycons icon to make sure that the refresh happens 2018-06-24 14:35:36 +02:00
Fabio Manganiello
135212efcb Merge branch 'master' into docs 2018-06-23 13:26:20 +02:00
Fabio Manganiello
fd792cb089 Added support for weather icons on the dashboard 2018-06-23 01:34:46 +02:00
Fabio Manganiello
54dcb2cba3 Documentation v0.1 2018-06-23 01:00:43 +02:00
Fabio Manganiello
a4273f5619 Older versions of the assistant SDK don't have the ON_RENDER_RESPONSE event - check if they have it defined before testing the event type 2018-06-21 01:29:04 +02:00
Fabio Manganiello
8708d53236 Show assistant response text on web clients 2018-06-21 00:22:26 +02:00
Fabio Manganiello
f73adc83bc - Support for assistant response text as a ResponseEvent
- Don't trigger a ConversationEndEvent if the assistant needs to follow up on the previous interaction
2018-06-20 19:21:32 +02:00
Fabio Manganiello
e70eb8bb42 typos 2018-06-19 20:32:19 +02:00
Fabio Manganiello
98c88ff8e5 Made serial.plugin more robust. It can now read a JSON even if it's not all on one line and if it comes with some bogus bytes at the beginning or the end 2018-06-19 20:05:24 +02:00
Fabio Manganiello
5f50b5c4f4 Support for color animations via web interface too 2018-06-19 00:37:33 +02:00
Fabio Manganiello
5e21f844a0 s/yaml.load/yaml.safe_load/ 2018-06-18 11:07:20 +00:00
Fabio Manganiello
dde0b579b2 typo 2018-06-16 04:54:27 +02:00
Fabio Manganiello
9fd86977c7 Don't pass stuff to set_light and set_group that we don't have to 2018-06-16 04:48:09 +02:00
Fabio Manganiello
31a2aa67e2 Always stop any running animation before resetting the lights to a static configuration 2018-06-16 04:20:13 +02:00
Fabio Manganiello
803aa68f11 Support for animation (so far color transition and blink) on Philips Hue plugin 2018-06-16 04:10:59 +02:00
Fabio Manganiello
2d6994c057 send_message over Redis for OMXPlayer plugin 2018-06-14 21:13:01 +02:00
Fabio Manganiello
b7181085f3 Cover both the cases where the Redis backend is not configured and where it's None 2018-06-14 20:44:06 +02:00
Fabio Manganiello
bd18d1cbc1 Using Redis backend as a fallback for send_message if a backend does not implement its own send_message 2018-06-14 20:42:57 +02:00
Fabio Manganiello
061b676fbc If the string assignment didn't work either, give up without failing (also in Request) 2018-06-14 19:12:16 +02:00
Fabio Manganiello
4d48506cb2 If the string assignment didn't work either, give up without failing 2018-06-14 19:07:33 +02:00
Fabio Manganiello
37f952fc41 Be a bit more robust with string assignment in procedure context 2018-06-14 19:02:01 +02:00
Fabio Manganiello
d9b51c94c0 Added Pushbullet plugin to send pushes and files 2018-06-14 15:35:19 +00:00
Fabio Manganiello
81d29928b0 Pi Camera backend version 1.0, now properly controllable 2018-06-14 12:37:14 +02:00
Fabio Manganiello
2b73f71803 Improved logging traces names for backends and plugins 2018-06-14 02:19:55 +02:00
Fabio Manganiello
793b4df12d Pi Camera backend version 0.something 2018-06-14 02:14:08 +02:00
Fabio Manganiello
85512424ae Better events orchestration on camera.pi backend 2018-06-14 00:44:50 +02:00
Fabio Manganiello
bb43facee5 typo #2 2018-06-14 00:37:38 +02:00
Fabio Manganiello
e9fc35b39d typo 2018-06-14 00:36:07 +02:00
Fabio Manganiello
29a5cfa9c2 Refactored camera.pi backend. Support for start/stop recording control via plugin action. Introduced support for taking pictures too 2018-06-14 00:34:30 +02:00
Fabio Manganiello
f9c0d83f79 Made variable.set less verbose and more flexible. Replace the syntax like {"action":"variable.set", "args": {"name":"foo", "value":"bar"}} with a more compact {"action":"variable.set", "args":{"foo":"bar"}} 2018-06-13 23:20:21 +02:00
Fabio Manganiello
9113ac0530 variable.set now returns output in the form name:value so the newly set variable is already available in the context of the task 2018-06-13 22:19:17 +02:00
Fabio Manganiello
7fd375da66 Added plugin for handling general-purpose session variables across tasks.
Supported methods: variable.get, variable.set, variable.unset
2018-06-13 22:09:28 +02:00
Fabio Manganiello
2e08be2886 Clean up the iframe src on timeout expire 2018-06-13 20:44:24 +02:00
Fabio Manganiello
5a1e77c174 Added iframe modal on dashboard with support for dynamic events to temporarily/permanently display a custom web page on the connected browsers 2018-06-13 20:40:49 +02:00
Fabio Manganiello
d89b03a697 Optional 'zoom' parameter added to the map page to override Google Maps auto-zoom (needed if the page is embedded in an iframe) 2018-06-13 18:10:58 +00:00
Fabio Manganiello
ab02d7e79c Calendar events can also be all day - in such a case parse the 'date' field instead of 'dateTime' 2018-06-13 00:54:59 +02:00
Fabio Manganiello
e0ff431894 (Forgot to fix humidity sensor reads) 2018-06-12 20:31:58 +02:00
Fabio Manganiello
64ee7e3e59 Fixed the way the FE widget parses the sensor changes after the structural change to SensorDataChangeEvent 2018-06-12 20:30:23 +02:00
Fabio Manganiello
e216eb4792 Added maps page 2018-06-12 15:33:04 +00:00
Fabio Manganiello
464ff1ff57 A more robust way to handle JSON serialization/deserialization on MQTT backend 2018-06-12 10:33:30 +02:00
Fabio Manganiello
b329580ff0 json decode msg 2018-06-12 09:28:15 +02:00
Fabio Manganiello
8c208c0028 Use the Redis backend to dispatch messages to the core bus if available 2018-06-12 09:20:22 +02:00
Fabio Manganiello
7ab85b4cfa Symlinked serial sensor web interface to MCP3008 sensor template 2018-06-12 01:03:29 +02:00
Fabio Manganiello
bdf862e6d2 get_data alias for get_measuremnt 2018-06-12 00:46:51 +02:00
Fabio Manganiello
77d954f14e Simplified MCP3008 sensor backend by letting it extend SensorBackend 2018-06-12 00:36:43 +02:00
Fabio Manganiello
c410bd8926 s/sensors/data/g 2018-06-12 00:23:47 +02:00
Fabio Manganiello
f137595ba0 Removed the serial backend, as it's now being replaced by the more specific (and reusable) sensor.serial backend 2018-06-12 00:01:18 +02:00
Fabio Manganiello
0e3873eaf3 Removed light sensor backend. As most of them are analog sensors, they can't communicate directly with the Raspberry - instead a plugin like serial (e.g. Arduino) or MCP3008 should act as a proxy 2018-06-12 00:00:15 +02:00
Fabio Manganiello
33a507f047 Simplified SensorBackend implementations 2018-06-11 23:49:37 +02:00
Fabio Manganiello
f8506d6d25 Added comment to explain the reasons for sudo in the switchbot plugin 2018-06-11 22:41:23 +02:00
Fabio Manganiello
933940c695 Attribute name fix 2018-06-11 22:12:25 +02:00
Fabio Manganiello
0905981c58 Refactoring sensor backend and added SensorSerialBackend 2018-06-11 21:07:54 +02:00
Fabio Manganiello
40293a3d30 calendar-next-event-container width 50% -> 70% 2018-06-10 17:20:05 +02:00
Fabio Manganiello
c6054f4ac9 Typos 2018-06-08 17:17:12 +02:00
Fabio Manganiello
1bc4c47df7 Imported ZeroBorg library with scope constructor as global import fails for some reason 2018-06-08 17:10:49 +02:00
Fabio Manganiello
6247488450 Fixed other logging issues 2018-06-08 17:10:11 +02:00
Fabio Manganiello
d7bc17778e Forgot import logging 2018-06-08 16:55:06 +02:00
Fabio Manganiello
2bb6ed6867 Declared logger attribute in HttpRequest as it won't be available to the subclasses otherwise 2018-06-08 16:54:15 +02:00
Fabio Manganiello
f0bb2a20b0 Typo 2018-06-08 16:41:31 +02:00
Fabio Manganiello
0756da3861 Fixed logger references 2018-06-08 16:37:59 +02:00
Fabio Manganiello
f67b737a54 Best effort in context expansion 2018-06-07 09:33:26 +02:00
Fabio Manganiello
bb21595678 Called parent constructor in ZeroBorg plugin to make sure that the logger instance is initialized 2018-06-07 09:31:12 +02:00
Fabio Manganiello
9a43b6cf51 Fixed logger references 2018-06-07 09:08:32 +02:00
Fabio Manganiello
4da74b1096 Refactored logging submodule 2018-06-06 20:09:23 +02:00
Fabio Manganiello
c867a21104 If the value is a platypush Message, then converting it into a string would result in a JSON dumps that might break the interpreter (e.g. 'null' is a valid JSON keyword but it's not recognized by Python). Therefore first parse the variable from JSON 2018-06-06 18:50:09 +02:00
Fabio Manganiello
850a4f2146 A less convoluted and robust way to expand the context as variables 2018-06-06 17:14:44 +02:00
Fabio Manganiello
9984b75895 Added midi backend to support events from MIDI sources 2018-06-06 02:26:28 +02:00
Fabio Manganiello
8534a738d2 Refresh calendar each 15 minutes 2018-06-04 01:01:27 +00:00
Fabio Manganiello
4c1cb9ae6b Added mkv to the supported media extensions 2018-06-02 21:56:46 +02:00
Fabio Manganiello
bc3e100217 New general-purpose plugin for managing multiple calendar + support for ICal format 2018-05-30 15:59:10 +02:00
Fabio Manganiello
cb0a9f5c63 Fixed logging level setting in pusher 2018-05-29 16:43:16 +00:00
Fabio Manganiello
3fe70dd184 Implemented MQTT backend and plugin, see issue #56 2018-05-27 12:21:41 +02:00
Fabio Manganiello
c73905d35d More robust handling of card removed events 2018-05-27 11:47:57 +02:00
Fabio Manganiello
b04a355cc0 Pass also ATR and reader to SmartCardRemovedEvent 2018-05-27 11:25:29 +02:00
Fabio Manganiello
9801fe26fc Generating SmartCardRemoveEvent as well when a scard is removed 2018-05-27 11:21:47 +02:00
Fabio Manganiello
8a6dcdbf5f Generating SmartCardRemoveEvent as well when a scard is removed 2018-05-27 11:11:05 +02:00
Fabio Manganiello
755eb83093 Added support for smart card events 2018-05-27 10:47:58 +02:00
Fabio Manganiello
c1caa182be Handling assistant no_response events 2018-05-25 18:26:02 +02:00
Fabio Manganiello
4f75b765b1 Added assistant conversation timeout event 2018-05-25 18:18:16 +02:00
Fabio Manganiello
96e3acb20f Added MPD play_if_paused and pause_if_playing methods 2018-05-25 18:04:37 +02:00
Fabio Manganiello
27b97e584f Added support for MIDI real-time events 2018-05-23 19:49:54 +02:00
Fabio Manganiello
306faff4af Default tolerance for hand palm motion on Leap should be zero 2018-05-23 19:48:59 +02:00
Fabio Manganiello
57722fce2a Added support for Leap Motion device events 2018-05-23 17:07:15 +02:00
Fabio Manganiello
a8015addbf Only take the first component of formatted_address 2018-05-23 08:06:52 +00:00
Fabio Manganiello
3ce6cf8b41 Just use formatted_address from the Google geocode response instead of considering all the cases of address formatting 2018-05-22 21:43:21 +00:00
Fabio Manganiello
2c7880874d Logging geocode response 2018-05-22 21:34:06 +00:00
Fabio Manganiello
f4da6ebb1b Redis plugin added and Redis backend made more robust to work also with single-quoted JSON-like strings returned by the Redis lib 2018-05-22 14:44:17 +00:00
Fabio Manganiello
18efdb1c70 Make sure the summary is always there 2018-05-21 09:47:50 +02:00
Fabio Manganiello
0accbfa66e Logging traces on RSS parse 2018-05-21 09:27:13 +02:00
Fabio Manganiello
4643c10e11 Added Redis backend, issue #55 2018-05-14 20:09:25 +02:00
Fabio Manganiello
9923742e74 Prevent plugins from breaking in case of concatenations with None elements 2018-05-14 19:06:11 +02:00
Fabio Manganiello
21ac8d7899 Build the address as street + street_number if they are both available 2018-05-13 20:15:25 +00:00
Fabio Manganiello
6c0dc9a4dc Added GMaps geocode plugin and geo update event 2018-05-13 21:42:26 +02:00
Fabio Manganiello
0878e5a3d1 Time to give Platypush a version bump 2018-05-13 14:32:25 +02:00
Fabio Manganiello
d0ca6b8e93 Replaced the YouTube search results parsing logic that relied on BeautifulSoup with a simpler logic that only uses regexes to parse video results. It greatly improves the performance of YouTube video search and removes the dependency on BeautifulSoul and lxml 2018-05-13 14:29:31 +02:00
Fabio Manganiello
01c5bbadcd Type should actually always be there 2018-05-13 11:49:42 +02:00
Fabio Manganiello
5e3b41c3ad Made the Pushbullet backend more resilient in case of rogue messages with no type specified 2018-05-13 11:39:59 +02:00
Fabio Manganiello
d75326bbe8 Added Switchbot web plugin 2018-05-08 17:07:01 +02:00
Fabio Manganiello
598c917eda Added Switchbot plugin 2018-05-08 15:51:47 +02:00
Fabio Manganiello
b94764436d Added WeMo switch plugin for web panel 2018-05-08 09:59:43 +02:00
Fabio Manganiello
36c9437172 Added method to get WeMo available devices 2018-05-08 09:14:02 +02:00
Fabio Manganiello
bd761d420e RSS digests are now optional 2018-05-07 19:44:34 +02:00
Fabio Manganiello
a3b83e8c57 Fixed sensors position 2018-05-07 19:21:58 +02:00
Fabio Manganiello
44596a6cfb Improved style for temp/humidity sensors on the widget 2018-05-07 19:16:25 +02:00
Fabio Manganiello
20a9224ab5 Included support for temperature/humidity display on weather widget from sensor events 2018-05-07 18:55:50 +02:00
Fabio Manganiello
e4269a8d5d Skip RSS items if published_parsed is not defined 2018-05-07 18:33:44 +02:00
Fabio Manganiello
f322f71447 - News widget max items is now configurable
- Update the news list whenever the loop over the current list is done
2018-05-07 18:16:30 +02:00
Fabio Manganiello
1b1016fba2 Added background blurred image if width < height 2018-05-07 17:18:01 +02:00
Fabio Manganiello
37c6e25ac3 Finally got a proper scaling for carousel widget pictures 2018-05-07 14:50:08 +02:00
Fabio Manganiello
e671a1294c Reset min-width when cloning the element 2018-05-07 09:57:35 +02:00
Fabio Manganiello
19268f66a8 border-radius fix 2018-05-07 09:56:31 +02:00
Fabio Manganiello
af11358a76 Image carousel widget improvements 2018-05-07 09:54:30 +02:00
Fabio Manganiello
2483c6d612 Simplified websockets keep-alive logic. Just wait on recv() and clean up the websocket in case of a ConnectionClosed exception 2018-05-06 11:38:24 +02:00
Fabio Manganiello
177a359e4a Only do article fade-in without fade-out+fade-in dance 2018-05-06 00:42:46 +02:00
Fabio Manganiello
27d5f674c5 Added __init__.py 2018-05-06 00:17:18 +02:00
Fabio Manganiello
31f2cbf8b1 Added __init__.py 2018-05-06 00:14:42 +02:00
Fabio Manganiello
0252cc03c4 Added __init__.py 2018-05-06 00:12:57 +02:00
Fabio Manganiello
88c5bc16f5 - Added rss-news dashboard widget
- Added summary field to the RSS entry
- Added support for custom dashboard backgrounds
- UX fixes + font change
2018-05-05 23:59:43 +02:00
Fabio Manganiello
ac958f98da Added images carousel web widget 2018-05-05 04:37:22 +02:00
Fabio Manganiello
e1e4d824ad - Added web widget for Google Calendar integration
- UX improvements on the dashboard
2018-05-05 00:57:41 +02:00
Fabio Manganiello
f6306c6015 Added Google Calendar plugin 2018-05-04 19:20:23 +02:00
Fabio Manganiello
2f8c74c8e3 - Added Pushbullet JS logic to show mirror notifications on web FE
- Added JS and CSS files for dashboard and widgets
2018-05-04 17:25:12 +02:00
Fabio Manganiello
d83c2c903f - Added support for /dashboard page with customizable widgets under the web server
- Introduced Redis to pass messages between the Flask process and the
main application. It now syncs messages with the bus and connected websockets
- Added support to programmatically modify dashboard widgets through POST request like Dashing
- Added weather forecast plugin
2018-05-04 03:24:35 +02:00
Fabio Manganiello
a67b301cd6 s/albumartist/album/g 2018-05-03 02:17:31 +02:00
Fabio Manganiello
dca41ea86e A more robust logic for spotting new RSS items 2018-05-01 10:13:41 +02:00
Fabio Manganiello
d12ebe8810 Bold font for sensor values 2018-04-30 10:20:12 +02:00
Fabio Manganiello
79bfed3a1d FE fixes on the sensors panel 2018-04-30 10:04:37 +02:00
Fabio Manganiello
b4bd1cb7bb Added web UI for MCP3008 analog sensors values 2018-04-30 09:40:44 +02:00
Fabio Manganiello
b8cba8ec0c Forgot an assignment 2018-04-30 01:43:23 +02:00
Fabio Manganiello
c0ef9e2373 poll_seconds should not have a default value 2018-04-29 23:58:33 +02:00
Fabio Manganiello
bd8d4649c5 Added MCP3008 backend 2018-04-29 23:51:53 +02:00
Fabio Manganiello
2f6565ec87 Added support for if-else constructs in procedures 2018-04-29 22:25:31 +02:00
Fabio Manganiello
ef75339fef Fixed missing output= argument 2018-04-29 16:38:05 +02:00
Fabio Manganiello
cbe676a29f Get the JSON/string output out of the Response object 2018-04-29 16:28:01 +02:00
Fabio Manganiello
cddd740666 Removed reference to self.device in backend.serial 2018-04-29 16:26:12 +02:00
Fabio Manganiello
cfe78dfa23 Fixed name clash 2018-04-29 16:19:26 +02:00
Fabio Manganiello
4462f9590f Forgot an import 2018-04-29 16:18:27 +02:00
Fabio Manganiello
4f19cd1324 Removed old reference to serial.Serial 2018-04-29 16:17:09 +02:00
Fabio Manganiello
a907c9ad63 Refactored serial, the entry point for querying serial devices should be the serial plugin, the backend should only be a client. Also, if the serial output is a JSON, parse it 2018-04-29 16:14:46 +02:00
Fabio Manganiello
514eb3d4e4 No need for a comma there 2018-04-29 12:32:25 +02:00
Fabio Manganiello
68c52fe102 - Importing Flask.request as http_request to prevent name clashes with
SQLAlchemy's request module

- All SQLAlchemy engine and connection setup done within get_new_items
to prevent different threads from creating and using the db instance

- Added check_same_thread to sqlite connection line to prevent
different-thread exceptions when the Flask main thread does some cleanup
2018-04-28 19:11:14 +02:00
Fabio Manganiello
e9425236a9 Removed additional file_name parameter 2018-04-26 15:54:40 +02:00
Fabio Manganiello
63b3d196e8 Video icons fixes 2018-04-26 15:29:10 +02:00
Fabio Manganiello
797d6a0fe8 Added an icon to the video results to show the type 2018-04-26 15:23:10 +02:00
Fabio Manganiello
7fb0a5bb55 Set download_dir only if specified 2018-04-25 12:03:15 +02:00
Fabio Manganiello
efe4f32409 Implemented torrent search, download and streaming in OMXPlayer plugin 2018-04-25 11:29:03 +02:00
Fabio Manganiello
34405b96f6 Removed unused mandatory parameters for VideoEvent constructor 2018-04-25 01:04:51 +02:00
Fabio Manganiello
acd06c2193 Implemented OMXPlayer file search and unified all searches under one method 2018-04-25 00:13:17 +02:00
Fabio Manganiello
77da94769e Implemented file search method in OMXPlayer plugin 2018-04-24 21:28:42 +02:00
Fabio Manganiello
e5e1270380 Exposed a global context.get_bus() method to allow plugins to send events to the main bus 2018-04-24 20:07:16 +02:00
Fabio Manganiello
9052e18f9c Commented OMXPlayer handlers initialization part as the plugin object has no access to the bus 2018-04-24 14:56:31 +02:00
Fabio Manganiello
9492243fd5 Transform a [0,100] volume range in the volume range expected by the OMXPlayer API 2018-04-24 14:54:01 +02:00
Fabio Manganiello
dd254b65cb Implemented YouTube videos search and controls web FE 2018-04-24 14:36:05 +02:00
Fabio Manganiello
4d45284131 Style fixes 2018-04-24 09:17:09 +02:00
Fabio Manganiello
1bda7b8346 Handlers & buttons 2018-04-24 01:30:04 +02:00
Fabio Manganiello
27398030e4 Fixed form name in CSS 2018-04-24 01:26:00 +02:00
Fabio Manganiello
e310ef0a04 Finalized video.omxplayer FE plugin 2018-04-24 01:23:06 +02:00
Fabio Manganiello
b5b61f0442 Wrong extension.. 2018-04-24 01:05:37 +02:00
Fabio Manganiello
ebed6adf57 Added video.omxplayer frontend plugin 2018-04-24 01:03:50 +02:00
Fabio Manganiello
53f8f88bac Added inotify files and paths monitoring backend 2018-04-23 16:32:35 +02:00
Fabio Manganiello
c4401b25be Reload logic on media.ctrl in case the connection with the media plugin has been reset 2018-04-22 23:39:23 +02:00
Fabio Manganiello
6ef97e9ddc Assign the recursive output of _thread_func to response to make sure that the latest response is always returned - that means the successful response in case the previous one was a failure 2018-04-22 21:26:53 +02:00
Fabio Manganiello
60c9c7476e Fixed a missing parenthesis 2018-04-20 15:20:23 +02:00
Fabio Manganiello
a783efd0d7 Added status method to media.ctrl plugin 2018-04-20 15:18:20 +02:00
Fabio Manganiello
ded4ac3b95 - Introduced a more consistent Enum for managing playing states across different players
- media.ctrl can now spot which player is playing and control only the right one
- Extended video.omxplayer plugin methods
2018-04-20 12:17:27 +02:00
Fabio Manganiello
cc506b3340 Final (?) regex fix 2018-04-20 10:04:29 +02:00
Fabio Manganiello
eaec9ac51f Final (?) regex fix 2018-04-20 10:00:01 +02:00
Fabio Manganiello
8e5a27d74c Regex fix 2018-04-20 09:52:55 +02:00
Fabio Manganiello
2459506964 Regex typo 2018-04-20 09:41:52 +02:00
Fabio Manganiello
7e119654f9 Retry with the next YouTube video until some of the ones from the search can be played without errors 2018-04-20 09:38:04 +02:00
Fabio Manganiello
4db2f62c17 typo #2 2018-04-20 09:30:19 +02:00
Fabio Manganiello
3f3ec08af2 typo 2018-04-20 09:27:57 +02:00
Fabio Manganiello
6135089d60 Encoding POST data as bytes 2018-04-19 23:46:47 +02:00
Fabio Manganiello
02f6e163bf Variable typo 2018-04-19 23:42:10 +02:00
Fabio Manganiello
51d6bec51c Forgot an import 2018-04-19 23:40:49 +02:00
Fabio Manganiello
14aa4f6454 Implemented torrent search 2018-04-19 23:35:19 +02:00
Fabio Manganiello
95b537dee4 s/music/video/ 2018-04-19 22:45:40 +02:00
Fabio Manganiello
2fdb8c50da Added support for video events 2018-04-19 22:42:28 +02:00
Fabio Manganiello
84ab37e44e Added YouTube search only method 2018-04-19 10:18:46 +02:00
Fabio Manganiello
23095bc18d Log the YT videos being played/searched 2018-04-19 00:39:59 +02:00
Fabio Manganiello
61e851dd8e Fixes 2018-04-19 00:32:20 +02:00
Fabio Manganiello
12295f2f77 youtube_search_and_play moved back to video.omxplayer 2018-04-19 00:30:43 +02:00
Fabio Manganiello
a58fa23173 Websocket client-side timeout: 5 -> 30 seconds 2018-04-18 10:13:53 +02:00
Fabio Manganiello
d2b881fee7 YouTube search and play code moved to media.ctrl plugin 2018-04-18 00:50:19 +02:00
Fabio Manganiello
ab19e258bb Implemented YouTube videos search and play with support for queuse 2018-04-18 00:23:12 +02:00
Fabio Manganiello
02e951bd57 - Added hidden plugins configuration for plugins that shouldn't be shown
on the web panel as tabs

- Added support for popup notifications on the web panel

- Added voice assistant interactive notifications to the web panel

- Added new playing music notifications to the web panel
2018-04-17 23:10:49 +02:00
Fabio Manganiello
fcdc4d1af8 Reload the MPD plugin in case of any errors during the status retrieval 2018-04-17 16:43:39 +02:00
Fabio Manganiello
15a233a927 Keep reloading the MPD plugin in the MPD backend if the plugin crashed or keeps being null 2018-04-17 09:27:41 +02:00
Fabio Manganiello
2186336bbc Added plugin for supporting MCP3008 ADC for analog sensors 2018-04-17 01:03:02 +02:00
Fabio Manganiello
40d1b7481a Added TTS web plugin 2018-04-16 14:38:13 +02:00
Fabio Manganiello
607ec2812c Run get_plugin at every iteration of the mpd backend in case the plugin lost the connection and has been reloaded 2018-04-16 09:38:34 +02:00
Fabio Manganiello
1a01b336b7 Brought server side ping timeout to 60 seconds 2018-04-15 22:36:45 +02:00
Fabio Manganiello
f717315136 Added music.mpd.searchaddplaylist method 2018-04-15 16:31:23 +02:00
Fabio Manganiello
87fb8855b7 - Show Spotify results first from MPD search, if available
- More granular calculation of the match score
2018-04-15 11:15:43 +02:00
Fabio Manganiello
400943b74b Cleaner management of MPD search filters on the frontend 2018-04-15 10:03:34 +02:00
Fabio Manganiello
73c74654d1 - Better MPD filter management - you can now pass filters as arrays like
['artist', 'Led Zeppelin', 'title', 'Stairway To Heaven'] instead of
relying on one single type-filter pair

- Improved condition matching - don't skip the last condition token if
there are still event tokens to add
2018-04-14 23:58:48 +02:00
Fabio Manganiello
82200bb150 Better logging management, solves #26 2018-04-14 01:00:00 +02:00
Fabio Manganiello
e83b21ad33 No outline on the ZeroBorg div when focused 2018-04-13 23:45:29 +02:00
Fabio Manganiello
b863213bd7 More rational management of ZeroBorg auto pilot mode together with sensor - no longer limited to gpio.sensor.distance alone, but including any kind of GpioSensorPlugin. Thresholds, timeouts and actions are configured in config.yaml instead of being hardcoded 2018-04-13 15:49:10 +02:00
Fabio Manganiello
b597097be3 Better management of motor power settings in gpio.zerborg - no more offsets multiplied for max_power and hardcoded power coefficients, just pass the motor power in the configuration 2018-04-13 15:12:31 +02:00
Fabio Manganiello
0cfd67be51 Changed behaviour on playlist track click. Click twice to play instace of long pressing to prevent tracks from playing while scrolling the pane 2018-04-12 20:07:28 +02:00
Fabio Manganiello
cf2b362947 Support for robot control through keyboard 2018-04-12 18:42:01 +02:00
Fabio Manganiello
25e601ca4d More granular control of the motors left/right directions 2018-04-12 17:18:32 +02:00
Fabio Manganiello
de7a8067cb Better filtering of music results 2018-04-12 14:28:20 +02:00
Fabio Manganiello
abdc5a5ed0 Inverted search priority order 2018-04-12 14:22:24 +02:00
Fabio Manganiello
b400597a1b Refresh the status as well upon successful search results play/add 2018-04-12 13:53:04 +02:00