Siedle Türklingel mit Reolink auf FireHD Tablet?

Guten Abend allerseits,
ich bin ein absoluter Anfänger was HA angeht, so ein paar Basics konnte ich schon Realisieren, jetzt stoße ich aber absolut an meine Grenzen. Habe schon gesucht, wurde aber leider nicht fündig.
Zu meinem Vorhaben: An der Türe ist eine alte Siedle analoge Türsprechstelle.
Ich würde gerne, wenn jemand klingelt, auf meinem FireHD Tablet das Bild der Reolink Kamera anzeigen lassen bzw Aufzeichnen für vielleicht 60 Sekunden.
Kann mir da jemand unter die Arme greifen, wie ich sowas realisieren kann?

Vielen Dank im voraus

Habe was ähnliches mal mit einem ESP und dem >>> az-delivery ky-037 <<< realisiert. Beim KY-037 lässt sich die Schaltschwelle per Poti einstellen. Beim ESP dann nur noch einen IO entsprechend auswerten wenn „High“ und fertig ist dein „Klingelsensor“! Was du dann mit dem Signal anstellst wird nur durch deine Phantasie begrenzt! :wink: Habe das damals unter „ESP Home“ für einen Bekannten gebaut, müsste bei Ihm eigentlich auch noch an die Yaml rankommen.

Hier ist die .yaml (gerade noch einmal aktualisiert, angepasst und getestet!)

esphome:
  name: klingel-detektor
  friendly_name: Klingel Detektor

esp8266:
  board: nodemcuv2

wifi:
  networks:
    - ssid: !secret wifi_ssid_1
      password: !secret wifi_password_1
      hidden: true
  use_address: 10.10.2.77
  manual_ip: 
    static_ip: 10.10.2.77
    gateway: 10.10.2.1
    subnet: 255.255.255.0
    dns1: 10.10.2.1
    dns2: 8.8.8.8

logger:
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxxx"


# --- LED auf dem Board ---
output:
  - platform: gpio
    id: board_led
    pin:
      number: D4
      inverted: true   # weil die LED auf LOW leuchtet (bei den meisten ESP8266)

# --- Klingel Sensor ---
binary_sensor:
  - platform: gpio
    name: "Klingel erkannt"
    pin:
      number: D5
      mode: INPUT_PULLUP   # Pull-Up statt Pull-Down
      inverted: true       # HIGH-Signal → ON
    filters:
      - delayed_on: 10ms
      - delayed_off: 1000ms
    device_class: sound
    on_press:
      - output.turn_on: board_led
    on_release:
      - output.turn_off: board_led

Schaut im Home Assistant unter ESP Home dann so aus:

Damit hättest du den Trigger für deine Automation!
Um jetzt das Kamerabild auf dem Tablett anzuzeigen empfehle ich dir
>>>Fully Kiosk Browser<<<
zu nutzen, damit geht das dann problemlos! Musst dich halt etwas einarbeiten, zum Fully Kiosk findest du aber jede Menge guter Tutorials!

3 „Gefällt mir“

Hallo Big, wow, Wahnsinn und vielen Dank für die schnelle Antwort.
Ich habe tatsächlich schon den Kiosk auf dem Fire laufen und bin völlig begeistert davon.
Wäre es denn auch möglich den " Klingeltaster " mit einem Shelly plus uni zu realisieren?
Die Klingel hab ich vor Jahren mal mit einem Modul ausgestattet, welches es mir Erlaubt den klingelnden auf meine DECT Telefone zu leiten. Das funktioniert wunderbar und es geht darum zu sehen wer vor der Tür seht bevor man „ran“ geht :wink:

Dann schau mal bitte im Shelly Forum nach

Ich weiß ja nicht welchem genauen Typ Siedle Du hast

Genügend Beiträge mit der Suche „Siedle“ gibt es dort:

Was du letzendlich verwendest um dein „Klingeln“ als Sensor nach Home Assistant zu bekommen ist Deine Wahl! ich kann dir nur meine Lösung nahelegen weil sie 1. Funktioniert und 2. Billig ist ! Ich denke die Materialkosten sind hier nicht mehr als 5€!
Und sich mit ESP Home anzufreunden kann definitiv nicht schaden! :wink:

1 „Gefällt mir“

Hey @Dr.Big ,
eine kurze Frage. Ich habe das genau so umgesetzt bezüglich des reinen Klingelsensors: ESP8266 mit KY-037, allerdings mit einer YAML von Reubertt esphome-components/configurations/volume-sensor.yaml at main · Reubertt/esphome-components · GitHub .
Alles funktioniert so weit prima, aber: Meine Türklingel läutet mit 85 DB für ca. 2 Sekunden. Der Sensor löst aber schon bei Millisekunden über diesem Wert aus.
Ich finde einfach nicht heraus, wie ich dem Sensor sagen kann, dass der erst dann auslösen soll, wenn der Dezibel Wert für mindestens 2 Sekunden dauerhaft über 80 Dezibel liegt. Aktuell löst er auch schon aus, wenn ich mit dem Fingernagel dran schnippe.
Hast Du da einen Tipp für mich?

