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:
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.
TRMNL: Private Plugin anlegen
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>
Falls andere Layouts (Half / Quadrant) genutzt werden: dort denselben Code hinterlegen.
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);
Wichtige Stolpersteine (Lessons Learned)
Payload muss so aussehen
{ "merge_variables": { ... } }
Sonst antwortet TRMNL mit HTTP 422
Variable-ID prüfen
- Fehler
Variable existiert nicht → falsche ID im Script
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)
Rate-Limit beachten
Ergebnis
-
Webhook-POST kommt an (HTTP 200)
-
Variablen erscheinen in Your variables
-
TRMNL zeigt die Werte zuverlässig an
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.