# Twig-Templating in Eliona

## **Einführung in Twig Templating**

Eliona verwendet [-> \[Externer Link\] Twig](https://twig.symfony.com/), eine leistungsfähige und flexible Templating-Engine für JavaScript und PHP, zur dynamischen Erzeugung von Nachrichteninhalten. Twig ermöglicht es, Templates zu definieren, die von externen Nachrichtendiensten wie SMS, Google Chat, Slack oder E-Mail verwendet werden.

### **Twig.js Version**

Die aktuelle implementierte Version von Twig.js in Eliona ist **1.17.1**. Die vollständige Dokumentation und Implementierungsnotizen sind unter folgenden Links verfügbar:

* [-> \[Externer Link\] Twig.js Repository](https://github.com/twigjs/twig.js)
* [-> \[Externer Link\] Twig.js Implementierungsnotizen](https://github.com/twigjs/twig.js/wiki/Implementation-Notes)

***

## Twig-Syntax und Funktionen

Twig-Syntax ermöglicht es, dynamische Inhalte in Vorlagen einzufügen und zu verarbeiten. Einige häufig verwendete Funktionen sind:

### **Variablen ausgeben**

```twig
{{ alarm.val }}  {# Gibt den Wert des Alarms aus #}
{{ asset.name }}  {# Zeigt den Namen des betroffenen Assets an #}
```

### **Bedingungen verwenden**

```twig
{% if alarm.prio == 1 %}
    Achtung: Hohe Priorität!
{% else %}
    Normaler Alarm.
{% endif %}
```

### **Schleifen nutzen**

```twig
{% for tag in alarm.tags %}
    - {{ tag }}
{% endfor %}
```

### **Zeichenketten formatieren**

```twig
{{ alarm.message.come.de | upper }}  {# Gibt den Alarmtext in Grossbuchstaben aus #}
```

***

## **Verfügbare Templates und Variablen in Eliona**

Eliona bietet verschiedene Template-Typen für unterschiedliche Anwendungsfälle:

* [**Ticket-Template**](#ticket-template)
* [**Alarm-Template**](#alarm-template)
* [**Passwort-Reset-Template**](#passwort-reset-template)
* [**yAxis Formatter-Template**](#yaxis-formatter)
* [**Legend-Template**](#legend-template)

Jedes dieser Templates unterstützt spezifische Variablen, die dynamisch mit den jeweiligen Daten befüllt werden.

***

## **Ticket-Template**

### **Verfügbare Variablen**

Das Ticket-Template kann zur automatisierten Generierung von Ticket-Benachrichtigungen verwendet werden. Folgende Variablen stehen zur Verfügung:

```json
{
  "ticket": {
    "ticket_id": "Eindeutige ID des Tickets",
    "parent_id": "ID des übergeordneten Tickets, falls vorhanden",
    "title": "Titel des Tickets",
    "description": "Beschreibung des Tickets",
    "priority": "Priorität des Tickets",
    "reason": "Grund oder Ursache des Tickets",
    "state": "Aktueller Status des Tickets",
    "created_by": "Ersteller des Tickets",
    "created_at": "Erstellungszeitpunkt des Tickets",
    "assigned_to": "Zugewiesene Person oder Gruppe",
    "assigned_at": "Zeitpunkt der Zuweisung",
    "closed_at": "Zeitpunkt der Schließung",
    "proj_id": "Projekt-ID",
    "asset_id": "Asset-ID",
    "alarm_id": "Alarm-ID, falls mit einem Alarm verbunden",
    "alarm": "Details zum verknüpften Alarm",
    "modified_by": "Letzter Bearbeiter",
    "modified_at": "Zeitpunkt der letzten Änderung",
    "contact": "Kontaktinformationen",
    "tags": "Liste von Tags, die mit dem Ticket verbunden sind"
  }
}
```

### **Beispiel für ein Ticket-Template**

```twig
Neues Ticket: {{ ticket.title }}

Nachricht:
Ticket-ID: {{ ticket.ticket_id }}
Erstellt von: {{ ticket.created_by }}
Priorität: {{ ticket.priority }}
Beschreibung: {{ ticket.description }}
```

***

## **Alarm-Template**

### **Verfügbare Variablen**

Das Alarm-Template basiert auf einem Testdatensatz und enthält umfangreiche Details zu Alarmen und deren zugehörigen Assets.

```json
{
  "alarm": {
    "low": "Unterer Grenzwert",
    "high": "Oberer Grenzwert",
    "tags": "Liste von Tags, die mit dem Alarm verbunden sind",
    "prio": "Prioritätsstufe des Alarms",
    "ack_p": "Gibt an, ob der Alarm bestätigt werden muss",
    "equal": "Gibt an, ob ein Gleichheitscheck durchgeführt wird",
    "enable": "Aktivierungsstatus des Alarms",
    "urldoc": "Dokumentations-URL",
    "func_id": "Funktionale ID des Alarms",
    "msg": "Die aufgelöste Alarm Nachricht,
    "message": {
      "come": {
        "de": "{{asset.name}} ({{alarm.val}})",
        "en": "{{asset.name}} ({{alarm.val}})",
        "fr": "{{asset.name}} ({{alarm.val}})",
        "it": "{{asset.name}} ({{alarm.val}})"
      },
      "gone": "Nachricht bei Ende des Alarms"
    },
    "subject": "Betreff des Alarms",
    "subtype": "Untertyp des Alarms",
    "alarm_id": "Eindeutige Alarm-ID",
    "asset_id": "ID des betroffenen Assets",
    "attribute": "Betroffenes Attribut des Assets",
    "dont_mask": "Maskierungsstatus des Alarms",
    "notify_on": "Benachrichtigungstrigger (z. B. 'R' für Reminder)",
    "check_type": "Typ der Alarmüberprüfung",
    "created_at": "Erstellungszeitpunkt des Alarms",
    "created_by": "Ersteller des Alarms",
    "auto_ticket": "Gibt an, ob automatisch ein Ticket erstellt wird",
    "modified_at": "Zeitpunkt der letzten Änderung",
    "modified_by": "Letzter Bearbeiter",
    "ts": "Zeitstempel des Alarms",
    "val": "Wert des betroffenen Parameters",
    "multi": "Multiplikator für den Alarmwert",
    "ack_ts": "Zeitpunkt der Bestätigung",
    "gone_ts": "Zeitpunkt des Verschwindens des Alarms",
    "ack_text": "Bestätigungstext",
    "ack_user_id": "ID des bestätigenden Benutzers"
  },
  "locale":"Die Sprach- und Regionseinstellung",
  "domain_name": "Der Domainname der Umgebung",
  "asset": {
    "ar": "Aktivierungsstatus",
    "gai": "Globale Asset-ID",
    "lat": "Latitude des Assets",
    "lon": "Longitude des Assets",
    "name": "Name des Assets",
    "tags": "Liste der Tags des Assets",
    "expert": "Expertenmodus aktiviert",
    "storey": "Stockwerk des Assets",
    "urldoc": "Dokumentations-URL des Assets",
    "proj_id": "Projekt-ID",
    "archived": "Archivierungsstatus",
    "asset_id": "Eindeutige Asset-ID",
    "acl_access": "Zugriffsstatus",
    "asset_type": "Typ des Assets",
    "tracker_id": "Tracker-ID",
    "description": "Beschreibung des Assets",
    "acl_permissions": "Zugriffsberechtigungen"
  }
}
```

### **Beispiel für ein Alarm-Template**

```twig
Alarm für {{ asset.name }}

Nachricht:
Der Alarm "{{ alarm.message.come.de }}" wurde ausgelöst.
Attribut: {{ alarm.attribute }}
Wert: {{ alarm.val }}
```

***

## User-Template

Das *User-Template* ermöglicht den Zugriff auf benutzerspezifische Informationen – insbesondere für Benachrichtigungszwecke (z. B. E-Mail, Chat oder Alarmweiterleitung). Es kann in allen Templates verwendet werden, bei denen die Benutzerdaten verfügbar sind.

**Verfügbare Variablen**

```json
"user": {
  "email": "E-Mail-Adresse des Benutzers",
  "user_id": "Eindeutige Benutzer-ID",
  "lastname": "Nachname des Benutzers",
  "firstname": "Vorname des Benutzers",
  "google_chat": "Google Chat-Adresse (optional)",
  "slack": "Slack-Adresse (optional)",
  "mail2service": {
    "voice": "E-Mail-Adresse für Sprachbenachrichtigungen (z. B. eCall Voice)",
    "sms": "E-Mail-Adresse für SMS-Benachrichtigungen (z. B. eCall SMS)"
  }
}
```

### **Beispiel für ein User-Template**

```twig
Benachrichtigung an: {{ user.firstname }} {{ user.lastname }} ({{ user.email }})

Sprach-Alarm weiterleiten an: {{ user.mail2service.voice }}
SMS-Alarm weiterleiten an: {{ user.mail2service.sms }}

Slack-User: {{ user.slack }}
Google Chat: {{ user.google_chat }}
```

***

## **Passwort-Reset-Template**

### **Verfügbare Variablen**

Das Passwort-Reset-Template wird in Eliona verwendet, um Benutzern eine E-Mail mit einem Link zum Zurücksetzen ihres Passworts zu senden.

```json
{
    "host": "Domain der Umgebung, in der das System betrieben wird",
    "password_reset_token": "Einzigartiger Token zum Zurücksetzen des Passworts"
}
```

### **Beispiel für ein Passwort-Reset-Template**

```twig
Hallo,  

um Ihr Passwort zurückzusetzen, klicken Sie bitte auf den folgenden Link:  

<a href="https://{{ host }}/password-reset/{{ password_reset_token }}">Passwort zurücksetzen</a>  

Falls Sie diese Anfrage nicht gestellt haben, können Sie diese E-Mail ignorieren.  

Achten Sie darauf, dass der Link unverändert bleibt, um die Funktionalität zu behalten:  
href="https://{{ host }}/password-reset/{{ password_reset_token }}"
```

{% hint style="warning" %}
Achten Sie darauf das der Link unverändert bleibt um die Funktionalität bei zu behalten: href="https\://{{host}}/password-reset/{{password\_reset\_token}}"
{% endhint %}

***

## **yAxis Formatter**

Der **yAxis Formatter** bestimmt die Darstellung der **Achsenbeschriftung** in Diagrammen. Er zeigt den aktuellen Wert der Datenreihe zusammen mit zusätzlichen Attributinformationen an.

### **Verfügbare Variablen für den yAxis Formatter**

* `{{unit}}` – Einheit des Wertes (z. B. °C, %, kWh)
* `{{value}}` – Der aktuelle Wert der Datenreihe
* `{{attribute}}` – Name des Attributs
* `{{gai}}` – Globale Asset-ID
* `{{aggregatedDataField}}` – Datenfeld für die Aggregation
* `{{aggregatedDataRaster}}` – Raster, mit dem die Daten aggregiert wurden
* `{{aggregatedDataType}}` – Typ der Aggregation (z. B. Durchschnitt, Summe)

### **Beispiel für einen yAxis Formatter**

```twig
twigKopierenBearbeiten{{value}} {{unit}} ({{attribute}})
```

**Ergebnis für Temperaturdaten:**\
→ `22.5 °C (Raumtemperatur)`

***

## **Legend-Template**

Das **Legend-Template** bestimmt die Darstellung der **Legendenbeschriftung** in Diagrammen. Es beschreibt die Datenreihe, indem es den Namen des Assets oder der Datenreihe mit Attributinformationen kombiniert.

### **Verfügbare Variablen für das Legend-Template**

* `{{unit}}` – Einheit des Wertes (z. B. °C, %, kWh)
* `{{attribute}}` – Name des Attributs
* `{{gai}}` – Globale Asset-ID
* `{{name}}` – Name des Assets oder der Datenreihe
* `{{aggregatedDataField}}` – Datenfeld für die Aggregation
* `{{aggregatedDataRaster}}` – Raster, mit dem die Daten aggregiert wurden
* `{{aggregatedDataType}}` – Typ der Aggregation (z. B. Durchschnitt, Summe)

### **Beispiel für ein Legend-Template**

```twig
{{name}} - {{attribute}} ({{unit}})
```

**Ergebnis für einen Temperatursensor:**\
→ `Klimaanlage Büro 1 - Raumtemperatur (°C)`

***

## **Fazit**

Twig.js ermöglicht eine flexible und effiziente Nutzung von Templates in Eliona. Durch die Verwendung von Twig-Variablen und -Funktionen können personalisierte Inhalte für Tickets, Alarme und E-Mails generiert werden. Weitere Informationen zur Twig-Syntax sind in der offiziellen Dokumentation verfügbar: [-> \[Externer Link\] Twig.js Wiki](https://github.com/twigjs/twig.js/wiki/Implementation-Notes).
