Obecność urządzenia w sieci

Ze względu na sporą już ilość urządzeń bateryjnych używam automatyzacji, która mnie informuje, że któreś z urządzeń ma niski poziom baterii. Dodatkowo używam w NR flow, który powiadamia mnie o tym, że któreś z urządzeń “przestało nadawać”. Użyłem noda trigger, który opóźnia komunikat w przypadku jak dostaje kolejną wiadomość w zaznaczonym zakresie. Takie mało eleganckie rozwiązanie ale póki co od długiego czasu się sprawdza.

Można też w ustawieniach zigbee2mqtt ustawiając “dostępność” otrzymać w zakładce urządzenia ich stan.



Ale w tym przypadku trzeba biegać do zakładki i to sprawdzać, albo skorzystać z informacji publikowanej przez mqtt "availability → online/offline.
A jak inni użytkownicy radzą sobie z taką “kontrolą” ?

1 polubienie

W przypadku urządzeń mqtt jest mechanizm ostatniej woli LWT. Nie używam, wiec trzeba doczytać. W taki celu zostało to opracowane.
Swoje urządzenia IP monitoruje za pomocą programy Dude Mikrotika. Jeśli masz odpowiedni router to na nim można to postawić.
Jeśli nie , to taki routerOS można postawić na maszynie wirtualnej.
Nic nie sprawdzam, tylko usterki są zgłaszane z automatu.

Używałem MIKROTIK ROUTERBOARD Chateau LTE12 (RBD53G-5HacD2HnD-TC, ale kiedy po zakupie trafił 2 x do serwisu aby ostatecznie po wymianie na nowy w lutym br trafić do szuflady zraziłem się do MT. Przeszedłem na 4G-AC86U Asusa + AC od ubiquiti.

Mam Asus RT-AX55 i zainstalowana integracja AsusRouter
Na podstawie adresów mac telefonów utworzyłem grupę użytkownicy
/config/groups.yaml

domownicy:
    name: Domownicy w domu
    #all: true #Set this to true if the group state should only turn on if all grouped entities are on.
    icon: mdi:account-group
    entities:
      - device_tracker.xx_7f_31_7f_1e_xx
      - device_tracker.redmi_note_10_xx
      - device_tracker.xx_2d_10_99_de_xx
      - device_tracker.xx_75_74_31_13_xx

w dashboard wygląda to tak
domownicy

Jak usuniesz # z linii #all: true
Bedziesz miał to o ci chodzi , encja “Domownicy w domu” da wynik "poza domem "

Dla urządzeń Tasmota i ESPHome encje tworzą się automatycznie

To prawda, MT ma duży przekrój wyrobów i trafi im się wadliawa seria. Padły wszystkie RB411, które kupiłem w pracy ponad 10szt. Psuły się zawsze w ten sam sposób. W domu odpukać :slight_smile:
Dla mnie mają wiecej zalet, bo można na nich zrobić coś więcej niż router.

Jeśli chodzi o Z2M
To można stworzyć sensor który będzie informował ile urządzeń z atrybutem last_seen jest nie widzianych w sieci od ponad 2 godzin i listę tych urządzeń.

Ile o ponad 2 godziny: >
          {% set cutoff_time = now() - timedelta(hours=2) %}
          {% set devices_not_seen = states | selectattr('attributes.last_seen', 'defined') | selectattr('attributes.last_seen', '<', cutoff_time.strftime('%Y-%m-%dT%H:%M:%S%z')) | list %}
          {{ devices_not_seen | length }}
które od ponad 2 godziny: >
          {% set czas = now() - timedelta(hours=2) %}
          {% set devices_not_seen = states | selectattr('attributes.last_seen', 'defined') | selectattr('attributes.last_seen', '<', cutoff_time.strftime('%Y-%m-%dT%H:%M:%S%z')) | map(attribute='name') | list %}
          {{ devices_not_seen | join(', ') }}

/
Ostatnio widziane:

to wymaga zapewne zapewnienia aby urządzenia taki atrybut posiadały :slight_smile:


Podobnego szablonu możemy użyć aby sprawdzić obecność np. sensorów HA

  Checking sensors...
{%- set result = namespace(sensors=[]) %}
    {%- for state in states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %}
      {%- if "=unavailable" in state | string  %}
        {%- set result.sensors = result.sensors + [state] %}
      {%- endif %}
    {%- endfor %}
    Unavailable Sensors: 
    {{result.sensors|join('\n')}}

    Checking binary_sensors...
    {%- set result = namespace(sensors=[]) %}
    {%- for state in states.binary_sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %}
      {%- if "unavailable" in state | string %}
        {%- set result.sensors = result.sensors + [state] %}
      {%- endif %}
    {%- endfor %}
    Unavailable binary sensors: 
    {{result.sensors|join('\n')}}