diff --git a/boneio-32x10_switches_v0_4.yaml b/boneio-32x10_switches_v0_4.yaml new file mode 100644 index 0000000..1a294c5 --- /dev/null +++ b/boneio-32x10_switches_v0_4.yaml @@ -0,0 +1,661 @@ +substitutions: + name: boneio-32-sw-04 + friendly_name: 'BoneIO ESP 32x10 Switches' + serial_prefix: 'esp' #Don't change it. + +esphome: + name: '${name}' + friendly_name: '${friendly_name}' + name_add_mac_suffix: true + project: + name: boneio.32x10-switches + version: '0.4PP' + +esp32: + board: nodemcu-32s + +ethernet: + id: eth + type: LAN8720 + mdc_pin: GPIO23 + mdio_pin: GPIO18 + clk_mode: GPIO0_IN + phy_addr: 1 + power_pin: GPIO16 + #use_address: + +dashboard_import: + package_import_url: github://boneIO-eu/esphome/boneio-32x10_switches_v0_4.yaml@latest + import_full_config: true + +packages: + internals_packages: + url: https://github.com/boneIO-eu/esphome + ref: v1.1.0 + files: [ + 'devices/serial_no.yaml', + 'devices_v0_4/display.yaml', + 'devices_v0_4/i2c.yaml', + 'devices_v0_4/ina219.yaml', + 'devices_v0_4/lm75b.yaml', + 'devices_v0_4/pcf.yaml', + 'boards/32x10_output.yaml', + # 'devices_v0_7/one_wire.yaml', + ] + +logger: +api: +ota: + platform: esphome + password: boneio + +# disable web server - for testing only +web_server: + port: 80 + local: true + +time: + - platform: homeassistant + timezone: Europe/Warsaw + id: homeassistant_time + # instead try to synchronize via network repeatedly ... + on_time_sync: + then: + # ... and update the RTC when the synchronization was successful + ds1307.write_time: + +switch: + - platform: output + name: 'Switch 01' + output: out_01 + id: switch_01 + - platform: output + name: 'Switch 02' + output: out_02 + id: switch_02 + - platform: output + name: 'Switch 03' + output: out_03 + id: switch_03 + - platform: output + name: 'Switch 04' + output: out_04 + id: switch_04 + - platform: output + name: 'Switch 05' + output: out_05 + id: switch_05 + - platform: output + name: 'Switch 06' + output: out_06 + id: switch_06 + - platform: output + name: 'Switch 07' + output: out_07 + id: switch_07 + - platform: output + name: 'Switch 08' + output: out_08 + id: switch_08 + - platform: output + name: 'Switch 09' + output: out_09 + id: switch_09 + - platform: output + name: 'Switch 10' + output: out_10 + id: switch_10 + - platform: output + name: 'Switch 11' + output: out_11 + id: switch_11 + - platform: output + name: 'Switch 12' + output: out_12 + id: switch_12 + - platform: output + name: 'Switch 13' + output: out_13 + id: switch_13 + - platform: output + name: 'Switch 14' + output: out_14 + id: switch_14 + - platform: output + name: 'Switch 15' + output: out_15 + id: switch_15 + - platform: output + name: 'Switch 16' + output: out_16 + id: switch_16 + - platform: output + name: 'Switch 17' + output: out_17 + id: switch_17 + - platform: output + name: 'Switch 18' + output: out_18 + id: switch_18 + - platform: output + name: 'Switch 19' + output: out_19 + id: switch_19 + - platform: output + name: 'Switch 20' + output: out_20 + id: switch_20 + - platform: output + name: 'Switch 21' + output: out_21 + id: switch_21 + - platform: output + name: 'Switch 22' + output: out_22 + id: switch_22 + - platform: output + name: 'Switch 23' + output: out_23 + id: switch_23 + - platform: output + name: 'Switch 24' + output: out_24 + id: switch_24 + - platform: output + name: 'Switch 25' + output: out_25 + id: switch_25 + - platform: output + name: 'Switch 26' + output: out_26 + id: switch_26 + - platform: output + name: 'Switch 27' + output: out_27 + id: switch_27 + - platform: output + name: 'Switch 28' + output: out_28 + id: switch_28 + - platform: output + name: 'Switch 29' + output: out_29 + id: switch_29 + - platform: output + name: 'Switch 30' + output: out_30 + id: switch_30 + - platform: output + name: 'Switch 31' + output: out_31 + id: switch_31 + - platform: output + name: 'Switch 32' + output: out_32 + id: switch_32 + +binary_sensor: + - platform: gpio + name: 'IN_01' + id: in_01 + pin: + pcf8574: pcf_inputs_1to14 + number: 0 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_01 + + - platform: gpio + name: 'IN_02' + id: in_02 + pin: + pcf8574: pcf_inputs_1to14 + number: 1 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_02 + + - platform: gpio + name: 'IN_03' + id: in_03 + pin: + pcf8574: pcf_inputs_1to14 + number: 2 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_03 + + - platform: gpio + name: 'IN_04' + id: in_04 + pin: + pcf8574: pcf_inputs_1to14 + number: 3 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_04 + + - platform: gpio + name: 'IN_05' + id: in_05 + pin: + pcf8574: pcf_inputs_1to14 + number: 4 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_05 + + - platform: gpio + name: 'IN_06' + id: in_06 + pin: + pcf8574: pcf_inputs_1to14 + number: 5 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_06 + + - platform: gpio + name: 'IN_07' + id: in_07 + pin: + pcf8574: pcf_inputs_1to14 + number: 6 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_07 + + - platform: gpio + name: 'IN_08' + id: in_08 + pin: + pcf8574: pcf_inputs_1to14 + number: 8 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_08 + + - platform: gpio + name: 'IN_09' + id: in_09 + pin: + pcf8574: pcf_inputs_1to14 + number: 9 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_09 + + - platform: gpio + name: 'IN_10' + id: in_10 + pin: + pcf8574: pcf_inputs_1to14 + number: 10 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_10 + + - platform: gpio + name: 'IN_11' + id: in_11 + pin: + pcf8574: pcf_inputs_1to14 + number: 11 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_11 + + - platform: gpio + name: 'IN_12' + id: in_12 + pin: + pcf8574: pcf_inputs_1to14 + number: 12 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_12 + + - platform: gpio + name: 'IN_13' + id: in_13 + pin: + pcf8574: pcf_inputs_1to14 + number: 13 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_13 + + - platform: gpio + name: 'IN_14' + id: in_14 + pin: + pcf8574: pcf_inputs_1to14 + number: 14 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_14 + + - platform: gpio + name: 'IN_15' + id: in_15 + pin: + pcf8574: pcf_inputs_15to28 + number: 6 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_15 + + - platform: gpio + name: 'IN_16' + id: in_16 + pin: + pcf8574: pcf_inputs_15to28 + number: 5 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_16 + + - platform: gpio + name: 'IN_17' + id: in_17 + pin: + pcf8574: pcf_inputs_15to28 + number: 4 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_17 + + - platform: gpio + name: 'IN_18' + id: in_18 + pin: + pcf8574: pcf_inputs_15to28 + number: 3 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_18 + + - platform: gpio + name: 'IN_19' + id: in_19 + pin: + pcf8574: pcf_inputs_15to28 + number: 2 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_19 + + - platform: gpio + name: 'IN_20' + id: in_20 + pin: + pcf8574: pcf_inputs_15to28 + number: 1 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_20 + + - platform: gpio + name: 'IN_21' + id: in_21 + pin: + pcf8574: pcf_inputs_15to28 + number: 0 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_21 + + - platform: gpio + name: 'IN_22' + id: in_22 + pin: + pcf8574: pcf_inputs_15to28 + number: 8 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_22 + + - platform: gpio + name: 'IN_23' + id: in_23 + pin: + pcf8574: pcf_inputs_15to28 + number: 9 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_23 + + - platform: gpio + name: 'IN_24' + id: in_24 + pin: + pcf8574: pcf_inputs_15to28 + number: 10 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_24 + + - platform: gpio + name: 'IN_25' + id: in_25 + pin: + pcf8574: pcf_inputs_15to28 + number: 11 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_25 + + - platform: gpio + name: 'IN_26' + id: in_26 + pin: + pcf8574: pcf_inputs_15to28 + number: 12 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_26 + + - platform: gpio + name: 'IN_27' + id: in_27 + pin: + pcf8574: pcf_inputs_15to28 + number: 13 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_27 + + - platform: gpio + name: 'IN_28' + id: in_28 + pin: + pcf8574: pcf_inputs_15to28 + number: 14 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_28 + + - platform: gpio + name: 'IN_29' + id: in_29 + pin: + pcf8574: pcf_inputs_28to35_menu + number: 0 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_29 + + - platform: gpio + name: 'IN_30' + id: in_30 + pin: + pcf8574: pcf_inputs_28to35_menu + number: 1 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_30 + + - platform: gpio + name: 'IN_31' + id: in_31 + pin: + pcf8574: pcf_inputs_28to35_menu + number: 2 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_31 + + - platform: gpio + name: 'IN_32' + id: in_32 + pin: + pcf8574: pcf_inputs_28to35_menu + number: 3 + mode: + input: true + inverted: true + on_press: + then: + - switch.toggle: switch_32 + + - platform: gpio + name: 'IN_33' + pin: + pcf8574: pcf_inputs_28to35_menu + number: 4 + mode: + input: true + inverted: true + + - platform: gpio + name: 'IN_34' + pin: + pcf8574: pcf_inputs_28to35_menu + number: 5 + mode: + input: true + inverted: true + + - platform: gpio + name: 'IN_35' + pin: + pcf8574: pcf_inputs_28to35_menu + number: 6 + mode: + input: true + inverted: true +###################### +### MODBUS SECTION ### +###################### +# UNCOMMENT BELOW TO USE MODBUS +# uart: +# id: uart_pin14_15 +# rx_pin: GPIO14 +# tx_pin: GPIO15 +# baud_rate: 9600 +# stop_bits: 1 + +# modbus: +# send_wait_time: 200ms +# uart_id: uart_pin14_15 +# id: boneio_modbus + +# modbus_controller: +# - id: YOURDEVICE ID +# address: 0x09 +# modbus_id: mod_bus +# setup_priority: -10 +# update_interval: 60s diff --git a/devices_v0_4/display.yaml b/devices_v0_4/display.yaml new file mode 100644 index 0000000..12b73e3 --- /dev/null +++ b/devices_v0_4/display.yaml @@ -0,0 +1,131 @@ +#i2c address: 0x3C input oled +sensor: + - platform: uptime + id: wt32_uptime_seconds + update_interval: 60s + entity_category: diagnostic + on_raw_value: + then: + - text_sensor.template.publish: + id: wt32_uptime + state: !lambda |- + int seconds = round(id(wt32_uptime_seconds).raw_state); + int days = seconds / (24 * 3600); + seconds = seconds % (24 * 3600); + int hours = seconds / 3600; + seconds = seconds % 3600; + int minutes = seconds / 60; + return ( + (days ? to_string(days) + "d " : "") + + (hours ? to_string(hours) + "h " : "") + + (to_string(minutes) + "m") + ).c_str(); + +text_sensor: + - platform: template + name: Uptime + id: wt32_uptime + entity_category: diagnostic + icon: mdi:clock-start + - platform: template + name: 'IP Address' + id: ip_address + entity_category: diagnostic + icon: 'mdi:ip-network' + lambda: |- + return id(eth).get_ip_addresses().empty() ? "Unset" : id(eth).get_ip_addresses()[0].str(); + update_interval: 60s + +script: + - id: screensaver_script + # screensaver script, turn on screensaver after 30 seconds, restart counter each time when invoked + mode: restart + then: + # set the time after which the screensaver will be activated + - delay: 30s + - display.page.show: screensaver + - component.update: oled_display + +esphome: + on_boot: + priority: 0 + then: + - display.page.show: first_page + - component.update: ip_address + - component.update: oled_display + - script.execute: screensaver_script + +binary_sensor: + - platform: gpio + entity_category: config + id: boneIO_button + pin: + number: GPIO4 + mode: + input: true + pullup: true + inverted: true + on_press: + then: + # woke up when on the screensaver, as well do not include the logo page and screensaver in a loop when pushing a button + - if: + condition: + # on the last page go to the first page skipping the screensaver and logo page + display.is_displaying_page: last_page + then: + - display.page.show: first_page + - component.update: oled_display + else: + - if: + condition: + # on the screensaver, show the logo for a while and display the first page + display.is_displaying_page: screensaver + then: + - display.page.show: first_page + - component.update: oled_display + else: + # not the last page and screensaver go to the next page + - display.page.show_next: oled_display + - component.update: oled_display + # restart screensaver script + - script.execute: screensaver_script + +display: + - platform: ssd1306_i2c + id: oled_display + model: "SH1106 128x64" + address: 0x3C + contrast: 0.5 + pages: + - id: first_page + lambda: |- + it.rectangle(0, 0, 126, 15); + it.printf(64,11, id(size_10), TextAlign::BASELINE_CENTER, "bone IO"); + it.printf(4, 37, id(size_10), TextAlign::BASELINE_LEFT ,"IP addr:"); + it.printf(124, 37, id(size_10), TextAlign::BASELINE_RIGHT ,"%s", id(ip_address).state.c_str()); + it.printf(4, 49, id(size_10), TextAlign::BASELINE_LEFT ,"Uptime:"); + it.printf(124, 49, id(size_10), TextAlign::BASELINE_RIGHT ,"%s", id(wt32_uptime).state.c_str()); + it.printf(4, 61, id(size_10), TextAlign::BASELINE_LEFT ,"Temperature:"); + it.printf(124, 61, id(size_10), TextAlign::BASELINE_RIGHT ,"%.2f°C", id(boneIO_temp).state); + # additional pages should be defined between the first and last page + - id: last_page + lambda: |- + it.rectangle(0, 0, 126, 15); + it.printf(64,11, id(size_10), TextAlign::BASELINE_CENTER, "bone IO"); + it.printf(4, 25, id(size_10), TextAlign::BASELINE_LEFT ,"Current:"); + it.printf(124, 25, id(size_10), TextAlign::BASELINE_RIGHT ,"%.3fA", id(ina_current).state); + it.printf(4, 37, id(size_10), TextAlign::BASELINE_LEFT ,"Power:"); + it.printf(124, 37, id(size_10), TextAlign::BASELINE_RIGHT ,"%.2fW", id(ina_power).state); + it.printf(4, 49, id(size_10), TextAlign::BASELINE_LEFT ,"Bus Volt:"); + it.printf(124, 49, id(size_10), TextAlign::BASELINE_RIGHT ,"%.2fV", id(ina_bus_voltage).state); + it.printf(4, 61, id(size_10), TextAlign::BASELINE_LEFT ,"Shunt Volt:"); + it.printf(124, 61, id(size_10), TextAlign::BASELINE_RIGHT ,"%.2fV", id(ina_shunt_voltage).state); + - id: screensaver + lambda: |- + it.fill(COLOR_OFF); + +font: + - file: 'gfonts://Ubuntu' + id: size_10 + size: 10 + diff --git a/devices_v0_4/i2c.yaml b/devices_v0_4/i2c.yaml new file mode 100644 index 0000000..0dc4143 --- /dev/null +++ b/devices_v0_4/i2c.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_bus + sda: GPIO14 + scl: GPIO15 + scan: True + frequency: 400kHz diff --git a/devices_v0_4/ina219.yaml b/devices_v0_4/ina219.yaml new file mode 100644 index 0000000..20b7c8a --- /dev/null +++ b/devices_v0_4/ina219.yaml @@ -0,0 +1,20 @@ +sensor: + # Module power consmption + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + id: ina_current + name: 'INA219 Current' + power: + id: ina_power + name: 'INA219 Power' + bus_voltage: + id: ina_bus_voltage + name: 'INA219 Bus Voltage' + shunt_voltage: + id: ina_shunt_voltage + name: 'INA219 Shunt Voltage' + max_voltage: 32.0V + max_current: 3.2A + update_interval: 30s diff --git a/devices_v0_4/lm75b.yaml b/devices_v0_4/lm75b.yaml new file mode 100644 index 0000000..a7151d3 --- /dev/null +++ b/devices_v0_4/lm75b.yaml @@ -0,0 +1,12 @@ +#i2c address: 0x48 output lm75b temp +#LM75B +external_components: + - source: github://boneIO-eu/esphome-LM75@main #Original source and thank you note for BTomala https://github.com/boneIO-eu/esphome-lm75 + components: [lm75] + +sensor: + # Lower board temperature + - platform: lm75 + id: boneIO_temp + name: 'LM75B Temperature' + update_interval: 30s diff --git a/devices_v0_4/pcf.yaml b/devices_v0_4/pcf.yaml new file mode 100644 index 0000000..8463af2 --- /dev/null +++ b/devices_v0_4/pcf.yaml @@ -0,0 +1,13 @@ +pcf8574: + - id: 'pcf_right' + address: 0x20 + pcf8575: true + - id: 'pcf_left' + address: 0x21 + pcf8575: true + - id: 'mcp_inputs_1to16' + address: 0x26 + pcf8575: true + - id: 'mcp_inputs_17to32' + address: 0x27 + pcf8575: true diff --git a/devices_v0_4/time.yaml b/devices_v0_4/time.yaml new file mode 100644 index 0000000..e0371ea --- /dev/null +++ b/devices_v0_4/time.yaml @@ -0,0 +1,3 @@ +time: + - platform: ds1307 + id: ds1307_time \ No newline at end of file