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
Fabio Manganiello
decadee00a
Implemented music search from web panel
2018-04-12 13:04:56 +02:00
Fabio Manganiello
f3d725c890
Making the websocket reconnect client-side logic a bit more consistent
2018-04-10 19:49:37 +02:00
Fabio Manganiello
10bf54f961
A more consistent a bug-free handling of websocket reconnection cycles
2018-04-10 15:56:00 +02:00
Fabio Manganiello
4efbcc50dd
Server-side websocket timeout: 3 -> 5 seconds
2018-04-10 00:10:03 +02:00
Fabio Manganiello
ef1843fdbc
s/1 second/3 seconds/
2018-04-09 23:58:54 +02:00
Fabio Manganiello
cb6894b6f8
s/5 seconds/1 second/
2018-04-09 23:56:43 +02:00