E-Ink Dashboard / Display termnl

Moin zusammen, ist da schon wer von Euch am testen/basteln oder wenigstens drüber gestolpert:

Minimalistisches E-Ink Display zur Darstellung von Image-Dateien mit biszu 6 Monaten Batterielaufzeit.

Bedienung/Beschickung über Server(hosted oder lokal) und mit App-Verbindungen zu Google-CAl usw. sowie „Rezepten“ für Multiviews und Tageszeiten ganz spannend.

Wie wärs denn hier mit einer Visu von (trägen) IPS Werten und Meldungen ?!

1 „Gefällt mir“

So, das Ding läuft jetzt auch mit dem Ziel träge Werte aus Symcon und z.b. Stundenpläne der Zwerge auszugeben.

Hier ist eine knappe Kurzanleitung:


:white_check_mark: TRMNL erfolgreich mit IP-Symcon anbinden (Webhook-Ansatz)

Ich habe TRMNL erfolgreich an IP-Symcon angebunden.
Entscheidend ist der Webhook-Ansatz mit korrekt verschachteltem Payload und passendem Markup.


:one: TRMNL: Private Plugin anlegen

  • TRMNL → Private PluginBuild your own

  • Strategy: Webhook

  • Plugin speichern

  • Webhook URL unten kopieren
    (Format: https://usetrmnl.com/api/custom_plugins/``<UUID>)


:two: TRMNL: Markup (Full)

Wichtig: TRMNL erwartet merge_variables, stellt diese im Markup aber top-level bereit.

<div class="layout">
  <div class="columns">
    <div class="column">
      <div class="title">{{ title }}</div>
      <div class="subtitle">{{ label }}</div>

      <div style="font-size:72px;font-weight:700;margin-top:18px;">
        {{ value_text }}
      </div>

      {% if updated_at %}
        <div class="meta" style="margin-top:10px;">
          zuletzt: {{ updated_at }}
        </div>
      {% endif %}
    </div>
  </div>
</div>

:right_arrow: Falls andere Layouts (Half / Quadrant) genutzt werden: dort denselben Code hinterlegen.


:three: IP-Symcon: PHP-Script (1 Variable)

Beispiel für eine Variable (z. B. Puffertemperatur):

<?php
declare(strict_types=1);

$TRMNL_URL = 'https://usetrmnl.com/api/custom_plugins/DEINE_UUID';
$VARID     = 12345; // echte Variable-ID
$TITLE     = 'Temperatur';
$LABEL     = 'Puffer 2';

if (!IPS_VariableExists($VARID)) {
    IPS_LogMessage('TRMNL', 'Variable existiert nicht');
    return;
}

$valueText = GetValueFormatted($VARID);
$v = IPS_GetVariable($VARID);
$updatedAt = date('c', $v['VariableChanged']);

$payload = [
    'merge_variables' => [
        'title'      => $TITLE,
        'label'      => $LABEL,
        'value_text' => $valueText,
        'updated_at' => $updatedAt
    ]
];

$json = json_encode($payload, JSON_UNESCAPED_UNICODE);

$ch = curl_init($TRMNL_URL);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => $json,
    CURLOPT_TIMEOUT        => 15
]);
curl_exec($ch);
curl_close($ch);


:four: Wichtige Stolpersteine (Lessons Learned)

:red_exclamation_mark: Payload muss so aussehen

{ "merge_variables": { ... } }

:right_arrow: Sonst antwortet TRMNL mit HTTP 422

:red_exclamation_mark: Variable-ID prüfen

  • Fehler Variable existiert nicht → falsche ID im Script

:red_exclamation_mark: Preview bleibt leer?

  • Force Refresh im Plugin ausführen

  • Browser neu laden

  • prüfen, ob Markup auf {{ title }} usw. zugreift (nicht auf merge_variables.title)

:red_exclamation_mark: Rate-Limit beachten

  • mehrere Tiles → nicht zu oft pushen

  • Empfehlung: alle 20 Minuten oder bei Aktualisierung


:white_check_mark: Ergebnis

  • Webhook-POST kommt an (HTTP 200)

  • Variablen erscheinen in Your variables

  • TRMNL zeigt die Werte zuverlässig an

:backhand_index_pointing_right: Fazit:
Der Webhook-Ansatz funktioniert stabil mit IP-Symcon, wenn merge_variables korrekt verwendet und das Markup passend aufgebaut ist.


Getestet mit Temperatur-Variablen inkl. Einheit über GetValueFormatted() – läuft sauber.
Muss ich nur noch “hübsch machen”… es gibt u.a. einen quad-View…

p.s. Frogit gibts als fertiges Plugin.

@steiner hast das gute Teil auch schon mit Symcon in Verwendung :slight_smile:

paresy