This is a library for communicating with IoT and home automation sensors and low-level devices.
Project description
Sensation
This is a Python library for communicating with IoT and home automation sensors and low-level devices.
Sensors
SEN0395
The SEN0395 is a millimeter-wave radar motion sensor capable of detecting human presence up to 9 meters away.
Code | SEN0395 |
Brand | DFRobot |
Type | Millimeter-wave radar motion sensor |
Name | mmWave Radar - 24GHz Human Presence Detection Sensor (9 Meters) |
Alternative Names | LeapMMW HS2xx3A series |
Python Package | sensation.sen0395 |
Product URL | DFRobot mmWave Radar |
For more information about the product, refer to the SEN0395 documentation.
Commands not implemented yet
- resetCfg
- setInhibit/getInhibit
- setUart/getUart
- setGpioMode/getGpioMode
- setEcho/getEcho (disabling echo would likely break the current implementation)
- setUartOutput/getUartOutput
- getSWV/getHWV
Common Usage Examples
Sensor Instance (common code for the following examples)
from serial import Serial
from sensation.sen0395 import *
sensor = Sensor("sensor_name", Serial('/dev/ttyAMA0', 115200, timeout=1))
sensor.status() # Not needed, just checking that the sensor works well
# SensorStatus(sensor_id=SensorId(sensor_type=<SensorType.SEN0395: 'sen0395'>, sensor_name='sensor_name'), port='/dev/ttyAMA0', timeout=1, is_reading=False, is_scanning=False)
# >> DO YOUR OWN THINGS HERE <<
sensor.close() # This closes also the `Serial` instance
Sensor Instance Async
import serialio
from sensation.sen0395 import *
async def example():
serial_con = serialio.serial_for_url("serial:///dev/ttyAMA1", 115200)
sensor = SensorAsync("my_sensor", serial_con)
await serial_con.open()
await sensor.status() # Not needed, just checking that the sensor works well
# >> DO YOUR OWN THINGS HERE <<
await sensor.close() # This closes also the serial connection instance
Presence Reading
sensor.read_presence() # Returns `None` if sensor is not scanning
sensor.start_scanning()
# CommandResponse(outputs=[sensorStart, Done])
sensor.read_presence() # Returns `False` on no presence
# False
sensor.read_presence() # Returns `True` on presence
# True
Presence Reading Async
await sensor.start_scanning()
await sensor.read_presence()
Presence Observer
handler = PresenceHandler()
handler.observers.append(lambda presence: print(f"[presence_change] presence=[{presence}]"))
sensor.handlers.append(handler)
# sensor.clear_buffer() # You may want to clear the buffer first, if the connection has been opened for a while
sensor.start_reading() # This starts a new thread, alternatively you can run the blocking `read()` method by yourself
# [presence_change] presence=[False]
# [presence_change] presence=[True]
sensor.stop_reading()
Presence Observer Async
handler = PresenceHandlerAsync()
# Supports both sync...
handler.observers.append(lambda presence: print(f"[presence_change] presence=[{presence}]"))
# ...and async observers
async def async_observer(presence):
print(f"[presence_change] presence=[{presence}]")
handler.observers.append(async_observer)
sensor.handlers.append(handler)
# await sensor.clear_buffer() # You may want to clear the buffer first, if the connection has been opened for a while
sensor.start_reading() # This starts a new async task
await sensor.stop_reading() # Wait for the reading task to complete
Managed Sensor Configuration
sensor.configure_latency(10, 60)
# ConfigChainResponse(pause_cmd=None, cfg_cmd=CommandResponse(outputs=[outputLatency -1 10 60, Done]), save_cmd=CommandResponse(outputs=[saveCfg 0x45670123 0xCDEF89AB 0x956 128C6 0xDF54AC89, save cfg complete, Done]), resume_cmd=None)
Managed Sensor Configuration Async
await sensor_async.configure_latency(10, 60)
Manual Sensor Configuration
Note: All below methods are async in the async sensor
sensor.stop_scanning()
#CommandResponse(outputs=[sensorStop, Done])
sensor.set_latency(15, 35)
# CommandResponse(outputs=[outputLatency -1 15 35, Done])
sensor.save_configuration()
# CommandResponse(outputs=[saveCfg 0x45670123 0xCDEF89AB 0x956128C6 0xDF54AC89, save cfg complete, Done])
sensor.start_scanning()
# CommandResponse(outputs=[sensorStart, Done])
#SensorStatus(sensor_id=SensorId(sensor_type=<SensorType.SEN0395: 'sen0395'>, sensor_name='sensor_name'), port='/dev/ttyAMA0', timeout=1, is_reading=False, is_scanning=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sensation-0.1.6.tar.gz
(574.8 kB
view details)
Built Distribution
sensation-0.1.6-py3-none-any.whl
(12.4 kB
view details)
File details
Details for the file sensation-0.1.6.tar.gz
.
File metadata
- Download URL: sensation-0.1.6.tar.gz
- Upload date:
- Size: 574.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f92df16f95172c02ac21a7562d757e9e328d0c20a31cef64aad165fa1d05f8d |
|
MD5 | 8946f8cce99362fe2fa549ae43ca1fac |
|
BLAKE2b-256 | 7526ff60eaf6869192033f8cdaac117b89b7b71fd6781fa8454bdf16c1302bc1 |
File details
Details for the file sensation-0.1.6-py3-none-any.whl
.
File metadata
- Download URL: sensation-0.1.6-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f54600a179186d07a56bf08d62f98ed99051e2a2ea715447e060efe16aadadbf |
|
MD5 | f2ff6a399b35af5388ed0d85667fc216 |
|
BLAKE2b-256 | a0c918803ef1a08235bbe79ef8e7499a194046f1e720e1214d0aced3dc076534 |