Domofon - ESP8266 i mikrofon

Hey,
Mam w domu osobe słabo słyszącą. Często dochodzi do sytuacji, że przegapi domofon (czasami ważny). Znalazłem kilka opisów jak do HA dodać domofon. Nie chce się bawić w jakieś rzeczy prądowe bo jestem za cienki w te klocki. Znałem opis za pomocą esp8266 i mikrofonu (KY-037) zintegrować w HA. Połączyłem układy wgrałem firmware (używam ESPHome) z czegoś takiego (podpowiedzi w forum HA):

esphome:
  name: sound-sensor
  friendly_name: sound-sensor

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "x****="

ota:
  - platform: esphome
    password: "1***8"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "sound-sensor Fallback Hotspot"
    password: "K*******B"

captive_portal:

# Example configuration entry
web_server:
  port: 80

globals:

  - id: esphome_sensitivity
    type: float
    initial_value: '36.5'
    restore_value: yes

  - id: esphome_volume
    type: int

sensor:
  - platform: adc
    pin: A0
    id: esphome_db
    device_class: signal_strength
    name: "Db SoundEsp"
    icon: "mdi:volume-vibrate"
    unit_of_measurement: "db"
    update_interval: 1s
    raw: true
    filters:
      - lambda: |-
          unsigned int sample;
          unsigned long startMillis= millis(); 
          float peakToPeak = 0; 
          unsigned int signalMax = 0;
          unsigned int signalMin = 1024;
          while (millis() - startMillis < 500) {
            sample = analogRead(A0);
            if (sample < 1024){
                if (sample > signalMax){
                    signalMax = sample;
                }
                else if (sample < signalMin){
                    signalMin = sample;
                }
              }
          }
          peakToPeak = map((signalMax - signalMin),1,1024,1.5,1024);
          id(esphome_volume) = peakToPeak;
          float state = id(esphome_sensitivity)*log10(peakToPeak)+15;  
          return(state);

  - platform: template
    name: "Volume SoundEsp"
    icon: "mdi:volume-high"
    unit_of_measurement: "%"
    update_interval: 2s
    lambda: return(map((id(esphome_db).state),15,150,0,100));

  - platform: template
    name: "RAW SoundEsp"
    icon: "mdi:volume-source"
    unit_of_measurement: "%"
    update_interval: 2s
    lambda: return(map(id(esphome_volume),1,1024,0,100));

number:
  - platform: template
    id: sensitivity_slider
    name: "Sensitivity SoundEsp"
    icon: "mdi:knob"
    update_interval: 5s
    initial_value: "36.5"
    step: 0.1
    min_value: 20
    max_value: 40
    mode: slider
    set_action:
      then:
        - lambda:  id(esphome_sensitivity) = x;

Odczyty widzę ale w logu urządzenia pojawia się co chwilę:

[09:02:17][D][sensor:093]: 'Volume SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy
[09:02:18][D][sensor:093]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy
[09:02:19][D][sensor:093]: 'Db SoundEsp': Sending state 15.00000 db with 2 decimals of accuracy
[09:02:19][W][component:237]: Component adc.sensor took a long time for an operation (503 ms).
[09:02:19][W][component:238]: Components should block for at most 30 ms.
[09:02:19][D][sensor:093]: 'Volume SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy
[09:02:20][D][sensor:093]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy
[09:02:21][D][sensor:093]: 'Db SoundEsp': Sending state 15.00000 db with 2 decimals of accuracy
[09:02:21][W][component:237]: Component adc.sensor took a long time for an operation (503 ms).
[09:02:21][W][component:238]: Components should block for at most 30 ms.

I nie wiem jak się tego pozbyć - a jak pisałem wyżej raczej cieniutki jestem… i może ktoś podpowie?

Nie możesz się tego pozbyć, twoja pętla trwa jakieś pół sekundy co wynika bezpośrednio z tego

Źle to ująłem - oczywiście czas pomiaru możesz skrócić - należy poeksperymentować czy nie zwiększy to ilości fałszywych alarmów.

Nastolatek ze słuchawkami na uszach zachowuje się podobnie - nie słyszy dzwonka dlatego rozwiązałem to automatyzacją: uruchomienie dzwonka (sposóbów wykrycia tego jest mnóstwo, np. czujnik zalania Zigbee, czujnik otwarcia Zigbee, czujnik wibracji drgań Zigbee, itd) powoduje “migania” oświetlenia w pokoju, na razie działa to bardzo dobrze :slight_smile:.

1 polubienie

