Suche

    Raumdisplay

    Dokumentation direkt aus GitHub Wilkware/RoomDisplay ↗

    Version Product Version License Actions

    Das Modul verbindet ein openHASP-Display über MQTT mit dem IPS-System. Die für das Display gestalteten Seiten und ihren Objekten können mit Variablen oder Skripten von IPS synchronisiert werden.

    Module-Visu   Module-Visu

    1. Funktionsumfang

    Das Modul übersetzt Aktionen und Ereignisse in Symcon und aktualisiert umgekehrt die Variablen in Symcon zur Darstellung auf dem Display.

    Derzeit werden folgende UI-Objekte unterstützt:
    • Arc
    • Bar
    • Button
    • Checkbox
    • Dropdown
    • Gauge
    • Image
    • Label
    • LED Inicator
    • Line Meter
    • MessageBox
    • Object
    • Roller
    • Slider
    • Spinner
    • Switch
    • Toggle Button

    Was macht bzw. was kann das Modul?

    • Mapping von IPS-Werten auf UI-Objekte im Mini-Display
    • Aktionen auf dem Display werden nach IPS gesendet
    • Verschiedenste Konfigurationsmöglichkeiten zur visuellen Darstellung der Werte
    • Unterstützt verschiedene Displayformate und Layouts.
    • Übergabe der Aktion und Ausführung via Script
    • Abfrage von (Status-)Informationen
    • Ausführung von OpenHASP System- bzw. Globalen Kommandos
    • Automatische Schaltung für Helligkeit und Einbrennschutz
    • Verwaltung, Prüfung und Sicherung des Seitenlayouts
    • Automatische Umwandlung von Seitenlayout in Objektliste
    • Import und Export von Objektkonfigurationen
    • Unterstützung der TileVisu via HTML-SDK

    2. Voraussetzungen

    • Symcon ab Version 8.1

    3. Installation

    • Über den Modul Store das Modul Raumdisplay installieren.
    • Alternativ Über das Modul-Control folgende URL hinzufügen.
      https://github.com/Wilkware/RoomDisplay oder git://github.com/Wilkware/RoomDisplay.git

    4. Einrichten der Instanzen in Symcon

    • Unter “Instanz hinzufügen” ist das ‘Room Display’-Modul (Alias: ‘Raumdisplay’) unter dem Hersteller ’(Geräte)’ aufgeführt.

    Konfigurationsseite:

    Einstellungsbereich:

    🖼️ Anzeigegerät …

    NameBeschreibung
    GerätenamenName des Gerätes (= Hostname)
    GeräteadresseIP ist optional , aber ohne gehen Downloads von Screenshots und der Designdatei (pages.jsonl) nicht.

    📄 Seitenaufbau …

    NameBeschreibung
    Datei (pages.jsonl)JSONL formatierter Inhalt zur Syncronisierung des Seitenaufbaus
    HERUNTERLADEN¹Schalter um den Seitenaufbau vom Gerät herunterzuladen
    HOCHRLADEN²Schalter um den Seitenaufbau zum Gerät senden.
    SICHERN¹Schalter um den Seitenaufbau vom Gerät herunterzuladen und in eine Datei zu schreiben.
    PRÜFEN²Schalter um den Inhalt des Seitenaufbaus auf JSONL Konformität zu prüfen.
    EINLESEN³Startet den Prozess zum Einlesen und Umwandeln des Seitenaufbaus in eine Objektzuordnung.

    ¹) Bei dieser Aktion werden die Daten direkt vom Gerät (Display) heruntergeladen und weiterverarbeitet.
    ²) Bei dieser Aktion werden die aktuell im Konfigurationsformular angezeigten Daten verwendet, ungeachtet ihres Speicherstatus.
    ³) Bei dieser Aktion werden die aktuell gespeicherten Daten der Instanz verwendet (müssen nicht mit den aktuell angezeigten Daten übereinstimmen).

    🧩 Objektzuordnung …

    NameBeschreibung
    ObjekteTable zur Zuordnung zwischen UI- und IPS-Objekt
    AUSWAHL¹Schalter um den Zustand der Auswahlboxen umzukehren, Basis ist die Checkbox des ersten Elementes
    LÖSCHEN¹Schalter um selektierte Zeile zu löschen
    DUPLIZIEREN¹Schalter um selektierte Zeile zu duplizieren (und gleich einzusortieren)
    PRÜFEN¹Schalter um die hinterlegten Eingaben (Berechnungen) eines ausgewählten Eintrag zu prüfen.
    ÜBERTRAGEN¹Öffnet ein Dialog um die zuvor selektierten Zeilen in eine Datei zu exportieren, oder eine abgespeicherte Konfiguration aus einer Datei zu importieren.
    NEUSORTIEREN²Schalter um die Liste endsprechend Seite und ID zu sortieren
    ABGLEICHEN²Schalter um die hinterlegten Objekte mit dem Inhalt des Seitenaufbaus gegen zu prüfen. den (Umkehr-)Folgezustand.

    ¹) Diese Aktionen verwenden die aktuell ausgewählten Daten aus der Objektliste.
    ²) Diese Aktionen verwenden alle Daten aus der Objektliste, unabhängig von ihrem Auswahlstatus.

    Hier eine kurze Erklärung der Spalten:

    • Spalte mit Checkboxen für die Auswahl der Objekte für ein Export (Schalter: Übertragen)
    • Typ, Seite und ID - sollten selbsterklärend sein und identifizieren das UI-Object
    • Kommentar - auch klar, aber nicht ganz unwichtig um sich bei der Vielzahl von Mappings zurecht zu finden. Ich habe es extra eingeführt, weil ich zum Teil die Übersicht zu behalten. Empfind es es als sehr hilfreich.
    • Beschriftung - eigentlich alles was man bei der Visu an Text sieht. Also bei Buttons die Icons oder Titel, bei Labels die Beschriftung usw.
    • Wert - Zustände von Toggle Buttons, Sourcen von Images oder Hintergrundfarben von Objekten
    • Umrechnung - Transformationsweg von IPS zum DISPLAY, als Platzhalter kann {{val}} verwendet werden, was den Roh-Wert der Variablenänderung beinhaltet. Im Endeffekt ist das ein PHP eval() Ausdruck (ohne Klammern und Semikolon drum herum). Das Ergebnis davon wird dann bei Beschriftung oder/und Wert eingesetzt. Spezialwert -1 bedeutet keine weitere Auswertung vornehmen, also den Workflow stoppen.
    • _ Rückrechnung_ - Transformationsweg von DISPLAY zu IPS. Das Gleiche wie bei Umrechnung nur Umgekehrt, d.h. eine -1 bewirkt keine Weiterverarbeitung in IPS.
    • Verknüpfung - die Verknüpfung zwischen Design-Objekt und IPS-Variable.

    ✨ Visualisierung …

    NameBeschreibung
    Kachelhintergrundfarbe (online)Farbauswahl für den Zustand ‘ONLINE’
    Kachelhintergrundfarbe (offline)Farbauswahl für den Zustand ‘OFFLINE’
    Navigationsleiste anzeigen (Vor, Zurück, Weiter)?Schaltet die Anzeige der Navigationsbuttons an bzw. aus
    Aktionsleiste anzeigen (Seiten löschen, Seiten neu laden, Synchronisieren, Neustart)Schaltet die Anzeige der Aktionsbuttons an bzw. aus

    🧰 Widgets …

    NameBeschreibung
    An / Aus (Analoguhr)Aktualisierung der Uhrzeit an bzw-ausschalten
    Seite (Analoguhr)Seiten ID, auf welche sich die Uhr befindet
    Stundenzeiger (Analoguhr)Gauge ID des Stundenzeigers
    Minutenzeiger (Analoguhr)Gauge ID des Minutenzeigers
    An / Aus (Qlocktwo Earth)Aktualisierung der Uhrzeit an bzw-ausschalten
    Seite (Qlocktwo Earth)Seiten ID, auf welche sich die Uhr befindet
    Startreihe (Qlocktwo Earth)Label ID der ersten durchnummerierten Textreihe
    Hervorhebungsfarbe (Qlocktwo Earth)Farbe, welche zur hervorhebung der Uhrzeit genutzt werden soll
    Präfix anzeigen (Qlocktwo Earth)Schalter, ob die Wörter “ES IST” immer hervorgehoben werden sollen
    Suffix anzeigen (Qlocktwo Earth)Schalter, ob das Wort “UHR” immer hervorgehoben werden sollen (sonst nur wenn notwendig)
    An / Aus (Fallblattuhr)Aktualisierung der Uhrzeit an bzw-ausschalten
    Seite (Fallblattuhr)Seiten ID, auf welche sich die Uhr befindet
    Stundenfallblatt (Fallblattuhr)Start ID des Labels, welches die Stunden darstellt
    Minutenfallblatt (Fallblattuhr)Start ID des Labels, welches die Minuten darstellt
    An / Aus (HASP-Uhr)Aktualisierung der Uhrzeit an bzw-ausschalten
    Seite (HASP-Uhr)Seiten ID, auf welche sich die Uhr befindet
    Minutenkreis (HASP-Uhr)Objekt ID des Kreises(Arc), welches die Minuten darstellt

    ⚙️ Erweiterte Einstellungen …

    NameBeschreibung
    Hintergrundbeleuchtung automatisch schalten!Schaltet die Beleuchtung in Abhängigkeit der zeitlichen Nutzung
    Normal (kein Leerlauf)Wert der Helligkeit bei normaler Nutzung des Displays
    Kurzer LeerlaufWert der Helligkeit nach kürzeren Nicht-Nutzung des Displays
    Langer LeerlaufWert der Helligkeit nach längerer Nicht-Nutzung des Displays
    Variable für den dunklen ModusVariable (bool), welche den Dunkelmodus steuert (WAHR = AUS
    Normal (Dunkelmodus)Wert der Helligkeit bei normaler Nutzung des Displays
    Kurzer Leerlauf (Dunkelmodus)Wert der Helligkeit nach kürzeren Nicht-Nutzung des Displays
    Langer Leerlauf (Dunkelmodus)Wert der Helligkeit nach längerer Nicht-Nutzung des Displays
    Einbrennschutz automatisch aktivieren!Schalter, ob der Einbrennschutz automatisch im definierten Zyklus gestartet werden soll!
    ZyklusZeitlicher Zyklus in Minuten in dem der Einbrennschutz für 30 Sekunden eingeschaltet wird.
    Hintergrundbeleuchtung dimmenSchaltet die Beleuchtung während des Einbrennschutzes (30s) auf die eingestellte Beleuchtungsstärke, solange sie kleiner ist als der Wert für den langen Leerlauf und nicht Null ist!
    Im Ruhezustand keine Syncronisierung!Schaltet die Synchrinistaion im Leerlauf ab (idle->long)
    Im Ruhezustand auf eine bestimmte Seite wechseln!Schalter, ob im langen Leerlauf eine bestimmte Seite angezeigt werden soll!
    Feste SeiteStatische Seitenummer auf welche gewechselt werden soll im langen Leerlauf-Modus
    Dynmische SeiteVariable, welche die Seitenummer enthält auf welche gewechselt werden soll im langen Leerlauf-Modus
    SeitenverzweigungBoolsche Variable, welche entscheidet auf welche Seite gewechselt werden soll im langen Leerlauf-Modus
    Seite (Wahr)Seite im Zustand wahr
    Seite (Flasch)Seite im Zustand falsch
    Im Ruhezustand durch die Seiten blättern!Schalter, ob im langem Leerlauf die Seiten durchgeblättert werden sollen!
    IntervallZeitspanne zwischen den einzelnen Seitenwechseln in Minuten (1-60)
    Popup-Meldung schließen nachStandardwert in Sekunden nachdem eine MessageBox automatisch geschlossen wird.
    Nachricht an Skript weiterleiten:Leitet die Aktion bzw. das Ereignis direkt weiter. Die Daten können im Script mit der Variable $_IPS[‘Data’] empfangen und ausgewertet werden.

    Aktionsbereich:

    🚀 Aktion ausführen …

    • Seiten neu laden - liest die pages.jsonl neu ein und rendert die Seiten neu
    • Seiten löschen - alle Seiten löschen
    • Synchronisieren - gerade in der Einstellung- bzw. Entwicklungsphase ein ganz wichtiger Button, er geht durch die Mappingliste und ruft für die verknüpften Variablen deren Werte ab und stellt sie dar. Diese Funktion wird auch immer aufgerufen wenn ein Gerät ONLINE geht! Gerade wenn man alles Seiten gelöscht hat und neu lädt ist der Button sehr hilfreich!
    • Neustart - Reboot des Gerätes

    🧭 Steitennavigation …

    • Vorher, Zurück, Weiter - eigentlich auch selbsterklärend, mit den Buttons kann man auf den Seiten navigieren

    ❓ Abfrage von …

    • Stimmungslicht - Anzeige der aktuellen Moodlight-Einstellungen
    • Status - Anzeige der Status-Update-Infos
    • Bildschirmfoto - Erstellen und Speichern eines aktuellen Screenshots (aktuelle Seite), siehe auch imgs Ordner im Modul

    5. Statusvariablen und Profile

    Die Statusvariablen werden automatisch angelegt. Das Löschen einzelner kann zu Fehlfunktionen führen.

    NameTypBeschreibung
    StatusBooleanVerfügbarkeitsstaus (siehe WWXRD.Status)
    LeerlaufIntegerZeigt den Leerlaufzustand an (siehe WWXRD.Status)
    HintergrundbeleuchtungIntegerWert der Hintergrundbeleuchtung (siehe WWXRD.Backlight)
    SeiteIntegerAktuell aufgezeigte Seite (siehe WWXRD.Page)

    Folgendes Profil wird angelegt:

    NameTypBeschreibung
    WWXRD.StatusBooleanOnline (true) bzw. Offline (false)
    WWXRD.IdleIntegerAus, Kurz oder Lang (0, 1, 2)
    WWXRD.BacklightIntegerHelligkeitswert (1 .. 255)
    WWXRD.PageIntegerSeitennummer (1 .. 12)

    6. Visualisierung

    Man könnte die Statusvariablen direkt in die Visualisierung verlinken.

    7. PHP-Befehlsreferenz

    void WWXRD_DisableIdle(int $InstanzID, bool $disable);
    

    Verhindert das automatische abschalten des Display (Hintergrundbeleuchtung).
    Wird true übergeben geht das Display nicht mehr in den Leerlaufmodus; abschalten kann man es wieder mit false.
    Die Funktion liefert keinerlei Rückgabewert.

    Beispiel: WWXRD_DisableIdle(12345, true);

    void WWXRD_SendCommand(int $InstanzID, string $command);
    

    Sendet ein Kommando via MQTT an das Display.
    Die Funktion liefert keinerlei Rückgabewert.

    Beispiel: WWXRD_SendCommand(12345, '["p1b2.text=Hallo"]');

    void WWXRD_SendJSONL(int $InstanzID, array $data);
    

    Sendet JSON Lines (JSONL) via MQTT an das Display.
    Die Funktion liefert keinerlei Rückgabewert.

    Beispiel: WWXRD_SendJSONL(12345, ['page' => 1,'id' => 99),'obj' => 'msgbox','text' => 'A message box with two buttons','options' => ['Open','Close']]);

    8. Versionshistorie

    v4.1.20260828

    • FIX: Problem in MQTT Pipeline behoben

    v4.1.20260818

    • NEU: Unterstützung für BAR (über Beschriftung (optional) => Farbwert des Indikators, über Wert => Fortschrittswert)
    • NEU: Umstellung aller Profile auf Darstellungen
    • FIX: Fehler in Synchonize im Zusammenspiel mit Skripten behoben
    • FIX: Umstellung auf namespaced Bibliotheken
    • FIX: Kleinere Codeoptimierungen

    v4.0.20251221

    • NEU: Projektumstrukturierung hin zu einer globalen CI/CD-Pipeline
    • NEU: Kompatibilität auf IPS 8.1 hoch gesetzt
    • NEU: Umstellung auf IPSModuleStrict
    • NEU: Kompatibilität für IPS 8.2 vorbereitet
    • NEU: Umschalten im Leerlauf unterstützt jetzt 3 Modi (Fix, Dynamisch und Verzweigung)
    • NEU: Modulversion wird in Quellcodesektion angezeigt
    • FIX: DarkMode wird nach Antiburn wieder korrekt hergestellt
    • FIX: SendJSONL behandelt Backslash’s jetzt korrekt
    • FIX: Umstellung auf RegisterHook aus SDK
    • FIX: Diverse Fehlerbehebungen
    • FIX: Bibliotheksfunktionen angeglichen

    v3.8.20250515

    • NEU: DarkMode für Leerlauf
    • FIX: Register/Unregister von Objekten korrigiert

    v3.7.20250318

    • NEU: Konfigurationsformular überarbeitet (Aktionshinweise, Anordnung uvm.)
    • NEU: Löschen von ausgewählten Objektmappings (Mehrfachauswahl)
    • NEU: Duplizierung von ausgewählten Objektmappings (Mehrfachauswahl)
    • NEU: Neue Prüfungsmethodik eingeführt (nur noch über Checkbox); Mehrfachauswahl listet fehlerbehaftete Mappings auf; Einfachauswahl zeigt einzelne Verarbeitungsergebnise an
    • NEU: Neues Uhren-Widgets HASP
    • NEU: Vorlagen für die Widgets können jetzt direkt angezeigt werden (Button) und dadurch einfaches Kopieren ermöglicht
    • FIX: Fehler in Prüfung korrigiert
    • FIX: Aufwachen beschleunigt (Hintergrundlicht vor Synchronisierung)
    • FIX: Einige Übersetzungsfehler korrigiert

    v3.6.20250310

    • NEU: Unterstützung von Uhren-Widgets für Leerlaufzeiten
    • NEU: Vorlagen für die Widgets Analoguhr, Qlocktwo Earth und Fallblattuhr (docs Verzeichnis)
    • FIX: Status Profil - vertauschte Farben - korrigiert

    v3.5.20250305

    • NEU: Neuer Platzhalter {{fmt}} für profilformatierte Werte wird jetzt auch bei Wert und Beschriftung unterstützt
    • NEU: Seiten(bereichs)angabe für automatisches Durchblättern der Seiten im Leerlauf
    • NEU: Freie Definition einer Seite, welche beim Seitenwechsel im Leerlauf dargestellt/geschaltet werden soll
    • FIX: Veraltete Konfigurationsangaben ersetzt

    v3.4.20250303

    • NEU: Auswahl der zu aktivierenden Seite im Leerlauf
    • NEU: Automatisches durchblättern der Seiten im Leerlauf
    • FIX: Bei Aktivierung der Löschfunktion beim Einlesen des Seitenlayouts wurden alle Zurodnungen gelöscht

    v3.3.20250220

    • NEU: Auswahl(umkehr) für Objektkonfiguration

    v3.2.20250218

    • NEU: Import und Export von Objektkonfigurationen zum Austausch zwischen verschiedenen Instanzen.

    v3.1.20250214

    • NEU: Definierte Objekte mit dem Inhalt des Seitenaufbaus abgleichen (Ausgabe: Liste der nicht definierten UI-Elemente).
    • NEU: Einlesen und Umwandeln des Seitenaufbaus in die Objektzuordnung (Neue anlegen, Fehlerhafte korrigieren und nicht vorhandene löschen).
    • NEU: Statusvariablen für Navigation und Aktionen (bessere Unterstützung von IPSView)
    • FIX: Variablenupdates werden jetzt nur verarbeitet wenn eine wirkliche Änderung vorliegt (neuer Wert).
    • FIX: Variablenupdates werden jetzt nur im Status Online verarbeitet.
    • FIX: Übersetzungen in TileVisu korrigiert.
    • FIX: Fehler in Debugausgabe korrigiert.

    v3.0.20250205

    • NEU: Unterstützung für TileVisu (Status, Navigation, Actions)
    • NEU: Zeiteinstellung für automatisches Schliessen von Messageboxen
    • NEU: Beispielseiten und -bilder erweitert
    • FIX: Beim (manuellen) Syncronisationsdurchlauf werden Messageboxen unterdrückt.

    v2.1.20250131

    • NEU: Unterstützung für MESSAGEBOX (über Beschriftung => Text, über Wert => Buttons, über Rückrechnung => ScriptID für senden der Event-Werte)
    • FIX: Objektzuordnungstabelle nutzt jetzt gesamte verfügbare Breite im Konfigurationsdialog

    v2.0.20241129

    • NEU: Rudimentäres Prüfen der Umrechnungen pro Verlinkung
    • NEU: Verhalten von Spinner erweitert, Speed & Direction über (+/-) Wert und Beschriftung hinzugefügt
    • FIX: Interner Umbau der Wertübername für Dorpdown, Gauge und Switch (Vereinheitlichung)

    v1.9.20241122

    • NEU: Unterstützung für SPINNER (über Beschriftung kann Drehrichtung, über Wert die Geschwindigkeit gesetzt werden)
    • NEU: Schaltung der Hintergrundbeleutung während des Einbrennschutzes
    • NEU: Prüfung der Objektverlinkung umgebaut bzw. eingeführt, Status bei Fehler wird auf 201 gesetzt
    • FIX: Synchronisatzionslauf testet auf Existieren des verlinkten Objekts
    • FIX: Synchronisatzionsfehler bei Skript-Verlinkungen behoben (kein -1 bei Umrechnung gesetzt)
    • FIX: Fehler beim Duplizieren behoben

    v1.8.20241110

    • NEU: Neue Sektion zum verwalten des Seitenaufbaus (Layout)
    • FIX: Beispielbilder teilweise umbennant/korriegiert
    • FIX: Dokumentation vervollständigt

    v1.7.20241106

    • NEU: Buttons für das Sortieren der Objekt-Einträge nach Seite und ID
    • NEU: Buttons für das Duplizieren eines Mapping-Eintages
    • NEU: Funktion DisableIdle hinzugefügt (Hilfreich bei Konfigurations-Sessions)
    • FIX: Automatisches Schalten auf Seite 1 erfolgt nun erst bei langem Leerlauf
    • FIX: Dokumentation/Markdown gefixt

    v1.6.20241023

    • NEU: Syncronisation deaktivierbar im Leerlauf
    • NEU: Buttons im Aktionsbereich komplett neu organisiert
    • FIX: Aktionen benötigen keine 2 Buttons mehr
    • FIX: Namen und Übersetzungen überarbeitet

    v1.5.20240906

    • NEU: Helligkeitssteuerung (Erweiterte Einstellungen) komplett überarbeitet
    • NEU: Automatische Abschaltung durch Intervallschaltung für Einbrennschutz ersetzt
    • FIX: Kommentare und Debug-Meldungen vereinheitlicht und optimiert
    • FIX: Dokumentation überarbeitet

    v1.4.20240905

    • NEU: UI-Objekt Checkbox wird jetzt unterstützt
    • FIX: Textausgabe für Toogle Button korrigiert
    • FIX: Konfigurationsbeispiele (Button) gefixt

    v1.3.20240827

    • NEU: Neue Beispielbilder und Konfigurationen hinzugefügt
    • NEU: Neben dem Platzhalter {{val}} wird jetzt auch {{txt}} bei Rückrechnung unterstützt
    • FIX: Unterstützung für ARC, BUTTON, LINEMETER und ROLLER hinzugefügt bzw. verbessert
    • FIX: Fehler bei Umrechnung und Rückrechnung korrigiert
    • FIX: Fehler bei Auswertung von booleschen Werten nochmal korrigiert
    • FIX: Textausgabe mit Sonderzeichen jetzt bei allen Objekten möglich
    • FIX: Bessere und mehr Debug-Meldungen

    v1.2.20240728

    • NEU: Hintergrundbilder und Beispielbilder hinzugefügt
    • NEU: Bibliotheks- bzw. Modulinfos vereinheitlicht
    • FIX: Fehler beim Abrufen von ‘MoodLight’ korrigiert
    • FIX: Problem beim Auswerten von booleschen Werten gelöst

    v1.1.20240730

    • NEU: Actionbereich komplett erweitert (Navigation, Aktionen, Informationen)

    v1.0.20240723

    • NEU: Initialversion

    Danksagung

    Ich möchte mich für die Unterstützung bei der Entwicklung dieses Moduls bedanken bei …

    • firebuster : für die geniale und hervorragende Vorarbeit mit seinem Modul openHASP 👍
    • ralf, Helmut, richimaint: für den stetigen Austausch rund um das Display und Modulfunktionlitäten 👏
    • Norden : für seine sehr nette persönliche Unterstützung 👏

    Vielen Dank an Euch!

    Entwickler

    Seit nunmehr über 10 Jahren fasziniert mich das Thema Haussteuerung. In den letzten Jahren betätige ich mich auch intensiv in der Symcon Community und steuere dort verschiedenste Skript und Module bei. Ihr findet mich dort unter dem Namen @pitti ;-)

    GitHub

    Spenden

    Die Software ist für die nicht kommerzielle Nutzung kostenlos, über eine Spende bei Gefallen des Moduls würde ich mich freuen.

    PayPal

    Lizenz

    Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International

    Licence