Skip to content

Releases: mosandlt/Bosch-Smart-Home-Camera-Tool-NodeRED

0.4.3-alpha

Choose a tag to compare

@github-actions github-actions released this 19 Aug 21:02

Family-parity batch: ports 3 HA-integration capabilities that fit this
repo's stateless request/response node model (per a ground-truth gap audit
against HA v16.1.12 — everything requiring persistent state/sessions was
correctly excluded by that audit and is not part of this batch).

  • New node bosch-camera-ai-analysis: fetches one or more live
    snapshots for a camera and emits them with a ready-to-use suspicion-scoring
    prompt + structured-output schema, mirroring HA's analyze_camera_ai
    service. Deliberately does not call any AI/LLM provider itself — HA's
    own service doesn't embed one either (it delegates to HA's separately
    configured ai_task integration); this node stops at fetching the
    snapshots and hands them to the flow for wiring into whichever AI/vision
    node the user has installed (msg.attachments, plus msg.payload.images/
    .instructions/.structure), matching Node-RED's own composability
    philosophy over embedding a bespoke HTTP client + API-key config.
  • New node bosch-camera-postroll-capture: bounded, one-shot "record N
    seconds starting now" local capture via ffmpeg -t <seconds> -c copy,
    triggered by an incoming message (e.g. wired to bosch-camera-event).
    Not HA's nvr_postroll_seconds ring-buffer design (that derives its tail
    from an already-running stateful pre-roll recorder) — a simpler
    event-triggered analogue, with the same ffmpeg codec/argv choices as HA's
    Mini-NVR pre-roll ring so output files are consistent.
  • Fix: stream quality selection. bosch-api.js's getStreamUrl sent
    only highQualityVideo: true unconditionally and never the inst=
    parameter Bosch's API also uses for quality tiering — the sibling HA
    integration's v16.1.2 fix confirmed highQualityVideo alone is not
    sufficient to actually change the stream tier. New quality option
    (auto/high/low, default auto) on bosch-camera-stream-url and
    bosch-camera-nvr-record, mapped exactly like HA's
    quality_prefs.get_quality_params: highhighQualityVideo=true, inst=1; lowhighQualityVideo=false, inst=4 (LOCAL only); auto
    highQualityVideo=false, inst=2. Behaviour change: the previous
    hardcoded highQualityVideo: true (no inst) is replaced by the auto
    default — set quality: high to keep the old always-high-quality
    behaviour.

0.4.2-alpha

Choose a tag to compare

@github-actions github-actions released this 16 Jul 03:20

Docs-only release: fixed the MCP row in the shared Integration Comparison
table (shares the Python CLI's bosch_config.json rather than its own
OAuth2 PKCE flow) and a broader README refresh (stale sibling versions,
changelog excerpt, dev/example-flow detail). No functional changes.

0.4.1-alpha

0.4.1-alpha Pre-release
Pre-release

Choose a tag to compare

@mosandlt mosandlt released this 14 Jul 06:07

Docs-only release: refreshed the sibling-repo version table in README's
Integration Comparison section. No functional changes.

0.4.0-alpha

Choose a tag to compare

@github-actions github-actions released this 13 Jul 19:04

Feature-parity batch 2: local NVR recording plus firmware status/install —
closing more of the gap against the family's Feature Parity Matrix
(docs/family-parity-plan.md §2b).

  • New node bosch-camera-nvr-record: spawns/manages an ffmpeg
    subprocess that pulls a camera's local RTSP/RTSPS stream (via the existing
    cloud connection API) and writes it to disk as fixed-length segments
    (-f segment -c copy). Continuous mode only — a ring-buffer/pre-roll
    "event buffered" mode was scoped out as it doesn't fit this repo's
    stateless flow-node paradigm. Start/stop via msg.payload/msg.topic
    (start/stop/on/off/1/0, case-insensitive) or autostart-on-deploy. A small
    state machine (idle → starting → recording → stopping) plus a
    cancelRequested flag guards every transition so overlapping start/stop
    messages, and node close (undeploy/redeploy) firing mid-flight, can never
    leak an untracked ffmpeg process or double-spawn one. SIGTERM → SIGKILL
    escalation on stop/close, with a hard safety-net timer so undeploy never
    blocks indefinitely on an unkillable process.
  • New node bosch-camera-firmware-status (query, read-only): GET /v11/video_inputs/{id}/firmware, normalises the wire response
    (current/upToDate/update/updating/status) into
    installedVersion/latestVersion/upToDate/updating/status.
  • New node bosch-camera-firmware-install (action): PUT /v11/video_inputs/{id}/firmware {"id": <latestVersion>}, ported
    byte-accurate against the sibling HA integration's endpoint/field contract.
    Triggers a real camera reboot (~3-7 min), so it only proceeds when
    msg.payload is strictly {confirm: true} — any other input is rejected
    before any network call. Always re-reads firmware status fresh before
    installing and refuses to PUT when the camera already reports updating
    or is already up to date (reported as a non-error triggered: false
    output, not a flow error). A local busy-guard blocks a second install for
    the same node instance while one is still in flight.
  • bosch-api: added getFirmware()/installFirmware() wrappers, same
    TLS-pinned/timeout-guarded pattern as every existing function.
  • 46 new tests (nvr-record: 28, firmware-status/install: 18), 100% line
    coverage on all three new nodes. Every change hardened via
    THREE_PER_ISSUE_PER_CHANGE adversarial sub-agent bug-hunts before release
    (nvr-record: 3 rounds, fixed a concurrent-start double-spawn race, a stop
    escalation-timer reset bug, a false "already recording" report during an
    in-flight stop, close-during-transition handling, and a test-infra flake;
    firmware nodes: node logic/editor-help/API-contract review, no bugs found).

