Releases: koval01/lovensepy
v1.1.4
Nightly (main) - 850462152801fe5e1865dd6d27b65f911c108aee
nightly-main Experimental build of binary releases
v1.1.3
HTTP (aiohttp)
Sync and async transports, Socket API token/socket URL helpers, and get_qr_code use aiohttp; JSON bodies are parsed with read_response_json so LAN/cloud responses still decode when Content-Type is not application/json.
WebSocket
WsTransport is backed by aiohttp ws_connect instead of the websockets package; receive keeps a stable socket reference across close(), and all outgoing frames go through an asyncio.Lock so concurrent Engine.IO sends cannot interleave send_str.
Dependencies
Runtime stack is aiohttp + pydantic only (websockets and hyperframe removed as direct deps). Dev/docs/service extras refreshed (see lockfile); pip-audit is capped at <2.10 where it conflicts with semgrep on tomli.
Links: CHANGELOG · compare v1.1.2…v1.1.3 · PyPI
v1.1.2
Concurrency
Thread-safe BLE per-loop connect lock on macOS, ControlScheduler state locking for parallel FastAPI handlers, and guarded lazy httpx.AsyncClient creation in async HTTP transport.
Shared command helpers
New lovensepy._command_utils: timeSec clamp, nested JSON parsing, pattern-rule letters, and function action clamping — reused by LAN, Server, and BLE paths.
FastAPI LAN service
Centralized HTTP error mapping (LovenseError → 502, shutdown/scheduler cases); async-safe task listing and preset/pattern session matching.
API hygiene
Legacy Pydantic request payload classes stay in lovensepy._models but are no longer in __all__ (dict payloads remain the runtime API).
Docs
Appendix lists examples/ble_direct_send_uart_once.py.
Tests
Scheduler concurrency tests, BLE connect-serializer lock test, and tests/run_all.py extended with FastAPI + BLE metadata phases.
Links: CHANGELOG · compare v1.1.1…v1.1.2 · PyPI
v1.1.1
BLE branding
marketing/firmware metadata and resolve_ble_branding_nickname for stable display names (ToyConfig map, firmware rules, UART fallback).
Docs
Russian mirror of the docs site (.ru.md next to .en.md), MkDocs and CI updated.
Home Assistant MQTT
discovery / topics / bridge behaviour refinements.
FastAPI LAN service
config, models, and endpoints aligned with current BLE hub behaviour.
Tests
more coverage for BLE branding, marketing firmware, and hub paths.
Links: CHANGELOG · compare v1.1.0…v1.1.1 · PyPI
v1.1.0
BLE (direct connection)
Bluetooth Low Energy support: direct client and hub, UART-based presets (Pat / Preset), and environment-driven tuning (including LOVENSEPY_BLE_PRESET_UART and LOVENSEPY_BLE_SYNC_TIMEOUT). Install extras with pip install lovensepy[ble].
One async API across transports
LovenseAsyncControlClient is the shared abstract base: the same control surface for LAN, server, and BLE—you only swap the concrete client class. AsyncServerClient now matches LAN/BLE (wait_for_completion, open_ended on presets, get_toys(..., query_battery=...), Position / PatternV2 helpers, unified pattern_request shape).
FastAPI as a first-class service
The FastAPI layer is part of the package (lovensepy.services.fastapi), not a loose sample: backend and exports align with the shared async API. For BLE presets, POST /command/preset no longer accepts uart_index / uart_keyword; choose the UART prefix via environment and reconnect.
Documentation
Docs cover installation, connection methods, tutorials, direct BLE, and API reference—including type hints and swapping transports through LovenseAsyncControlClient.
Links: CHANGELOG · compare v1.0.6…v1.1.0 · PyPI
v1.0.6
This release adds a Home Assistant–oriented MQTT bridge workflow, tightens HTTP client identity, and aligns local/CI checks with Semgrep.
🏠 Home Assistant (MQTT)
- MQTT bridge (
HAMqttBridge) for discovery and command topics, with safer error handling and feature-level state tracking. - Lazy export path for HA integration from the package root where applicable.
- Unit tests for bridge behavior (topic mapping, commands, discovery payloads).
🌐 HTTP & packaging
- Consistent
User-Agent/ default headers via package metadata (install or editable install keeps version in sync withpyproject.toml). - Version bump to 1.0.6.
✅ Developer experience
- README: Semgrep invocation, expanded usage/docs (including FastAPI LAN REST tutorial references where documented).
Full Changelog: v1.0.5...v1.0.6
v1.0.5
🚀 Major Branding & Meta Update
This release marks the official transition and stabilization of the project's identity.
🔄 Renaming & Branding
- Repository Renamed:
pylove→lovensepy. Now the GitHub URL perfectly matches the PyPI package name. - Documentation: Cleaned up
README.md, removed legacy naming notes, and updated all internal links.
🛠 Metadata & SEO
- Pyproject Overhaul: Added
project.urlsincluding Repository, Issues, and Documentation links. - PyPI Integration: Meta-information on PyPI will now correctly point back to this repository.
- Keywords: Updated project tags for better discoverability in SexTech and IoT categories.
🐍 Technical Changes
- Python Support: Updated
requires-pythonto>=3.12. - Linter Config: Refined
ruffrules to better handle Lovense API's camelCase naming conventions.
Full Changelog: v1.0.4...v1.0.5