... kurz vor der final 1.1. Daher bitte ausgiebig testen !!!
Mächtig, mächtig Ergänzungen und fixes. Genauere Erklärungen und Beispiele erfolgen später mit dem dann aktualisierten Handbuch. Aber eines ist Fakt, es mutiert zur eierlegenden Wollmilchsau!!
Viele der Änderungen vor allem das Thema Format Strings, Listen Verarbeitung etc. resultieren aus der Optimierung der iViewer GUI. In diesem Zusammenhang bitte auch die Änderungen am Webserver beachten.
Bin mal gespannt, ob jemand die ungeahnten Möglichkeiten entdeckt...
Wie erwähnt, Beispiele folgen noch. Auf die Frage wann? ... gibt es keine Antwort !!
Für die ganz Eiligen, können wir auch gern vorab im Forum diskutieren.
Ganz fein unsere Firewall. Resultat der Ersten Schulung, als mir einer der Patienten durch ein <SYS><SHUTDOWN></SYS> auf die IP 192.168.50.255 die gesamten Schulungsrechner, nebst meiner Produktivumgebung lahm legte.... Das war nicht witzig
[B]Version 1.0.92 - 1.0.96[/B]
Bugfixes:
PrefPane:
- korrekte Anzeige einer abgelaufenen Lizenz
iTUNES:
Commandserver:
GUI:
Allgemein:
Features:
Buttonleisten:
Neuer Buttontyp SWITCH, wird als Buttontyp SWITCH angegeben, führt der Button beim 1. Druck Action1 aus, beim 2. Druck Action2. Ausserdem lassen sich für beide Zustände die Labels und die Grafiken des Buttons vorgeben
Konfigurationszeile:
Die "Standard-Zeile" wurde also lediglich um {Label2} und {Grafik2} ergänzt.
Das Buttonlabel der Buttons kann jetzt auch Steuerzeichen (z.b. \0x0d) enthalten. Damit kann man mehrzeilige Labels anzeigen oder das Label nach oben bzw. unten verschieben.
Dazu passend: 2 neue SYS-Befehle
auch hier kann {Neues Label} Steuerzeichen enthalten.
In der .csv ist es jetzt möglich, den Buttontitel und den alternativen Buttontitel per Variable anzugeben. Die Auswertung der Variable erfolgt beim Systemstart.
Dafür auch neue SYS-Befehle:
Ändert das Bild eines Buttons zur Laufzeit.
Neuer Buttontyp HOLD={x in ms} (analog zu mRemote)
Beispiel:
Führt VOLUP aus, wenn der Button nach weniger als 2 Sekunden losgelassen wird, anderenfalls wird nach 2 Sekunden sofort VOLDN ausgeführt, auch wenn der Button weiterhin gedrückt wird.
iTunes
neuer Befehl:
GETALLALBUMS - liefert eine alphabetisch sortierte Liste aller Alben zurück
Commandserver:
Syntax:
Der Commandserver kann Befehle jetzt parallel abarbeiten und damit mehrere Geräte gleichzeitig steuern. Die TIMEOUT-Einstellung hat keinen Einfluß mehr darauf, wie schnell neue Befehle abgesetzt werden können. Bisher blockierte der Commandserver so lange, bis der Timeout abgelaufen war.
Wird während eines laufenden Timeouts ein neuer Befehl an das selbe Gerät gesendet, wird der Timeout unterbrochen, der neue Befehl abgesetzt und der Timeout des neuen Befehls neu gestartet.
Durch dieses Feature ist es möglich, als
SERVERTIMEOUT;NONE
anzugeben. Damit wird nach dem Absetzen eines Befehls die Verbindung dauerhaft aufrecht erhalten und eintreffende Daten des Gerätes interpretiert (vgl. Eventserver).
Dies Funktioniert mit UDP,TCP und seriellen Verbindungen.
Der Timeout lässt sich natürlich auch weiterhin kommandobezogen definieren.
Es ist jetzt möglich, im MAPPINGS-Abschnitt die ONCHANGE-Bedingung wie bekannt zu definieren, neue Zeilen-Struktur:
mRemote.csv:
Relay-Funktion verfeinert:
Wird ein Relay aufgebaut, werden zunächst alle Joins des Clients auf 0 gesetzt und erst anschlieflend der eigentliche connect auf den entfernten Mac durchgeführt.
Somit besteht für den Client-Status kein Unterschied mehr, ob sich der Client direkt oder per Relay verbindet. Wird ein Relay beendet, werden alle Joins, die der entfernte Mac auf den Client geschrieben hat, zunächst auf 0 gesetzt. Anschlieflend bekommt der Client das Status-Update mit den lokal belegten Joins.
Das Verhalten bei Sleep wurde verbessert:
Wenn der Sleep-Start länger dauert, hat der Client in der Zwischenzeit keine Chance mehr, sich erneut mit mmh zu verbinden.
neuer Schalter Sektion [CONFIG]:
Eventserver:
Script:
Neue SCRIPT-Befehle:
GARG ist mit ARG kombinierbar:
<SCRIPT><RUN=test.myh><ARG=blubb><ARG=blubber><GAR G=blah></SCRIPT> ersetzt das erste [ARG] im Script mit "blubb", das zweite [ARG] mit "blubber" und alle weiteren [ARG] mit "blah"
HS:
- DEBUG;YES in der .csv schaltet send- & receive-Logging ein
Webserver:
- DEBUG;YES in der .csv schaltet das Logging von sämtlichen Client-Requests und die Anzahl übertragenen Bytes ein
erweiterter Itunes-Cover-Support:
Gross-/Kleinschreibung ist unwichtig.
BAOS:
Kommando-Firewall:
neuer Button "Configure Firewall" im PrefPane: öffnet das Sheet zur Firewall-Konfiguration. Die Tabelle listet alle Klassen und Kommandos auf, die blockiert werden. Unten links befindet sich ein Pull-Down-Menü ("Class"), das die verfügbaren Klassen bereitstellt:
Reihenfolge:
Jeder Klassentyp a) bis c) wird für sich alphabetisch sortiert. Die Liste wird beim Start des PrefPane erzeugt. Wird also der Inhalt des addons- oder xpl-Ordners verändert, muss das Pane neu gestartet werden.
Neben der Klassenauswahl findet man ein weiteres Menü, das nach Auswahl der Klasse die verfügbaren Kommandos anzeigt. Auch diese Liste wird alphabetisch sortiert. Wird ein Kommando angeklickt, wird dies durch ein Häkchen symbolisiert und die Tabelle aktualisiert.
Selektiert man <ALL>, wird die komplette Klasse blockiert.
Selektiert man <NONE> oder klickt man in der Tabelle doppelt auf die Zeile der betreffenden Klasse, wird die komplette Klasse freigegeben und der Tabelleneintrag gelöscht.
WICHTIG:
Die Änderungen werden erst gespeichert, wenn man auf "Save" geklickt hat. Die Firewall-Konfiguration wird nur bei einem Start des PrefPanes gelesen.
Es ist daher möglich, das Firewall-Sheet zwischenzeitlich zu schliessen und sich z.B. das Log anzusehen und die Konfiguration erst später zu speichern.
Wird das PrefPane geschlossen, gehen nicht gespeicherte Änderungen verloren.
Speicherort für die Firewall-Konfiguration ist die Datei:
~/Library/Application Support/macmyhome/firewall.csv Die Einstellungen bleiben auch nach einem Update erhalten.
Die Firewall-Konfiguration wird nur beim Start von mmh gelesen. Wenn Kommandos/Klassen blockiert werden, wird dies im Log vermerkt.
Formatstring:
Zusätzlicher universeller Format-String %r (in {} anzugeben):
Syntax: %r{String A},{String B}
Funktion: Ersetzt {String A} durch {String B}
Beispiel: <ADDANDPLAY=hey du{%r ,%20}>
wandelt den Befehl in <ADDANDPLAYITUNES=hey%20du>
um.
Änderungen:
MATCHING;NORMAL geändert:
Es wird ab sofort der komplette String durchsucht und bei einem Match mit dem verbleibenden String weitergematcht.
Außerdem wird jetzt auch \% zum Positionieren unterstützt.
Vergleichendes Matching bei HS, BAOS und KNX, Anwendung wie bekannt.
Sämtliche .csv's (ausgenommen sysvars und Standard-Buttonleisten) sind jetzt mit ACTIVE;NO (DEFAULT=YES) in der CONFIG-Sektion abschaltbar.
Prefpane:
Logfenster: der Close-Button und der Scroll-Lock-Button wurden vertauscht, sodass der Close-Button jetzt unten rechts ist (bessere Ergonomie)
Das Prefpane zeigt jetzt im mRemote-Sheet den GUI-Upload-Fortschritt an.
Zusätzliche Konfig-Option "Try to use sysvars.csv in project root": Wenn aktiviert, wird eine vorhandene sysvars.csv im Projekt-Hauptverzeichnis geladen und geschrieben. Ist die sysvars.csv nicht vorhanden, wird die sysvars.csv aus dem misc-Ordner verwendet.
Der Name der sysvars Datei ist im PrefPanel einstellbar. Die alternative .csv wird immer im Projekt-Root gesucht. Wenn sie nicht vorhanden ist, werden automatisch die sysvars im misc-Ordner benutzt.
<SYS><GETVAR></SYS> liefert jetzt bei der Antwort den Variablennamen mit: GETVAR={Variable}={Wert}
Der \%l-Formatierbefehl wurde angepasst, sodass bei Listenvariablen auch dann der Variablenname mit ausgegeben wird, wenn der Index > 0 ist:
Variable: MYLIST=EINS|ZWEI|DREI|VIER
vorher: GETVAR{%l2-4}=ZWEI|DREI|OK
jetzt: GETVAR{%l2-4}=MYLIST=ZWEI|DREI|OK
Der DELAY-Befehl versteht jetzt auch Komma-Werte für die Angabe in ms:
Neben \# als Match für ein Zeichen lässt sich jetzt auch \^ verwenden (systemweit). Argumente lassen sich jetzt systemweit als Liste (in mmh-Syntax mit "|" als Trenner) interpretieren:
Vorgehensweise:
Statt \# für das Argument \$ einsetzen. Wird \$ verwendet, kann man wahlweise zusätzlich \& verwenden, um den Listenindex einzusetzen (analog zur mremote.csv)
Beispiel:
Eventserver: - Setzen von Joins mit allen Albumnamen:
Erklärung:
\$ zerlegt die von GETALLALBUMS gelieferte Liste in ihre Elemente und führt für jedes Element den SETSERIALJOIN aus.
Zusätzlich wird noch der Listenindex eingebaut, um die Join-Nummer zu anzupassen.
... schönes WE
Mächtig, mächtig Ergänzungen und fixes. Genauere Erklärungen und Beispiele erfolgen später mit dem dann aktualisierten Handbuch. Aber eines ist Fakt, es mutiert zur eierlegenden Wollmilchsau!!
Viele der Änderungen vor allem das Thema Format Strings, Listen Verarbeitung etc. resultieren aus der Optimierung der iViewer GUI. In diesem Zusammenhang bitte auch die Änderungen am Webserver beachten.
Bin mal gespannt, ob jemand die ungeahnten Möglichkeiten entdeckt...
Wie erwähnt, Beispiele folgen noch. Auf die Frage wann? ... gibt es keine Antwort !!

