-
-
Save peyanski/48691397d4cb1acfc4af56c0232342e2 to your computer and use it in GitHub Desktop.
esphome: | |
name: soundsensor | |
friendly_name: SoundSensor | |
esp8266: | |
board: d1_mini | |
# Enable logging | |
logger: | |
# Enable Home Assistant API | |
api: | |
ota: | |
wifi: | |
ssid: !secret wifi_ssid | |
password: !secret wifi_password | |
# Enable fallback hotspot (captive portal) in case wifi connection fails | |
ap: | |
ssid: "Soundsensor Fallback Hotspot" | |
password: "subscribe" | |
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: 2s | |
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; |
Hello, I have a problem with this script.
I used an ESP32 nodemcu-32s.
And get these messages.
[17:04:12][W][component:214]: Component adc.sensor took a long time for an operation (0.51 s).
[17:04:12][W][component:215]: Components should block for at most 20-30ms.
Is there a solution for that?
Mein Code
``esphome:
name: esp32-bad-oben
friendly_name: esp32_bad_oben
esp32:
board: nodemcu-32s
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
password: "+++++"
ota:
password: "+++++++"
wifi:
ssid: "++++++++"
password: "++++++++++t"
manual_ip:
static_ip: 192.168.0.+++
gateway: 192.168.0.+++
subnet: 255.255.255.0
dns1: 192.168.0.+++
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32-Bad-Oben Fallback Hotspot"
password: "+++++++++"
captive_portal:
switch:
- platform: restart
name: "ESP32-Bad-Oben Restart"
id: "esp32_bad_oben_restart_switch"
globals:
- id: esphome_sensitivity
type: float
initial_value: '36.5'
restore_value: yes
- id: esphome_volume
type: int
i2c:
sda: 21
scl: 22
scan: true
id: bus_a
#frequency: 200kHz
sensor:
- platform: aht10
variant: aht20
i2c_id: bus_a
id: aht_20
address: 0x38
temperature:
id: 'aht_temp'
name: "Bad Oben Temperatur"
humidity:
id: 'aht_humid'
name: "Bad Oben Luftfeuchtigkeit"
update_interval: 15s
- platform: adc
pin: A0
id: esphome_db
device_class: signal_strength
name: "Dezibel (DB) BadOben"
icon: "mdi:volume-vibrate"
unit_of_measurement: "db"
update_interval: 2s
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: "Lautstärke BadOben"
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));
- platform: internal_temperature
name: "Interne BAD CPU Temperatur"
update_interval: 60s
number:
- platform: template
id: sensitivity_slider
name: "Empfindlichkeit BadOben"
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;
external_components:
- source: github://pr#5198
components: [ aht10 ]
The Log:
[17:11:05][D][sensor:094]: 'Lautstärke BadOben': Sending state -11.00000 % with 1 decimals of accuracy [17:11:06][D][sensor:094]: 'Dezibel (DB) BadOben': Sending state -inf db with 2 decimals of accuracy [17:11:06][W][component:214]: Component adc.sensor took a long time for an operation (0.51 s). [17:11:06][W][component:215]: Components should block for at most 20-30ms. [17:11:06][D][sensor:094]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy [17:11:07][D][sensor:094]: 'Lautstärke BadOben': Sending state -11.00000 % with 1 decimals of accuracy [17:11:08][D][sensor:094]: 'Dezibel (DB) BadOben': Sending state 15.00000 db with 2 decimals of accuracy [17:11:08][W][component:214]: Component adc.sensor took a long time for an operation (0.51 s). [17:11:08][W][component:215]: Components should block for at most 20-30ms. [17:11:08][D][sensor:094]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy [17:11:09][D][sensor:094]: 'Lautstärke BadOben': Sending state 0.00000 % with 1 decimals of accuracy [17:11:10][D][sensor:094]: 'Dezibel (DB) BadOben': Sending state -inf db with 2 decimals of accuracy [17:11:10][W][component:214]: Component adc.sensor took a long time for an operation (0.51 s). [17:11:10][W][component:215]: Components should block for at most 20-30ms. [17:11:10][D][sensor:094]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy [17:11:11][D][sensor:094]: 'Lautstärke BadOben': Sending state -11.00000 % with 1 decimals of accuracy [17:11:12][D][sensor:094]: 'Dezibel (DB) BadOben': Sending state -inf db with 2 decimals of accuracy [17:11:12][W][component:214]: Component adc.sensor took a long time for an operation (0.50 s). [17:11:12][W][component:215]: Components should block for at most 20-30ms. [17:11:12][D][sensor:094]: 'RAW SoundEsp': Sending state 0.00000 % with 1 decimals of accuracy [17:11:13][D][sensor:094]: 'Lautstärke BadOben': Sending state -11.00000 % with 1 decimals of accuracy [17:11:14][D][sensor:094]: 'Dezibel (DB) BadOben': Sending state -inf db with 2 decimals of accuracy [17:11:14][W][component:214]: Component adc.sensor took a long time for an operation (0.51 s). [17:11:14][W][component:215]: Components should block for at most 20-30ms.
@Lice2 Did you find a solution? Having the same problem.
No, unfortunately not.
I now have an outlet in front of my dryer that I monitor.
Nevertheless, seems to be working. It's a known issue. Thanks for answering.
Yes gladly. I then gave up on the sound sensor.
@Lice2 I assume that error is from the code in the lambda while (millis() - startMillis < 500)
which looks like it will block for half a second. You could try changing that 500 to 20, which will probably get rid of the warning - but it means the sensor would only be listening for 20ms every update_interval
seconds.
I'm getting an error installing, any ideas?