blueprint: name: Dynamic Medication Reminder via NFC description: > Tracks medication intake via NFC scan. - If no person is selected, the scanner is assumed to be the taker. - If a person is selected manually (e.g. a child without mobile), the medication schedule resets for them, but the scanner gets the reminder. - Sends reminders again after a flexible interval (hours or days). domain: automation input: medication_name: name: Medication Name selector: text: nfc_tag_id: name: NFC Tag ID selector: text reminder_delay: name: Reminder Interval selector: number: min: 1 max: 168 reminder_unit: name: Time Unit selector: select: options: - Hours - Days person_selector: name: input_select for manual person selection selector: entity: domain: input_select trigger: - platform: event event_type: tag_scanned condition: - condition: template value_template: > {{ trigger.event.data.tag_id == !input nfc_tag_id }} variables: scanned_user_id: "{{ trigger.context.user_id }}" manual_person: "{{ states(!input person_selector) | lower }}" person: > {% if manual_person != "no selection" %} {{ manual_person }} {% else %} {{ state_attr('user.' ~ scanned_user_id, 'friendly_name') | lower }} {% endif %} delay_seconds: > {% if !input reminder_unit == 'Days' %} {{ (!input reminder_delay | int) * 86400 }} {% else %} {{ (!input reminder_delay | int) * 3600 }} {% endif %} datetime_entity: "input_datetime.medication_{{ person }}" notify_service: > {% set scanner_device = "notify.mobile_app_" ~ (state_attr('user.' ~ scanned_user_id, 'device_name') | lower | default('unknown')) %} {{ scanner_device }} action: - service: input_datetime.set_datetime target: entity_id: "{{ datetime_entity }}" data: timestamp: "{{ now().timestamp() }}" - delay: seconds: "{{ delay_seconds }}" - service: "{{ notify_service }}" data: message: "{{ !input medication_name }} is due again for {{ person | title }}." - service: input_select.select_option target: entity_id: !input person_selector data: option: "No selection"