Home Assistant steuert jetzt die Phoniebox per MQTT
5 (1)

In wenigen Schritten erkläre ich, wie Du Deine Phoniebox über Home Assistant steuern kannst und die wichtigsten Infos im Blick hast. Bei mir sieht es dann wir auf folgendem Screenshot aus:

Natürlich kannst Du die Buttons auch komplett anders belegen, es stehen genügend Möglichkeiten bereit.

Die Daten für das template und die Card findest Du außerdem auf Github, falls Du hier nicht so klar kommen solltet: https://github.com/splitti/HA_PhonieboxCard

Phoniebox „Smart“ machen

MQTT auf der Phoniebox installieren

Die Installation ist sehr simpel und bereits hier beschrieben. Allerdings ergänze ich die Installation ein wenig, um es auch für Anfänger so leicht wie möglich zu gestalten…

Der MQTT-Client für die Kommunikation zwischen der Phoniebox und Home Assistant wird wie folgt installiert:

sudo pip3 install paho-mqtt

Dateien für den Service vorbereiten

Bitte beachte, dass ich bei diesen Beispielen davon ausgehe, dass die Installation der Phoniebox in das Verzeichnis /home/pi/RPi-Jukebox-RFID/ erfolgt ist. Wenn nicht, passe die Pfade entsprechend an!

Zwei Dateien werden kopiert, die als Vorlage für den Service dienen:

sudo cp /home/pi/RPi-Jukebox-RFID/components/smart-home-automation/MQTT-protocol/daemon_mqtt_client.py /home/pi/RPi-Jukebox-RFID/scripts/
sudo cp /home/pi/RPi-Jukebox-RFID/components/smart-home-automation/MQTT-protocol/phoniebox-mqtt-client.service.stretch-default.sample /etc/systemd/system/phoniebox-mqtt-client.service

Damit auch die Berechtigungen etc. ctimmen, werden folgende zwei Befehle ausgeführt:

chmod 755 /home/pi/RPi-Jukebox-RFID/scripts/daemon_mqtt_client.py
chown pi:www-data /home/pi/RPi-Jukebox-RFID/scripts/daemon_mqtt_client.py

Konfiguration bearbeiten

Jetzt geht es ans Eingemachte, die Datei /home/pi/RPi-Jukebox-RFID/scripts/daemon_rfid_reader.py muss editiert werden:

# ----------------------------------------------------------
#  SETTINGS
# ----------------------------------------------------------
DEBUG = False
mqttBaseTopic = "phoniebox"           # MQTT base topic  <<< wenn Ihr mehrere Boxen habt, tragt den Boxnamen ein
mqttClientId = "phoniebox"            # MQTT client ID   <<< wenn Ihr mehrere Boxen habt, tragt den Boxnamen ein
mqttHostname = "homeassistant.local"  # MQTT server hostname
mqttPort = 1883                       # MQTT server port (typically 1883 for unencrypted, 8883 for encrypted)
mqttUsername = "phoniebox"            # username for user/pass based authentication
mqttPassword = "P@$$w0rd"             # password for user/pass based authentication
mqttCA = ""                           # path to server certificate for certificate-based authentication
mqttCert = ""                         # path to client certificate for certificate-based authentication
mqttKey = ""                          # path to client keyfile for certificate-based authentication
mqttConnectionTimeout = 60            # in seconds; timeout for MQTT connection
refreshIntervalPlaying = 5            # in seconds; how often should the status be sent to MQTT (while playing)
refreshIntervalIdle = 30              # in seconds; how often should the status be sent to MQTT (when NOT playing)

mqttBaseTopic

Der Topic ist wichtig, denn hiermit wird Home Assistant die Daten „identifizieren“. Hast Du mehere Phonieboxen, wäre der optimale Weg den Topic wie folgt aufzubauen:

  • phoniebox/boxnameabc
  • phoniebox/boxnamedef

mqttClientId

Die ClientId, sollte eindeutig sein. Ich verwende hier den Hostnamen des Raspberry Pi’s.

mqttHostname

Der Hostname von Eurem Home Assistant als FQDN oder IP-Adresse.

mqttPort

Auf Port 8883 habe ich leider immer Kommunikationsfehler, daher arbeite ich mit 1883.

mqttUsername, mqttPassword