Mógłbyś to rozwinąć? Czujnik drgań (Aqara) nie zdał rezultatu (nie dość że interwał 60s to jeszcze nawet przy najwyższej czułości nie wykrywał drgań domofonu (Elfon UA-1).

Jeżeli masz obwód niskonapięciowy to w szereg w taki obwód wpinasz czujnik zalania (te dwie metalowe końcówki w czujniku), w momencie zwarcia obwodu następuje przepływ prądu przez czujnik co powoduje zadziałanie czujnika Zigbee.

Można w sposób opisany tutaj Najprostszy smart dzwonek bazujący na analogowym urządzeniu - HejDom - Twój Smart Home nie za miliony! albo Robimy smart dzwonek DIY / Zigbee2MQTT - HejDom - Twój Smart Home nie za miliony!.

Ale obawiam się, że z tym domofonem tego nie zrobisz.

Domofon w środku (jest dużo wolnego miejsca) wygląda tak:

Sposób podłaczenia poniżej:

Pytanie: co się pojawia na zacisku DZ - wywołanie (dzwonek) w momencie dzwonienia z “kasety” domofonu? Można to wykorzystać do “smart”. Oprócz tego domofon ma “optyczny sygnalizator wywołania (dioda LED)”, do tego też można było się podłączyć. Jakieś pomysły?

W domofonie jest jakieś zasilanie ?

:thinking: ja sie na domofonach nie znam, wszystko jest zasilane przez zasilasz EWD-10 a z dokumentacji producenta wynika “wyjście DC (+):14V 150mA, w przypadku instalacji wielonumerowych 14V 400mA, AC(~) 12V 1,1A” ale czy jest doprowadzone do słuchawki, nie wiem:

Ta dioda LED jest widoczna na zdjęciu (choć mocno ucięta) i nawet świeci - wskazałem strzałką

Można wlutować transoptor zamiast tego LEDa. Eksperymentalnie można wypróbować połączenie szeregowe, ale spadek napięcia na 2 LEDach szeregowo może być za duży).

A jeśli sygnał dzwonka jest napięciem przemiennym, to ewentualnie LED transoptora może być podłączony antyrównolegle do fabrycznego LEDa (A do K i K do A), jeśli jednak to napięcie zmienne ale o jednej biegunowości względem masy (=nie przemienne), to połączenie antyrównoległe nie zadziała i trzeba zastąpić fabryczny LED.

W analogowym domofonie słuchawka nie musi mieć zasilania (zależy jaki system, ale warto przyjąć, że nie ma tam napięcia zdatnego do wykorzystania).

Jak miałbym coś kombinować w tym temacie to przyjrzałbym się dzwonkowi/Nadajnikowi bezbateryjnemu, pewnie siedzi tam jakiś piezoelektryk który wytwarza napięcie do zasilania chwilowego układu nadajnika.

W okolicach 6,7V 9,9V (miernik na masie i na dz wpięty).

Opisany wyżej sposób z mikrofonem ma dla mnie jeden olbrzymi feler - mianowicie cieżko mi było wysterować mikrofon aby nie reagował np. na to, że w przedsionku ktoś pier…lnął mocno drzwiami i dlatego zrezygnowałem z tego rozwiązania.
Opiszę bo może ktoś wskaże błędy w myśleniu (dla mnie za późno już na naukę elektroniki), a może komuś się przyda…
@macek mnie nakierował na inne rozwiązanie - a w końcu znałem czas aby przysiąść nad tym
Na DZ w trakcie jak ktoś dzwonił domofonem było 9,9V (a nie 6,7 jak pisałem wyżej). Do esp8266 wpiąłem (A0 i G) dzielnik napięcia do Arduino 5V/25V (gdzieś czytałem, że esp ma także dzielnik 3.3 ale i z racji nieznajomości tematu i braku chęci usmażenia układu poczytałem jak użyć tego dzielnika i na nim wpiąłem się do VCC → DZ i - → masy.
Na ESPHome dodałem do HA (po próbkach z miernikiem - i odczytach na nim i w HA dostosowałem mnożnik):

sensor:
  - platform: adc
    pin: A0
    name: "Sensor"
    update_interval: 2s
    filters:
    - multiply: 15.73

No i z tego powiadomienie na telefon do aplikacji HA… narazie działa - jak ktoś widzi błędy to proszę o komentarz (i dzięki za dotychczasowe).

2 polubienia

Zamiast dzielnika można użyć przetwornicy Step-down.

1 polubienie

Nie no, bez jaj - chodzi o sygnał dzwonienia, jest to zapewne sygnał modulowany przez centralkę (przemyślnie przez producenta nazwanej zasilaczem), której schematu nie znamy, i jest to prawdopodobnie napięcie prądu zmiennego (czyli napięcie stałe modulowane lub wręcz niemodulowane o ile generator sygnału dzwonka jest w słuchawce), ale nie wiem czy @Ropuh ustalił dalsze szczegóły (najprostszy test to czerwony LED podpięty antyrównolegle do fabrycznego - jeśli nie świeci to OK, swoją drogą partyzanckich metod na testy bez oscyloskopu jest więcej), no ale skoro działa, to pewnie nie jest przemienne tj. nie mamy odwrotnej polaryzacji w części okresu (co może uszkodzić MCU), to uważam, że dzielnik napięcia jest OK.

Nawet gdyby było to napięcie przemienne to używając jednej zwykłej diody impulsowej lub nawet prostowniczej można zabezpieczyć MCU, a stosując 4 zupełnie się uniezależniamy od sytuacji (o ile to napięcie jest dostatecznie wysokie).

Podkradanie zasilania z instalacji domofonu naprawdę bym sobie odpuścił.