You got me ! I used the multimeter's continuity tester (without the battery connected) figuring that the relay should do the switching whether or not there is current flowing on the other side. I'm probably wrong about that too 
I'm guessing the issue is not that a few 30ms pulses will drain the 6600mAh battery, but that suddenly switching that much current may cause brownouts, especially as the battery power reduces ?
Sonoff Duo does look interesting ... unfortunately it is not yet available, and uses Zigbee2MQTT.
My hobby greenhouse is well out of range of the ZHA in my upstairs apartment, and I consider the wi-fi link to be questionable - so I prefer something to connect to my ESP32 directly.
It get the definite impression that quite a few members here assume that everyone sees HA as just a step towards the real objective of becoming a professional electrical/systems engineer. I have long been interested in technology, but at age 66 with my eyesight and unsteady hands I am interested in what the technology can do for me - preferably without inflicting my soldering iron skills on the world 
I have recovered the ESP32 and reloaded my test program
###################################################################
# #
# To control the greenhouse I have an ESP32-S3-devkitC-1 #
# #
###################################################################
substitutions:
devicename: "test_9volts"
deviceIP: "124" # last octet of the IP Address
update_interval_network: 2 min # How often to measure and report network values
update_interval_sensor: 60s # How often to measure and report sensor values
latching_switch_delay: 30ms # how long a pulse to activate the latching relay
logger:
level: DEBUG # VERBOSE
packages:
board: !include _common_esp32-s3-devkitc-1.yaml # devkit from AliExpress
wi-fi: !include _common_wifi.yaml
i2c:
- id: i2c_control
scl: GPIO12
sda: GPIO11
scan: true
switch:
# power for the main control i2c
- platform: gpio
pin: GPIO14
id: enable_i2c_control
name: enable_i2c_control
restore_mode: ALWAYS_ON
# I have a latching relay, with A and B switches
# (which we use for ON and OFF respectively) which require a GPIO pin each.
# - turning on mist_latch_on momentarily sends the pulse to latch COM-to-A, and
# - turning on mist_latch_off momentarily sends the pulse to latch COM-to-B (which is not connected, therefore off)
# The template makes them look like an on/off switch, so the GPIO pins can be hidden
- platform: gpio
pin: GPIO21
id: mist_latch_on # COMmon to A makes the connection = ON
name: mist_latch_on
restore_mode: ALWAYS_OFF
on_turn_on:
- logger.log: "turn_on mist_latch_on"
- delay: 30ms
- switch.turn_off: mist_latch_on
- platform: gpio
pin: GPIO20
id: mist_latch_off # COMmon to B has no connection = OFF
name: mist_latch_off
restore_mode: ALWAYS_OFF
on_turn_on:
- logger.log: "turn_on mist_latch_off"
- delay: 30ms
- switch.turn_off: mist_latch_off
# create a template to remember the state of the latching switch
- platform: template
id: mist_relay
name: Misting Latching Relay
restore_mode: RESTORE_DEFAULT_OFF
turn_on_action:
- switch.turn_on: mist_latch_on
turn_off_action:
- switch.turn_on: mist_latch_off
sensor:
- platform: ina219
address: 0x44
shunt_resistance: 0.1 ohm
current:
name: "INA219 Current"
power:
name: "INA219 Power"
bus_voltage:
name: "INA219 Bus Voltage"
shunt_voltage:
name: "INA219 Shunt Voltage"
max_voltage: 32.0V
max_current: 3.2A
update_interval: 15s
- platform: ina3221
address: 0x40
i2c_id: i2c_control
update_interval: 15s # $update_interval_sensor
channel_2: # Solar Panel
shunt_resistance: 0.1 ohm
bus_voltage:
name: Solar Voltage
accuracy_decimals: 2
channel_3: # record actual battery voltage readings for later analysys
shunt_resistance: 0.1 ohm
bus_voltage:
name: Battery Voltage actual
id: batt_voltage_actual
accuracy_decimals: 2
filters:
offset: 0.10
###############################################################################
esphome:
name: $devicename
platformio_options:
board_build.flash_mode: dio
on_boot:
- priority: -100
then:
- logger.log: " "
- logger.log: "##### on_boot -100 finished"
- logger.log: " "
on_shutdown:
- priority: -100
then:
# before everything else, while all is still operational
- switch.turn_off: enable_i2c_control # save power by turning off i2c while asleep
- logger.log: "##### on_shutdown -100 finished. "
and strangely toggling the mist_relay switch results on the latching relay being turned ON and ON
[2026-05-26 15:45:31] [D][wifi:2434]: Roam check skipped, signal good (-45 dBm, attempt 1/3)
[2026-05-26 15:46:20] [D][main:262]: turn_on mist_latch_on
[2026-05-26 15:46:33] [D][main:262]: turn_on mist_latch_on
[2026-05-26 15:46:39] [D][main:262]: turn_on mist_latch_on
[2026-05-26 15:46:43] [D][main:262]: turn_on mist_latch_on
[2026-05-26 15:50:31] [D][wifi:2434]: Roam check skipped, signal good (-47 dBm, attempt 2/3)
[2026-05-26 15:55:31] [D][wifi:2434]: Roam check skipped, signal good (-47 dBm, attempt 3/3)
[2026-05-26 20:42:39] [W][api.connection:2463]: ESPHome Logs 2026.5.0 (192.168.1.97): Reading failed CONNECTION_CLOSED errno=128
[2026-05-26 20:42:39] [D][main:113]: ##### >>>>>>>>>> API client disconnected!
[2026-05-26 20:57:36] [D][web_server_idf:626][httpd]: Event source connection closed (fd: 54)
[2026-05-27 16:17:18] [D][main:262]: turn_on mist_latch_on
[2026-05-27 16:17:23] [D][main:262]: turn_on mist_latch_on
[2026-05-27 16:17:27] [D][main:262]: turn_on mist_latch_on
[2026-05-27 16:28:02] [D][main:262]: turn_on mist_latch_on
Never mind. I have ordered the Latching Solenoid, and now that I know it exists there is no point using the non-latching version for my remote application.
Thank you guys for your assistance.