0.3.0-alpha

Choose a tag to compare

@github-actions github-actions released this 11 Jul 19:51

Feature-parity batch 1: 3 new nodes covering camera light control, motion
detection, and glass-break/fire-alarm sound detection — closing part of the
gap against the family's Feature Parity Matrix (docs/family-parity-plan.md §2b).

  • New node bosch-camera-light: reads or sets the front-illuminator /
    wallwasher light state (GET/PUT /v11/video_inputs/{id}/lighting_override,
    read-modify-write). Fixed on/off presets plus a msg.payload patch mode
    (frontLightOn/wallwasherOn/frontLightIntensity, a 0.0-1.0 fraction).
    Wallwasher is cloud-write-only — no LAN/RCP fallback exists for it.
  • New node bosch-camera-motion: reads or sets motion detection
    (GET/PUT /v11/video_inputs/{id}/motion) — enable/disable plus sensitivity
    (OFF/LOW/MEDIUM_LOW/MEDIUM_HIGH/HIGH/SUPER_HIGH). Setting a
    sensitivity implicitly enables motion detection (Bosch-side behaviour).
  • New node bosch-camera-audio-detection: reads or sets glass-break /
    fire-and-smoke-alarm sound detection (GET/PUT /v11/video_inputs/{id}/audioDetectionConfig,
    Gen2 Audio-Plus cameras only). Both fields are always sent together on write
    (the node reads current state first and merges, since Bosch resets an
    omitted field to false server-side).
  • bosch-api: added getLight/setLight, getMotion/setMotion,
    getAudioDetection/setAudioDetection — same TLS-pinned, timeout-guarded
    pattern as every existing wrapper function.
  • 21 new tests (happy + error paths per node, node-red-node-test-helper + nock),
    including an explicit frontLightIntensity: 0 regression (minimum brightness
    must not be mistaken for "unset").

Deliberately out of scope for this release (documented, not silently
dropped — see the session notes in docs/family-parity-plan.md): lighting
schedule, wifi/network info, diagnostics, unread count, zones/masks, and
rules/friends are planned for a follow-up batch. Two-way intercom, pan/PTZ,
the full alarm suite, and NVR/recording browse are deliberately skipped —
their session/stateful nature doesn't map cleanly onto Node-RED's
fire-and-forget node model; revisit only on a concrete user request.

0.2.8-alpha

Choose a tag to compare

@github-actions github-actions released this 11 Jul 19:41

CI uplift to match the family's Gold-tier quality bar (HA integration / MCP reference).

  • Coverage: added c8 coverage measurement (npm run coverage), wired into the test
    CI job. Gated at 85% lines / 70% functions / 75% branches (set just below the measured
    baseline of 92%/77%/83%, not invented).
  • CI: new codeql.yml (CodeQL javascript-typescript, security-extended queries,
    weekly scheduled scan).
  • CI: new secret-scan.yml (gitleaks) + .gitleaks.toml — allowlists this repo's known
    intentional non-secrets (the public OSS-app OAuth client_id/secret pair and the pinned
    Bosch TLS CA certificate in nodes/lib/bosch-api.js, both already documented in-code as
    non-sensitive) without blinding the scanner to anything else.
  • CI: new dependency-review.yml, gated on package.json/package-lock.json diffs in
    PRs, fails on high-severity advisories.
  • No functional/runtime changes. npm audit --omit=dev: 0 vulnerabilities.

0.2.7-alpha

0.2.7-alpha Pre-release
Pre-release

Choose a tag to compare

@mosandlt mosandlt released this 08 Jul 04:58

CI-only fix: the release-workflow job could crash on gh release edit, which does not support --generate-notes (create-only), and had two smaller hardening gaps.

  • CI: gh release edit/gh release create now always pass --notes-file, never --generate-notes — the same bug that actually crashed the HA repo's Publish-release job on a tag-edit path.
  • CI security: the release version is now passed to awk via -v instead of being interpolated into the program text, closing an awk/command-injection vector reachable through the pushed tag name.
  • CI: a missing ## [VERSION] CHANGELOG.md section for the tagged release now hard-fails the workflow instead of silently falling back to auto-generated notes.

0.2.6-alpha

Choose a tag to compare

@github-actions github-actions released this 03 Jul 19:56

Docs-only patch: the "Related Projects" table listed sibling-repo versions several releases behind (Home Assistant, Python CLI, ioBroker, MCP Server, and this repo's own self-reference).

  • Docs: refreshed sibling-repo version references in README.md to current released versions.

v0.2.5-alpha — form-data security fix + CI release job

Choose a tag to compare

@github-actions github-actions released this 01 Jul 10:02

Maintenance release: a security fix for a transitive dependency plus CI hardening.

  • Security — form-data bumped to 4.0.6 (GHSA-hmw2-7cc7-3qxx): versions 4.0.0–4.0.5 (pulled in transitively via axios) allowed CRLF injection through unescaped multipart field names/filenames. Resolved via npm audit fix. No runtime CVEs (npm audit --omit=dev: 0 vulnerabilities).
  • CI: added a GitHub Release job to the pipeline.

v0.2.2-alpha — bosch-camera-stream-url node

Choose a tag to compare

@mosandlt mosandlt released this 11 Jun 07:40

v0.2.2-alpha — bosch-camera-stream-url node

New node bosch-camera-stream-url — opens a live stream connection via the Bosch cloud proxy and returns the RTSP, RTSPS and HLS stream URL(s) in msg.payload. Camera id and connection type are overridable at runtime; embedded Digest credentials are redacted in node logs.