Skip to main content

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


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)

Uploaded Source

Built Distribution

sensation-0.1.6-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

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

Hashes for sensation-0.1.6.tar.gz
Algorithm Hash digest
SHA256 4f92df16f95172c02ac21a7562d757e9e328d0c20a31cef64aad165fa1d05f8d
MD5 8946f8cce99362fe2fa549ae43ca1fac
BLAKE2b-256 7526ff60eaf6869192033f8cdaac117b89b7b71fd6781fa8454bdf16c1302bc1

See more details on using hashes here.

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

Hashes for sensation-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 f54600a179186d07a56bf08d62f98ed99051e2a2ea715447e060efe16aadadbf
MD5 f2ff6a399b35af5388ed0d85667fc216
BLAKE2b-256 a0c918803ef1a08235bbe79ef8e7499a194046f1e720e1214d0aced3dc076534

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page