esphome: name: cover-board-v0-1 esp32: board: esp32dev framework: type: arduino external_components: - source: github://ell249/esphome-PCT2075@master components: [ pct2075 ] ethernet: id: eth type: LAN8720 mdc_pin: GPIO23 mdio_pin: GPIO18 clk_mode: GPIO0_IN phy_addr: 1 power_pin: GPIO16 i2c: sda: GPIO14 scl: GPIO15 scan: True frequency: 100kHz logger: baud_rate: 0 api: ota: web_server: port: 80 time: - platform: ds1307 id: ds1307_time - platform: homeassistant # instead try to synchronize via network repeatedly ... on_time_sync: then: # ... and update the RTC when the synchronization was successful ds1307.write_time: mcp23017: - id: 'mcp_1' address: 0x26 - id: 'mcp_2' address: 0x27 - id: 'mcp_3' address: 0x21 - id: 'mcp_4' address: 0x20 uart: id: modbus_serial rx_pin: GPIO3 tx_pin: GPIO1 baud_rate: 9600 stop_bits: 1 #modbus: #flow_control_pin: 5 #id: modbus1 #uart_id: modbus_serial #modbus_controller: # - id: edpbox # update_interval: 31s # address: 0x1 # command_throttle: 150ms # setup_priority: -10 switch: - platform: gpio pin: mcp23xxx: mcp_3 number: 0 mode: OUTPUT inverted: false id: relay1 interlock: &interlock_1 [relay1, relay2] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 1 mode: OUTPUT inverted: false id: relay2 interlock: *interlock_1 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 2 mode: OUTPUT inverted: false id: relay3 interlock: &interlock_2 [relay3, relay4] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 3 mode: OUTPUT inverted: false id: relay4 interlock: *interlock_2 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 4 mode: OUTPUT inverted: false id: relay5 interlock: &interlock_3 [relay5, relay6] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 5 mode: OUTPUT inverted: false id: relay6 interlock: *interlock_3 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 6 mode: OUTPUT inverted: false id: relay7 interlock: &interlock_4 [relay7, relay8] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 7 mode: OUTPUT inverted: false id: relay8 interlock: *interlock_4 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 8 mode: OUTPUT inverted: false id: relay9 interlock: &interlock_5 [relay9, relay10] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 9 mode: OUTPUT inverted: false id: relay10 interlock: *interlock_5 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 10 mode: OUTPUT inverted: false id: relay11 interlock: &interlock_6 [relay11, relay12] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 11 mode: OUTPUT inverted: false id: relay12 interlock: *interlock_6 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 12 mode: OUTPUT inverted: false id: relay13 interlock: &interlock_7 [relay13, relay14] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 13 mode: OUTPUT inverted: false id: relay14 interlock: *interlock_7 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 14 mode: OUTPUT inverted: false id: relay15 interlock: &interlock_8 [relay15, relay16] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_3 number: 15 mode: OUTPUT inverted: false id: relay16 interlock: *interlock_8 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 0 mode: OUTPUT inverted: false id: relay17 interlock: &interlock_9 [relay17, relay18] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 1 mode: OUTPUT inverted: false id: relay18 interlock: *interlock_9 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 2 mode: OUTPUT inverted: false id: relay19 interlock: &interlock_10 [relay19, relay20] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 3 mode: OUTPUT inverted: false id: relay20 interlock: *interlock_10 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 4 mode: OUTPUT inverted: false id: relay21 interlock: &interlock_11 [relay21, relay22] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 5 mode: OUTPUT inverted: false id: relay22 interlock: *interlock_11 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 6 mode: OUTPUT inverted: false id: relay23 interlock: &interlock_12 [relay23, relay24] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 7 mode: OUTPUT inverted: false id: relay24 interlock: *interlock_12 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 8 mode: OUTPUT inverted: false id: relay25 interlock: &interlock_13 [relay25, relay26] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 9 mode: OUTPUT inverted: false id: relay26 interlock: *interlock_13 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 10 mode: OUTPUT inverted: false id: relay27 interlock: &interlock_14 [relay27, relay28] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 11 mode: OUTPUT inverted: false id: relay28 interlock: *interlock_14 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 12 mode: OUTPUT inverted: false id: relay29 interlock: &interlock_15 [relay29, relay30] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 13 mode: OUTPUT inverted: false id: relay30 interlock: *interlock_15 interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 14 mode: OUTPUT inverted: false id: relay31 interlock: &interlock_16 [relay31, relay32] interlock_wait_time: 200ms - platform: gpio pin: mcp23xxx: mcp_4 number: 15 mode: OUTPUT inverted: false id: relay32 interlock: *interlock_16 interlock_wait_time: 200ms cover: - platform: time_based name: "Cover_01" id: cover_01 assumed_state: false open_action: - switch.turn_on: relay1 open_duration: 30s close_action: - switch.turn_on: relay2 close_duration: 30s stop_action: - switch.turn_off: relay1 - switch.turn_off: relay2 - platform: time_based name: "Cover_02" id: cover_02 assumed_state: false open_action: - switch.turn_on: relay3 open_duration: 30s close_action: - switch.turn_on: relay4 close_duration: 30s stop_action: - switch.turn_off: relay3 - switch.turn_off: relay4 - platform: time_based name: "Cover_03" id: cover_03 assumed_state: false open_action: - switch.turn_on: relay5 open_duration: 30s close_action: - switch.turn_on: relay6 close_duration: 30s stop_action: - switch.turn_off: relay5 - switch.turn_off: relay6 - platform: time_based name: "Cover_04" id: cover_04 assumed_state: false open_action: - switch.turn_on: relay7 open_duration: 30s close_action: - switch.turn_on: relay8 close_duration: 30s stop_action: - switch.turn_off: relay7 - switch.turn_off: relay8 - platform: time_based name: "Cover_05" id: cover_05 assumed_state: false open_action: - switch.turn_on: relay9 open_duration: 30s close_action: - switch.turn_on: relay10 close_duration: 30s stop_action: - switch.turn_off: relay9 - switch.turn_off: relay10 - platform: time_based name: "Cover_06" id: cover_06 assumed_state: false open_action: - switch.turn_on: relay11 open_duration: 30s close_action: - switch.turn_on: relay12 close_duration: 30s stop_action: - switch.turn_off: relay11 - switch.turn_off: relay12 - platform: time_based name: "Cover_07" id: cover_07 assumed_state: false open_action: - switch.turn_on: relay13 open_duration: 30s close_action: - switch.turn_on: relay14 close_duration: 30s stop_action: - switch.turn_off: relay13 - switch.turn_off: relay14 - platform: time_based name: "Cover_08" id: cover_08 assumed_state: false open_action: - switch.turn_on: relay15 open_duration: 30s close_action: - switch.turn_on: relay16 close_duration: 30s stop_action: - switch.turn_off: relay15 - switch.turn_off: relay16 - platform: time_based name: "Cover_09" id: cover_09 assumed_state: false open_action: - switch.turn_on: relay17 open_duration: 30s close_action: - switch.turn_on: relay18 close_duration: 30s stop_action: - switch.turn_off: relay17 - switch.turn_off: relay18 - platform: time_based name: "Cover_10" id: cover_10 assumed_state: false open_action: - switch.turn_on: relay19 open_duration: 30s close_action: - switch.turn_on: relay20 close_duration: 30s stop_action: - switch.turn_off: relay19 - switch.turn_off: relay20 - platform: time_based name: "Cover_11" id: cover_11 assumed_state: false open_action: - switch.turn_on: relay21 open_duration: 30s close_action: - switch.turn_on: relay22 close_duration: 30s stop_action: - switch.turn_off: relay21 - switch.turn_off: relay22 - platform: time_based name: "Cover_12" id: cover_12 assumed_state: false open_action: - switch.turn_on: relay23 open_duration: 35s close_action: - switch.turn_on: relay24 close_duration: 29s stop_action: - switch.turn_off: relay23 - switch.turn_off: relay24 - platform: time_based name: "Cover_13" id: cover_13 assumed_state: false open_action: - switch.turn_on: relay25 open_duration: 35s close_action: - switch.turn_on: relay26 close_duration: 29s stop_action: - switch.turn_off: relay25 - switch.turn_off: relay26 - platform: time_based name: "Cover_14" id: cover_14 assumed_state: false open_action: - switch.turn_on: relay27 open_duration: 35s close_action: - switch.turn_on: relay28 close_duration: 29s stop_action: - switch.turn_off: relay27 - switch.turn_off: relay28 - platform: time_based name: "Cover_15" id: cover_15 assumed_state: false open_action: - switch.turn_on: relay29 open_duration: 35s close_action: - switch.turn_on: relay30 close_duration: 29s stop_action: - switch.turn_off: relay29 - switch.turn_off: relay30 - platform: time_based name: "Cover_16" id: cover_16 assumed_state: false open_action: - switch.turn_on: relay31 open_duration: 17s close_action: - switch.turn_on: relay32 close_duration: 14s stop_action: - switch.turn_off: relay31 - switch.turn_off: relay32 binary_sensor: - platform: gpio name: "IN_01" pin: mcp23xxx: mcp_1 number: 0 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_01 on_release: cover.stop: cover_01 - platform: gpio name: "IN_02" pin: mcp23xxx: mcp_1 number: 1 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_01 on_release: cover.stop: cover_01 - platform: gpio name: "IN_03" pin: mcp23xxx: mcp_1 number: 2 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_02 on_release: cover.stop: cover_02 - platform: gpio name: "IN_04" pin: mcp23xxx: mcp_1 number: 3 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_02 on_release: cover.stop: cover_02 - platform: gpio name: "IN_05" pin: mcp23xxx: mcp_1 number: 4 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_03 on_release: cover.stop: cover_03 - platform: gpio name: "IN_06" pin: mcp23xxx: mcp_1 number: 5 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_03 on_release: cover.stop: cover_03 - platform: gpio name: "IN_07" pin: mcp23xxx: mcp_1 number: 6 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_04 on_release: cover.stop: cover_04 - platform: gpio name: "IN_08" pin: mcp23xxx: mcp_1 number: 7 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_04 on_release: cover.stop: cover_04 - platform: gpio name: "IN_09" pin: mcp23xxx: mcp_1 number: 8 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_05 on_release: cover.stop: cover_05 - platform: gpio name: "IN_10" pin: mcp23xxx: mcp_1 number: 9 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_05 on_release: cover.stop: cover_05 - platform: gpio name: "IN_11" pin: mcp23xxx: mcp_1 number: 10 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_06 on_release: cover.stop: cover_06 - platform: gpio name: "IN_12" pin: mcp23xxx: mcp_1 number: 11 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_06 on_release: cover.stop: cover_06 - platform: gpio name: "IN_13" pin: mcp23xxx: mcp_1 number: 12 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_07 on_release: cover.stop: cover_07 - platform: gpio name: "IN_14" pin: mcp23xxx: mcp_1 number: 13 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_07 on_release: cover.stop: cover_07 - platform: gpio name: "IN_15" pin: mcp23xxx: mcp_1 number: 14 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_08 on_release: cover.stop: cover_08 - platform: gpio name: "IN_16" pin: mcp23xxx: mcp_1 number: 15 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_08 on_release: cover.stop: cover_08 - platform: gpio name: "IN_17" pin: mcp23xxx: mcp_2 number: 7 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_09 on_release: cover.stop: cover_09 - platform: gpio name: "IN_18" pin: mcp23xxx: mcp_2 number: 6 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_09 on_release: cover.stop: cover_09 - platform: gpio name: "IN_19" pin: mcp23xxx: mcp_2 number: 5 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_10 on_release: cover.stop: cover_10 - platform: gpio name: "IN_20" pin: mcp23xxx: mcp_2 number: 4 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_10 on_release: cover.stop: cover_10 - platform: gpio name: "IN_21" pin: mcp23xxx: mcp_2 number: 3 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_11 on_release: cover.stop: cover_11 - platform: gpio name: "IN_22" pin: mcp23xxx: mcp_2 number: 2 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_11 on_release: cover.stop: cover_11 - platform: gpio name: "IN_23" pin: mcp23xxx: mcp_2 number: 1 mode: input: true pullup: false inverted: true on_press: then: cover.open: cover_12 on_release: cover.stop: cover_12 - platform: gpio name: "IN_24" pin: mcp23xxx: mcp_2 number: 0 mode: input: true pullup: false inverted: true on_press: then: cover.close: cover_12 on_release: cover.stop: cover_12 - platform: gpio name: "IN_25" pin: mcp23xxx: mcp_2 number: 8 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_13).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_13).is_fully_closed()) { id(cover_13).open(); } else { id(cover_13).open(); } } else { // Cover is opening/closing. Stop it. id(cover_13).stop(); } # cover.open: cover_13 # on_release: # cover.stop: cover_13 - platform: gpio name: "IN_26" pin: mcp23xxx: mcp_2 number: 9 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_13).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_13).is_fully_closed()) { id(cover_13).open(); } else { id(cover_13).close(); } } else { // Cover is opening/closing. Stop it. id(cover_13).stop(); } # cover.close: cover_13 # on_release: # cover.stop: cover_13 - platform: gpio name: "IN_27" pin: mcp23xxx: mcp_2 number: 10 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_14).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_14).is_fully_closed()) { id(cover_14).open(); } else { id(cover_14).open(); } } else { // Cover is opening/closing. Stop it. id(cover_14).stop(); } # cover.open: cover_14 # on_release: # cover.stop: cover_14 - platform: gpio name: "IN_28" pin: mcp23xxx: mcp_2 number: 11 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_14).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_14).is_fully_closed()) { id(cover_14).open(); } else { id(cover_14).close(); } } else { // Cover is opening/closing. Stop it. id(cover_14).stop(); } # cover.close: cover_14 # on_release: # cover.stop: cover_14 - platform: gpio name: "IN_29" pin: mcp23xxx: mcp_2 number: 12 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_15).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_15).is_fully_closed()) { id(cover_15).open(); } else { id(cover_15).open(); } } else { // Cover is opening/closing. Stop it. id(cover_15).stop(); } # cover.open: cover_15 # on_release: # cover.stop: cover_15 - platform: gpio name: "IN_30" pin: mcp23xxx: mcp_2 number: 13 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_15).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_15).is_fully_closed()) { id(cover_15).open(); } else { id(cover_15).close(); } } else { // Cover is opening/closing. Stop it. id(cover_15).stop(); } # cover.close: cover_15 # on_release: # cover.stop: cover_15 - platform: gpio name: "IN_31" pin: mcp23xxx: mcp_2 number: 14 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_16).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_16).is_fully_closed()) { id(cover_16).open(); } else { id(cover_16).open(); } } else { // Cover is opening/closing. Stop it. id(cover_16).stop(); } # - cover.toggle: cover_16 # else: # - cover.stop: cover_16 - platform: gpio name: "IN_32" pin: mcp23xxx: mcp_2 number: 15 mode: input: true pullup: false inverted: true on_press: then: # logic for cycling through movements: open->stop->close->stop->... - lambda: | if (id(cover_16).current_operation == COVER_OPERATION_IDLE) { // Cover is idle, check current state and either open or close cover. if (id(cover_16).is_fully_closed()) { id(cover_16).open(); } else { id(cover_16).close(); } } else { // Cover is opening/closing. Stop it. id(cover_16).stop(); } # - cover.toggle: cover_16 # - cover.stop: cover_16 - platform: gpio name: "IN_33" pin: number: GPIO33 mode: input: true pullup: false inverted: true - platform: gpio name: "IN_34" pin: number: GPIO17 mode: input: true pullup: false inverted: true - platform: gpio name: "IN_35" pin: number: GPIO12 mode: input: true pullup: true inverted: false - platform: gpio name: "USER_SWITCH" pin: number: GPIO4 mode: input: true pullup: true inverted: true on_press: then: - display.page.show_next: oled_display - component.update: oled_display text_sensor: - platform: template name: ${node_name} Uptime id: wt32_uptime entity_category: diagnostic icon: mdi:clock-start - platform: template name: "${node_name} IP" id: ip_address entity_category: diagnostic icon: "mdi:ip-network" lambda: return { id(eth).get_ip_address().str() }; update_interval: 60s #dallas: # - pin: GPIO32 sensor: - platform: pct2075 temperature: id: led_temp name: "${node_name} LM75B Temperature" update_interval: 30s - platform: uptime name: ${node_name} uptime text id: wt32_uptime_sensor update_interval: 60s on_raw_value: then: - text_sensor.template.publish: id: wt32_uptime state: !lambda |- int seconds = round(id(wt32_uptime_sensor).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(); # - platform: mcp9808 # name: "MCP9808 temp" # update_interval: 60s # - platform: dallas # address: 0x283c01d607d4df28 # name: "Dallas Sensor 1" # - platform: dallas # address: 0xdfe67a061e64ff28 # name: "Dallas Sensor 2" # - platform: dallas # address: 0xa7a89f071e64ff28 # name: "Dallas Sensor 3" - platform: ina219 address: 0x40 shunt_resistance: 0.1 ohm current: id: ina_current name: "${node_name} INA219 Current" power: id: ina_power name: "${node_name} INA219 Power" bus_voltage: id: ina_bus_voltage name: "${node_name} INA219 Bus Voltage" shunt_voltage: id: ina_shunt_voltage name: "${node_name} INA219 Shunt Voltage" max_voltage: 32.0V max_current: 3.2A update_interval: 30s # pin: GPIO36 # name: "ADC_1" # update_interval: 5s # - platform: adc # pin: GPIO39 # name: "ADC_2" # update_interval: 5s display: - platform: ssd1306_i2c id: oled_display model: "SH1106 128x64" address: 0x3C contrast: 0.5 pages: - id: page1 lambda: |- it.printf(64,25, id(danube), TextAlign::BASELINE_CENTER, "boneIO"); it.printf(64,40, id(fontSmall), TextAlign::BASELINE_CENTER, "take control"); it.printf(64,50, id(fontSmall), TextAlign::BASELINE_CENTER, "of your home"); - id: page2 lambda: |- it.rectangle(0, 0, 126, 15); it.printf(64,12, id(danube1), TextAlign::BASELINE_CENTER, "BoneIO"); it.strftime(64, 26, id(fontSmall), TextAlign::BASELINE_CENTER ,"%c", id(ds1307_time).now()); it.printf(4, 38, id(fontSmall), TextAlign::BASELINE_LEFT ,"IP addr:"); it.printf(124, 38, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%s", id(ip_address).state.c_str()); it.printf(4, 50, id(fontSmall), TextAlign::BASELINE_LEFT ,"Uptime:"); it.printf(124, 50, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%s", id(wt32_uptime).state.c_str()); it.printf(4, 62, id(fontSmall), TextAlign::BASELINE_LEFT ,"Temperature:"); it.printf(124, 62, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%.2f°C", id(led_temp).state); - id: page3 lambda: |- it.rectangle(0, 0, 126, 15); it.printf(64,12, id(danube1), TextAlign::BASELINE_CENTER, "BoneIO"); it.printf(4, 26, id(fontSmall), TextAlign::BASELINE_LEFT ,"Current:"); it.printf(124, 26, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%.3fA", id(ina_current).state); it.printf(4, 38, id(fontSmall), TextAlign::BASELINE_LEFT ,"Power:"); it.printf(124, 38, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%.2fW", id(ina_power).state); it.printf(4, 50, id(fontSmall), TextAlign::BASELINE_LEFT ,"Bus Volt:"); it.printf(124, 50, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%.2fV", id(ina_bus_voltage).state); it.printf(4, 62, id(fontSmall), TextAlign::BASELINE_LEFT ,"Shunt Volt:"); it.printf(124, 62, id(fontSmall), TextAlign::BASELINE_RIGHT ,"%.2fV", id(ina_shunt_voltage).state); font: - file: "fonts/DejaVuSans.ttf" id: fontSmall size: 9 - file: "fonts/danube__.ttf" id: danube size: 20 - file: "fonts/danube__.ttf" id: danube1 size: 9