Dies ist ein Benutzer, der im weiteren Verlauf in Home Assistant erstellt wird. Dieser sollte explizit nur für diese Aufgabe genutzt werden. In anderen Berichten habe ich gelesen, dass es zu Problemen mit dem Backend kommt, wenn ein User von verschiedenen MQTT-Clients verwendet wird.

mqttCA, mqttCert, mqttKey

Mit diesen Einstellungen kannst Du eine Zertifikat-basierte Anmeldung sicherstellen. Das ist für mein kleines Netzwerk etwas übertrieben und daher habe ich alle Werte zwischen den Anführungszeichen entfernt. Das Script arbeitet leider so, dass ein leerer Wert übergeben werden muss und das auskommentieren nicht ausreicht.

mqttConnectionTimeout, refreshIntervalPlaying, refreshIntervalIdle

Diese Intervalle habe ich bislang nicht verändert. Allerdings wollte ich das refreshIntervalPlaying mal auf eine Sekunde setzen, damit sollte im idealen Fall die Sekunden-Anzeige nahezu in Echtzeit angezeigt werden. Der Rest ist selbstsprechend und stimmig.

Erstellen des Service

Der Service wird mit den folgenden Befehlen eingelesen und aktiviert:

sudo systemctl daemon-reload
sudo systemctl enable phoniebox-mqtt-client

Den Service starten wir an dieser Stelle noch nicht, da Home Assistant noch nicht soweit ist!

Home Assistant vorbereiten

Grundvoraussetzung für die Kommunikation ist ein MQTT Broker, hierfür verwende ich den Mosquitto Broker als AddOn in Home Assistant. Mehr Infos gibt es hier: https://www.home-assistant.io/docs/mqtt/broker/

Weiterehin werden folgende Frontends aus dem HACS installiert:

Ein super Video der Installation von HACS findest Du hier (von Smarthome yourself): https://www.youtube.com/watch?v=SABG7apf818

Home Assistant Benutzer erstellen

Jetzt erstellen wir den Benutzer, der weiter oben auf der Phoniebox in der Konfiguration hinterlegt wurde. Dafür gehe in die Einstellungen und wähle dort den Menüpunkt Benutzer aus. Hier kannst Du dann die Werte eingeben, die Du in der Konfiguration eingegeben hast…

Home Assistant Templates erstellen

Zu Guter Letzt fehlen noch die Templates in der sensor.yaml, damit wir die Werte alle haben. Hierbei ist wichtig, dass phoniebox in state_topic dem Wert mqttBaseTopic der Konfiguration auf der Phoniebox entspricht. Du kannst nicht verwendete Werte einfach weg lassen:

- platform: mqtt
  name: Phoniebox State
  state_topic: 'phoniebox/state'
  icon: mdi:power
  unique_id: phoniebox_state

- platform: mqtt
  name: Phoniebox Edition
  state_topic: 'phoniebox/edition'
  icon: mdi:spotify
  unique_id: phoniebox_edition

- platform: mqtt
  name: Phoniebox Version
  state_topic: 'phoniebox/version'
  icon: mdi:numeric
  unique_id: phoniebox_version

- platform: mqtt
  name: Phoniebox Disk Total
  state_topic: 'phoniebox/disk_total'
  icon: mdi:harddisk
  unique_id: phoniebox_disktotal

- platform: mqtt
  name: Phoniebox Disk Available
  state_topic: 'phoniebox/disk_avail'
  icon: mdi:harddisk
  unique_id: phoniebox_diskavail

- platform: mqtt
  name: Phoniebox Volume
  state_topic: 'phoniebox/attribute/volume'
  icon: mdi:volume-high
  unique_id: phoniebox_volume

- platform: mqtt
  name: Phoniebox Player State
  state_topic: 'phoniebox/attribute/state'
  unique_id: phoniebox_playerstate

- platform: mqtt
  name: Phoniebox Mute
  state_topic: 'phoniebox/attribute/mute'
  icon: mdi:volume-off
  unique_id: phoniebox_mute

- platform: mqtt
  name: Phoniebox Repeat
  state_topic: 'phoniebox/attribute/repeat'
  icon: mdi:repeat
  unique_id: phoniebox_repeat

- platform: mqtt
  name: Phoniebox Random
  state_topic: 'phoniebox/attribute/random'
  icon: mdi:arrow-decision
  unique_id: phoniebox_random