Da muss man den Erkennungsansatz anders machen!

Hier mal eine Variante die ein „Duty-Cycle / Zeitfenster“ zur Erkennung nutzt!
Das heisst innerhalb eines „Zeitfensters“ muß mindestens „Wert x in %“ das Signal high sein!
„Zeitfenster“ und „Schwellwert“ kannst du im Home Assistant einstellen!

(ESP8266 KY-037 an D5)

.....

# --- LED auf dem Board ---
output:
  - platform: gpio
    id: board_led
    pin:
      number: D4
      inverted: true

# --- GPIO-Sensor vom Audio-Eingang ---
binary_sensor:
  - platform: gpio
    id: klingel_raw
    name: "Klingel Rohsignal"
    pin:
      number: D5
      mode: INPUT_PULLUP
      inverted: true
    device_class: sound

  - platform: template
    id: klingel_erkannt
    name: "Klingel erkannt"
    device_class: sound

# --- Globale Zähler ---
globals:
  - id: signal_high_count
    type: int
    restore_value: no
  - id: signal_total_count
    type: int
    restore_value: no

# --- Einstellbare Parameter über Home Assistant ---
number:
  - platform: template
    name: "Klingel Fenstergröße (ms)"
    id: window_size
    min_value: 100
    max_value: 2000
    step: 50
    unit_of_measurement: "ms"
    initial_value: 500
    optimistic: true

  - platform: template
    name: "Klingel Schwellwert (%)"
    id: duty_threshold
    min_value: 0.05
    max_value: 1.0
    step: 0.05
    initial_value: 0.2
    optimistic: true

# --- Intervalle ---
# Zählung in 10ms-Schritten
interval:
  - interval: 10ms
    then:
      - lambda: |-
          id(signal_total_count)++;
          if (id(klingel_raw).state) {
              id(signal_high_count)++;
          }

# Auswertung alle 10ms, dynamisch basierend auf Fenstergröße
  - interval: 10ms
    then:
      - lambda: |-
          static float elapsed = 0.0;
          elapsed += 0.01; // 10ms Schritt

          if (elapsed * 1000 >= id(window_size).state) {
              float duty = (float)id(signal_high_count) / (float)id(signal_total_count);

              if (duty >= id(duty_threshold).state) {
                  if (!id(klingel_erkannt).state) {
                      id(klingel_erkannt).publish_state(true);
                      id(board_led).turn_on();
                  }
              } else {
                  if (id(klingel_erkannt).state) {
                      id(klingel_erkannt).publish_state(false);
                      id(board_led).turn_off();
                  }
              }

              // Zähler zurücksetzen
              id(signal_high_count) = 0;
              id(signal_total_count) = 0;
              elapsed = 0.0;
          }
1 „Gefällt mir“

Hey, vielen Dank.
Aber der Wert soll nicht innerhalb des Zeitfensters erkannt werden, sonder er muss durchgehend innerhalb des 2 Sekunden Zeitfensters über einem bestimmten Wert liegen.
Beispiel: Sensor löst aus bei Klatschen, Husten etc. weil der Dezibel Wert dabei ähnlich hoch ist wie die Klingel, die ich erfassen möchte. Um nun Klatschen, Husten etc „herauszufiltern“, soll der sensor eben nur dann auslösen, wenn ein Geräusch innerhalb eines Zeitfensters von 2 Sekunden durchgehend über z.B. 80 Dezibel liegt. Blöd zu erklären, aber vielleicht weißt du, was ich meine.
Danke auch für Deine Variante, aber mir fehlen da etwas die Skills, das in der ESPHome Builder YAML umzusetzen.
Derzeit sieht meine (grundsätzlich funktionierende) YAML so aus (Passwörter sind gefaked):

esphome:
  name: volume-sensor
  friendly_name: volume-sensor

esp8266:
  board: esp01_1m

external_components:
  - source:
      type: git
      url: https://github.com/Reubertt/esphome-components
    components: [volume_sensor]
    #refresh: 1h

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "kcu02cgvnmcgvncngvqE3VpMyjn/quWOMRRDHnrKHs="

ota:
  - platform: esphome
    password: "8a58ac0882bebbb"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Volume-Sensor Fallback Hotspot"
    password: "3i2dxsfhgbk5698734d"

  on_connect:
    then:
      - logger.log: "WiFi connected. Starting fast sampling."
      - component.resume:
          id: volume_sensor_main
          # This sets the high-frequency sampling rate.
          update_interval: 50ms
  


captive_portal:


web_server:
  port: 80

