Stary telefon jako kamera

Witam,
Może mój pomysł się komuś przyda…

Jakiś czas temu wpadłem na pomysł aby użyć stary telefon xiaomi z androidem jako kamery. Żeby dobrać się do aparatu zainstalowałem appkę CamON Live Streaming. Obraz udostępniany jest po rtsp. Niestety nie udało mi się zmusić go do wykorzystania pełnej rozdzelczości aparatu, ale to co jest mi wystarcza.

Appka działa w tle i może uruchamiać się automatycznie po restarcie. Telefon po jakimś czasie trochę zamula, więc zmuszam go do restartu raz dziennie.

Apka udostępnia sporo informacji o telefonie po swoim RestAPI (dobrze opisanym) - m.in. stan baterii i oświetlenia. Umożliwia też (poprzez RestAPI) zmianę zoom i focus (jest też autofocus).

Aktualnie kamerę mam podpietą do HA poprzez Frigate, a do sterowania (zoom/focus/lampa) i czujników (bateria) zrobiłem prostą integrację opartą na Restful - gdyby ktoś był zainteresowany mogę zamieścić plik yaml.
Telefon jest podłączony do prądu poprzez “smart” wtyczkę, która włącza lub wyłącza ładowanie w zależności od stanu baterii.

obraz
obraz

5 Likes

No pewnie, skoro już tyle napisałeś to wrzuć i wszystkie konkrety.

camonlive.yaml (2,5 KB)
Obiecany plik yaml. Wrzucam go do HA/packages/camonlive.yaml, a w configuration.yaml mam:

homeassistant:
  packages: !include_dir_named packages

Jako że to moja pierwsza integracja, to idealna nie jest :slight_smile: Działa w oparciu o periodyczne odpytywanie po RestAPI, co skutkuje dużymi opóźnieniami w pokazywaniu faktycznego stanu. Np. od momentu włączenia lampy do “zaświecenia się” jej stanu w HA może minąć kilkanaście sekund. Kiedyś może znajdę czas, żeby zrobić to lepiej :slight_smile:

Jeszcze karta widoku kamery - to połączenie “collapsable-card”, “mushroom” i “frigate”:

type: custom:collapsable-cards
title_card:
  type: custom:mushroom-title-card
  subtitle: Garaż
cards:
  - type: custom:mushroom-chips-card
    chips:
      - type: action
        icon_color: purple
        tap_action:
          action: call-service
          service: rest_command.camonlive_autofocus
          target: {}
        icon: mdi:focus-auto
      - type: action
        tap_action:
          action: call-service
          service: rest_command.camonlive_zoom_out
          target: {}
        icon: mdi:magnify-minus
      - type: action
        tap_action:
          action: call-service
          service: rest_command.camonlive_zoom_in
          target: {}
        icon: mdi:magnify-plus
      - type: light
        entity: switch.camonlive_torch
        icon: mdi:lightbulb
        content_info: none
        use_light_color: false
        tap_action:
          action: toggle
      - type: template
        content: '{{ states(''sensor.camonlive_battery'') }} %'
        icon: |-
          {% if is_state('binary_sensor.camonlive_charging', 'off') %}
            mdi:battery-arrow-down
          {% else %}
            mdi:battery-charging
          {% endif %}
        icon_color: |-
          {% if is_state('binary_sensor.camonlive_charging', 'off') %}
            white
          {% else %}
            orange
          {% endif %}
        entity: sensor.camonlive_battery
        tap_action:
          action: more-info
  - type: custom:frigate-card
    cameras:
      - camera_entity: camera.oldphone
    view:
      default: live
    live:
      lazy_load: false
      auto_mute: all
      show_image_during_load: false
      controls:
        title:
          duration_seconds: 60
    menu:
      buttons:
        timeline:
          enabled: false
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        icon: mdi:human
        icon_color: |-
          {% if is_state('binary_sensor.oldphone_person_occupancy', 'off') %}
            white
          {% else %}
            orange
          {% endif %}
        entity: binary_sensor.oldphone_person_occupancy
        tap_action:
          action: more-info
      - type: template
        icon: mdi:car
        icon_color: |-
          {% if is_state('binary_sensor.oldphone_car_occupancy', 'off') %}
            white
          {% else %}
            orange
          {% endif %}
        entity: binary_sensor.oldphone_car_occupancy
        tap_action:
          action: more-info
      - type: template
        icon: mdi:dog
        icon_color: |-
          {% if is_state('binary_sensor.oldphone_dog_occupancy', 'off') %}
            white
          {% else %}
            orange
          {% endif %}
        entity: binary_sensor.oldphone_dog_occupancy
        tap_action:
          action: more-info
      - type: template
        icon: mdi:rodent
        icon_color: |-
          {% if is_state('binary_sensor.oldphone_mouse_occupancy', 'off') %}
            white
          {% else %}
            orange
          {% endif %}
        entity: binary_sensor.oldphone_mouse_occupancy
        tap_action:
          action: more-info

A karta statusu to po prostu "entities:

      type: entities
      entities:
        - entity: sensor.camonlive_battery
        - entity: binary_sensor.camonlive_charging
        - entity: switch.camonlive_torch
        - entity: sensor.camonlive_model
        - entity: sensor.camonlive_serial
        - entity: sensor.camonlive_id
        - entity: sensor.camonlive_version
1 Like

Podobne rozwiązanie jest już dość dawno z oficjalną integracją HA dla aplikacji.

Działa świetnie i płynnie.

2 Likes

Wydaje mi się, że gdzieś już napotkałem na to rozwiązanie i z jakiegoś powodu nie zdecydowałem się… Czy ta apka + integracja udostępnia video w h264 wraz z audio? A dane o baterii? Lampka, focus, zoom? Jakoś nic o tym nie ma na oficjalnej stronie integracji…
Tak czy siak pewnie wypróbuję, dzięki za link.

Audio jest, detekcja ruchu, zoom, focus, stan baterii itd. W sumie mam 13 encji. Sporo zależy od modelu smartfona, tableta oraz wersji Androida.

Faktycznie, jest wszystko co potrzebuję. Niepotrzebnie się męczyłem z tą inną apką. Ale przynajmniej się czegoś nauczyłem robiąc integrację :slight_smile:
Dzięki!

2 Likes