Seite 1 von 1

Klingelanbindung und Sonos

Verfasst: 18. Apr 2017 14:09
von seppy
Hallo Zusammen,

da ich in einem Haus wohne, dass Ende der 70er Jahre gebaut wurde, ist die Klingelplanung etwas altertümlich. Ich bin dem Ganzen jetzt begegnet um folgende Anforderungen zu erfüllen:
  • Information über Klingeln am Handy
  • Verbesserung der Hörbarkeit der Klingel im Garten, Wohnzimmer und Bad
  • Zukünftig: Auslösen eines Fotos und Versand an das Handy
Die ersten beiden Punkte habe ich jetzt wie folgt umgesetzt. Ich habe den Klingelsensor "HM-Sen-DB-PCB" von Homematic bestellt und zusammengebaut.
132846_F01_GeSignalsensor.jpg
Die Installation uns Anbindung via Homegear hat reibungslos funktioniert. Um das Ganze in openHAB zu verwenden habe ich das passende Item angelegt:

Code: Alles auswählen

/**
 * Klingelerkennung
 */
Group gKGKlingelsensor
        "Klingelsensor"
        (gHeideweg)

Switch KGKlingelsensorState
        "Türklingelzustand"
        (gKGKlingelsensor)
        {channel="homematic:HG-HM-Sen-DB-PCB:DFD7A281-4744-F1A9-1B44-0DAEECA2295D:NEQXXX:1#PRESS_SHORT"}

Switch KGKlingelsensorBattery
        "Batterie Status Klingelsensor [MAP(battery.map):%s]"
        <battery>
        (gKGKlingelsensor, gSysBatteryState)

Um die Klingel in den anderen Räumen besser hören zu können möchte ich das Klingeln über die Sonos Lautsprecher ausgeben. Ich habe mir den Klingelton heruntergeladen und unter html im Config-Verzeichnis (bei mir /etc/openhab2/html/) abgelegt. Ich nutze zum Abspielen die Notifications Funktion des Sonos Bindings. Dazu habe ich für jede Sonos, die ich ansprechen will die entsprechenden Items angelegt. Zum Einen setze ich die passende Lautstärke und zum Anderen das Klingelton Soundfile:

Code: Alles auswählen

/**
 * Sonos Play 5 Esszimmer
 */
//Klingelton
String sonosP5DoorBellSoundfile
        "Klingelton"
        (gSonosDoorBellNotifySoundfile)
        {channel="sonos:PLAY5:RINCON_5CAAFD05EB6C01400:notificationsound"}

//Klingeltonlautstärke
Dimmer sonosP5DoorBellVolume
        (gSonosDoorBellVolume)
        {channel="sonos:PLAY5:RINCON_5CAAFD05EB6C01400:notificationvolume"}

/**
 * Sonos Play 1 Badezimmer
 */
String sonosP1DoorBellSoundfile
        "Klingelton"
        (gSonosDoorBellNotifySoundfile)
        {channel="sonos:PLAY1:RINCON_949F3E7407F201400:notificationsound"}

//Klingeltonlautstärke
Dimmer sonosP1DoorBellVolume
        (gSonosDoorBellVolume)
        {channel="sonos:PLAY1:RINCON_949F3E7407F201400:notificationvolume"}
Somit habe ich alle Voraussetzungen geschaffen. Der Vorteil an der Notify Funktion des Sonosbindings ist, dass nach Abspielen des Soundfiles die ursprüngliche Wiedergabe fortgesetzt wird.

Hier dann noch die passende Rule:

Code: Alles auswählen

/**
 * Klingel überwachen
 */
rule "Event_DoorBell"
when
        Item KGKlingelsensorState changed from OFF to ON
then
        logInfo("HomeBox.MultimediaRules:Event_DoorBell", "Klingeln erkannt")
        pushover('Es klingelt!')
        //Lautstärke setzen
        gSonosDoorBellVolume.members.forEach[i |
                logDebug("HomeBox.MultimediaRules:Event_DoorBell", "Setze Notify Lautstärke auf \"70\" für Sonos Member \"" + i.name + "\"")
                i.sendCommand(70 as Number)
        ]

        //Sende Klingelton
        gSonosDoorBellNotifySoundfile.members.forEach[i2 |
                logDebug("HomeBox.MultimediaRules:Event_DoorBell", "Sende Klingelton \"http://192.168.5.XXX/static/Ding-Dong.wav\" für Sonos Member \"" + i2.name + "\"")
                i2.sendCommand("http://192.168.5.XX/static/Ding-Dong.wav")
        ]
