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?