- platform: mqtt
  name: Phoniebox File
  state_topic: 'phoniebox/attribute/file'
  icon: mdi:file
  unique_id: phoniebox_file

- platform: mqtt
  name: Phoniebox Album Artist
  state_topic: 'phoniebox/attribute/albumartist'
  icon: mdi:account-music
  unique_id: phoniebox_albumartist

- platform: mqtt
  name: Phoniebox Album Artist
  state_topic: 'phoniebox/attribute/albumartist'
  icon: mdi:account-music
  unique_id: phoniebox_albumartist


- platform: mqtt
  name: Phoniebox Artist
  state_topic: 'phoniebox/attribute/artist'
  icon: mdi:account-music
  unique_id: phoniebox_artist

- platform: mqtt
  name: Phoniebox Title
  state_topic: 'phoniebox/attribute/title'
  icon: mdi:format-title
  unique_id: phoniebox_title

- platform: mqtt
  name: Phoniebox Album
  state_topic: 'phoniebox/attribute/album'
  icon: mdi:album
  unique_id: phoniebox_album

- platform: mqtt
  name: Phoniebox Track
  state_topic: 'phoniebox/attribute/track'
  icon: mdi:counter
  unique_id: phoniebox_track

- platform: mqtt
  name: Phoniebox Track Date
  state_topic: 'phoniebox/attribute/trackdate'
  icon: mdi:calendar-range
  unique_id: phoniebox_trackdate

- platform: mqtt
  name: Phoniebox Last Card
  state_topic: 'phoniebox/attribute/last_card'
  icon: mdi:smart-card
  unique_id: phoniebox_last_card

- platform: mqtt
  name: Phoniebox Max Volume
  state_topic: 'phoniebox/attribute/maxvolue'
  icon: mdi:volume-high
  unique_id: phoniebox_maxvolue

- platform: mqtt
  name: Phoniebox Volume Step
  state_topic: 'phoniebox/attribute/volstep'
  icon: mdi:volume-medium
  unique_id: phoniebox_volstep

- platform: mqtt
  name: Phoniebox Rfid Service
  state_topic: 'phoniebox/attribute/rfid'
  icon: mdi:cast-audio-variant
  unique_id: phoniebox_rfid

- platform: mqtt
  name: Phoniebox GPIO Service
  state_topic: 'phoniebox/attribute/gpio'
  icon: mdi:raspberry-pi
  unique_id: phoniebox_gpio

- platform: mqtt
  name: Phoniebox Minutes to stop
  state_topic: 'phoniebox/attribute/remaining_stopafter'
  icon: mdi:timer
  unique_id: phoniebox_remaining_stopafter

- platform: mqtt
  name: Phoniebox Minutes to shutdown
  state_topic: 'phoniebox/attribute/remaining_shutdownafter'
  icon: mdi:timer
  unique_id: phoniebox_remaining_shutdownafter

- platform: mqtt
  name: Phoniebox Elapsed
  state_topic: 'phoniebox/attribute/elapsed'
  icon: mdi:clock-outline
  unique_id: phoniebox_elapsed

- platform: mqtt
  name: Phoniebox Duration
  state_topic: 'phoniebox/attribute/duration'
  icon: mdi:clock-outline
  unique_id: phoniebox_duration

- platform: mqtt
  name: Phoniebox Remaining Idle
  state_topic: 'phoniebox/attribute/remaining_idle'
  icon: mdi:clock-outline
  unique_id: phoniebox_remaining_idle

- platform: mqtt
  name: Phoniebox Idletime
  state_topic: 'phoniebox/attribute/idletime'
  icon: mdi:clock-outline
  unique_id: phoniebox_idletime

- platform: mqtt
  name: Phoniebox Temperature
  state_topic: 'phoniebox/attribute/temperature'
  icon: mdi:clock-outline
  unique_id: phoniebox_temperature

Home Assistant Card erstellen

Hier ist die Karte, wie ich sie aktull verwende, selbstverständlich kann sie auf Deine Wünsche hin editiert werden:

type: conditional
conditions:
  - entity: sensor.phoniebox_state
    state: online
