AtmovioAtmovio

Integrace

REST API a Home Assistant

Vše, co Atmovio ví, je dostupné jako JSON v domácí síti – a když chcete, posílá se i na váš web. V obou směrech stejná jména polí.

Home Assistant za pět minut

Vytvořte v Atmoviu API klíč (Nastavení → Systém → API pro jiné systémy), vložte ho do YAML níže a načtěte Home Assistant znovu. Získáte senzory pro využití AI a disk, binární senzor nahrávání, entitu kamery pro každou kameru a poslední detekci jako senzor, na který jde navázat automatizaci.

  1. Nastavení → Systém → API pro jiné systémy → Vytvořit klíč. Zkopírujte klíč (začíná at_).
  2. Vložte YAML níže do configuration.yaml (nahraďte IP a klíč).
  3. Restartujte Home Assistant. Entity se objeví pod Atmovio.
# configuration.yaml – Atmovio status, disk and recording
rest:
  - resource: http://192.168.1.20/api/v1/status
    headers:
      Authorization: "Bearer at_XXXXXXXXXXXXXXXXXXXXXXXX"
    scan_interval: 60
    sensor:
      - name: Atmovio AI requests today
        value_template: "{{ value_json.ai.used_today }}"
        icon: mdi:weather-sunset
      - name: Atmovio disk used
        value_template: "{{ value_json.storage.disk_pct }}"
        unit_of_measurement: "%"
        icon: mdi:harddisk
      - name: Atmovio temperature
        value_template: "{{ value_json.system.temp | replace(' °C','') }}"
        unit_of_measurement: "°C"
        device_class: temperature
      - name: Atmovio version
        value_template: "{{ value_json.version }}"
        json_attributes: ["update"]
    binary_sensor:
      - name: Atmovio recording
        value_template: "{{ value_json.frigate.online and value_json.storage.mode in ['recording','legacy'] }}"
        device_class: running
      - name: Atmovio daytime
        value_template: "{{ value_json.ai.daytime }}"
        device_class: light
# configuration.yaml – one entity per camera (name = camera id in Atmovio)
camera:
  - platform: generic
    name: Garden sky
    still_image_url: http://192.168.1.20/api/v1/cameras/zahrada/snapshot.jpg?h=720&api_key=at_XXXXXXXXXXXXXXXXXXXXXXXX
    verify_ssl: false

# camera status from /api/v1/cameras
rest:
  - resource: http://192.168.1.20/api/v1/cameras
    headers:
      Authorization: "Bearer at_XXXXXXXXXXXXXXXXXXXXXXXX"
    scan_interval: 60
    binary_sensor:
      - name: Garden camera online
        value_template: "{{ (value_json.cameras | selectattr('name','eq','zahrada') | first).online }}"
        device_class: connectivity
# configuration.yaml – latest alert as a sensor (id changes → new detection)
rest:
  - resource: http://192.168.1.20/api/v1/detections?limit=1
    headers:
      Authorization: "Bearer at_XXXXXXXXXXXXXXXXXXXXXXXX"
    scan_interval: 60
    sensor:
      - name: Atmovio last sky alert
        value_template: "{{ value_json.detections[0].phenomenon if value_json.detections else 'none' }}"
        json_attributes_path: "$.detections[0]"
        json_attributes: ["id", "ts", "score", "camera_label", "description", "image_url", "detail_url"]

# automations.yaml – push a notification with the picture
- alias: Atmovio – sky alert
  trigger:
    - platform: state
      entity_id: sensor.atmovio_last_sky_alert
      attribute: id
  condition:
    - condition: template
      value_template: "{{ state_attr('sensor.atmovio_last_sky_alert','score') | int >= 7 }}"
  action:
    - service: notify.mobile_app_my_phone
      data:
        title: "{{ states('sensor.atmovio_last_sky_alert') }} · {{ state_attr('sensor.atmovio_last_sky_alert','score') }}/10"
        message: "{{ state_attr('sensor.atmovio_last_sky_alert','description') }}"
        data:
          image: "{{ state_attr('sensor.atmovio_last_sky_alert','image_url') }}?api_key=at_XXXXXXXXXXXXXXXXXXXXXXXX"
          url: "{{ state_attr('sensor.atmovio_last_sky_alert','detail_url') }}"

Pi odpovídá přes obyčejné HTTP v domácí síti; Home Assistant musí být ve stejné síti nebo dosáhnout přes VPN.

REST API (jen čtení)

Klíč v hlavičce Authorization: Bearer (nebo X-API-Key, nebo ?api_key=). Běží přes HTTP v LAN/VPN – nikdy nevystavujte do internetu.

curl -H "Authorization: Bearer at_…" http://192.168.1.20/api/v1/status | jq .
GET /api/v1/statusverze, Frigate, úložiště, využití a práh AI, slunce, systém, výpadky, dostupná aktualizace
GET /api/v1/cameraskamery: online, fps, IP, LAN/VPN, AI zap/vyp, URL snímku
GET /api/v1/cameras/{name}/snapshot.jpg?h=720aktuální JPEG
GET /api/v1/detections?limit=20&camera=&notified=1&min_score=0detekce AI (výchozí jen s upozorněním; notified=0 = všechna vyhodnocení)
GET /api/v1/detections/{id} · /image.jpgjedna detekce a její snímek
GET /api/v1/videos · /{id}/downloadvystřižená videa s odkazy; MP4
GET /api/v1/events?limit=20log výpadků / obnovení / oblohy
GET /api/healthbez přihlášení – pro monitoring

Takhle vypadá detekce

{
  "id": 123, "ts": "2026-09-13T19:12:03", "camera": "zahrada", "camera_label": "Zahrada – západ",
  "score": 9, "phenomenon": "Červánky", "phenomena": ["cervanky"],
  "description": "Výrazné oranžovo-růžové červánky nad obzorem.",
  "notified": true, "exported": true, "error": null,
  "image_url": "http://192.168.1.20/api/v1/detections/123/image.jpg",
  "detail_url": "http://192.168.1.20/detection/123"
}

Webhook – Atmovio posílá k vám

Pro web, který se na Pi nedostane. Každou minutu heartbeat s kompletním snímkem API a náhledy kamer; každé upozornění se snímkem. POST ověřený tokenem, přijímač v PHP je v repozitáři.

  1. Nasaďte přijímač (nebo napište vlastní – formát je popsaný).
  2. Nastavení → Upozornění → vlastní web: adresa + token, „Uložit a otestovat“.
  3. Od té chvíle váš web ukazuje totéž co administrace Atmovia.
POST https://your-site.example/atmovio/webhook.php
Authorization: Bearer <token>

{
  "type": "event", "kind": "sky", "ts": "2026-09-13T19:12:03",
  "camera": "zahrada", "camera_label": "Zahrada – západ",
  "subject": "Červánky 9/10", "message": "…", "score": 9, "phenomena": ["cervanky"],
  "image": "<base64 JPEG>", "link": "http://192.168.1.20/detection/123"
}

Funguje i s

  • Node-RED – Uzel HTTP request → JSON; spouštějte flow na nové detekce.
  • Grafana / InfluxDB – Jednou za minutu /api/v1/status: disk, teplota, využití AI.
  • Libovolný skript – Stačí curl + jq – příklady jsou v dokumentaci.

Kompletní dokumentace