Ritto Twinbus 7630 smart in Home Assistant einbinden
Gepostet am 31. Oktober 2023 • 5 Minuten • 880 Wörter
Da mein Schreibtisch in unserer Wohnung gerade umgezogen ist, konnte ich in letzter Zeit die Türklingel nicht mehr hören. Um dieses Problem zu lösen, habe ich geschaut, wie man die Klingel irgendwie erweitern kann, sodass ich sie auch im hinterletzten Raum höre. Ich fand keine richtig zufriedenstellende Lösung, also schaute ich, wie man die Türklingel vielleicht smart machen könnte.
Die Hardware
Nachdem ich mir in ein paar Foren angeschaut habe, wie andere das Problem gelöst haben, kam ich relativ schnell auf die Idee den „Shelly Uni“ Chip zu nutzen, um unser Wohntelefon smart zu machen. Ich machte mich also auf die Suche nach Schaltplänen für den Ritto Twinbus 7630, der bei uns erst vor kurzem montiert wurde. Auf der Seite von deh0511 wurde ich fündig. Danach prüfte ich die Angaben mit einem Multimeter und meinem Elektriker-Bruder. Anschließend machte ich einen Plan, wie ich den Shelly Uni an das Telefon installieren wollte:
Hier die Bezeichnung für die markierten Anschlusspunkte:
- GND
- Hier liegt 5V DC an, wenn jemand klingelt (egal ob draußen oder vor der Wohnungstür)
- +24V DC (Busspannung)
- Etagentaster – hier fällt die Spannung ab, wenn jemand vor der Wohnungstür klingelt
- Türöffner (draußen) -> Türöffner wird aktiviert, wenn dieser Anschluss auf Ground geschaltet wird.
- GND
Der Shelly Uni bezieht seine Spannung von 1 & 3 und hat so genug Energie zum Arbeiten. An 2 habe ich einen der Inputs angeschlossen, um ein Klingeln zu erkennen. Den zweiten Input habe ich an 4 angeschlossen, um unterscheiden zu können, wo geklingelt wird, da hier die Spannung abfällt, wenn vor der Wohnungstür geklingelt wird. Anschließend habe ich einen der Outputs des Shellys an 5 und 6 angeschlossen. Zwischen 4 & 5 läge noch ein Pin um das Licht zu schalten, aber der ist zu mindest bei uns ohne Funktion.
Die Software
Nachdem ich den Shelly erfolgreich angeschlossen hatte, konnte ich auch schon das offene WLAN vom Chip finden und ihn dort konfigurieren. Da die direkte Integration in Home Assistant Schwierigkeiten bei mir machte, konfigurierte ich den Shelly so, dass er stattdessen mit meinem MQTT-Server kommunizierte. Dazu setzte ich den Button Type in den beiden Channels des Shelly auf „Detached Switch“ damit der Shelly nicht jeden beim Klingen hereinlässt.
Nachdem ich den Shelly mithilfe von MQTT (über den MQTT Explorer ) sehen konnte, habe ich Home Assistant konfiguriert.
Ich habe einmal MQTT-Sensoren definiert, die die beiden Inputs vom Shelly lesen. Dazu habe ich zwei Shell Commands definiert, die den Shelly direkt schalten. Ich habe mir dazu einen HTML 5 Popup Alarm gebaut. Leider kam mir dieser immer zu spät und war auch im „nur vibrieren“ Modus, in dem ich mein Smartphone meistens habe, nicht zu hören. Deshalb bin ich auf die Home Assistant Android App gewechselt und habe mir dort einen richtigen Alarm definiert. Dieser löst aber nur aus, wenn ich auch wirklich zu Hause bin. Ansonsten gibt es nur eine Benachrichtigung. Dazu habe ich in den Popups auch eine Aktion definiert, um die Außentür direkt vom Popup auf dem Smartphone aus zu öffnen.
Home Assistant Konfiguration
Hier ein Konfigurationsauszug der relevanten Einstellungen:
mqtt:
sensor:
- name: "Tuerklingel"
state_topic: "shellies/shellyuni-3XXXXXXXXX/input/0"
unit_of_measurement: ""
- name: "Tuerklingel Intern"
state_topic: "shellies/shellyuni-3XXXXXXXXX/input/1"
unit_of_measurement: ""
input_boolean:
is_ringbell_inside:
name: IsRingbellInside
initial: off
is_door_buzzing:
name: IsDoorBuzzing
initial: off
shell_command:
doorbell_on: curl http://192.168.XXX.XXX/relay/1?turn=on
doorbell_off: curl http://192.168.XXX.XXX/relay/1?turn=off
automation:
- id: autotelegram_ringbellnotify
alias: Autotele Tuerklingel
description: Die Tuer hat geklingelt
trigger:
platform: state
entity_id: sensor.tuerklingel
to: '1'
action:
service: script.turn_on
entity_id: script.ringbell
- id: ringbell-opendoor
alias: Tür geklingelt - öffnen
description: Türklingel - warte auf Antwort
trigger:
platform: event
event_type: mobile_app_notification_action
event_data:
action: opendoor
action:
service: script.turn_on
entity_id: script.doorbuzzer
- id: ringbell-opendoor-htmlpopup
alias: HTML5 push notification action button clicked
trigger:
platform: event
event_type: html5_notification.clicked
event_data:
action: open_door
action:
service: script.turn_on
entity_id: script.doorbuzzer
- id: ringbell-internal-notify
alias: Marker Tuerklingel Intern
description: Die Tuer hat geklingelt
trigger:
platform: state
entity_id: sensor.tuerklingel_intern
to: '0'
action:
- service: input_boolean.turn_on
data:
entity_id: input_boolean.is_ringbell_inside
script:
openDoorBuzzer:
alias: doorbuzzer2
description: Oeffnet die Aussentuer
sequence:
- service: shell_command.doorbell_on
- delay: 00:00:07
- service: shell_command.doorbell_off
mode: single
doorbuzzer:
alias: doorbuzzer
sequence:
- service: shell_command.doorbell_on
data: {}
- service: input_boolean.turn_on
data:
entity_id: input_boolean.is_door_buzzing
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 500
- service: shell_command.doorbell_off
data: {}
- delay: 00:00:03
- service: input_boolean.turn_off
data:
entity_id: input_boolean.is_door_buzzing
mode: queued
icon: mdi:door
ringbell:
alias: ringbell
sequence:
- if:
- condition: and
conditions:
- condition: time
after: 06:00:00
before: '22:00:00'
- condition: state
entity_id: device_tracker.android
state: home
then:
- service: notify.mobile_app_fp4
data:
message: Türklingel
data:
actions:
- action: opendoor
title: Öffne Tür
name: ringbell
ttl: 0
priority: high
channel: alarm_stream
vibrationPattern: 100, 1000, 100, 1000, 100
notification_icon: mdi:door
else:
- service: notify.mobile_app_fp4
data:
message: Türklingel {% if is_state("input_boolean.is_ringbell_inside",'on')%}
drinnen! {% endif %}
data:
actions:
- action: opendoor
title: Öffne Tür
name: ringbell
ttl: 0
priority: high
channel: door
vibrationPattern: 100, 1000, 100, 1000, 100
notification_icon: mdi:door
- delay: 00:00:01
- service: notify.notifyHtml5
data:
message: Türklingel {% if is_state("input_boolean.is_ringbell_inside",'on')%}
drinnen! {% endif %}
data:
ttl: 0
priority: high
actions:
- action: open_door
title: Öffne Tür
- service: input_boolean.turn_off
data:
entity_id: input_boolean.is_ringbell_inside
mode: queued
icon: mdi:door
Bisher funktioniert das so wunderbar. Ich habe mir auch in der Home Assistant UI ein Shortcut gelegt, um den Türöffner auch von dort auslösen zu können. Unsere Wohnungstür bleibt aber erstmal noch unangetastet und muss weiter händisch geöffnet werden - zu mindest vorläufig.