card:
  type: picture-elements
  image: local/phoniebox/background.jpg
  style: |
    ha-card {
      --ha-card-background: none !important;
      box-shadow: none !important;
    }                          
  elements:
    - type: custom:button-card
      show_icon: false
      show_name: false
      aspect_ratio: 4/1
      styles:
        card:
          - background: '#ffffff'
          - filter: opacity(60%)
      style:
        '--ha-card-border-radius': 0px 0px 20px 20px
        height: 100%
        width: 100%
        top: 120%
        left: 50%
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:skip-next-circle
      type: custom:button-card
      size: 100%
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/playernext
        haptic: medium
      style:
        right: '-4%'
        top: 10%
        height: 15%
        width: 15%
      state:
        - styles:
            icon:
              - filter: opacity(100%)
              - transition: all 0.5s ease
          value: paused
      styles:
        card:
          - padding: 0px
          - border-radius: 80%
        icon:
          - filter: opacity(80%)
          - transition: all 0.5s ease
          - color: '#FFFFFF'
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:skip-previous-circle
      type: custom:button-card
      size: 100%
      style:
        right: 30%
        top: 10%
        height: 15%
        width: 15%
      state:
        - styles:
            icon:
              - filter: opacity(100%)
              - transition: all 0.5s ease
          value: paused
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - filter: opacity(80%)
          - transition: all 0.5s ease
          - color: '#FFFFFF'
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/playerprev
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: |
        [[[
          if ( states['sensor.phoniebox_player_state'].state == "play" ) return "mdi:pause-circle";
          else return "mdi:play-circle";
        ]]]
      type: custom:button-card
      size: 100%
      style:
        right: 13%
        top: 10%
        height: 15%
        width: 15%
      state:
        - styles:
            icon:
              - filter: opacity(100%)
              - transition: all 0.5s ease
          value: paused
          icon: mdi:play-circle
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - filter: opacity(80%)
          - transition: all 0.5s ease
          - color: '#FFFFFF'
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/playerpause
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:restart
      type: custom:button-card
      size: 90%
      style:
        right: 10%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 80%
        icon:
          - color: var(--text-color)
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/reboot
        haptic: medium
      confirmation:
        text: Soll die Box neu gestartet werden?
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:power-standby
      type: custom:button-card
      size: 90%
      style:
        right: 0%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: var(--text-color)
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/shutdown
        haptic: medium
    confirmation:
      text: Soll die Box ausgeschaltet werden?
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:music-circle-outline
      type: custom:button-card
      size: 90%
      style:
        right: 20%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: var(--text-color)
      tap_action:
        action: url
        url_path: http://phoniebox.local/
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:spotify
      type: custom:button-card
      size: 90%
      style:
        right: 30%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: '#1DB954'
      tap_action:
        action: url
        url_path: http://phoniebox.local:6680/iris/
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:volume-mute
      type: custom:button-card
      size: 90%
      style:
        left: 8%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: var(--text-color)
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/mute
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:volume-minus
      type: custom:button-card
      size: 90%
      style:
        left: 18%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: var(--text-color)
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/volumedown
        haptic: medium
      hold_action:
        action: none
    - aspect_ratio: 1/1
      show_name: false
      show_icon: true
      icon: mdi:volume-plus
      type: custom:button-card
      size: 90%
      style:
        left: 28%
        top: 88%
        height: 8%
        width: 8%
        .: |
          ha-card {
            background-color: rgb(255,255,255,0.8) !important;
            box-shadow: none !important;
          }
      styles:
        card:
          - padding: 0px
          - border-radius: 50%
        icon:
          - color: var(--text-color)
      tap_action:
        action: call-service
        service: mqtt.publish
        service_data:
          topic: phoniebox/cmd/volumeup
        haptic: medium
      hold_action:
        action: none
    - type: custom:hui-markdown-card
      content: '# {{ states.sensor.phoniebox_title.state }}'
      style:
        height: 50px
        width: 100%
        top: 74%
        left: 50%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 12px;
              font-weight: bold;
              font-family: Helvetica;
              letter-spacing: '-1.02';
              white-space: nowrap;
            }
    - type: custom:hui-markdown-card
      content: '# {{ states.sensor.phoniebox_artist.state }}'
      style:
        height: 50px
        width: 100%
        top: 79%
        left: 50%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 10.5px;
              font-weight: thin;
              font-family: Helvetica;
              letter-spacing: '-0.01em';
              white-space: nowrap;
            }
    - type: custom:hui-markdown-card
      content: <h1>{{ states.sensor.phoniebox_elapsed.state }}</h1>
      style:
        height: 50px
        width: 10%
        top: 11%
        left: 5%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 11px;
              color: rgb(255,255,255,0.7) !important;
              font-weight: thin;
              font-family: Courier;
              letter-spacing: '-0.01em';
            }
    - type: custom:hui-markdown-card
      content: <h1>{{ states.sensor.phoniebox_volume.state }}/100</h1>
      style:
        height: 50px
        width: 10%
        top: 15%
        left: 5%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 11px;
              color: rgb(255,255,255,0.7) !important;
              font-weight: thin;
              font-family: Courier;
              letter-spacing: '-0.01em';
              text-align: right;
            }
    - type: custom:hui-markdown-card
      content: <h1>Phoniebox</h1>
      style:
        height: 50px
        width: 100%
        top: 63%
        right: '-50%'
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;

          }
        ha-markdown:
          $: |
            h1 {
              font-size: 25;
              color: rgb(255,255,255,0.4) !important;
              font-weight: thin;
              font-family: Arial;
              letter-spacing: '-0.01em';
              text-align: right;
            }
    - type: custom:hui-markdown-card
      content: >-
        <h1>Remain Idle {{ states.sensor.phoniebox_remaining_idle.state }}
        Mins</h1>
      style:
        height: 50px
        width: 100%
        top: 65%
        left: 50%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 11px;
              color: rgb(255,255,255,0.5) !important;
              font-weight: thin;
              font-family: Courier;
              letter-spacing: '-0.01em';
            }
    - type: custom:hui-markdown-card
      content: <h1>{{ states.sensor.phoniebox_temperature.state }}</h1>
      style:
        height: 50px
        width: 100%
        top: 55%
        left: 50%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 11px;
              color: rgb(255,255,255,0.5) !important;
              font-weight: thin;
              font-family: Courier;
              letter-spacing: '-0.01em';
            }
    - type: custom:hui-markdown-card
      content: <h1>Free {{ states.sensor.phoniebox_disk_available.state }} GB</h1>
      style:
        height: 50px
        width: 100%
        top: 60%
        left: 50%
        .: |
          ha-card {
            background-color: transparent !important;
            box-shadow: none !important;
          }
        ha-markdown:
          $: |
            h1 {
              font-size: 11px;
              color: rgb(255,255,255,0.5) !important;
              font-weight: thin;
              font-family: Courier;
              letter-spacing: '-0.01em';
            }

