Fabio Manganiello
4cb5aa7acb
Prepend the class name to the string used to generate the MQTT client_id hash.
...
If we include the class name by default then we won't have to
explicitly modify the client_id in the implementation classes
in order to prevent clashes.
2023-09-14 01:06:53 +02:00
Fabio Manganiello
ddd8f1afdc
`base_topic` param in `zigbee.mqtt` renamed to `topic_prefix`.
...
This is for sake of consistency with other integrations (like
`zwave.mqtt`) that also use the same parameter name for the MQTT topic
prefix.
2023-09-07 21:32:56 +02:00
Fabio Manganiello
3de510da68
Migrated `zigbee.mqtt` integration.
...
continuous-integration/drone/push Build is passing
Details
The plugin has been migrated to the new `mqtt` API and the legacy
listener that extended `MqttBackend` has been removed and merged into
the plugin.
2023-09-06 02:44:56 +02:00
Fabio Manganiello
33a1ef39e4
Refactored and merged `backend.mqtt` logic into `mqtt` plugin.
2023-09-06 02:43:45 +02:00
Fabio Manganiello
b6c0ff799b
Rewritten the `http.webpage` plugin.
2023-09-03 17:33:25 +02:00
Fabio Manganiello
669f2eb2d2
LINT/black for `tts.mimic3` plugin.
2023-09-02 12:40:34 +02:00
Fabio Manganiello
35416f3ee3
Some LINT on the old `http.request.rss` plugin.
2023-09-02 01:01:16 +02:00
Fabio Manganiello
2c46b6fe14
Added git a required manifest dependency when needed.
...
It is needed for packages that install pip packages via git.
2023-08-20 21:19:15 +02:00
Fabio Manganiello
a99ffea37c
Fixed apt dependencies for `mpd` plugin.
2023-08-19 21:46:08 +02:00
Fabio Manganiello
69706eaabe
`s/logger/_logger/` in the `plugins` module.
...
The `logger` name may clash with the context of an action, where
`logger` may have been set to something else.
2023-08-19 13:32:19 +02:00
Fabio Manganiello
1cb686bdab
Updated the `inspect` plugin to the new manifest utils interface.
2023-08-19 13:31:48 +02:00
Fabio Manganiello
1825b492b3
Replaced `Config.workdir` with `Config.get_workdir()`.
...
Again, Python < 3.9 doesn't like class properties.
2023-08-19 13:21:24 +02:00
Fabio Manganiello
c2b3ec8ce3
Fixed manifest files with outdated formats.
2023-08-19 12:54:33 +02:00
Fabio Manganiello
2cab836bdf
`Entity.columns` class property replaced by `Entity.get_columns` method.
...
continuous-integration/drone/push Build is passing
Details
Again, Python < 3.9 doesn't like the combination of `@property` +
`@classmethod`.
2023-08-18 17:20:53 +02:00
Fabio Manganiello
a9cdff900e
_variable should be an external global function rather than a class property.
...
The combination of `@property` + `@classmethod` isn't supported on
Python < 3.9.
2023-08-18 16:16:47 +02:00
Fabio Manganiello
ca95490412
Added timeout parameter to requests.get in the rss plugin.
continuous-integration/drone/push Build is passing
Details
2023-08-18 15:53:30 +02:00
Fabio Manganiello
5dd7345c0b
Sync the latest parse timestamps in main instead of __init__ in rss.
...
We should load the latest timestamps from the db when the thread starts
instead of doing it in the constructor.
The constructor may be invoked when the entities engine hasn't been
initialized yet, and result in deadlocks.
2023-08-18 15:51:11 +02:00
Fabio Manganiello
bf7d060b81
Added `@ensure_initialized` decorator to actions in `variable`.
...
continuous-integration/drone/push Build is passing
Details
The `variable` plugin may break in the constructor the first time the
application is started.
That's because it tries to initialize the cache of stored variables, but
the local database hasn't yet been initialized.
That's because plugins are registered _before_ the entities engine is
initialized, as the entities engine assumes that it already has plugins
to scan for entities.
Therefore, the initialization of the `variable` plugin's cache should be
lazy (only done upon the first call to `get`/`set` etc.), in order to
prevent deadlock situations where the plugin waits for the engine to
start, but the engine will be initialized only after the plugin is
ready.
And the lazy initialization logic should also ensure that the entities
engine has been properly started (and emit a `TimeoutError` if that's
not the case), in order to prevent race conditions.
2023-08-17 02:47:30 +02:00
Fabio Manganiello
98e9abde18
Extended manifest files with Python system packages (if available).
...
continuous-integration/drone/push Build is passing
Details
- If a Python optional dependency is available as a system package on
the target system, try and install it that route rather than pip. It's
usually faster and it decreases the risk of breaking system packages.
- Added support for apk dependencies in manifest files. This brings the
number of distros officially supported by all the extensions to four:
- Alpine
- Arch
- Debian
- Ubuntu
2023-08-16 22:43:51 +02:00
Fabio Manganiello
00863a176e
Added `application` plugin.
continuous-integration/drone/push Build is failing
Details
2023-08-15 11:20:24 +02:00
Fabio Manganiello
f51beb271e
Large refactor + stability fixes for the external process control logic.
2023-08-15 11:12:21 +02:00
Fabio Manganiello
4062ddbcf0
More improvements to the `inspect` plugin.
...
continuous-integration/drone/push Build is passing
Details
- Support for distinct `type` field on constructor and method arguments.
- Added `has_varargs` field.
- Added `required` field.
- Better logic for parsing arguments `default` values.
2023-08-08 20:47:27 +02:00
Fabio Manganiello
9beb0a7af3
Skip `:type:` annotations from docstring args documentation.
2023-08-08 20:47:27 +02:00
Fabio Manganiello
2a30f060b4
Parse the arguments list from `obj_type.__init__.__doc__` too.
2023-08-08 20:47:27 +02:00
Fabio Manganiello
e9a568fdd2
Unified interface to retrieve the Redis bus configuration.
...
A common `utils.get_redis_conf` has been created to handle the cascade
fallback logic used to retrive the default Redis configuration.
2023-07-24 01:04:13 +02:00
Fabio Manganiello
0dc380fa94
Removed dependency from prctl.
...
Also, black'd and LINT-fixed some files that hadn't been touched in a
while.
2023-07-23 19:17:30 +02:00
Fabio Manganiello
66981bd00b
Updated email addresses and black'd some old source files.
2023-07-22 23:02:44 +02:00
Fabio Manganiello
3eda0c6f17
[ #268 ] Implemented XMPP integration.
2023-07-22 22:36:36 +02:00
Fabio Manganiello
cb04af0bbd
Catch TypeError when execution an action.
...
Most of TypeError are due to the user passing wrong data. It usually
doesn't mean that we have to fail hard and reload the plugin, nor retry
the call with the same parameters.
2023-07-14 22:20:27 +02:00
Fabio Manganiello
27cf1bec52
Removed some optional top-level imports.
...
Optional top-level imports in Tornado route declarations will trigger
`ImportError`. While this will just mean that those routes will be
skipped, it will also generate a lot of noise on the logs.
2023-07-01 03:13:38 +02:00
Fabio Manganiello
5e5403287e
The `inspect` plugin should not fail hard if the cache couldn't be loaded.
...
This can happen for many reasons - not only if the cache file is not
accessible, but also if the structure/signature of some pickled objects
has changed. In that case, we should invalidate the current cache and
re-initialize it instead of failing.
2023-06-28 01:33:12 +02:00
Fabio Manganiello
ba827b0248
Added `sound` plugin documentation.
...
- Added example of how to stream audio over HTTP.
- Added Portaudio to the apt/pacman dependencies.
2023-06-28 00:10:36 +02:00
Fabio Manganiello
a103ea49f1
Fixed ffmpeg/audio consumer synchronization upon timeout.
2023-06-27 15:12:15 +02:00
Fabio Manganiello
77f7cd8b90
Don't use typing.Self (yet).
...
typing.Self has only been introduced in Python 3.10.
2023-06-27 14:17:04 +02:00
Fabio Manganiello
f2540437b7
Sound plugin rewritten almost from scratch.
2023-06-27 13:31:38 +02:00
Fabio Manganiello
2f4229d7b1
pylint fixes for the camera plugin.
2023-06-16 15:40:05 +02:00
Fabio Manganiello
9aa8e4538a
Better termination logic for the ffmpeg audio converter.
2023-06-16 11:47:37 +02:00
Fabio Manganiello
a6351dddd4
Extracted `AudioRecorder` out of `SoundPlugin`.
2023-06-16 03:12:55 +02:00
Fabio Manganiello
da93f1b3b0
[Chore] pylint
2023-06-14 01:44:36 +02:00
Fabio Manganiello
c8786b75de
`sound.recordplay` merged into `sound.record`.
2023-06-12 22:15:02 +02:00
Fabio Manganiello
be794316a8
Merged `sound.stream_recording` and `sound.record`.
2023-06-12 13:06:02 +02:00
Fabio Manganiello
a415c5b231
Merged outfile/fifo logic in `sound.stream_recording`.
2023-06-12 12:33:14 +02:00
Fabio Manganiello
e238fcb6e4
Refactoring the `sound` plugin to use ffmpeg as a stream converter.
2023-06-11 12:48:49 +02:00
Fabio Manganiello
4587b262b0
Stream camera frames over HTTP using a Redis pub/sub mechanism.
2023-06-05 20:40:12 +02:00
Fabio Manganiello
d7208c6bbc
Refactored Tornado routes for native pub/sub support.
...
The Redis pub/sub mechanism is now a native feature for Tornado routes
through the `PubSubMixin`.
(Plus, lint/black chore for the sound plugin)
2023-05-30 21:58:27 +02:00
Fabio Manganiello
8b5eb82497
Camera stream writer fixes.
...
- The readiness condition should be `multiprocessing.Condition`, not
`threading.Condition` - in most of the cases it will be checked in a
multiprocess environment.
- Fixed parameter name for `write`.
2023-05-30 11:06:48 +02:00
Fabio Manganiello
4fffabd82a
Revert "Removed `camera.gstreamer`."
...
This reverts commit b4d714df8a
.
2023-05-29 22:13:24 +02:00
Fabio Manganiello
4bf9c01ac9
Moved camera routes.
...
Camera routes migrated from Flask blueprints to Tornado handlers.
2023-05-27 22:24:45 +02:00
Fabio Manganiello
b4d714df8a
Removed `camera.gstreamer`.
...
Too much of a pain in the ass to handle, too many format options to
think of, too many combinations of pipelines to support, and if I don't
think of those beforehand then I'll have to offload all of that
complexity on the user.
2023-05-27 22:19:50 +02:00
Fabio Manganiello
1c40e5e843
Black'd the camera plugin and writer.
...
Also, proper fix for the multi-inheritance problem of
the ffmpeg writers.
2023-05-23 20:42:59 +02:00
Fabio Manganiello
a7aabd7c52
Fixed handling of `:meth:` docstring annotations with relative paths.
2023-05-22 16:32:30 +02:00
Fabio Manganiello
7eca1c27c9
Blackened the qrcode and pushbullet plugins
2023-05-22 02:33:54 +02:00
Fabio Manganiello
d7405ad05d
Added multiple parsers for the entities referenced in docstrings.
...
The `inspect` plugin can now detect references to plugins, backends,
events, responses and schemas in docstrings and replace them either with
links to the documentation or auto-generated examples.
2023-05-22 02:20:58 +02:00
Fabio Manganiello
b91c1eba6d
Parse `:return:` definitions from action docstrings too.
2023-05-21 03:05:19 +02:00
Fabio Manganiello
27d4a20418
Use reflection to infer the arguments of a Python user procedure
2023-05-17 17:17:59 +02:00
Fabio Manganiello
61ea3d79e4
Large refactor for the `inspect` plugin.
...
More common logic has been extracted and all the methods and classes
have been documented and black'd.
2023-05-17 00:05:22 +02:00
Fabio Manganiello
8447f9a854
Improved rendering of actions/arguments documentation.
...
The frontend now calls `utils.rst_to_html` to render the docstrings as
HTML instead of dumping them as raw text.
Also, actions and arguments are now cached to improve performance.
2023-05-14 15:06:34 +02:00
Fabio Manganiello
5f2d6dfeb5
Added `utils.rst_to_html` action.
2023-05-14 15:05:24 +02:00
Fabio Manganiello
3c83e7f412
A faster implementation for the `inspect.get_*` methods.
...
Plugin/backend lookup is now done by inspecting the manifest files
instead of searching all the subpackages.
2023-05-13 13:44:46 +02:00
Fabio Manganiello
cfedcd701e
Performance improvements when loading the Tensorflow plugin.
...
The Tensorflow module may take a few seconds to load the first time and
slow down the first scan of the plugins.
All the Tensorflow imports should therefore be placed close to where
they are used instead of being defined at the top of the module.
2023-05-11 19:48:22 +02:00
Fabio Manganiello
41233138ff
Blackened `inspect` module and extracted model defs to adjacent module.
2023-05-09 21:58:02 +02:00
Fabio Manganiello
56dc8d0972
Migrated the webapp to Tornado.
...
It was just too painful to find a combination of versions of gunicorn,
gevent, eventlet, pyuwsgi etc. that could work on all of my systems.
On the other hand, Tornado works out of the box with no headaches.
Also in this commit:
- Updated a bunch of outdated/required integration dependencies.
- Black'd and LINTed a couple of old plugins.
2023-05-08 02:06:45 +02:00
Fabio Manganiello
d1f0e1976c
Exclude squashfs/loopback mounts from `system.disk_info`.
2023-05-06 18:53:16 +02:00
Fabio Manganiello
373788377b
Created two separate actions under `variable` to delete/unset.
...
`delete` will actually remove the record from the database (same as
`unset`'s new behaviour), while `unset` will set it to null without
deleting it (same as the `unset`'s previous behaviour).
2023-05-05 02:21:18 +02:00
Fabio Manganiello
2c254e8eb9
numpy and PIL should be required dependencies for all camera plugins.
2023-05-04 23:44:42 +02:00
Fabio Manganiello
3febfabdd7
Bluetooth LE blacklisted device notices moved `info -> debug`.
2023-05-01 22:10:06 +02:00
Fabio Manganiello
9d82ce6ea9
Noisy beacons notice back to debug level.
...
There's just too many of them and it ends up polluting the logs.
2023-05-01 21:25:42 +02:00
Fabio Manganiello
5d4bffa119
Fixed retrieval of `entities` plugin.
2023-04-30 10:42:05 +02:00
Fabio Manganiello
3d7755159f
Improved compatibility for `traceback.format_exception`.
...
The new syntax, that only requires an `Exception` instance to be passed
to the function, is only compatible with Python >= 3.10.
2023-04-30 00:38:17 +02:00
Fabio Manganiello
6b28d16ccf
Exclude more noisy Bluetooth beacons.
...
Exclude any beacons from devices with no name, no children other than
services, and with none of those services being public/known.
2023-04-29 23:34:24 +02:00
Fabio Manganiello
f764d1b4fb
Noisy Bluetooth beacons notices should be logged on info level.
2023-04-29 23:18:12 +02:00
Fabio Manganiello
e96885a805
Delete the entity on `variable.unset` instead of setting it to null.
2023-04-29 18:21:57 +02:00
Fabio Manganiello
a3888be216
The robustness check in case of missing fields should also apply to other system entities.
2023-04-29 16:08:38 +02:00
Fabio Manganiello
8c9768b05e
Robustness check for system disk entities.
...
When the system information is still loading it may happen that the
device associated to the disk hasn't been loaded yet.
2023-04-29 16:04:57 +02:00
Fabio Manganiello
a20065c649
Exposed `_entities` utility property in `Plugin`.
...
It can be used by other plugins to easily access the `entities` plugin,
along the lines of `db` and `redis`.
2023-04-29 15:50:31 +02:00
Fabio Manganiello
68d8befa34
Removed some vestigial commented code.
2023-04-29 15:28:44 +02:00
Fabio Manganiello
23b851e9d7
`variable.status` robustness fix.
...
`entities.transform_entities` will pass back an empty list instead of an
empty dict if no entities were found, and the function should be able to
handle it.
2023-04-29 15:24:58 +02:00
Fabio Manganiello
e919bf95ad
Print the full stack trace if a plugin failed in `entities.scan`
2023-04-29 15:14:13 +02:00
Fabio Manganiello
f40f956507
Migrated `variable` table to the new entities framework.
2023-04-29 11:36:55 +02:00
Fabio Manganiello
8fe61217ce
Added `_db` and `_redis` properties to the Plugin class.
...
Plugins can now access the database and Redis APIs directly without
having to run their own `get_plugin` validation logic.
2023-04-29 11:35:57 +02:00
Fabio Manganiello
87db5ca5f3
Exclude all iBeacon devices by default (it's not only Apple, it's everyone)
2023-04-26 14:17:59 +02:00
Fabio Manganiello
10d587efd0
FIX: Possible assert evaluation error.
...
Some versions/configurations of Python may throw `Boolean value of this
clause is not defined` here.
2023-04-26 02:25:28 +02:00
Fabio Manganiello
cb288deb71
Exclude more noisy BLE beacons.
...
Excluding Apple iBeacons and devices with no name and no services.
2023-04-25 16:19:11 +02:00
Fabio Manganiello
dd60b8924d
Wrap the `PRAGMA` statement in `sqlalchemy.text`.
...
SQLAlchemy 2 no longer supports raw strings passed to `.execute()`
methods.
2023-04-25 10:41:37 +02:00
Fabio Manganiello
4cc88fcf5f
Rewritten the `variable` plugin to use SQLAlchemy's ORM.
...
This removes the need for raw SQL statements and CREATE TABLE statements
that may be engine-specific.
2023-04-25 10:35:12 +02:00
Fabio Manganiello
e1cd22121a
Removed `connection.begin()` pattern from the `db` plugin.
...
SQLAlchemy should automatically begin a transaction on
connection/session creation. Plus, `.begin()` messes up things with
SQLAlchemy 2, which has `autobegin` enabled with no easy way of
disabling it.
2023-04-25 10:31:49 +02:00
Fabio Manganiello
37722d12cd
No need for `session.begin` in `db.create_all`.
2023-04-24 23:55:50 +02:00
Fabio Manganiello
6fa179e769
LINT fixes
2023-04-24 23:49:31 +02:00
Fabio Manganiello
91df18f7b5
Better way to import `declarative_base` from SQLAlchemy.
...
Import `declarative_base` in a way that is compatible with any
SQLAlchemy version between 1.3 and 2.x.
2023-04-24 23:21:39 +02:00
Fabio Manganiello
87889142e0
Fixed compatibility with SQLAlchemy >= 2.0 in the `db` plugin.
2023-04-24 22:52:17 +02:00
Fabio Manganiello
dc3392c11d
Disk I/O stats are not always available and should therefore be optional.
2023-04-23 22:25:24 +02:00
Fabio Manganiello
0cd28f1040
libbluetooth-dev is a required dependency to build pybluez on Debian-derived distros
2023-04-23 18:59:37 +02:00
Fabio Manganiello
9c1855e4c0
Fixed docstring for `zigbee.mqtt` plugin.
2023-04-23 13:03:10 +02:00
Fabio Manganiello
27b1048789
Converted `system.processes` to the new data model.
2023-04-23 02:08:43 +02:00
Fabio Manganiello
387616ea96
Convert `system.connected_users` to the new data model.
2023-04-23 01:12:07 +02:00
Fabio Manganiello
763d9e06ec
Increased default `poll_interval` for `system` plugin to 60 seconds.
2023-04-23 00:42:44 +02:00
Fabio Manganiello
a72c32cb00
Added battery entity support to `system` plugin.
2023-04-23 00:41:21 +02:00
Fabio Manganiello
b3440ab96b
Added support for fan sensors on the `system` plugin.
2023-04-23 00:08:27 +02:00
Fabio Manganiello
45d5f439be
Added support for system temperature sensor entities.
2023-04-22 22:42:11 +02:00
Fabio Manganiello
1b048e1952
s/net_connections/network_connections/g
2023-04-22 17:19:24 +02:00
Fabio Manganiello
374f936c1f
Merged `network_stats` into `NetworkInterface` model.
2023-04-22 17:19:24 +02:00
Fabio Manganiello
e213941791
s/net_io_counters/network_info/g
2023-04-22 17:19:23 +02:00
Fabio Manganiello
977b55dea9
Merged network addresses into `NetworkInterface` model.
2023-04-22 17:19:23 +02:00
Fabio Manganiello
ebe79ac29a
Refactored system schema dataclasses.
...
- `percent_field` should be declared on `platypush.schemas.dataclasses`
level, since it's not specific to the `system` plugin.
- Added a common `SystemBaseSchema` that takes care of calling
`_asdict()` if the object is passed as a `psutil` object instead of a
dict.
2023-04-22 17:19:23 +02:00
Fabio Manganiello
2d618188c8
Print the full exception stack trace if `.status` fails.
2023-04-22 17:19:23 +02:00
Fabio Manganiello
b3a0896485
Converted `NetworkConnection` schema/response.
2023-04-22 17:19:22 +02:00
Fabio Manganiello
98a300c4b1
Added `NetworkInterface` entities to `system` plugin.
...
Plus, `platypush.schemas.system` has now been split into multiple
submodules to avoid a single-file mega-module with all the system
schemas definitions.
2023-04-21 00:45:15 +02:00
Fabio Manganiello
44b8fd4b34
Support for `disk` entities in the `system` integration.
2023-04-20 16:26:51 +02:00
Fabio Manganiello
153d03d43f
Moved CPU percentage on the level of the CPU entity instead of a child entity.
2023-04-19 01:48:05 +02:00
Fabio Manganiello
4ebfbf3851
Added memory stats entities.
2023-04-19 01:31:11 +02:00
Fabio Manganiello
0073239a40
Support for CPU `load_average` entity.
2023-04-18 18:26:02 +02:00
Fabio Manganiello
1cee0459cf
Added `CpuFrequency` entity to `system`.
2023-04-18 01:49:36 +02:00
Fabio Manganiello
a5b0a524f6
Added `CpuStats` entity to `system`.
2023-04-18 01:19:06 +02:00
Fabio Manganiello
b4fbd3e915
Added `percent` entity to `cpu`.
2023-04-17 02:25:04 +02:00
Fabio Manganiello
b9286f50b0
Added support for `CpuTimes` as an entity of the `system` plugin.
...
Also, there is now a single `Cpu` entity being exported, with a nested
hierarchy structured like:
```
cpu
-> cpu_info
-> cpu_times
-> idle
-> user
-> system
-> ...
-> cpu_load
-> ...
```
2023-04-17 02:25:03 +02:00
Fabio Manganiello
b43017ef01
Refactoring the `system` plugin to support entities.
2023-04-17 02:25:02 +02:00
Fabio Manganiello
74aeca5c34
Trigger a sensor event only if abs(old_data - new_data) > tolerance
...
Not if abs(old_data - new_data) >= tolerance, otherwise events will
always be triggered when tolerance=0, even if the data hasn't changed.
2023-04-17 02:25:01 +02:00
Fabio Manganiello
a499b7bc2f
Deprecated `poll_seconds` in `light.hue`.
...
For sake of naming consistency with other plugins, we should use
`poll_interval` instead.
2023-04-03 01:36:12 +02:00
Fabio Manganiello
10955dad72
Fixed some documentation glitches in `switchbot`.
2023-04-03 01:36:12 +02:00
Fabio Manganiello
6e5f746dbe
Removed deprecated `gpio.sensor` base plugin.
...
Now all the plugins that used to implement it have been moved to
`SensorPlugin`.
2023-04-03 01:36:12 +02:00
Fabio Manganiello
8852cb8db4
Fixed new class name for `sensor.mcp3008` plugin.
2023-04-03 01:36:12 +02:00
Fabio Manganiello
d5ddc0c65e
Migrated `arduino` integration to the new `SensorPlugin` API.
2023-04-03 01:36:12 +02:00
Fabio Manganiello
ac2ec58f89
Migrated `mcp3008` integration to the new `SensorPlugin` API.
2023-04-03 01:36:11 +02:00
Fabio Manganiello
45e5ca47e7
Fallback for sensor._has_changes
2023-04-02 15:38:49 +02:00
Fabio Manganiello
962c55937d
Migrated `sensor.distance` integration.
...
Remove `backend.sensor.distance` and `gpio.sensor.distance`. They are
now replaced by the `sensor.hcsr04` integration, which is compatible
with the new `SensorPlugin` API.
2023-04-02 14:20:12 +02:00
Fabio Manganiello
92578a17c9
Added small docstring portion
2023-04-02 13:55:00 +02:00
Fabio Manganiello
beff88986a
Migrated `dht` integration.
...
Removed `backend.sensor.dht` and `gpio.sensor.dht`. They have been
merged into the new `sensor.dht` integration, which supports the new
`SensorPlugin` API.
2023-04-02 13:38:53 +02:00
Fabio Manganiello
8f604445a2
Migrated old `sensor.accelerometer` integration.
...
Removed `backend.sensor.accelerometer` and `gpio.sensor.accelerometer`.
The logic has now been merged in the new `sensor.lis3dh` integration,
which is compatible with the new `SensorPlugin` API.
2023-04-02 13:22:28 +02:00
Fabio Manganiello
44cf25271c
Migrated `pmw3901` integration.
...
Removed legacy `backend.sensor.motion.pmw3901` and
`gpio.sensor.motion.pmw3901`. They have been merged in the new
`sensor.pmw3901` integration, compatible with the new `SensorPlugin`
API.
2023-04-02 12:36:08 +02:00
Fabio Manganiello
fcdda40c4a
Update the `_last_measurement` only if some events were processed from the new data.
2023-04-02 12:09:45 +02:00
Fabio Manganiello
88784985e1
Should be `abs(old_data - new_data) >= tolerance`.
...
Not `abs(old_data - new_data) > tolerance`.
2023-04-02 12:08:40 +02:00
Fabio Manganiello
7697c1c6ad
Migrated `envirophat` to the new `SensorPlugin` API.
...
Removed `backend.sensor.envirophat` and `gpio.sensor.envirophat` plugin.
They have now been merged into the new `sensor.envirophat` plugin.
2023-04-02 02:49:08 +02:00
Fabio Manganiello
d964167631
`s/TimeDurationSensor/TimeDuration/g`
2023-04-02 00:57:48 +02:00
Fabio Manganiello
f24d0773d1
No need for `sensor.vl53l1x.transform_entities` to call the parent.
2023-04-01 23:54:43 +02:00
Fabio Manganiello
99572f9731
Sanity check to prevent empty objects from being propagated to `sensor.transform_entities`
2023-04-01 23:41:28 +02:00
Fabio Manganiello
3f3726c50a
Fixed another occurrence of "Subscripted generics cannot be used" etc. error
2023-04-01 23:34:22 +02:00
Fabio Manganiello
e2e73d0fdb
Fix another Python < 3.10 subscripted generic issue.
2023-04-01 23:23:51 +02:00
Fabio Manganiello
c1d0f21ead
Migrated `ltr559` integration to the new API.
...
Merged `backend.sensor.ltr559` and `gpio.sensor.ltr559` into the new
`sensor.ltr559` plugin, which extends the new `SensorPlugin` API.
2023-04-01 23:16:03 +02:00
Fabio Manganiello
8e0f88ea16
Don't swap the argument of `SensorPlugin.publish_entities` with a list if not required
2023-04-01 23:06:37 +02:00
Fabio Manganiello
0047d85b9d
Dirty fix for "Subscripted generics cannot be used with class and instance checks" on Python < 3.10
2023-04-01 22:52:24 +02:00
Fabio Manganiello
98ec018292
Replaced `NoneType` reference.
...
`types.NoneType` is not always available on all Python versions, so we
have to make our own type for it.
2023-04-01 22:42:13 +02:00
Fabio Manganiello
5dabfed365
Migrated `sensor.bme280` to the new `SensorPlugin` interface.
...
Removed the old `backend.sensor.bme280` and the old `gpio.sensor.bme280`
plugin. They have now been merged into the new `sensor.bme280` runnable
plugin, which extends the `SensorPlugin` API and supports entities.
2023-04-01 22:31:24 +02:00
Fabio Manganiello
6f237a1500
Support the deprecated `poll_seconds` option on `RunnablePlugin`
2023-04-01 22:02:59 +02:00
Fabio Manganiello
c23e8867e2
Added `enabled_sensors` to the `sensor` plugin
2023-04-01 21:56:56 +02:00
Fabio Manganiello
7912a59ff8
`vl53l1x` plugin migrated to the new `SensorPlugin` interface.
2023-04-01 19:31:13 +02:00
Fabio Manganiello
6a5a5de03e
`serial` plugin migrated to the new `SensorPlugin` interface.
2023-04-01 19:29:56 +02:00
Fabio Manganiello
bf4db76830
Legacy `sensor` backend replaced by an extended `sensor` runnable plugin.
2023-04-01 19:24:35 +02:00
Fabio Manganiello
7bdd877e49
Support the `binary` flag both on `serial.read` and `serial.write`.
2023-03-31 14:31:45 +02:00
Fabio Manganiello
1efaff878e
Rewritten `serial` plugin.
...
`backend.serial` has been removed and the polling logic merged into the
`serial` plugin.
The `serial` plugin now supports the new entity engine as well.
2023-03-31 14:31:45 +02:00
Fabio Manganiello
a3e8c7c155
Rewritten vl53l1x integration as a runnable plugin with entity support
2023-03-31 14:25:05 +02:00
Fabio Manganiello
6fb362a6fb
gpio.sensor.distance.vl53l1x -> sensor.distance.vl53l1x
2023-03-31 14:21:48 +02:00
Fabio Manganiello
2781eb1fb1
Merge branch 'master' into 29-generic-entities-support
2023-03-27 00:36:50 +02:00
Fabio Manganiello
7a368ebbb8
[ #240 ] Migrated `clipboard` plugin from `pyperclip` to `pyclip`.
...
Closes : #240
2023-03-26 23:52:15 +02:00
Fabio Manganiello
bce2fdee25
Replaced deprecated `asyncio.wait([])` with `asyncio.gather(*[])`.
2023-03-26 23:15:53 +02:00
Fabio Manganiello
c0251ef2f7
`s/instance/instance_name/g` in `LinodeInstanceStatusChanged`.
...
For sake of consistency - we also have `instance_id` and having the
instance name assigned to the `instance` attribute is quite ambiguous.
2023-03-26 22:58:20 +02:00
Fabio Manganiello
6d674fef21
Fixed small JSON syntax error in the docstring of `ntfy.send_message`.
2023-03-26 22:53:42 +02:00
Fabio Manganiello
295758bb20
Added frontend components for cloud instances.
2023-03-26 12:27:17 +02:00
Fabio Manganiello
bc2730c841
Rewritten `linode` integration.
...
- Support for cloud instances as native entities.
- Using Marshmallow dataclasses+schemas instead of custom `Response`
objects.
- Merge `linode` backend into `linode` plugin.
2023-03-26 11:23:33 +02:00
Fabio Manganiello
3c355352c5
Using the new `StoppableThread` API.
2023-03-24 16:39:30 +01:00
Fabio Manganiello
998793e94f
Added `OBEX_FILE_TRANSFER` constant to `directory` stub.
2023-03-24 15:41:20 +01:00
Fabio Manganiello
2f49ddf33a
Fallback logic that uses DBus to disconnect from a BT device.
...
This logic will be used if the connection wasn't opened by the current
process and therefore a call to DBus is required to terminate it.
2023-03-24 01:57:05 +01:00
Fabio Manganiello
913ef6f8cd
Refresh `BluetoothDevice.reachable` when a device is found/lost.
2023-03-24 01:56:19 +01:00
Fabio Manganiello
d46d4e2300
Added support for Bluetooth devices blacklist.
...
Based on device address, name or manufacturer.
2023-03-24 01:52:39 +01:00
Fabio Manganiello
0cebcf4f9b
`switchbot.bluetooth` integration migrated to a `bluetooth` plugin.
2023-03-23 17:46:54 +01:00
Fabio Manganiello
4fac110bb8
Added `bluetooth.set` method, whose execution is delegated to the plugins.
2023-03-23 17:45:02 +01:00
Fabio Manganiello
cd219f44c4
Pass the list of plugins when creating Bluetooth managers.
2023-03-23 17:42:16 +01:00
Fabio Manganiello
43289a3b55
Scan always at least for 10 seconds before failing on `get_device`.
2023-03-23 17:41:37 +01:00
Fabio Manganiello
6267943786
Wrap `BleakError` exceptions into `AssertionError`.
2023-03-23 17:40:30 +01:00
Fabio Manganiello
d6805a8b18
Added support for custom Bluetooth device plugins.
2023-03-23 17:10:37 +01:00
Fabio Manganiello
af125347d6
If no matching services are found when connecting to a device, default to BLEManager.
...
GATT characteristics are not necessarily exposed as services.
2023-03-23 13:00:26 +01:00
Fabio Manganiello
a2a5fce6cb
Added `Apple Continuity` to the list of blacklisted manufacturers/models
2023-03-22 22:55:19 +01:00
Fabio Manganiello
5c23d3aa87
metadata and rssi fields on BLEDevice have been deprecated.
...
Changed the BLE beacon parsing logic to read those fields from
`AdvertisementData` instead of `BLEDevice`.
2023-03-22 22:39:01 +01:00
Fabio Manganiello
65bc3ae06d
Noisy beacons device configuration should look both at manufacturer and model.
2023-03-22 22:37:46 +01:00
Fabio Manganiello
e10bec88c0
Noisy beacons logging trace moved from info to debug.
2023-03-22 16:31:57 +01:00
Fabio Manganiello
99cfd247a5
A more effective logic to exclude noisy BLE beacons.
...
This includes BLE beacons sent from all Google/Apple/Microsoft/Samsung
beacon networks in all of their variants.
2023-03-22 15:35:02 +01:00
Fabio Manganiello
01d323fad0
Passing a boolean `exclude_known_noisy_beacons` to `bluetooth` plugin.
...
The logic to exclude BLE beacons from randomized devices needs to be a
bit more granular and not limited only to the reported device
manufacturer.
2023-03-22 15:29:19 +01:00
Fabio Manganiello
f6e09d34e4
A more clever logic of parsing the manufacturer for BLE devices.
...
1. Check the manufacturer parsed via Bleak/Theengs
2. Check the MAC address prefix in the oui numbers table
3. Check from the reported `manufacturer_data`
2023-03-22 14:16:00 +01:00
Fabio Manganiello
f7e8cfe5a7
Don't include `unit` in BLE sensors when they are matched against the native type.
...
It's likely to just include the native type name anyway.
2023-03-22 14:14:59 +01:00
Fabio Manganiello
c750d83188
Prevent name collisions on `bluetooth.ServiceClass`.
2023-03-22 03:27:25 +01:00
Fabio Manganiello
174b1ee6a9
Use a default list of excluded Bluetooth manufacturers.
2023-03-21 16:03:01 +01:00
Fabio Manganiello
b1cb7ef847
Added a list of `excluded_manufacturers` to `BluetoothPlugin`.
2023-03-21 14:32:45 +01:00
Fabio Manganiello
3743ee4f00
s/TheengsGateway/TheengsDecoder/g now that the pip package has been published.
2023-03-20 01:41:21 +01:00
Fabio Manganiello
12096f2dbe
Don't fail hard when device disconnection fails.
2023-03-19 12:56:53 +01:00
Fabio Manganiello
40f81b105f
Set the connected flag when connecting/disconnecting from a service.
2023-03-19 12:56:31 +01:00
Fabio Manganiello
9d66b63266
BluetoothService attributes fixes.
...
BluetoothService IDs should always be in the format `address::uuid` and
the name should always be in title format.
2023-03-19 12:55:14 +01:00
Fabio Manganiello
6e9263c4e4
A more elegant logic to infer the manufacturer name.
2023-03-19 12:54:52 +01:00
Fabio Manganiello
b568876474
Use a service's UUID as a name instead of Unknown if the service is unknown.
2023-03-19 12:54:09 +01:00
Fabio Manganiello
4144e4f842
Fixed self._ip_to_dev expansion
2023-03-19 12:47:07 +01:00
Fabio Manganiello
2411b961e8
[WIP] Big, big refactor of the Bluetooth integration.
...
- Merged together Bluetooth legacy and BLE plugins and scanners.
- Introduced Theengs as a dependency to infer BLE device types and
create sub-entities appropriately.
- Using `BluetoothDevice` and `BluetoothService` entities as the bread
and butter for all the Bluetooth plugin's components.
- Using a shared cache of devices and services between the legacy and
BLE integrations, with merging/coalescing logic included.
- Extended list of discoverable services to include all those officially
supported by the Bluetooth specs.
- Instantiate a separate pool of workers to discover services.
- Refactor of the Bluetooth events - all of them are now instantiated
from a single `BluetoothDevice` object.
2023-03-13 02:31:21 +01:00
Fabio Manganiello
4a8da80c7c
Don't join self._thread on stop in RunnablePlugin if self._thread = current_thread
2023-03-11 23:45:46 +01:00
Fabio Manganiello
72c55c03f2
[WIP] Refactoring/extending models and parsers for Bluetooth entities.
2023-03-03 02:10:11 +01:00
Fabio Manganiello
a688e7102e
Changed default `poll_interval` for `RunnablePlugin`.
...
30 -> 15 seconds.
2023-03-03 02:00:48 +01:00
Fabio Manganiello
15fadb93bb
Added stand-alone `connect` and `disconnect` actions to `bluetooth`.
2023-02-25 01:59:35 +01:00
Fabio Manganiello
2dfb389630
Added remaining `bluetooth` entity types in `_mappers.py`.
2023-02-23 21:20:41 +01:00
Fabio Manganiello
a0556d3a42
Added `PresenceSensor` entities.
2023-02-23 01:42:26 +01:00
Fabio Manganiello
886b930e2f
Support for `bluetooth` devices with multiple temperature sensors.
2023-02-23 01:27:31 +01:00
Fabio Manganiello
56d693032a
Added `DewPointSensor` entities.
2023-02-23 01:23:04 +01:00
Fabio Manganiello
d212276247
Added `PressureSensor` entities.
2023-02-23 01:12:27 +01:00
Fabio Manganiello
dd3f683006
Added `unit` to `bluetooth` mappers whenever available.
2023-02-23 01:04:33 +01:00
Fabio Manganiello
d961e2a997
Added `TimeDurationSensor` entity.
2023-02-23 01:02:13 +01:00
Fabio Manganiello
c3e16f9f9d
Added support for heart rate sensor entities.
2023-02-23 00:55:55 +01:00
Fabio Manganiello
3dab94c346
Added `StepsSensor` detection to `bluetooth`.
2023-02-23 00:50:06 +01:00
Fabio Manganiello
dcab766cef
Only scan for the configured Bluetooth service UUIDs.
2023-02-22 03:36:16 +01:00
Fabio Manganiello
9776921836
Better way of handling with `RawSensor` in `bluetooth` integration.
2023-02-22 02:26:51 +01:00
Fabio Manganiello
a5a923a752
Added `BluetoothDeviceNewDataEvent`.
...
These events handle the case where a Bluetooth device only publishes new
service data without advertising any additional updated properties.
2023-02-22 02:23:11 +01:00
Fabio Manganiello
b2ffc08c89
s/MultiValueSensor/CompositeSensor/g on `smartthings`
2023-02-22 02:18:12 +01:00
Fabio Manganiello
7fa545d7f8
Merge branch 'master' into 29-generic-entities-support
2023-02-22 00:46:33 +01:00
Fabio Manganiello
b4627ecd04
Removed deprecated use_unicode parameter from MPDClient
2023-02-20 20:35:33 +01:00
Fabio Manganiello
aa0b909fff
Use the TheengsDecoder to parse Bluetooth packets and map services to native entities.
2023-02-20 20:27:17 +01:00
Fabio Manganiello
73bf2446bd
Wrap `bluetooth.connect` in a per-device locked section.
2023-02-19 23:11:19 +01:00
Fabio Manganiello
9112239ac3
Better exception management in `AsyncRunnablePlugin`.
...
Exceptions that cause the termination of the plugin's loop should always
be logged as such, unless the plugin is supposed to stop and various
exceptions may occur upon teardown.
2023-02-19 23:03:27 +01:00
Fabio Manganiello
613e32e7c1
Extended number of supported events and data fields in Bluetooth integration.
2023-02-18 01:15:10 +01:00
Fabio Manganiello
7adae272a4
Merge branch 'master' into 29-generic-entities-support
2023-02-15 22:24:41 +01:00
Fabio Manganiello
08553f84b9
Added `timeout` parameter to `websocket.send`.
2023-02-15 22:23:15 +01:00
Fabio Manganiello
a3aa186ddf
- Added support for `scan_pause`/`scan_resume` on `bluetooth` integration.
...
- Added `BluetoothDevice` as its own entity type.
2023-02-13 23:12:25 +01:00
Fabio Manganiello
1d0be5c929
- Simplified prototype for `EntityManager.set`
...
- Added small documentation/annotations notes to the `Plugin` module.
- Small LINT fixes
2023-02-11 21:35:00 +01:00
Fabio Manganiello
575635fd6b
Defined `set` as a base method for all plugins that implement writeable entities
2023-02-11 04:04:21 +01:00
Fabio Manganiello
b0cc80ceb0
Rewriting `bluetooth.ble` plugin to use `bleak` instead of `gattlib`.
2023-02-10 17:40:20 +01:00
Fabio Manganiello
f30e077a5a
Support for custom Bluetooth adapter on `switchbot.bluetooth`.
2023-02-08 23:01:05 +01:00
Fabio Manganiello
8469a1027f
Migrated/refactored `switchbot.bluetooth` integration.
...
- Out `gattlib` + `pybluez`, in `bleak`. It's not platform-dependent, it doesn't
require libboost and other heavy build dependencies, and it doesn't require the
user that runs the service from having special privileges to access raw
Bluetooth sockets.
- Better integration with Platypush native entities. The devices are now mapped
to write-only `EnumSwitch` entities, and the status returns the serialized
representation of those entities instead of the previous intermediate
representation.
2023-02-08 22:42:00 +01:00
Fabio Manganiello
e49a0aec4d
Various improvements.
...
- Better synchronization logic on stop for `AsyncRunnablePlugin`.
- Fixed several thread names by dropping `prctl.set_name` in favour of
specifying the name directly on thread creation.
- Several LINT fixes.
2023-02-08 00:46:50 +01:00
Fabio Manganiello
9d028af524
Removed last reference of `SwitchPlugin`
2023-02-05 23:10:35 +01:00
Fabio Manganiello
419a0cec61
More LINTing
...
Better prototype for `MultiLevelSwitchEntityManager.set_value`
2023-02-05 23:07:43 +01:00
Fabio Manganiello
fde834c1b1
More LINT fixes + refactors
2023-02-05 22:00:50 +01:00
Fabio Manganiello
b8fca97891
Default poll_interval for `RunnablePlugin` set to 30 seconds
2023-02-05 17:31:43 +01:00
Fabio Manganiello
06dfd1a152
Added support for more entities in `switchbot`
2023-02-05 15:34:50 +01:00
Fabio Manganiello
2047b9b76c
[WIP] Refactoring `switchbot` plugin as a runnable plugin + entity manager
2023-02-04 22:22:51 +01:00
Fabio Manganiello
0311d87bc3
The `switch.wemo` integration now extends `SwitchEntityManager`
2023-02-04 00:58:28 +01:00
Fabio Manganiello
de2849546a
LINT fixes
2023-02-04 00:26:48 +01:00
Fabio Manganiello
a160d3217e
Removed legacy `get_sensor_plugins` and `get_switch_plugins` actions
2023-02-03 22:54:42 +01:00
Fabio Manganiello
6ef2feea71
LINT fixes for `utils` plugin
2023-02-03 18:08:19 +01:00
Fabio Manganiello
3db9c58d31
[WIP] Converted `switch.tplink` plugin.
...
`switch.tplink` converted to a `RunnablePlugin` that implements
`SwitchEntityManager`.
2023-02-03 02:20:20 +01:00
Fabio Manganiello
be3b99326f
[WIP] Refactoring `@manages` annotation into a proper `EntityManager` hierarchy
2023-02-02 23:21:12 +01:00
Fabio Manganiello
8aff181956
Merged `zwave.mqtt` backend into the `zwave.mqtt` plugin
2023-01-29 02:34:48 +01:00
Fabio Manganiello
0e56d0fff6
Double-check if self._thread != None on stop on the ntfy thread
...
Race conditions may occur here
2023-01-27 22:12:34 +01:00
Fabio Manganiello
341e749d23
Merged the `zigbee.mqtt` backend into the plugin.
...
- Deprecated the old `zigbee.mqtt` backend
- Black style for the `mqtt` backend
2023-01-27 01:59:57 +01:00
Fabio Manganiello
afdeb91f66
Implemented remaining supported entities for the `smartthings` integration
2023-01-26 22:10:02 +01:00
Fabio Manganiello
ba31dff06a
Major refactor + fixes for `smartthings`
2023-01-24 23:56:28 +01:00
Fabio Manganiello
bb637a1411
Defined a unique `stop_timeout` (default=5) for RunnablePlugin
2023-01-22 14:28:16 +01:00
Fabio Manganiello
6d4cf64253
More work on `smartthings`.
...
- Added support for `Battery` entities
- Fixed saturation range for `Light` entities
- Parsing `min`/`max`/`unit` from the status attributes, if available
2023-01-22 01:01:47 +01:00
Fabio Manganiello
ddd516a677
Added polling/RunnablePlugin logic to `smartthings`
2023-01-22 00:09:10 +01:00
Fabio Manganiello
247912799f
Refactored light.hue integration so EntityUpdateEvents won't be triggered on every call to _get_lights
2023-01-21 14:48:33 +01:00
Fabio Manganiello
a892bad34c
Refactoring smartthings plugin to support more entity types
2023-01-21 14:09:26 +01:00
Fabio Manganiello
9a5e2899e8
Support for external_url and image_url on entities
2023-01-15 20:01:47 +01:00
Fabio Manganiello
9df4d5b5b8
Zigbee entities should be marked as unreachable also if they are currently being interviewed
2023-01-14 22:35:17 +01:00
Fabio Manganiello
68497e6388
Normalize the light devices' IEEE addresses before retrieving the associated devices
2023-01-13 23:28:12 +01:00
Fabio Manganiello
22a566a88b
More refactors and fixes for `zigbee.mqtt`
2023-01-13 02:58:47 +01:00
Fabio Manganiello
38438230d7
The batch of entities currently being processed should have no duplicate keys
2023-01-11 01:22:56 +01:00
Fabio Manganiello
4a2851231c
Large refactor of `zigbee.mqtt`
...
- Support for device options as children configuration entities
- Refactored switches management, removed legacy `switches` plugin
integration, and supporting multiple binary switches for one device
2023-01-09 01:02:49 +01:00
Fabio Manganiello
66000a0774
Merge branch 'master' into 29-generic-entities-support
2023-01-08 00:23:57 +01:00
Fabio Manganiello
7d90b274ae
Make sure that any existing device monitor is terminated upon disconnection
2023-01-07 23:48:02 +01:00
Fabio Manganiello
72454a6583
Merge branch 'master' into 29-generic-entities-support
2023-01-07 23:31:31 +01:00
Fabio Manganiello
40bdc3b7f3
Always wait 5 seconds (regardless of the poll interval) in case of errors.
...
Also, print the error only on the first occurrence, to prevent log
spamming.
2023-01-07 23:21:59 +01:00
Fabio Manganiello
e8f767d819
Take into account the notify_only_if_changed parameter
2023-01-07 23:11:34 +01:00
Fabio Manganiello
c5cf9803ff
Take into account the notify_only_if_changed parameter
2023-01-07 23:09:42 +01:00
Fabio Manganiello
6630873e2c
Merge branch 'master' into 29-generic-entities-support
2023-01-07 22:39:46 +01:00
Fabio Manganiello
2ee810bdc4
Added missing event to documentation
2023-01-07 22:39:23 +01:00
Fabio Manganiello
b7f266cd92
Merge branch 'master' into 29-generic-entities-support
2023-01-07 22:31:36 +01:00
Fabio Manganiello
a77206800d
Added HID plugin to support interaction with generic HID devices
2023-01-07 22:30:32 +01:00
Fabio Manganiello
01727f53bc
Support for is_configuration flag on `zwave` entities
2023-01-03 23:13:34 +01:00
Fabio Manganiello
0f60bc2131
Don't delete external_id and data attributes unless they are set
2023-01-02 21:01:46 +01:00
Fabio Manganiello
b0671354ea
(Tentative) support for zwave light colors
2023-01-02 12:50:01 +01:00
Fabio Manganiello
f9b6799a18
A more robust and scalable way of merging/handling the currentValue/targetValue duality in zwave.mqtt
2023-01-01 12:45:41 +01:00
Fabio Manganiello
9ddebb920f
Merge branch 'master' into 29-generic-entities-support
2022-12-17 00:51:51 +01:00
Fabio Manganiello
152ebdf737
[ #236 ] Added `author` and `tags` attributes to new feed entry event and schema objects.
2022-12-17 00:21:32 +01:00
Fabio Manganiello
cf9d34d38e
A more robust logic to parse `zwave.mqtt` value attributes.
2022-12-10 16:21:29 +01:00
Fabio Manganiello
c4f649a0d5
`autoflush` should be passed as an option to `db.get_session`.
2022-12-10 16:20:14 +01:00
Fabio Manganiello
00a918dd20
Support for the new way of reporting events on ZWaveJS-UI.
...
The most recent versions of ZwaveJS-UI don't send the `hexId` of the
node on node change events. We have therefore to infer it from the
reported `dbLink`.
2022-12-04 20:56:52 +01:00
Fabio Manganiello
3a92bf59ca
Support for the new way of reporting events on ZWaveJS-UI.
...
The most recent versions of ZwaveJS-UI don't send the `hexId` of the
node on node change events. We have therefore to infer it from the
reported `dbLink`.
2022-12-04 20:48:42 +01:00
Fabio Manganiello
1ab85f99d9
Support for illuminance sensor entities on `zigbee.mqtt`
2022-11-30 02:16:56 +01:00
Fabio Manganiello
09d70e2ff1
The `zwavejs2mqtt` project has been renamed `zwave-js-ui`
...
Change the documentation accordingly
2022-11-30 02:04:48 +01:00
Fabio Manganiello
b6370b51da
Extended humidity sensors detection for zigbee.mqtt
2022-11-30 01:24:35 +01:00
Fabio Manganiello
16c24d799d
Removed custom formatting for child zigbee/zwave entity names
...
The parent->child relationship is now modelled on the database itself,
so we no longer need value names specifically formatted as
`[DeviceName] ValueName` - the UI will take care of it.
2022-11-30 01:02:25 +01:00
Fabio Manganiello
080b21ab70
Added support for reachable flag on zwave.mqtt child entities
2022-11-30 01:01:45 +01:00
Fabio Manganiello
2b532c1947
Implemented parent/child support for zigbee.mqtt entities
2022-11-30 00:55:04 +01:00
Fabio Manganiello
cc156a53a1
Support for parent/children relationships on `zwave.mqtt` entities
2022-11-28 21:42:11 +01:00
Fabio Manganiello
0e0c90f0f2
zwave.mqtt additions
...
- Infer entity types on the basis of their semantic type (bool, decimal,
list) and read-only attribute (read-only bool is `BinarySensor`,
read-write bool is `Switch`, read-only decimal is `NumericSensor`,
read-write decimal is `Dimmer`, etc.) instead of trying to infer it
from the command class. Only a small set of command classes (like
configurations, vendor-specific or internal values) will be excluded.
This should greatly increase the number of supported values.
- Added support for `EnumSwitch` entities.
- Added inference for illuminance and humidity sensors.
2022-11-27 22:53:53 +01:00
Fabio Manganiello
ba1681fc22
Merge branch 'master' into 29-generic-entities-support
2022-11-21 12:36:01 +01:00
Fabio Manganiello
02f89258b8
FIX: Task.set_name only works on Python >= 3.8
2022-11-21 09:49:57 +01:00
Fabio Manganiello
ae17a12c12
FIX: `UserManager.get_users`
...
`UserManager.get_users` should not return a reference to the query
object, since the query object will be invalidated as soon as the
connection is closed.
Instead, it should return directly the list of `User` objects.
2022-11-21 00:57:00 +01:00
Fabio Manganiello
b9e6614b04
Added support for `EnumSensor` entities
2022-11-21 00:04:07 +01:00
Fabio Manganiello
d171000a0e
Initial support for sensor entities in `zwave.mqtt`
2022-11-14 22:08:15 +01:00
Fabio Manganiello
a7bc4f443c
Imports order
2022-11-14 21:30:43 +01:00
Fabio Manganiello
45d0e4445b
Sorted entity type names
2022-11-14 00:46:58 +01:00
Fabio Manganiello
211372e472
Added support for dimmers on `zigbee.mqtt`
2022-11-13 18:48:36 +01:00
Fabio Manganiello
24f5a8283c
Added `PRAGMA foreign_keys = ON` before deleting entities on SQLite
...
SQLite doesn't enable foreign keys cascade on delete by default.
2022-11-13 01:18:45 +01:00
Fabio Manganiello
69e097707d
Don't lock read session from the main database
2022-11-12 16:10:57 +01:00
Fabio Manganiello
86edd70d93
Fixed session/concurrency management on the main SQLite db
...
- The `declarative_base` instance should be shared
- Database `session_locks` should be stored at module, not instance
level
- Better isolation of scoped sessions
- Enclapsulated `get_session` method in `UserManager`
2022-11-12 15:36:17 +01:00
Fabio Manganiello
6b7933cd33
Using a different SQLite database for entities
...
This prevents multiprocessing/concurrency issues when modifying the same
database file both from the main process and from the web server process
2022-11-12 02:00:55 +01:00
Fabio Manganiello
02a4c9f667
Added is_query_disabled attribute to entities
2022-11-11 20:40:36 +01:00
Fabio Manganiello
00a43dd1f8
Implemented `EnumSwitch` entity type
...
Done for `zigbee.mqtt`, other plugins will follow
2022-11-11 01:46:38 +01:00
Fabio Manganiello
801ed05684
Added support for binary sensors (in zigbee.mqtt for now)
2022-11-05 01:47:50 +01:00
Fabio Manganiello
0f19104512
Improved zigbee.mqtt node property queries.
...
Now handling cases of nodes with values having multiple levels (> 1) of
nested properties.
2022-11-04 22:51:40 +01:00
Fabio Manganiello
5ca3c06f96
Normalize device names in set_lights
2022-11-02 23:32:21 +01:00
Fabio Manganiello
d5f8d55b4b
Fixed zigbee.mqtt light entity conversion
2022-11-02 23:07:12 +01:00
Fabio Manganiello
636d1ced3a
A more robust way of splitting devices provided in the <ieee_address:value> format
2022-11-02 22:49:19 +01:00
Fabio Manganiello
02abef71e3
Fixes for zigbee devices polling
...
- Don't publish a `get` request if the device has no exposed queriable
attributes.
- Perform the recursive build of the `get` request payload before
checking for the `access` attribute.
2022-11-02 21:54:47 +01:00
Fabio Manganiello
64513be6b8
Initial implementation of sensor entities.
...
Implemented (at least in `zigbee.mqtt`, for now):
- `TemperatureSensor`
- `HumiditySensor`
- `VoltageSensor`
- `CurrentSensor`
- `EnergySensor`
- `PowerSensor`
- `NumericSensor` (generic fallback 1)
- `RawSensor` (generic fallback 2)
- `Sensor` (root class)
2022-11-02 16:38:17 +01:00
Fabio Manganiello
d7214c4c83
Fix for `No converter available` warnings on zigbee2mqtt
...
Only include readable (not state-only) properties on the payload sent to
to `zigbee2mqtt/<device>/get`.
2022-10-31 00:51:26 +01:00
Fabio Manganiello
a1cf671334
Added support for link_quality entities to `zigbee.mqtt`
2022-10-30 11:03:22 +01:00