-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathwm-d1mini-simple.yaml
executable file
·575 lines (522 loc) · 17.4 KB
/
wm-d1mini-simple.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
## ------------------------------------------------------------------
## WMBUS METER D1 MINI + CC1101 for Diehl IZAR RC 868 I R4 PL
## HARDWARE: D1 MINI ESP8266 80MHz, 80KB RAM, 4MB Flash
##
## usage: 1. Using wM-Bus v2.1.4
## 2. Using Homassistant API (discovery + devices)
## 3. Using Backup component
##
## This version shows data from the defined watermeter and
## uses the watermeterID (HEX) from the secrets.yaml file.
##
## WEBUI: http:/water-meter-dmini.local
## Backup: http://water-meter-dmini.local/config.yaml
## curl -v 'http://water-meter-dmini.local/config.yaml' --digest -u USERNAME:PASSWORD -o config.yaml
##
## 0x43410778
## 0x43430778 **
## 0x43890785
##
## ------------------------------------------------------------------
substitutions:
## device settings
device_name_short: "water-meter-dmini"
device_description: "Watermeter Wemos D1 Mini + EBYTE TI CC1101, IZAR module (Diehl IZAR RC 868 I R4 PL (SzczepanLeon) - my Watermeter"
projectname: "Diehl IZAR RC 868.Watermeter"
friendly_name: "Watermeter" # device name
appversion: "2.0.9"
## logger settings
log_level: "WARN" # not that logging need memory, so in production mode use "WARN"
log_wmbus: "ERROR" # Loglevel for wmbus meters component
log_baudrate: "0" # use 115200 to enable serial UART port logging.
## ----------------------------------------------------------------
## HARDWARE: D1 MINI ESP8266 80MHz, 80KB RAM, 4MB Flash
## ----------------------------------------------------------------
esp8266:
board: d1_mini
restore_from_flash: true
## ----------------------------------------------------------------
## ESPHOME APPLICATION
## ----------------------------------------------------------------
esphome:
name: ${device_name_short}
comment: ${device_description}
# Automatically add the mac address to the name
# so you can use a single firmware for all devices
name_add_mac_suffix: false
project:
name: ${projectname}
version: ${appversion}
build_path: ./build/${device_name_short}
on_boot:
then:
- globals.set:
id: boot_counter
value: !lambda "return id(boot_counter)+=1;"
- globals.set:
id: send_millisecond
value: !lambda "return millis();"
- logger.log:
level: WARN
tag: "system"
format: "BOOTMESSAGE:${device_name_short} API is connected, Device ready!"
- component.update: bootcounter
on_shutdown:
then:
- logger.log:
level: ERROR
tag: "system"
format: "BOOTMESSAGE:${device_name_short} is down!"
## ----------------------------------------------------------------
## External components
## ----------------------------------------------------------------
external_components:
# uses the latest version from SzczepanLeon
# https://github.com/SzczepanLeon/esphome-components
# You can make ESPHome check the repository every time by setting this option to 0s
- source: github://SzczepanLeon/esphome-components@main
refresh: 0s
components: [wmbus]
# use local component from
# https://github.com/zdzichu6969/esphome-components
- source:
type: local
path: custom_components
components: [backup]
# optinal: use local component from
# https://github.com/TheStaticTurtle/esphome_syslog
- source:
type: local
path: custom_components
components: [syslog]
# ----------------------------------------------------------------
# Save your ESPHome device configuration in firmware and and
# recover it if you lost source files.
# ----------------------------------------------------------------
backup:
auth:
username: !secret web_username
password: !secret web_password
force_update: false
## ---------------------------------------------------
## syslog service
## ---------------------------------------------------
syslog:
ip_address: !secret syslog_server
port: !secret syslog_port
min_level: DEBUG
enable_logger: true
## ---------------------------------------------------
## LOGGER COMPONENT
## ---------------------------------------------------
logger:
id: appslogger
level: ${log_level}
baud_rate: ${log_baudrate}
logs:
wmbus: ${log_wmbus}
wMBus-lib: ${log_wmbus}
sensor: WARN
sensor.filter: WARN
text_sensor: WARN
api.service: ERROR
json: ERROR
mqtt: WARN
scheduler: ERROR
wifi: WARN
component: ERROR
api: WARN
# internal_temperature: ERROR
## ----------------------------------------------------------------
## Global variables
## ----------------------------------------------------------------
globals:
- id: boot_counter
type: int
restore_value: yes
initial_value: "0"
## ---------------------------------------------------
## WIFI Settings
## ---------------------------------------------------
wifi:
networks:
# unifi accesspoint 2.4Ghz
- ssid: !secret ssid4_name
password: !secret ssid4_pswd
priority: 1
# office apple capsulate accesspoint 2.4Ghz
- ssid: !secret ssid3_name
password: !secret ssid3_pswd
priority: 2
# living room apple capsulate accesspoint 2.4Ghz
- ssid: !secret ssid2_name
password: !secret ssid2_pswd
priority: 3
domain: !secret domain
## ---------------------------------------------------
## mDNS Component
## ---------------------------------------------------
mdns:
# if mDNS is disabled, they will no longer be able to automatically find your devices.
disabled: false
## ---------------------------------------------------
## COMPONENT CAPTIVE PORTAL
## ---------------------------------------------------
captive_portal:
## ---------------------------------------------------
## OTA COMPONENT
## ---------------------------------------------------
ota:
password: !secret ota_pswd
safe_mode: false
on_begin:
then:
- logger.log:
format: "OTA Start"
tag: "OTA"
level: WARN
on_progress:
then:
- logger.log:
level: WARN
tag: "OTA"
format: "OTA progress %0.1f%%"
args: ["x"]
on_end:
then:
- logger.log:
format: "OTA End"
tag: "OTA"
level: WARN
on_error:
then:
- logger.log:
format: "OTA update error %d"
tag: "OTA"
level: ERROR
args: ["x"]
## ---------------------------------------------------
## COMPONENT WEBSERVER
## ---------------------------------------------------
web_server:
port: 80
version: 2
js_url: !secret webserver_jsurl
## ---------------------------------------------------
## Home Assistant API COMPONENT
## ---------------------------------------------------
api:
id: espapiwm2_d1
port: 6053
reboot_timeout: 0s
# https://esphome.io/components/api.html?highlight=api
encryption:
key: "inH49O9jBeK5yTGb1X2g4WV/1aS6YKUpu3Vu277fDgw="
## ---------------------------------------------------
## DEBUG COMPONENT
## ---------------------------------------------------
debug:
update_interval: 5s
## ---------------------------------------------------
## SNTP Time server
## ---------------------------------------------------
time:
- platform: sntp
id: time_sntp
timezone: Europe/Berlin
servers:
- !secret local_sntp
- 0.at.pool.ntp.org
- 0.pool.ntp.org
on_time_sync:
# Components should trigger on_time_sync when they update the system clock.
then:
- if:
condition:
lambda: 'return id(device_lastBoot_time).state == "";'
then:
- text_sensor.template.publish:
id: device_lastBoot_time
state: !lambda return id(time_sntp).now().strftime("%Y-%m-%dT%H:%M:%S %Z");
- logger.log:
level: WARN
tag: "system"
format: "Synchronized sntp clock"
## ---------------------------------------------------
## WMBUS DEVICE D1MINI WEMOS --> CC1101
## ---------------------------------------------------
##
## GDO0
## o
## 7
## | GD02 ╭-------o 2 (GND)
## | 6
## | o |
## | | |
## ╭――x――x――o――o――x――x――x――o――╮
## │ D1 D2 - │
## │ │
## │ D1MINI WEMOS │
## ANT │ │ USB
## │ │
## │ D5 D6 D7 D8 + │
## ╰――x――x――x――o――o――o――o――o――╯
## | | | | |
## | | | | ╰-----o 1 (+3.3V)
## | o | o
## | 5 | 8
## | MISO| CSN
## o o
## 4 3
## CLK MOSI
##
## --------------------------------------------------
wmbus:
mosi_pin: GPIO13 #D7 MOSI Attached to Hardware SPI controller MOSI SPI Interface
miso_pin: GPIO12 #D6 MISO Attached to Hardware SPI controller MISO SPI Interface
clk_pin: GPIO14 #D5 SCK Attached to Hardware SPI controller CLK
cs_pin: GPIO15 #D8 CSN Attached to Hardware SPI controller, Controls Boot Mode; CS SPI Interface 10k Pull-Down, boot fails if pulled high !!!
gdo0_pin: GPIO04 #D1 SDA Clock output. High Impedance !
gdo2_pin: GPIO05 #D2 SCL FIFO status signals. High Impedance !
# log_unknown (Optional): Show telegrams from not configured meters in log.
log_unknown: False
## ---------------------------------------------------
## Using wmbusmeters i a pipe
## enable this if you have wmbusmeters installed
## ---------------------------------------------------
## clients:
## - name: "wmbusmeters"
## ip_address: !secret wmbusmeter_host
## port: 7227
## format: rtlwMBus
## transport: UDP
## ---------------------------------------------------
## BINARY SENSOR
## ---------------------------------------------------
binary_sensor:
# simulate led state
- platform: template
name: "Wasseruhr Status Led"
id: statusled
icon: mdi:led-outline
entity_category: "diagnostic"
lambda: "return id(current_value) > 0;"
## ---------------------------------------------------
## SENSORS
## ---------------------------------------------------
sensor:
# watermeter 1: nearly to mine
- platform: wmbus
meter_id: 0x43410778
type: izar
add_prefix: True
# get the total watermter m3 from the wmbus telegram
total_water_m3:
name: "Watermeter"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
icon: mdi:counter
# watermeter 2: nearly to mine
- platform: wmbus
meter_id: 0x43890785
type: izar
add_prefix: True
# get the total watermter m3 from the wmbus telegram
total_water_m3:
name: "Watermeter"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
icon: mdi:counter
# watermeter 3: My Watermeter
- platform: wmbus
# My Meter ID (usually from sticker). Can be specified as decimal or hex.
# only hex is working for my watermeter !
# see: https://github.com/SzczepanLeon/esphome-components/issues/6
# edit watermeterid in the secrets file
## add_prefix settings to add the watermeterid to the lqi, rssi and total_water_m3
meter_id: !secret watermeterId
type: izar
add_prefix: false
# get the total watermter m3 from the wmbus telegram
total_water_m3:
name: "Watermeter display"
id: "waterdisplay"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
icon: mdi:counter
# get the last month total watermter m3 from the wmbus telegram (wM-Bus v2.1.4)
last_month_total_water_m3:
name: "Watermeter Display last month"
id: "waterdisplay_lastmonth"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
# water current month (wM-Bus v2.1.4)
current_month_total_water_l:
name: Water current month
id: "watermonth"
accuracy_decimals: 2
unit_of_measurement: "L"
state_class: total_increasing
device_class: "water"
# get the battery life time (wM-Bus v2.1.4)
remaining_battery_life_y:
name: "Watermeter Battery Life"
id: "watermeter_batterie"
entity_category: "diagnostic"
unit_of_measurement: "Years"
accuracy_decimals: 2
icon: mdi:battery
# get the last transmit periode (wM-Bus v2.1.4)
transmit_period_s:
name: "Watermeter Periode"
id: "watermeter_last_reading"
entity_category: "diagnostic"
accuracy_decimals: 2
icon: mdi:timelapse
# current alarm code
current_alarms:
name: "Watermeter current alarm"
id: "watermeter_current_alarms"
entity_category: "diagnostic"
icon: mdi:alarm-light
# previous alarm code
previous_alarms:
name: "Watermeter previous alarm"
id: "watermeter_prev_alarms"
entity_category: "diagnostic"
icon: mdi:alarm-light
# The LQI value reported by the CC1101 is a 7 bit unsigned number with a range from 0 to 127.
# Note that a lower value indicates a better link.
# The LQI of a received packet will be bad (higher number) when there is lot of interference.
lqi:
id: wmbus_cc1101_lqi
name: "Watermeter CC1101 LQI"
entity_category: "diagnostic"
unit_of_measurement: "lqi"
state_class: "measurement"
# The RSSI value reported by the CC1101 is a 8 bit signed number with an effective
# range from -138 dBm to -10.5 dBm when the CC1101 is operating around 868 MHz.
# RSSI stands for received signal strength (power) indication (in dBm).
# A higher value indicates higher power. (internal only)
rssi:
id: wmbus_cc1101_rssi
name: "Watermeter CC1101 RSSI"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: "diagnostic"
# Wifi quality RSSI used by wifi_signal_db
- platform: wifi_signal
name: "Device WLAN RSSI Quality"
id: wifi_signal_db
update_interval: 60s
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: "diagnostic"
# The debug component can be used to debug problems with ESPHome.
# At startup, it prints a bunch of useful information like reset reason,
# free heap size, ESPHome version and so on.
- platform: debug
# Reports the free heap size in bytes.
free:
name: "Device Heap Free"
id: heapfreekb
filters:
- lambda: return x * 0.0009765625;
unit_of_measurement: "KB"
entity_category: "diagnostic"
state_class: "measurement"
# Reports the fragmentation metric of the heap (0% is clean, more than ~50% is not harmless).
fragmentation:
name: "Device Heap Fragmentation"
id: curfragm
unit_of_measurement: "%"
entity_category: "diagnostic"
state_class: "measurement"
# Reports the largest contiguous free RAM block on the heap in bytes.
block:
name: "Device Heap Max Block"
id: heepmaxblockkb
filters:
- lambda: return x * 0.0009765625;
unit_of_measurement: "KB"
entity_category: "diagnostic"
state_class: "measurement"
# Uptime device in hours
- platform: uptime
name: "${friendly_name} Online seit"
id: uptime_human
icon: mdi:clock-start
filters:
- lambda: return x / 3600;
unit_of_measurement: "h"
entity_category: "diagnostic"
state_class: "measurement"
accuracy_decimals: 2
# device boot counter
- platform: template
name: Device Boot counter
id: bootcounter
accuracy_decimals: 0
state_class: "measurement"
entity_category: "diagnostic"
lambda: return (id(boot_counter));
## ---------------------------------------------------
## SWITCHES
## ---------------------------------------------------
switch:
# reset boot counter value
- platform: template
name: "Device Boot Counter Reset"
icon: mdi:lock-reset
turn_on_action:
then:
- lambda: |-
id(boot_counter) = 0;
id(bootcounter).publish_state(id(boot_counter));
- logger.log:
level: WARN
tag: "system"
format: "${device_name_short} reset boot counter o.k!"
- component.update: bootcounter
# restarts the device
- platform: restart
name: "Restart Device"
id: restart_switch
icon: mdi:restart
text_sensor:
# Last boot timestamp (only on webserver)
- platform: template
name: "Device Last Boot"
disabled_by_default: true
id: device_lastBoot_time
icon: mdi:clock-start
# optional device timestamp (only for webserver)
- platform: template
id: systime
disabled_by_default: true
icon: mdi:clock-start
lambda: return id(time_sntp).now().strftime("%Y-%m-%dT%H:%M:%S %Z");
# optional device version (only on webserver)
- platform: version
name: "ESPHome Version"
icon: mdi:application-cog-outline
id: appver
hide_timestamp: true
disabled_by_default: true
# connected to ssid (only for webserver)
- platform: wifi_info
ssid:
name: ${friendly_name} WLAN SSID
id: wlan_ssid
disabled_by_default: true
icon: mdi:wifi-settings