{% extends 'swimmonitor/base.html.twig' %} {% import 'swimmonitor/_macros.html.twig' as sm %} {% block title %}Container-Übersicht{% endblock %} {% block breadcrumb %}
  • Übersicht
  • {% endblock %} {% set metrics = [ {key: 't1', label: 'Temperatur', unit: '°C', digits: 1}, {key: 'chlor', label: 'Freies Chlor', unit: 'mg/l', digits: 2}, {key: 'redox', label: 'Redox', unit: 'mV', digits: 0}, {key: 'ph', label: 'pH-Wert', unit: '', digits: 1}, ] %} {% set online_count = onlineById|filter(v => v)|length %} {% set deviations = [] %} {% for container in containers %} {% set d = data[container.id]|default({}) %} {% for m in metrics %} {% set st = sm.state(d[m.key ~ '_status'] ?? null) ~ '' %} {% if st in ['warn', 'alarm'] %} {% set deviations = deviations|merge([{container: container, metric: m, state: st, value: d[m.key] ?? null}]) %} {% endif %} {% endfor %} {% endfor %} {% set warn_ids = deviations|map(x => x.container.id)|reduce((carry, id) => id in carry ? carry : carry|merge([id]), []) %} {% block page_head %}

    Container-Übersicht

    Live-Werte aller Schwimmcontainer aus der Poolsteuerung.

    Container
    {{ containers|length }}
    Online
    {{ online_count }}
    Offline
    {{ containers|length - online_count }}
    Abweichungen
    {{ deviations|length }}
    Stand
    {{ 'now'|date('H:i') }}
    {% endblock %} {% block content %}
    Container
    {% for m in metrics %}
    {{ m.label }}
    {% endfor %}
    {% for container in containers %} {% set d = data[container.id]|default({}) %} {% set is_online = onlineById[container.id]|default(false) %}
    {{ d.geo_ort|default('Unbekannt') }} / {{ d.geo_region|default('Unbekannt') }} / {{ d.geo_land|default('Unbekannt') }}
    {{ d.error is defined ? 'API nicht erreichbar' : (is_online ? 'online' : 'offline') }}
    {{ sm.lte(lteById[container.id]|default(null)) }}
    {% for m in metrics %} {{ sm.metric(d, m.key, m.label, m.unit, m.digits) }} {% endfor %}
    {% else %}
    Keine ContainerIn der Übersicht sind noch keine Container angelegt.
    {% endfor %}

    Standorte

    OpenStreetMap · Mini-Container, blauer Punkt online, roter offline

    Abweichungen

    aktueller Stand
    {% if deviations is not empty %} {% else %}
    Alles im SollKeine Warnungen oder Alarme.
    {% endif %}
    {{ sm.metric_modal() }} {% endblock %} {% block vendor_stylesheets %}{% endblock %} {% block vendor_javascripts %}{% endblock %} {% block javascripts %} {% endblock %}