end
Über Verbesserungsvorschläge freue ich mich immer! Die Erweiterung kommt, sobald meine Kamera für die Haustür geliefert wird :roll:

Grüße,
Seppy

Re: Klingelanbindung und Sonos

Verfasst: 20. Apr 2017 14:41
von Cyrelian
Hi Seppy,

schöne Anleitung, funktioniert einwandfrei. Das mit dem Kamerabild hab ich so gelöst:

Code: Alles auswählen

sendTelegramPhoto("bot2", "http://192.168.XXX.XXX:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=XXXX&pwd=XXXXX", "Es klingelt (EG)!")
Die kamera ist eien FOSCAM.
Leider hab ich das via Pushover noch nicht hinbekommen. kann aber auch sein, das das gar nicht geht...siehe Limitation Pushover:
Messages are currently limited to 1024 4-byte UTF-8 characters, with a title of up to 250 characters. Supplementary URLs are limited to 512 characters, and URL titles to 100 characters.
CU
Cyrelian

Re: Klingelanbindung und Sonos

Verfasst: 5. Aug 2017 09:23
von mstormi
Ich habe ein ähnliches Setup. Als Sensor kann man alles Mögliche nutzen, bei mir ein Fibaro Universalsensor.
Da ich keine Sonos habe(n will), habe ich einfach einen alten PC-Lautsprecher an meinen Pi gehängt, auf dem openHAB läuft. Dort, wo der nicht so gut zu hören ist, lasse ich Deckenlichter oder Hues blinken.
Ausserdem kann ich so MP3s als Klingelton abspielen und den so immer mal variieren. Wichtig dabei ist, überlappendes oder mehrfaches Abspielen zu verhindern, wenn der Paketdienst den Klingelknopf wie immer gleich 3x drückt.

Code: Alles auswählen

rule "geklingelt"
when
        Item EG_Diele_Klingel changed from CLOSED to OPEN
then
        var String Silence = "silence-10sec.mp3"


        logInfo("rules", "Klingel gedrückt, es_klingelt = " + es_klingelt.toString)

        if (es_klingelt)
                exit

        es_klingelt = true

        val int Anzahl_Klingeltoene = 7
        val Klingeltoene = newArrayList('doorbell.mp3', 'Klingelton-GranVals-Variation.mp3', 'Pferd-aufm-Flur.mp3', 'SMS_Alarm.mp3', 'Hells_Bells.mp3', 'laughter.mp3', 'Was_wolln_Sie_denn_hier.mp3')

        if (Klingelton.state == NULL)
                Klingelton.postUpdate(1)
        var String s = Klingeltoene.get((Klingelton.state as Number).intValue)
        var Number neuer_Klingelton = Klingelton.state


        neuer_Klingelton = neuer_Klingelton + 1
        if (neuer_Klingelton == Anzahl_Klingeltoene)    // im Array indiziert mit 0 bis (Anzahl - 1)
                neuer_Klingelton = 0
        Klingelton.postUpdate(neuer_Klingelton)

        logInfo("rules", "Klingel Glocke, Klingelton Nr. " + Klingelton.state + ", gewähltes MP3-File: " + s + "; previousState = " + previousState)


        playSound (s)
        playSound (Silence)

        sendXMPP("XXXXXXXXXXXXXXXX","Es hat geklingelt !")

        logInfo("rules", "Klingel Glocke, Sound " + s + " abgespielt.")


        var DecimalType hue = new DecimalType(0)        // 0-360; 0=red, 120=green, 240=blue, 360=red(again)
        var PercentType sat = new PercentType(100)
        var PercentType bright = new PercentType(100)
        var HSBType Blinken = new HSBType(hue,sat,bright)

        var HSBType oldState = EG_Wohnen_Iris1_Farbe.state

        EG_Wohnen_Iris1_Farbe.sendCommand(Blinken)


        EG_Wohnen_Iris1.sendCommand(ON)
        K_ELW_Wohnen_Stecker.sendCommand(ON)
        Garten_Terrasse_kurz.sendCommand(ON)
        Thread::sleep(HueBlinkIntervall)
        EG_Wohnen_Iris1.sendCommand(OFF)
        K_ELW_Wohnen_Stecker.sendCommand(OFF)
        Garten_Terrasse_kurz.sendCommand(OFF)
        Thread::sleep(HueBlinkIntervall)
        EG_Wohnen_Iris1.sendCommand(ON)
        K_ELW_Wohnen_Stecker.sendCommand(ON)
        Garten_Terrasse_kurz.sendCommand(ON)
        
        ...usw.
        
        es_klingelt = false

  end