Ganz fein unsere Firewall. Resultat der Ersten Schulung, als mir einer der Patienten durch ein <SYS><SHUTDOWN></SYS> auf die IP 192.168.50.255 die gesamten Schulungsrechner, nebst meiner Produktivumgebung lahm legte.... Das war nicht witzig

[B]Version 1.0.92 - 1.0.96[/B]
Bugfixes:
PrefPane:
- korrekte Anzeige einer abgelaufenen Lizenz
iTUNES:
- PLAYPLAYLIST funktionierte nicht bei Playlisten-Namen mit mehr als 7 Zeichen
- die SEARCH...-Befehle liefern jetzt bis zu 500 Treffer zurück (bisher 50)
- Fehlender iTunes-Pause-Broadcast behoben.
Commandserver:
- Absturz bei nicht existierendem seriellen Port behoben
- Korrekte Logausgabe bei HTTP-Verbindungen
- Allgemeine Logging Verbesserungen sporadisches Hängenbleiben behoben
- Verschlucken von parallelen Kommandos behoben
GUI:
- Kommunikation zwischen mmh und der GUI auf ein anderes Verfahren umgestellt (parallelisiert).
- Die WINDOW-Klasse greift jetzt exclusiv auf die Windows zu, solange sie geöffnet ist. Paralleles Öffnen der WINDOW-Klasse wird so lange blockiert, bis die WINDOW-Klasse wieder frei ist.
Allgemein:
- Absturz bei langen Antwortsequenzen behoben
- Listen-Sortier-Fehler bei mehreren Kommandos pro Sequenz behoben
- BACKGROUND_TRANS funktioniert jetzt bei allen 3 Fenstertypen (Text,URL,Image). Bitte darauf achten, dass die Hintergrund-Farbe definiert wird.
__________________________________________
Features:
Buttonleisten:
Neuer Buttontyp SWITCH, wird als Buttontyp SWITCH angegeben, führt der Button beim 1. Druck Action1 aus, beim 2. Druck Action2. Ausserdem lassen sich für beide Zustände die Labels und die Grafiken des Buttons vorgeben
Konfigurationszeile:
{Label1};{Action1};{Buttontyp};{Action2};{Grafik1} ;{Label2};{Grafik2}
Die "Standard-Zeile" wurde also lediglich um {Label2} und {Grafik2} ergänzt.
Das Buttonlabel der Buttons kann jetzt auch Steuerzeichen (z.b. \0x0d) enthalten. Damit kann man mehrzeilige Labels anzeigen oder das Label nach oben bzw. unten verschieben.
Dazu passend: 2 neue SYS-Befehle
SETBUTTONLABEL={Leiste},{Button Index},{Neues Label}
und
SETALTBUTTONLABEL={Leiste},{Button Index},{Neues Label}
und
SETALTBUTTONLABEL={Leiste},{Button Index},{Neues Label}
auch hier kann {Neues Label} Steuerzeichen enthalten.
In der .csv ist es jetzt möglich, den Buttontitel und den alternativen Buttontitel per Variable anzugeben. Die Auswertung der Variable erfolgt beim Systemstart.
Dafür auch neue SYS-Befehle:
SETBUTTONIMAGE={Leiste},{Button Index},{Pfad} oder {URL}
und
SETALTBUTTONIMAGE={Leiste},{Button Index},{Pfad} oder {URL}
und
SETALTBUTTONIMAGE={Leiste},{Button Index},{Pfad} oder {URL}
Ändert das Bild eines Buttons zur Laufzeit.
Neuer Buttontyp HOLD={x in ms} (analog zu mRemote)
Beispiel:
VOLUME;<SYS><VOLUP=5></SYS>;HOLD=2000;<SYS><VOLDN=5></SYS>;
Führt VOLUP aus, wenn der Button nach weniger als 2 Sekunden losgelassen wird, anderenfalls wird nach 2 Sekunden sofort VOLDN ausgeführt, auch wenn der Button weiterhin gedrückt wird.
iTunes
neuer Befehl:
GETALLALBUMS - liefert eine alphabetisch sortierte Liste aller Alben zurück
Commandserver:
- Unterstützung der MATCHING-Variablen (FULL/NORMAL, default NORMAL) im Header der .csv
- erweiterter [MAPPINGS]-Abschnitt: Actions und Bedingung (=vergleichendes Matching) möglich.
Syntax:
{Map-String};{mmh-Bezeichnung};{mmh-Action};{Bedingung}
- http: Support von Hostnamen für Webabfragen
- Reply-Puffer auf 8K erweitert
- Parallelisierter Commandserver / unendlicher Timeout
Der Commandserver kann Befehle jetzt parallel abarbeiten und damit mehrere Geräte gleichzeitig steuern. Die TIMEOUT-Einstellung hat keinen Einfluß mehr darauf, wie schnell neue Befehle abgesetzt werden können. Bisher blockierte der Commandserver so lange, bis der Timeout abgelaufen war.
Wird während eines laufenden Timeouts ein neuer Befehl an das selbe Gerät gesendet, wird der Timeout unterbrochen, der neue Befehl abgesetzt und der Timeout des neuen Befehls neu gestartet.
Durch dieses Feature ist es möglich, als
SERVERTIMEOUT;NONE
anzugeben. Damit wird nach dem Absetzen eines Befehls die Verbindung dauerhaft aufrecht erhalten und eintreffende Daten des Gerätes interpretiert (vgl. Eventserver).
Dies Funktioniert mit UDP,TCP und seriellen Verbindungen.
Der Timeout lässt sich natürlich auch weiterhin kommandobezogen definieren.
Es ist jetzt möglich, im MAPPINGS-Abschnitt die ONCHANGE-Bedingung wie bekannt zu definieren, neue Zeilen-Struktur:
{Map-String};{mmh-Bezeichnung};{mmh-Action};ONCHANGE;{Bedingung}
mRemote.csv:
- RELAY=[{Variable}] ist jetzt in der .csv möglich. die Auswertung erfolgt zur Laufzeit
- bei Actions lässt sich jetzt mit \§ die Join-Nummer in die Action einbauen
Relay-Funktion verfeinert:
Wird ein Relay aufgebaut, werden zunächst alle Joins des Clients auf 0 gesetzt und erst anschlieflend der eigentliche connect auf den entfernten Mac durchgeführt.
Somit besteht für den Client-Status kein Unterschied mehr, ob sich der Client direkt oder per Relay verbindet. Wird ein Relay beendet, werden alle Joins, die der entfernte Mac auf den Client geschrieben hat, zunächst auf 0 gesetzt. Anschlieflend bekommt der Client das Status-Update mit den lokal belegten Joins.
Das Verhalten bei Sleep wurde verbessert:
Wenn der Sleep-Start länger dauert, hat der Client in der Zwischenzeit keine Chance mehr, sich erneut mit mmh zu verbinden.
neuer Schalter Sektion [CONFIG]:
GUI_FILE;{Filename}/AUTO
- erzwingt {Filename} beim Projekt-Upload, AUTO sucht das erste gui-File im Upload-Ordner (Default)
- Es ist im iViewer durch direkte Angabe der URL zum Guifile möglich, diese Einstellung zu übergehen.
Eventserver:
- Das IN-Event wird jetzt getriggert, bevor der Parser mit der Ausführung beginnt.
- Ab sofort sind Events vom Log-Port möglich.
Einstellung: - TRIGGERIP;INTERNAL
- TRIGGERPORT;LOG
Script:
Neue SCRIPT-Befehle:
- FORCERUN={Scriptname} - führt ein Script im Hintergrund aus. Es werden sofort die auf die Script-Klasse folgenden Befehle ausgeführt.
- GARG={Argument} - ersetzt alle in einem Script vorhandenen [ARG] durch {Argument}
GARG ist mit ARG kombinierbar:
<SCRIPT><RUN=test.myh><ARG=blubb><ARG=blubber><GAR G=blah></SCRIPT> ersetzt das erste [ARG] im Script mit "blubb", das zweite [ARG] mit "blubber" und alle weiteren [ARG] mit "blah"
HS:
- DEBUG;YES in der .csv schaltet send- & receive-Logging ein
Webserver:
- DEBUG;YES in der .csv schaltet das Logging von sämtlichen Client-Requests und die Anzahl übertragenen Bytes ein
erweiterter Itunes-Cover-Support:
- itunes_id_{ID}.jpg - liefert das zur {ID} passende Cover zurück
- itunes_album_{Albumname}.jpg - liefert das zu {Albumname} passende Cover zurück
Gross-/Kleinschreibung ist unwichtig.
BAOS:
- DEBUG;YES in der .csv schaltet erweitertes Logging ein
Kommando-Firewall:
neuer Button "Configure Firewall" im PrefPane: öffnet das Sheet zur Firewall-Konfiguration. Die Tabelle listet alle Klassen und Kommandos auf, die blockiert werden. Unten links befindet sich ein Pull-Down-Menü ("Class"), das die verfügbaren Klassen bereitstellt:
Reihenfolge:
- mmh-Klassen
- Commandserver-Klassen
- xPL-Klassen
Jeder Klassentyp a) bis c) wird für sich alphabetisch sortiert. Die Liste wird beim Start des PrefPane erzeugt. Wird also der Inhalt des addons- oder xpl-Ordners verändert, muss das Pane neu gestartet werden.
Neben der Klassenauswahl findet man ein weiteres Menü, das nach Auswahl der Klasse die verfügbaren Kommandos anzeigt. Auch diese Liste wird alphabetisch sortiert. Wird ein Kommando angeklickt, wird dies durch ein Häkchen symbolisiert und die Tabelle aktualisiert.
Selektiert man <ALL>, wird die komplette Klasse blockiert.
Selektiert man <NONE> oder klickt man in der Tabelle doppelt auf die Zeile der betreffenden Klasse, wird die komplette Klasse freigegeben und der Tabelleneintrag gelöscht.
WICHTIG:
Die Änderungen werden erst gespeichert, wenn man auf "Save" geklickt hat. Die Firewall-Konfiguration wird nur bei einem Start des PrefPanes gelesen.
Es ist daher möglich, das Firewall-Sheet zwischenzeitlich zu schliessen und sich z.B. das Log anzusehen und die Konfiguration erst später zu speichern.
Wird das PrefPane geschlossen, gehen nicht gespeicherte Änderungen verloren.
Speicherort für die Firewall-Konfiguration ist die Datei:
~/Library/Application Support/macmyhome/firewall.csv Die Einstellungen bleiben auch nach einem Update erhalten.
Die Firewall-Konfiguration wird nur beim Start von mmh gelesen. Wenn Kommandos/Klassen blockiert werden, wird dies im Log vermerkt.
Formatstring:
Zusätzlicher universeller Format-String %r (in {} anzugeben):
Syntax: %r{String A},{String B}
Funktion: Ersetzt {String A} durch {String B}
Beispiel: <ADDANDPLAY=hey du{%r ,%20}>
wandelt den Befehl in <ADDANDPLAYITUNES=hey%20du>
um.
Änderungen:
MATCHING;NORMAL geändert:
Es wird ab sofort der komplette String durchsucht und bei einem Match mit dem verbleibenden String weitergematcht.
Außerdem wird jetzt auch \% zum Positionieren unterstützt.
Vergleichendes Matching bei HS, BAOS und KNX, Anwendung wie bekannt.
Sämtliche .csv's (ausgenommen sysvars und Standard-Buttonleisten) sind jetzt mit ACTIVE;NO (DEFAULT=YES) in der CONFIG-Sektion abschaltbar.
Prefpane:
Logfenster: der Close-Button und der Scroll-Lock-Button wurden vertauscht, sodass der Close-Button jetzt unten rechts ist (bessere Ergonomie)
Das Prefpane zeigt jetzt im mRemote-Sheet den GUI-Upload-Fortschritt an.
Zusätzliche Konfig-Option "Try to use sysvars.csv in project root": Wenn aktiviert, wird eine vorhandene sysvars.csv im Projekt-Hauptverzeichnis geladen und geschrieben. Ist die sysvars.csv nicht vorhanden, wird die sysvars.csv aus dem misc-Ordner verwendet.
Der Name der sysvars Datei ist im PrefPanel einstellbar. Die alternative .csv wird immer im Projekt-Root gesucht. Wenn sie nicht vorhanden ist, werden automatisch die sysvars im misc-Ordner benutzt.
<SYS><GETVAR></SYS> liefert jetzt bei der Antwort den Variablennamen mit: GETVAR={Variable}={Wert}
Der \%l-Formatierbefehl wurde angepasst, sodass bei Listenvariablen auch dann der Variablenname mit ausgegeben wird, wenn der Index > 0 ist:
Variable: MYLIST=EINS|ZWEI|DREI|VIER
vorher: GETVAR{%l2-4}=ZWEI|DREI|OK
jetzt: GETVAR{%l2-4}=MYLIST=ZWEI|DREI|OK
Der DELAY-Befehl versteht jetzt auch Komma-Werte für die Angabe in ms:
- DELAY=0.3 -> 300ms warten
- DELAY=4.25 -> 4250ms warten
- DELAY=0.003 -> 3ms warten
Neben \# als Match für ein Zeichen lässt sich jetzt auch \^ verwenden (systemweit). Argumente lassen sich jetzt systemweit als Liste (in mmh-Syntax mit "|" als Trenner) interpretieren:
Vorgehensweise:
Statt \# für das Argument \$ einsetzen. Wird \$ verwendet, kann man wahlweise zusätzlich \& verwenden, um den Listenindex einzusetzen (analog zur mremote.csv)
Beispiel:
Eventserver: - Setzen von Joins mit allen Albumnamen:
GETALLALBUMS=\*|OK;<SYS><SETSERIALJOIN=\&,\$></SYS>
Erklärung:
\$ zerlegt die von GETALLALBUMS gelieferte Liste in ihre Elemente und führt für jedes Element den SETSERIALJOIN aus.
Zusätzlich wird noch der Listenindex eingebaut, um die Join-Nummer zu anzupassen.
... schönes WE
