{# Identity fragment — swapped in place by /openlcb/nodes/{alias}/probe. #}
{% if probe_error %}
Probe failed: {{ probe_error }}
{% endif %} {# Guard on the field being present at all — error-path templates render a minimal node dict without it. #} {% set sec_ago = node.seconds_ago if 'seconds_ago' in node else none %} {% if snip %} {% else %} {% endif %} {% if pip %} {% else %} {% endif %}
Alias {{ node.alias }}
Node ID {{ node.node_id or '—' }}
Last heard {% if sec_ago is none %} no frames yet {% elif sec_ago < 60 %} {{ '%.0f' | format(sec_ago) }}s ago {% elif sec_ago < 3600 %} {{ '%.0f' | format(sec_ago / 60) }}m ago {% else %} {{ '%.1f' | format(sec_ago / 3600) }}h ago {% endif %}
Manufacturer {{ snip.manufacturer or '—' }}
Model {{ snip.model or '—' }}
Hardware version {{ snip.hardware_version or '—' }}
Software version {{ snip.software_version or '—' }}
User name {{ snip.user_name or '—' }}
User description {{ snip.user_description or '—' }}
SNIP not probed yet — click Refresh identity
Supported protocols {% for name in pip.names %} {{ name }} {% else %} (none reported) {% endfor %}
PIP raw mask {{ pip.raw }}
PIP flags not probed yet