sensor:
  - platform: volume_sensor
    id: volume_sensor_main
    internal: true # The main component is just a controller.
    pin: A0

    # Start with a very long interval to allow Wi-Fi to connect reliably.
    # The 'on_connect' automation above will override this.
    update_interval: 100s

    # Publish the peak value found every 5 seconds.
    publish_interval: 5s

    # Each sample burst lasts 30ms. The next burst starts immediately.
    sampling_duration: 30ms

    # --- Measurement Configuration ---
    sensitivity: 50
    # Use calibration to narrow the focus to your sensor's actual operating range,
    # determined after completing the hardware calibration in Step 1.
    adc_min_calibration: 200
    adc_max_calibration: 900

    # --- Child Sensors ---
    db_sensor:
      name: "Volume DB"

    #raw_max_sensor:
    #  name: "Raw ADC Max"

    #raw_min_sensor:
    #  name: "Raw ADC Min"

    percentage_sensor:
      name: "Volume Percent"

number:
  - platform: template
    name: "Sound Sensitivity"
    optimistic: true
    initial_value: 50
    min_value: 0.0
    max_value: 100.0
    step: 0.5
    set_action:
      - lambda: id(volume_sensor_main).set_sensitivity(x);
esphome:
  name: volume-sensor
  friendly_name: volume-sensor

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "/dMQjO5lwtv9EPJu+AV4cvTAcE16a9Myt49IWN4VnRI="

ota:
  - platform: esphome
    password: "69150092d44c9c8651df03cf632302bc"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# --- LED auf dem Board ---
output:
  - platform: gpio
    id: board_led
    pin:
      number: 2   # GPIO2 auf ESP-01
      inverted: true

# --- ADC-Sensor vom Audio-Eingang ---
sensor:
  - platform: adc
    pin: A0
    id: klingel_adc
    name: "Klingel Rohsignal"
    update_interval: 10ms

# --- Template Binary Sensor ---
binary_sensor:
  - platform: template
    id: klingel_erkannt
    name: "Klingel erkannt"
    device_class: sound

# --- Globale Zähler ---
globals:
  - id: signal_high_count
    type: int
    restore_value: no
  - id: signal_total_count
    type: int
    restore_value: no

# --- Einstellbare Parameter über Home Assistant ---
number:
  - platform: template
    name: "Klingel Fenstergröße (ms)"
    id: window_size
    min_value: 100
    max_value: 2000
    step: 50
    unit_of_measurement: "ms"
    initial_value: 500
    optimistic: true

  - platform: template
    name: "Klingel Schwellwert (%)"
    id: duty_threshold
    min_value: 0.05
    max_value: 1.0
    step: 0.05
    initial_value: 0.2
    optimistic: true

# --- Intervalle ---
# Zählung in 10ms-Schritten
interval:
  - interval: 10ms
    then:
      - lambda: |-
          id(signal_total_count)++;
          if (id(klingel_adc).state > 512) {  // Threshold für "high" Signal, 0-1023
              id(signal_high_count)++;
          }

# Auswertung alle 10ms, dynamisch basierend auf Fenstergröße
  - interval: 10ms
    then:
      - lambda: |-
          static float elapsed = 0.0;
          elapsed += 0.01; // 10ms Schritt

          if (elapsed * 1000 >= id(window_size).state) {
              float duty = (float)id(signal_high_count) / (float)id(signal_total_count);

              if (duty >= id(duty_threshold).state) {
                  if (!id(klingel_erkannt).state) {
                      id(klingel_erkannt).publish_state(true);
                      id(board_led).turn_on();
                  }
              } else {
                  if (id(klingel_erkannt).state) {
                      id(klingel_erkannt).publish_state(false);
                      id(board_led).turn_off();
                  }
              }

              // Zähler zurücksetzen
              id(signal_high_count) = 0;
              id(signal_total_count) = 0;
              elapsed = 0.0;
          }

Habe das mal für deinen esp01 angepasst! Ist aber so ungetestet, kompiliert hier aber sauber durch!

Ja, genau das macht es in dieser Version und du kannst es noch „feintunen“!

Danke nochmal für die ganze Mühe, die Du Dir hier machst :blush:.
Ich habe es übertragen können, es läuft. Aber ich bekomme nun gar keine Auslösung mehr hin. Es gibt ja auch keinen Dezibel Wert mehr, der überschritten werden könnte. Das macht es für mich als Laien jetzt deutlich schwieriger…
Ich kapiere die Einstellungen einfach nicht. Klar, ich muss jetzt den Volume Percent Wert einstellen, aber der variiert so extrem mimimal (Im Mittel wenn ruhig 0,71 und bei großer Lautstärke max. 0,73). Und ich weiß auch nicht, ob ich mein 2 Sekunden-Fenster per Sensor Klingel Fenster oder in der Automation einstellen muss. Wenige Werte, aber für mich iregndwie komplex :see_no_evil:

So, habe in den Tiefen meiner Bastelkiste noch einen ESP8266-01 gefunden!
Ich werde das ganze noch mal überarbeiten und testen! Habe noch etwas Geduld!

Unglaublich was für eine Geduld du mit mir hast. Ich danke Dir!