Der Hintergrund

Das Hintergrundbild kann frei ausgetauscht werden. Ich habe meines hier geladen: https://pixabay.com/de/photos/dj-vinyl-musik-drehscheibe-audio-4702977/

Das Bild habe ich in das Verzeichnis /config/www/Phonie abgelegt und nach background.jpg umbenannt.

Dienste starten

Zunächst starte den Core-Dienst in Home Assistant neu und dann zusätzlich den Dienst vom Mosquitto Broker. Dann starte auf der Phoniebox den Service mit folgendem Befehl:

sudo service phoniebox-mqtt-client start

Nun sollten die Werte gefüllt werden. Nutzt das Protokoll von Mosquitto oder den Status vom Service auf der Phoniebox:

phoniebox-mqtt-client

Wenn keine Daten ankommen, kannst Du den Service stoppen und einfach das Script manuell starten um mehr Informationen zu erhalten:

sudo service phoniebox-mqtt-client start #Dienst stoppen
sudo python3 /home/pi/RPi-Jukebox-RFID/scripts/daemon_mqtt_client.py

Bewerte diesen Beitrag
[Total: 1 Durchschnitt: 5]
Abonnieren
Benachrichtige mich bei
Deine Daten werden nicht an Dritte weitergegeben und auf deutschen Servern verarbeitet. Hiermit stimmst Du zu, dass Deine IP-Adresse für maximal 48h gespeichert wird. Außerdem stimmst Du der Speicherung und Veroffentlichung Deines Namens, Deiner Mailadresse, falls vorhanden Deiner Webseite und Deines Kommentares zu.
0 Kommentare
Inline Feedbacks
Zeige alle Kommentare
Scroll to Top