DOIF mit UnifiClient funktioniert nicht wie erwartet

Begonnen von KyleK, 02 Februar 2026, 08:55:50

Vorheriges Thema - Nächstes Thema

KyleK

Hallo,

ich habe ein Device 'Frank_Handy' vom Typ UnifiClient, mit dem ich von meinem Unifi-Router periodisch Infos zu diesem Handy erhalte:
define Frank_Handy UnifiClient Xiaomi-13
attr Frank_Handy event-on-change-reading .*
attr Frank_Handy oldreadings presence
attr Frank_Handy stateFormat {ReadingsVal($name,"presence","absent") eq "absent" ? "absent since ".ReadingsVal($name,"_f_last_seen","") : "present since ".ReadingsVal($name,"_f_uptime","")}
attr Frank_Handy userReadings presence:fhem_state.* {(ReadingsVal($name,'fhem_state','disconnected') eq 'disconnected' ? 'absent' : 'present') }
#   CODE       Xiaomi-13
#   DEF        Xiaomi-13
#   FUUID      694dc6f0-f33f-9ecb-fd42-84f8e7d03641f4f0
#   IODev      UX7
#   LASTInputDev UX7
#   MODEL      Xiaomi Communications Co Ltd
#   MSGCNT     7718
#   NAME       Frank_Handy
#   NOTIFYDEV  global
#   NR         613
#   STATE      present since 0d 0h 11m 42s
#   TYPE       UnifiClient
#   UX7_MSGCNT 7718
#   UX7_TIME   2026-02-02 08:42:18
#   VERSION    0.0.3 BETA
#   eventCount 7718
#   OLDREADINGS:
#     2026-02-02 08:28:38   presence        absent
#   READINGS:
[...]
setstate Frank_Handy 2026-02-02 08:30:48 presence present
[...]

Ich wollte jetzt mit einem DOIF Nachrichten erzeugen, wenn das Device oben entweder "present" oder "absent" ist:

{
  if(["^.*_Handy$:presence" eq present])
  {
    fhem("msg push $device: present");
  }
  elsif(["^.*_Handy$:presence" eq absent])
  {
    fhem("msg push $device: absent");
  }
}

Leider triggert dieses DOIF gar nicht, es kommen keine Nachrichten durch.
Wenn ich das DOIF generischer schreibe:
{
  if(["^.*_Handy$:presence"])
  {
    fhem("msg push $device: $event");
  }
}
Dann triggert es, aber in $event stehen etliche readings, statt nur "absent" oder "present".
Im Event Monitor schaut das so aus:
2026-02-02 08:48:20 msgConfig globalMsg fhemMsgPush: Frank_Handy: _f_diff_tx_bytes: 0,fhem_state: disconnected,network_members_group_ids: ARRAY(0x5e21e7f103e8),last_ipv6: ARRAY(0x5e21e79eaff8),_f_last_seen_duration: 0d 0h 0m 46s,satisfaction_avg: HASH(0x5e21e79e1b28),ipv6_addresses: ARRAY(0x5e21e8a85340),presence: absent
bzw:
2026-02-02 08:49:59 msgConfig globalMsg fhemMsgPush: Frank_Handy: _f_last_seen: 2026-02-02 08:49:51,satisfaction: 99,tx_bytes: 182,_f_uptime: 0d 0h 0m 22s,uptime: 22,_uptime_by_uap: 22,tx_rate: 1201000,_f_assoc_time: 32d 7h 49m 29s,satisfaction_real: 99,wifi_tx_attempts: 99,_f_last_seen_duration: 0d 0h 0m 8s,rssi: 38,_last_seen_by_uap: 1770018591,_f_uptime_by_uap: 0d 0h 0m 22s,rx_bytes: 414,satisfaction_avg: HASH(0x5e21e7a42780),_f_last_seen_by_uap: 2026-02-02 08:49:51,ipv6_addresses: ARRAY(0x5e21e8c71598),satisfaction_reason: 2048,fhem_state: connected,_f_diff_tx_bytes: -20017,assoc_time: 1770018569,wifi_tx_retries_percentage: 10,network_members_group_ids: ARRAY(0x5e21e7ef6448),signal: -56,dhcpend_time: 230,latest_assoc_time: 1770018569,rx_packets: 5,_f_latest_assoc_time: 2026-02-02 08:49:29,last_ipv6: ARRAY(0x5e21e87be430),last_seen: 1770018591,tx_packets: 1,_f_dhcpend_time: 0d 0h 3m 50s,disconnect_timestamp: 1770018487,ccq: 819,tx_retries: 11,presence: present

Warum enthält "$event" so viel Text? Ich hätte dort nur "present" oder "absent" erwartet?
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen