Sonos Integration 2.0

Advertisements

In einem früheren Artikel habe ich bereits einmal darauf verwiesen, dass eine vollständige Sonos Steuerung im Moment kaum möglich ist. Beispielsweise ist das Gruppieren unterschiedlicher Player nur sehr eingeschränkt möglich und intelligent lässt hier kaum etwas steuern. Nun habe ich eine Alternative im Einsatz, die keine bzw. kaum Wünsche offen lässt.

Node-Sonos-Http-API

Diese Alternative heißt Node-Sonos-HTTP-API und ist bei GitHub zu finden. Es handelt sich um ein sehr interessantes Projekt zur Steuerung von Sonos Komponenten mittels HTTP-Get Aufrufen. Dieses benötigt zwar einen zusätzlichen Server/Rechner um die API zu betreiben, allerdings lohnt sich ein tieferer Blick in jedem Fall. Das Framework stellt (fast) alle Sonos-Funktionen zur Verfügung und das bei sehr einfacher Bedienung und Integration in das Fibaro Home Center 2. Alle Steuerbefehle werden durch einfache URLs ausgelöst. Damit ist in der Theorie auch der Betrieb mit einem Home Center Lite möglich, da für die Erstellung des virtuellen Devices kein LUA Code benötigt wird.

Lediglich die Installation und der Betrieb unter Node.js erfordern weiterführende Kenntnisse. So ist die Installation der benötigten Serverumgebung nicht ganz trivial. Gern kann ich bei Bedarf einen eigenen Artikel dazu verfassen. Einfach in der Kommentarfunktion nachfragen. Bei entsprechender Resonanz mache ich mich gleich ans Werk. Den Artikel zur Installation von Node.js und der API habe ich mittlerweile hier veröffentlicht. Ich freue mich über jedes Feedback.

Unterstützte Funktionen

Die in das HC2 integrierten virtuellen Devices unterstützen meist die gängigsten Sonos Funktionen wie Play, Pause, Stop, Next, Last. Diese werden natürlich auch von der Sonos-HTTP-API unterstützt. Der Einsatz zusätzlicher Hardware rechtfertig sich erst durch die Integration von Playlisten, Favoriten, einer zuverlässigen und sehr schnellen Text-to-Speech Funktion sowie der Möglichkeit Sonos Geräte beliebig zu gruppieren. Weiterhin lassen sich Gruppen vordefinieren und damit Szenarien realisieren die mit dem Home Center allein nicht durchführbar sind.

Steuerbefehle

Die Kommunikation mit den Sonos Playern über die API erfolgt über eine „sprechende“ HTTP Schnittstelle. So lautet der Befehl zum Abspielen der Playlist Charts beispielsweise:

http://API-IP:5005/bad/playlist/charts

Die Wiedergabe von TTS ist ebenso simpel und nach erfolgter Ausgabe werden die MP3 Dateien auf dem Server gespeichert und dienen als Cache für noch schnellere Umsetzungen:

http://API-IP:5005/bad/say/Dies ist eine TTS Ausgabe/de-de

Demovideo zur Sprachausgabe

Liste der Befehle (Auszug)

– play
– pause
– playpause (toggles playing state)
– volume (parameter is absolute or relative volume. Prefix +/- indicates relative volume)
– groupVolume (parameter is absolute or relative volume. Prefix +/- indicates relative volume)
– mute / unmute
– groupMute / groupUnmute
– trackseek (parameter is queue index)
– timeseek (parameter is in seconds, 60 for 1:00, 120 for 2:00 etc)
– next
– previous
– state (will return a json-representation of the current state of player)
– favorite
– favorites (with optional „detailed“ parameter)
– playlist
– lockvolumes / unlockvolumes (experimental, will enforce the volume that was selected when locking!)
– repeat (on/off)
– shuffle (on/off)
– crossfade (on/off)
– pauseall (with optional timeout in minutes)
– resumeall (will resume the ones that was pause on the pauseall call. Useful for doorbell, phone calls, etc. Optional timeout)
– say
– sayall
– queue
– clearqueue
– sleep (values in seconds)

Vollständige Liste und Dokumentation unter GitHub.

Integrationsbeispiele

Ich habe mittlerweile alle (anderen) virtuellen Devices zur Steuerung der Multiroomlautsprecher aus meinem Home Center entfernt und durch die Steuerung mit dieser API ersetzt. Zwar lassen sich fast alle Anwednungsbeispiele auch mit anderen verfügbaren VDs , aber die meist komplexe Implementierung schreckte mich immer wieder ab größere Dings zu implementieren. In diesem Abschnitt zeige ich ein paar Beispiele aus meinem Smart Home. Insbesondere die Gruppierungsfunktionen haben sich als sehr nützlich und zuverlässig erwiesen.

TV Ton überall

In meinem Wohnzimmer nutze ich Sonos Connect um Audiomaterial über meine teuren Boxen genießen zu können. Der Connect verfügt aber neben der Ausgabe auch die Möglichkeit Audiosignale ins Sonos Netz einzuspeisen. Hier habe ich meinen A/V Receiver angeschlossen und lasse das Audiosignal zusätzlich streamen. Gehe ich bei laufendem Fernseher in die Küche oder ins Bad, wird das Audiosignal des Fernsehers auf die dort befindlichen Sonos Geräte übertragen und ich verpasse nichts von der aktuellen Sendung oder dem spannenden Fussballspiel. Ist der Fernseher nicht eingeschaltet, so läuft in Küche und Bad meine Lieblingsmusik oder Radio.

Guten Morgen Programm

Beim ersten betreten des Badezimmers am Morgen lasse ich mir die aktuelle Audioversion der Tagesschau in 100 Sekunden vorspielen und bin so bestens über die Geschehnisse in der Welt informiert. Steht in meinem Outlook Kalender für heute oder morgen ein Termin wird dieser ebenfalls vorgelesen. So vergesse ich nie wieder einen Geburtstag oder eine Verabredung. Vorausgesetzt der Kalender ist gepflegt.

Je nach Lust und Laune startet danach mein Lieblingsradiosender oder die aktuelle Deezer Playlist mit meinen Lieblingstiteln aus der Sonos Playlist „Moin Moin“.

Akustische Bestätigungen

Es klingelt an der Tür, die Waschmaschine ist fertig oder der Postbote öffnet den Briefkasten. Jedes dieser Ereignisse wird mit einer entsprechenden Ansage über alle meine Sonos Lautsprechern verkündet. Die aktuelle Wiedergabe wird dafür unterbrochen und anschließend mit derselben Konfiguration (Gruppierung, Lautstärke, Quelle) fortgesetzt.

Verlasse ich das Haus und aktiviere mit dem RFID Tag die Alarmanlage weißt Sonos mich ggf. darauf hin, dass noch Fenster geöffnet sind und/oder bestätigt die Aktivierung der Alarmanlage. Selbiges bei meiner Heimkehr. Es wird informiert, ob jemand am Briefkasten war, es geklingelt oder jemand angerufen hat.

Virtuelles Device

Natürlich darf bei einer Integration in das Home Center 2 ein virtuelles Device nicht fehlen. Das VD ist auf Grund der simplen API recht einfach gehalten und kann nach Belieben erweitert werden. Das Grundgerüst mit vielen nützlichen Funktionen ist im offiziellen Fibaro Forum zu finden.

Sonos VD für Node API

Sonos VD für Node API

UPDATE: Mit der Version 1.0.1 der API haben sich ein paar Kleinigkeiten in der JSON Ausgabe geändert. Die dafür notwendigen Anpassungen im virtuellen Device habe ich vorgenommen und biete es hier zum Download an.

Icons

Ich verwende bei mir folgende Icons:

Sonos Connect

Sonos Connect

Sonos Play 1

Sonos Play 1

Installation und Konfiguration

Mein Eindruck ist bisher, dass die wenigsten Fibaro User einen weiteren Server in ihrem Netzwerk betreiben wollen. Daher habe ich mich bei diesem Artikel auf die reine Vorstellung der Sonos API beschränkt um aufzuzeigen, was alles möglich ist.

Sollte ich mich täuschen und der Bedarf für eine detaillierte Installationsanleitung doch gegeben sein, so lasst es mich über die Kommentarfunktion wissen.

Da die Nachfrage doch deutlich größer war, als ich es erwartet habe. Gibt es hier nun einen Artikel zur Installation und Konfiguration des Node.js mit der Sonos API.

Posted in Sonos and tagged .

45 Comments

  1. Pingback: Sonos im Home Center 2 | Mein kleiner Smart Home Blog

    • Hallo Christopher, die say Funktion wird durch die Skripte zur Verfügung gestellt. Die Stimmen kannst Du Dir unter http://www.voicerss.org anhören. Ist ein kostenloser Dienst und die Umsetzung ist wirklich verdammt schnell im Gegensatz zu den üblichen. Auch werden die fertigen MP3s lokal gespeichert.
      Gruß
      Bastian

  2. Pingback: Node-Sonos-HTTP-API Installation | Mein kleiner Smart Home Blog

  3. Hört sich gut an. Aber auch kompliziert.
    Wie oder womit lässt du dir deine Termine vorlesen ? Habe es bisher mit IFFFT und Google Kalender gemacht. Termin wird mir als Pop im Homecenter angezeigt. Vorlesen wäre natürlich super.. Gruß

    • Hallo campos,
      das Vorlesen der Termine habe ich mit einem kleinen PHP Skript realisiert. Dies macht nichts anderes, als ein JSON File zur Verfügung zu stellen welches ich dann mit Lua abhole und auswerte. Allerdings nutze ich Microsoft Exchange als Backend.
      Gruß
      Bastian

  4. Hallo Bastion. Hast du zufällig den Stream Befehl für die Tagesschau? Oder einen Tipp ? Bekomme es nicht hin . Wie Radiosender in das VD und Sonos eingebunden werden ist mir klar und bekomme ich auch hin. Nur bei den Nachrichten klappt es irgendwie nicht… Gruß

    • Hallo campos,
      leider habe ich keinen direkten Stream gefunden der immer die aktuelle Version wiedergibt, daher habe ich mir ein Shell Script erstellt welches die mp4 Datei jede Stunde herunterlädt und auf meinem Server ablegt. Bei Bedarf kann ich Dir das gern zur Verfügung stellen.
      Gruß
      Bastian

  5. Wäre super wenn du mir das Script mal zur Verfügung stellst. Habe das zwar noch nicht gemacht, würde es aber gerne mal ausprobieren. Gruß

      • Hallo campos,

        wie versprochen hier das PHP Skript. DOWNLOAD
        Du brauchst dafür einen Webserver mit aktiviertem PHP. Das Skript speichert die Datei in dem Pfad in dem sie ausgeführt wird. Entweder Du rufst das Skript im Browser auf oder Du erstellst Dir einen Cronjob mit dem Befehl php get100.php
        Wenn Du Hilfe brauchst, lass es mich wissen.
        Gruß
        Bastian

        • Hi Bastian,

          kannst Du hierzu bitte noch ein paar Sätze mehr verlieren?:-) Ich finde, dass genau dieses Feature einen unglaublichen Mehrwert bietet.
          Das Skript habe ich grob verstanden. Wo muss ich es jedoch speichern und wo speichert es die Audio-File?

          Ich danke Dir.

          • Hallo Mr. Coffee,

            wenn Du hier Support brauchst, dann schicke mir bitte eine kurze E-Mail.
            Es gibt einfach zu viele mögliche Fehlerquellen und Optionen.

            Gruß
            Bastian

        • Hi Bastian,

          ich habe es inzwischen hinbekommen. Das PHP-Script wird von der HC2 gestartet und die Tagesschau als Mp4 heruntergeladen. Klasse.
          Wie kann ich diese Datei aber in das sonos node einbinden? Direkt aufrufen bekomme ich nicht hin. Auch schaffe ich es nicht den Raspberry als Bibliothek bei meinem Sonos zu hinterlegen.

          Allgemein bekomme ich das direkte Aufrufen von mp3-Dateien auch nur hin, wenn ich sie vorher als Favoriten gespeichert habe. Muss das so sein?

          Danke.
          Gruß Mr.Coffee

          • Hallo Mr. Coffee,

            ich habe die Datei auf meinem Webserver mit einem Samba Server freigegeben und diesen als Favorit in meine Sonos App integriert. Damit ist ein Aufruf dann recht einfach.

            Gruß
            Bastian

          • Hach, ist das Leben schön:-)
            Es funktioniert. Samba war das Stichwort. Vielen Dank.
            Ganz hin und wieder rauscht es ein wenig. Ist das mein Wlan oder ist der Raspberry 3 etwas überfordert?
            Ich habe inzwischen node, Apache, Samba und Airsonos am Laufen.

            Kann ich eigentlich einzelne Audiofiles aufrufen, ohne sie einzeln als Favorite zu adden? Ich habe noch ein paar ereignisgesteuerte Audiofiles, die ich ungern alle einzeln hinterlegen möchte. Über den Ordner bekomme ich es irgendwie nicht hin.

            Gruß
            Mr.Coffee

  6. Super. Vielen Dank. Werde mich am WE mal mit auseinander setzten. Bin mal gespannt 🙂
    Ein bißchen hoffe ich ja auch auf Amazons Alexa. Evtl. kann sie einen großen Tag der TTS ja übernehmen. Gruß

  7. Hi Bastian,

    ich bin mal wieder zum Spielen gekommen….

    Cool ist, dass er nach der TTS das vorherige Programm genau so wieder fortsetzt….

    Allerdings von der ersten Unterbrechung bis zur Textansage braucht er ca 5 Sekunden und nach Beendigung der Ansage braucht er auch wieder ca 5 Sekunden bis es weitergeht.
    Hast Du eine Idee, wie man diese Zeitspanne reduzieren kann?
    Liegt das am kostenlosen VoiceRSS-Account?

    VG Hoggle

    • Hi Hoggle,

      das Verhalten kann ich bei mir gar nicht nachvollziehen. Hab es gerade nochmal probiert und höchstens 1,5 Sekunden Verzögerung in beide Richtungen. Ist die Verzögerung auch da, wenn Du die „say“-URL aus einem Browser heraus aufrufst?

      Gruß
      Bastian

  8. Wie setzt du variablen text um?
    zB: http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/Dies%20ist%20eine%20TTS%20Ausgabe%20im%20Büro./de-de/51‘,
    funktioniert aus dem HC2.

    Er mag auch noch
    local message = tostring(„Dies%20ist%20eine%20TTS%20Ausgabe%20im%20Büro./de-de/51“)
    http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/‘..message,

    Das „Message“ zwischendrin mochte er nicht
    (http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/“..message..“/de-de/51‘,)

    Das schaut aber noch ganz schön Aufwand aus, den Text zB aus einer Globalen Variable jeweils um „%20“ sowie die Sprache und Lautstärke zu ergänzen.
    Gibt es dazu einen Trick?

    VG Hoggle

    • Hi Hoogle,

      das mit den Texten ist ein wenig fummelig, das stimmt. Ich habe die URLs vollständig in Variablen gespeichert:
      local msgUrlDisarmed = „http://10.10.10.3:5005/kueche/say/Alarm%20system%20deactivated.%20Welcome%20back/en-gb/10“

      Das „bauen“ der URLs lässt sich auch verskripten. So kannst Du beispielsweise mit name = name:gsub(" ", "%20") die Leerzeichen gegen %20 ersetzen.

      Gruß
      Bastian

  9. Danke.
    Allerdings stört sich das HC am %

    Bei „message = string.gsub(message2, “ „, „20“)“ ersetzt er die Leerzeichen
    Bei „message = string.gsub(message2, “ „, „%20″)“ mit „invalid capture index“

  10. So etas kann ja recht nervig sein….
    Habe im Fbaro-Forum etwas gefunden.
    Jetzt geht es:

    local message = fibaro:getGlobalValue(„Fenster_OG“)

    fibaro:debug(„original message = “ .. message)
    function urlencode(str)
    if (str) then
    str = string.gsub (str, „([^%w])“,
    function (c) return string.format („%%%02X“, string.byte(c)) end)
    end
    return str
    end
    message = urlencode(message)
    fibaro:debug(„encoded message = “ .. message)
    local message = tostring(message..“/de-de/51″)

    Was da rauskommt sieht zwar seltsam aus, aber der Text passt!

  11. Hallo Bastian,
    erstmal Dankeschön für die tolle Anleitung.
    Es läuft fast alles… Aber ich habe doch noch ein paar Fragen:
    1. Gruppe auflösen funktioniert nur von dem Raum, in dem sie erstellt wurde. Als wenn ich im Wohnzimmer die Kueche hinzugefügt habe, dann kann ich die Gruppe nicht von dem VD Kueche auflösen, sondern nur vom VD Wohnzimmer.
    2. Ich weiss, Umlaute machen Probleme. Es ist leicht, die Küche in Kueche umzubenennen. Aber was kann ich mit Radiosendern machen, welche im Namen „Baden-Württemberg“ enthalten? Die gehen leider nicht.
    3. Hast du noch das Sonos-Icon für das VD?
    Gruß
    Jeff

    • Hallo Jeff,

      freut mich, dass es soweit läuft und meine Anleitung Dir geholfen hat.
      Zu Deinen Fragen:
      1. Das ist Sonos-bedingt. Wenn Du zwei oder mehr Player zusammenschaltest, dann fungiert der erste immer als Master der die Audioquelle an die anderen Player verteilt. Entfernst Du über die Sonos App den Master aus der Gruppierung wird der nächste Player in der Reihenfolge automatisch zum Master.
      2. Umlaute und Leerzeichen müssen codiert werden, damit sie als Favorit benutzt werden können. Wenn Du beispielsweise SWR1 Baden-Württemberg einrichten möchtest, dann muss der Name des Favoriten beispielsweise so aussehen: SWR1%20Baden-W%C3%BCrttemberg. Du kannst Dir die Namen Deiner Favoriten unter der Adresse http://meyerweb.com/eric/tools/dencoder/ codieren lassen.
      3. Die Icons die ich verwende hänge ich gleich an den Artikel.

      Wenn Du noch weitere Fragen hast, dann gern her damit.

      Gruß
      Bastian

  12. Hallo Bastian,

    Daumen hoch für deine super Anleitung. Welches VD soll man jetzt am besten nehmen? Das aus diesem Artikel oder aus der Installations Anleitung?

    Gruß..
    Stefan

  13. Hallo Bastian,
    auch wenn’s schon ein wenig her ist … ich habe laut Deiner tollen Anleitung die API und das VD installiert, Super – hat alles soweit geklappt.
    Habe das VD für meine/unsere Bedürfnisse ein wenig modifiziert.

    1. per Emoji (https://emojipedia.org/) ein paar Grafiken auf die Buttons „gemalt“
    2. Die Buttons für „Shuffle“, „Repeat“ und „Fade“ togglen jetzt den Zustand damit man das An und Aus schalten kann

    local device = fibaro:getSelfId();
    local zonename = fibaro:getName(device);
    –response = sonos:GET(„/“..zonename..“/state“)
    local ipaddress = fibaro:getValue(device, „IPAddress“);
    local port = fibaro:getValue(device, „TCPPort“);
    local msg

    — first get old state
    sonos = Net.FHttp(ipaddress, port);
    response = sonos:GET(„/“..zonename..“/state“)
    jsonTable = json.decode(response);
    — toggle state
    if tostring(jsonTable.playMode[„repeat“]) == „all“ then
    response = sonos:GET(„/“..zonename..“/repeat/off“);
    msg = „Repeat OFF command sent“;
    else
    response = sonos:GET(„/“..zonename..“/repeat/on“);
    msg = „Repeat ON command sent“;
    end

    fibaro:log(msg);
    fibaro:call(device, „setProperty“, „ui.lblMsg.value“, msg);

    3. in der primären Schleife wird der Status aktualisiert, Volume angezeigt und auch den Status der o.g. Button – so sieht man auch die aktuellen einstellungen:

    local device = fibaro:getSelfId();
    local zonename = fibaro:getName(device);
    local ipaddress = fibaro:getValue(device, „IPAddress“);
    local port = fibaro:getValue(device, „TCPPort“);
    sonos = Net.FHttp(ipaddress, port);
    response = sonos:GET(„/“..zonename..“/state“)
    –fibaro:debug(response)
    jsonTable = json.decode(response);

    — neu: artist und album sind bei machen Radiostationen leer bzw. nicht in response enhalten
    local zonestate = jsonTable.playbackState;
    local zoneartist = „“;
    local zonetitle = jsonTable.currentTrack.title;
    local zonealbum = „“;
    local zonevolume = jsonTable.volume;

    — neu: artist und album sind bei machen Radiostationen leer bzw. nicht in response enhalten
    if jsonTable.currentTrack.artist ~= nil then
    zoneartist = jsonTable.currentTrack.artist;
    else
    zoneartist = „“;
    end

    — neu: artist und album sind bei machen Radiostationen leer bzw. nicht in response enhalten
    if jsonTable.currentTrack.album ~= nil then
    zonealbum = jsonTable.currentTrack.album;
    else
    zonealbum = „“;
    end

    — set zonestate
    if zonestate == „PLAYING“ then
    zonestate = „Play“;
    elseif zonestate == „STOPPED“ then
    — neu: eigenes Icon mit STOPP
    fibaro:call(device, „setProperty“, „currentIcon“, 1039);
    zonestate = „Stopp“;
    elseif zonestate == „PAUSED_PLAYBACK“ then
    — neu: eigenes Icon mit PAUSE
    fibaro:call(device, „setProperty“, „currentIcon“, 1041);
    zonestate = „Pause“;
    end

    –fibaro:debug(jsonTable.playMode[‚repeat‘]);

    — neu: nicht „state“ sondern „zonestate“ enthällt den aktuellen status
    — neu: Anzeige Status neu zusammenbauen
    zonestate = zonestate..“ Volume: „..zonevolume..“ [“
    if tostring(jsonTable.playMode[„repeat“]) == „all“ then
    zonestate = zonestate..“?“
    end
    if jsonTable.playMode.shuffle == true then
    zonestate = zonestate..“?“
    end
    if jsonTable.playMode.crossfade == true then
    zonestate = zonestate..“?“
    end
    zonestate = zonestate..“]“

    fibaro:call(device,“setProperty“,“ui.lblArtist.value“,zoneartist);
    fibaro:call(device,“setProperty“,“ui.lblTitle.value“,zonetitle);
    fibaro:call(device,“setProperty“,“ui.lblAlbum.value“,zonealbum);
    –fibaro:call(device,“setProperty“,“ui.lblVol.value“,zonevolume);
    fibaro:call(device,“setProperty“,“ui.lblState.value“,zonestate);

    kann leider keine Dateien/Grafiken hochladen

    Schöne Grüße
    Hubertus

    • Hallo Hubertus,
      ich habe Deine Kommentar gerade erst gefunden, dummerweise gibt es noch den Blogbeitrag „HowTo: Node-Sonos-HTTP-API Installation“, in dem ich über meine Erfahrung mit dem VD geschrieben habe, Vielleicht kann Bastian die beiden Blagbeiträge irgendwie zusammenfassen.
      Nun zu Deinem VD: mich würde jetzt interessieren, wo du die geänderten Eintragungen im VD vorgenommen hast, in den Buttons oder gibt es da einen zusammengefassten Bereich?
      Viele Grüße Salve.

  14. Pingback: Node-Sonos-HTTP-API Installation | Mein kleiner Smart Home Blog

  15. Pingback: Sonos im Home Center 2 | Mein kleiner Smart Home Blog

  16. Toller Artikel, vielen Dank.
    Ich habe node-sonos-http mit Docker auf meiner Synology installiert. Es funktioniert auch im Prinzip. Allerdings habe ich ein Phänomen, das mich jetzt schon Stunden kostet und ich nicht wirklich weiterkomme. Ich habe ein Logitech Harmony im Netzwerk um meinen TV zu steuern. Wenn ich am TV einen Sprachbefehl ausgebebe über say.. dann wird anschließend die aktuell laufene Aktion meiner Harmony (also z. B. der TV) beendet, der Fernseher geht also aus. Scheinbar schickt node-sonos-http irgendein Signal ins Netz, das meine Harmony zum Ausschalten bewegt. Hast Du eine Idee, was das sein könnte?
    Viele Grüße
    Thomas

    • Hallo Thomas,

      ich kenne die Harmony noch als einfache IR-Fernbedienung. Die Netzwerkfunktionen sind mir nicht bekannt. Daher kann ich Dir da leider wenig helfen. Aber meine Gedanken dazu: Die Sonos-HTTP-API empfängt nur, da wird nach dem Umsetzen von Befehlen nichts mehr gesendet. Lediglich die Kommunikation zwischen Sonos Boxen findet noch im Netz statt.

      Grüße
      Bastian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere