Files
.devcontainer
.github
.vscode
plugins
sass
source
.well-known
_dashboards
_data
_docs
_examples
_faq
_includes
_integrations
3_day_blinds.markdown
abode.markdown
accuweather.markdown
acer_projector.markdown
acmeda.markdown
acomax.markdown
actiontec.markdown
adax.markdown
adguard.markdown
ads.markdown
advantage_air.markdown
aemet.markdown
aep_ohio.markdown
aep_texas.markdown
aftership.markdown
agent_dvr.markdown
air_quality.markdown
airly.markdown
airnow.markdown
airq.markdown
airthings.markdown
airthings_ble.markdown
airtouch4.markdown
airtouch5.markdown
airvisual.markdown
airvisual_pro.markdown
airzone.markdown
airzone_cloud.markdown
aladdin_connect.markdown
alarm_control_panel.ifttt.markdown
alarm_control_panel.markdown
alarm_control_panel.mqtt.markdown
alarm_control_panel.template.markdown
alarmdecoder.markdown
alert.markdown
alexa.flash_briefings.markdown
alexa.intent.markdown
alexa.markdown
alexa.smart_home.markdown
alpha_vantage.markdown
amazon_polly.markdown
amberelectric.markdown
ambient_network.markdown
ambient_station.markdown
amcrest.markdown
amp_motorization.markdown
ampio.markdown
analytics.markdown
analytics_insights.markdown
android_ip_webcam.markdown
androidtv.markdown
androidtv_remote.markdown
anel_pwrctrl.markdown
anova.markdown
anthemav.markdown
anwb_energie.markdown
aosmith.markdown
apache_kafka.markdown
apcupsd.markdown
api.markdown
appalachianpower.markdown
apple_tv.markdown
application_credentials.markdown
apprise.markdown
aprilaire.markdown
aprs.markdown
aqualogic.markdown
aquostv.markdown
aranet.markdown
arcam_fmj.markdown
arest.markdown
arris_tg2492lg.markdown
aruba.markdown
arwn.markdown
aseko_pool_live.markdown
assist_pipeline.markdown
asuswrt.markdown
atag.markdown
aten_pe.markdown
atlanticcityelectric.markdown
atome.markdown
august.markdown
august_ble.markdown
aurora.markdown
aurora_abb_powerone.markdown
aussie_broadband.markdown
auth.markdown
automation.markdown
avea.markdown
avion.markdown
awair.markdown
aws.markdown
axis.markdown
azure_devops.markdown
azure_event_hub.markdown
azure_service_bus.markdown
backup.markdown
baf.markdown
baidu.markdown
balboa.markdown
bang_olufsen.markdown
bayesian.markdown
bbox.markdown
beewi_smartclim.markdown
bge.markdown
binary_sensor.markdown
binary_sensor.mqtt.markdown
binary_sensor.rest.markdown
binary_sensor.rflink.markdown
binary_sensor.xiaomi_aqara.markdown
bitcoin.markdown
bizkaibus.markdown
blackbird.markdown
blebox.markdown
blink.markdown
blinksticklight.markdown
bliss_automation.markdown
bloc_blinds.markdown
blockchain.markdown
bloomsky.markdown
blue_current.markdown
bluemaestro.markdown
blueprint.markdown
bluesound.markdown
bluetooth.markdown
bluetooth_adapters.markdown
bluetooth_le_tracker.markdown
bluetooth_tracker.markdown
bmw_connected_drive.markdown
bond.markdown
bosch_shc.markdown
brandt.markdown
braviatv.markdown
brel_home.markdown
bring.markdown
broadlink.markdown
brother.markdown
brottsplatskartan.markdown
browser.markdown
brunt.markdown
bsblan.markdown
bswitch.markdown
bt_home_hub_5.markdown
bt_smarthub.markdown
bthome.markdown
bticino.markdown
bubendorff.markdown
buienradar.markdown
button.markdown
button.mqtt.markdown
caldav.markdown
calendar.markdown
camera.ffmpeg.markdown
camera.markdown
camera.mqtt.markdown
canary.markdown
cast.markdown
ccm15.markdown
cert_expiry.markdown
channels.markdown
cisco_ios.markdown
cisco_mobility_express.markdown
cisco_webex_teams.markdown
citybikes.markdown
clementine.markdown
clickatell.markdown
clicksend.markdown
clicksend_tts.markdown
climate.markdown
climate.mqtt.markdown
cloud.markdown
cloudflare.markdown
cmus.markdown
co2signal.markdown
coautilities.markdown
coinbase.markdown
color_extractor.markdown
comed.markdown
comed_hourly_pricing.markdown
comelit.markdown
comfoconnect.markdown
command_line.markdown
compensation.markdown
concord232.markdown
coned.markdown
config.markdown
configurator.markdown
control4.markdown
conversation.markdown
coolmaster.markdown
counter.markdown
cover.markdown
cover.mqtt.markdown
cover.rflink.markdown
cover.template.markdown
cover.xiaomi_aqara.markdown
cozytouch.markdown
cppm_tracker.markdown
cpuspeed.markdown
cribl.markdown
crownstone.markdown
cups.markdown
currencylayer.markdown
dacia.markdown
daikin.markdown
danfoss_air.markdown
datadog.markdown
date.markdown
datetime.markdown
ddwrt.markdown
debugpy.markdown
deconz.markdown
decora.markdown
decora_wifi.markdown
default_config.markdown
delijn.markdown
delmarva.markdown
deluge.markdown
demo.markdown
denon.markdown
denonavr.markdown
derivative.markdown
devialet.markdown
device_automation.markdown
device_sun_light_trigger.markdown
device_tracker.markdown
device_tracker.mqtt.markdown
device_tracker.xiaomi.markdown
device_trigger.mqtt.markdown
devolo_home_control.markdown
devolo_home_network.markdown
dexcom.markdown
dhcp.markdown
diagnostics.markdown
dialogflow.markdown
diaz.markdown
digital_loggers.markdown
digital_ocean.markdown
directv.markdown
discogs.markdown
discord.markdown
discovergy.markdown
dlib_face_detect.markdown
dlib_face_identify.markdown
dlink.markdown
dlna_dmr.markdown
dlna_dms.markdown
dnsip.markdown
dominos.markdown
doods.markdown
doorbird.markdown
dooya.markdown
dormakaba_dkey.markdown
dovado.markdown
downloader.markdown
dremel_3d_printer.markdown
drop_connect.markdown
dsmr.markdown
dsmr_reader.markdown
dte_energy_bridge.markdown
dublin_bus_transport.markdown
duckdns.markdown
dunehd.markdown
duotecno.markdown
duquesne_light.markdown
dwd_weather_warnings.markdown
dweet.markdown
dynalite.markdown
eafm.md
eastron.markdown
easyenergy.markdown
ebox.markdown
ebusd.markdown
ecoal_boiler.markdown
ecobee.markdown
ecoforest.markdown
econet.markdown
ecovacs.markdown
ecowitt.markdown
eddystone_temperature.markdown
edimax.markdown
edl21.markdown
efergy.markdown
egardia.markdown
electrasmart.markdown
electric_kiwi.markdown
elgato.markdown
eliqonline.markdown
elkm1.markdown
elmax.markdown
elv.markdown
elvia.markdown
emby.markdown
emoncms.markdown
emoncms_history.markdown
emonitor.markdown
emulated_hue.markdown
emulated_kasa.markdown
emulated_roku.markdown
energenie_power_sockets.markdown
energie_vanons.markdown
energy.markdown
energyzero.markdown
enigma2.markdown
enmax.markdown
enocean.markdown
enphase_envoy.markdown
entur_public_transport.markdown
environment_canada.markdown
envisalink.markdown
ephember.markdown
epic_games_store.markdown
epion.markdown
epson.markdown
eq3btsmart.markdown
escea.markdown
esera_onewire.markdown
esphome.markdown
etherscan.markdown
eufy.markdown
eufylife_ble.markdown
event.markdown
event.mqtt.markdown
evergy.markdown
everlights.markdown
evil_genius_labs.markdown
evohome.markdown
ezviz.markdown
faa_delays.markdown
facebook.markdown
fail2ban.markdown
familyhub.markdown
fan.markdown
fan.mqtt.markdown
fan.template.markdown
fastdotcom.markdown
feedreader.markdown
ffmpeg.markdown
ffmpeg_motion.markdown
ffmpeg_noise.markdown
fibaro.markdown
fido.markdown
file.markdown
file_upload.markdown
filesize.markdown
filter.markdown
fints.markdown
fire_tv.markdown
fireservicerota.markdown
firmata.markdown
fitbit.markdown
fivem.markdown
fixer.markdown
fjaraskupan.markdown
fleetgo.markdown
flexit.markdown
flexit_bacnet.markdown
flexom.markdown
flic.markdown
flick_electric.markdown
flipr.markdown
flo.markdown
flock.markdown
flume.markdown
flux.markdown
flux_led.markdown
folder.markdown
folder_watcher.markdown
foobot.markdown
forecast_solar.markdown
forked_daapd.markdown
fortios.markdown
foscam.markdown
foursquare.markdown
free_mobile.markdown
freebox.markdown
freedns.markdown
freedompro.markdown
fritz.markdown
fritzbox.markdown
fritzbox_callmonitor.markdown
fronius.markdown
frontend.markdown
frontier_silicon.markdown
fujitsu_anywair.markdown
fully_kiosk.markdown
futurenow.markdown
fyta.markdown
garadget.markdown
garages_amsterdam.markdown
gardena_bluetooth.markdown
gaviota.markdown
gc100.markdown
gdacs.markdown
generic.markdown
generic_hygrostat.markdown
generic_thermostat.markdown
geniushub.markdown
geo_json_events.markdown
geo_location.markdown
geo_rss_events.markdown
geocaching.markdown
geofency.markdown
geonetnz_quakes.markdown
geonetnz_volcano.markdown
gios.markdown
github.markdown
gitlab_ci.markdown
gitter.markdown
glances.markdown
goalzero.markdown
gogogate2.markdown
goodwe.markdown
google.markdown
google_assistant.markdown
google_assistant_sdk.markdown
google_cloud.markdown
google_domains.markdown
google_generative_ai_conversation.markdown
google_mail.markdown
google_maps.markdown
google_pubsub.markdown
google_sheets.markdown
google_tasks.markdown
google_translate.markdown
google_travel_time.markdown
google_wifi.markdown
govee_ble.markdown
govee_light_local.markdown
gpsd.markdown
gpslogger.markdown
graphite.markdown
gree.markdown
greeneye_monitor.markdown
greenwave.markdown
group.markdown
growatt_server.markdown
gstreamer.markdown
gtfs.markdown
guardian.markdown
habitica.markdown
hardware.markdown
harman_kardon_avr.markdown
harmony.markdown
hassio.markdown
havana_shade.markdown
haveibeenpwned.markdown
hddtemp.markdown
hdmi_cec.markdown
heatmiser.markdown
heiwa.markdown
heltun.markdown
heos.markdown
here_travel_time.markdown
hexaom.markdown
hi_kumo.markdown
hikvision.markdown
hikvisioncam.markdown
hisense_aehw4a1.markdown
history.markdown
history_stats.markdown
hitron_coda.markdown
hive.markdown
hko.markdown
hlk_sw16.markdown
holiday.markdown
home_connect.markdown
home_plus_control.markdown
homeassistant.markdown
homeassistant_alerts.markdown
homeassistant_green.markdown
homeassistant_hardware.markdown
homeassistant_sky_connect.markdown
homeassistant_yellow.markdown
homekit.markdown
homekit_controller.markdown
homematic.markdown
homematicip_cloud.markdown
homeseer.markdown
homewizard.markdown
homeworks.markdown
honeywell.markdown
horizon.markdown
hp_ilo.markdown
html5.markdown
http.markdown
huawei_lte.markdown
hue.markdown
huisbaasje.markdown
humidifier.markdown
humidifier.mqtt.markdown
hunterdouglas_powerview.markdown
hurrican_shutters_wholesale.markdown
husqvarna_automower.markdown
huum.markdown
hvv_departures.markdown
hydrawise.markdown
hyperion.markdown
ialarm.markdown
iammeter.markdown
iaqualink.markdown
ibeacon.markdown
icloud.markdown
idasen_desk.markdown
idteck_prox.markdown
ifttt.markdown
iglo.markdown
ign_sismologia.markdown
ihc.markdown
image.markdown
image.mqtt.markdown
image_processing.markdown
image_upload.markdown
imap.markdown
improv_ble.markdown
incomfort.markdown
indianamichiganpower.markdown
influxdb.markdown
inkbird.markdown
input_boolean.markdown
input_button.markdown
input_datetime.markdown
input_number.markdown
input_select.markdown
input_text.markdown
inspired_shades.markdown
insteon.markdown
integration.markdown
intellifire.markdown
intent_script.markdown
intesishome.markdown
ios.markdown
iotawatt.markdown
iperf3.markdown
ipma.markdown
ipp.md
iqvia.markdown
irish_rail_transport.markdown
islamic_prayer_times.markdown
ismartwindow.markdown
iss.markdown
isy994.markdown
itach.markdown
itunes.markdown
izone.markdown
jasco.markdown
jellyfin.markdown
jewish_calendar.markdown
joaoapps_join.markdown
juicenet.markdown
justnimbus.markdown
jvc_projector.markdown
kaiterra.markdown
kaleidescape.markdown
kankun.markdown
keba.markdown
keenetic_ndms2.markdown
kef.markdown
kegtron.markdown
kentuckypower.markdown
keyboard.markdown
keyboard_remote.markdown
keymitt_ble.markdown
kira.markdown
kitchen_sink.markdown
kiwi.markdown
kmtronic.markdown
knx.markdown
kodi.markdown
konnected.markdown
kostal_plenticore.markdown
kraken.markdown
krispol.markdown
kulersky.markdown
kwb.markdown
lacrosse.markdown
lacrosse_view.markdown
lamarzocco.markdown
lametric.markdown
landisgyr_heat_meter.markdown
lannouncer.markdown
lastfm.markdown
launch_library.markdown
laundrify.markdown
lawn_mower.markdown
lawn_mower.mqtt.markdown
lcn.markdown
ld2410_ble.markdown
leaone.markdown
led_ble.markdown
legrand.markdown
leviton_z_wave.markdown
lg_netcast.markdown
lg_soundbar.markdown
lidarr.markdown
lifx.markdown
lifx_cloud.markdown
light.markdown
light.mqtt.markdown
light.rflink.markdown
light.template.markdown
light.xiaomi_aqara.markdown
lightwave.markdown
limitlessled.markdown
linear_garage_door.markdown
linksys_smart.markdown
linode.markdown
linux_battery.markdown
lirc.markdown
litejet.markdown
litterrobot.markdown
livisi.markdown
llamalab_automate.markdown
local_calendar.markdown
local_file.markdown
local_ip.markdown
local_todo.markdown
locative.md
lock.markdown
lock.mqtt.markdown
lock.template.markdown
lock.xiaomi_aqara.markdown
logbook.markdown
logentries.markdown
logger.markdown
london_air.markdown
london_underground.markdown
lookin.markdown
loqed.markdown
luci.markdown
luftdaten.markdown
lupusec.markdown
lutron.markdown
lutron_caseta.markdown
luxaflex.markdown
lw12wifi.markdown
lyric.markdown
madeco.markdown
mailgun.markdown
manual.markdown
manual_mqtt.markdown
marantz.markdown
martec.markdown
marytts.markdown
mastodon.markdown
matrix.markdown
matter.markdown
maxcube.markdown
meater.markdown
medcom_ble.markdown
media_extractor.markdown
media_player.markdown
media_source.markdown
mediaroom.markdown
melcloud.markdown
melissa.markdown
melnor.markdown
meraki.markdown
message_bird.markdown
met.markdown
met_eireann.markdown
meteo_france.markdown
meteoalarm.markdown
meteoclimatic.markdown
metoffice.markdown
mfi.markdown
microbees.markdown
microsoft.markdown
microsoft_face.markdown
microsoft_face_detect.markdown
microsoft_face_identify.markdown
mijndomein_energie.markdown
mikrotik.markdown
mill.markdown
min_max.markdown
minecraft_server.markdown
minio.markdown
mjpeg.markdown
moat.markdown
mobile_app.markdown
mochad.markdown
modbus.markdown
modem_callerid.markdown
modern_forms.markdown
moehlenhoff_alpha2.markdown
mold_indicator.markdown
monessen.markdown
monoprice.markdown
moon.markdown
mopeka.markdown
motion_blinds.markdown
motionblinds_ble.markdown
motioneye.markdown
motionmount.md
mpd.markdown
mqtt.markdown
mqtt_eventstream.markdown
mqtt_json.markdown
mqtt_room.markdown
mqtt_statestream.markdown
msteams.markdown
mullvad.markdown
mutesync.markdown
mvglive.markdown
my.markdown
mycroft.markdown
mysensors.markdown
mystrom.markdown
mythicbeastsdns.markdown
myuplink.markdown
nad.markdown
nam.markdown
namecheapdns.markdown
nanoleaf.markdown
neato.markdown
nederlandse_spoorwegen.markdown
ness_alarm.markdown
nest.markdown
netatmo.markdown
netdata.markdown
netgear.markdown
netgear_lte.markdown
netio.markdown
network.markdown
neurio_energy.markdown
nexia.markdown
nexity.markdown
nextbus.markdown
nextcloud.markdown
nextdns.markdown
nfandroidtv.markdown
nibe_heatpump.markdown
nightscout.markdown
niko_home_control.markdown
nilu.markdown
nina.markdown
nissan_leaf.markdown
nmap_tracker.markdown
nmbs.markdown
no_ip.markdown
noaa_tides.markdown
nobo_hub.markdown
norway_air.markdown
notify.markdown
notify.mqtt.markdown
notify.rest.markdown
notify.tts.markdown
notify_events.markdown
notion.markdown
nsw_fuel_station.markdown
nsw_rural_fire_service_feed.markdown
nuheat.markdown
nuki.markdown
numato.markdown
number.markdown
number.mqtt.markdown
nut.markdown
nutrichef.markdown
nws.markdown
nx584.markdown
nzbget.markdown
oasa_telematics.markdown
obihai.markdown
octoprint.markdown
oem.markdown
ohmconnect.markdown
ollama.markdown
ombi.markdown
omnilogic.markdown
onboarding.markdown
oncue.markdown
ondilo_ico.markdown
onewire.markdown
onkyo.markdown
onvif.markdown
open_meteo.markdown
openai_conversation.markdown
openalpr_cloud.markdown
openerz.markdown
openevse.markdown
openexchangerates.markdown
opengarage.markdown
openhardwaremonitor.markdown
openhome.markdown
opensensemap.markdown
opensky.markdown
opentherm_gw.markdown
openuv.markdown
openweathermap.markdown
opnsense.markdown
opower.markdown
opple.markdown
oralb.markdown
oru.markdown
oru_opower.markdown
orvibo.markdown
osoenergy.markdown
osramlightify.markdown
otbr.markdown
otp.markdown
ourgroceries.markdown
overkiz.markdown
ovo_energy.markdown
owntracks.markdown
p1_monitor.markdown
panasonic_bluray.markdown
panasonic_viera.markdown
pandora.markdown
panel_custom.markdown
pcs_lighting.markdown
peco.markdown
peco_opower.markdown
pegel_online.markdown
pencom.markdown
pepco.markdown
permobil.markdown
persistent_notification.markdown
person.markdown
pge.markdown
philips_js.markdown
pi_hole.markdown
picnic.markdown
picotts.markdown
pilight.markdown
ping.markdown
pioneer.markdown
piper.markdown
pjlink.markdown
plaato.markdown
plant.markdown
plex.markdown
plugwise.markdown
plum_lightpad.markdown
pocketcasts.markdown
point.markdown
poolsense.markdown
portlandgeneral.markdown
powerwall.markdown
private_ble_device.markdown
profiler.markdown
progettihwsw.markdown
proliphix.markdown
prometheus.markdown
prosegur.markdown
prowl.markdown
proximity.markdown
proxmoxve.markdown
proxy.markdown
prusalink.markdown
ps4.markdown
pse.markdown
psoklahoma.markdown
pulseaudio_loopback.markdown
pure_energie.markdown
purpleair.markdown
push.markdown
pushbullet.markdown
pushover.markdown
pushsafer.markdown
pvoutput.markdown
pvpc_hourly_pricing.markdown
pyload.markdown
python_script.markdown
qbittorrent.markdown
qingping.markdown
qld_bushfire.markdown
qnap.markdown
qnap_qsw.markdown
qrcode.markdown
quadrafire.markdown
quantum_gateway.markdown
qvr_pro.markdown
qwikswitch.markdown
rabbitair.markdown
rachio.markdown
radarr.markdown
radio_browser.markdown
radiotherm.markdown
rainbird.markdown
raincloud.markdown
rainforest_eagle.markdown
rainforest_raven.markdown
rainmachine.markdown
random.markdown
rapt_ble.markdown
raspyrfm.markdown
raven_rock_mfg.markdown
rdw.markdown
recollect_waste.markdown
recorder.markdown
recovery_mode.markdown
recswitch.markdown
reddit.markdown
refoss.markdown
rejseplanen.markdown
remember_the_milk.markdown
remote.markdown
remote_rpi_gpio.markdown
renault.markdown
renson.markdown
reolink.markdown
repairs.markdown
repetier.markdown
rest.markdown
rest_command.markdown
rexel.markdown
rflink.markdown
rfxtrx.markdown
rhasspy.markdown
ridwell.markdown
ring.markdown
ripple.markdown
risco.markdown
rituals_perfume_genie.markdown
rmvtransport.markdown
roborock.markdown
rocketchat.markdown
roku.markdown
romy.markdown
roomba.markdown
roon.markdown
route53.markdown
rova.markdown
rpi_camera.markdown
rpi_power.markdown
rss_feed_template.markdown
rtorrent.markdown
rtsp_to_webrtc.markdown
ruckus_unleashed.markdown
russound_rio.markdown
russound_rnet.markdown
ruuvi_gateway.markdown
ruuvitag_ble.markdown
rympro.markdown
sabnzbd.markdown
saj.markdown
samsam.markdown
samsungtv.markdown
sanix.markdown
satel_integra.markdown
scene.markdown
scene.mqtt.markdown
schedule.markdown
schlage.markdown
schluter.markdown
scl.markdown
scrape.markdown
screenaway.markdown
screenlogic.markdown
script.markdown
scsgate.markdown
search.markdown
season.markdown
select.markdown
select.mqtt.markdown
sendgrid.markdown
sense.markdown
sensibo.markdown
sensirion_ble.markdown
sensor.ios.markdown
sensor.markdown
sensor.mqtt.markdown
sensor.rest.markdown
sensor.rflink.markdown
sensor.xiaomi_aqara.markdown
sensorblue.markdown
sensorpro.markdown
sensorpush.markdown
sentry.markdown
senz.markdown
serial.markdown
serial_pm.markdown
sesame.markdown
seven_segments.markdown
seventeentrack.markdown
sfr_box.markdown
sharkiq.markdown
shell_command.markdown
shelly.markdown
shodan.markdown
shopping_list.markdown
sia.markdown
sigfox.markdown
sighthound.markdown
signal_messenger.markdown
simplepush.markdown
simplisafe.markdown
simply_automated.markdown
simu.markdown
simulated.markdown
sinch.markdown
siren.markdown
siren.mqtt.markdown
sisyphus.markdown
sky_hub.markdown
skybeacon.markdown
skybell.markdown
slack.markdown
sleepiq.markdown
slide.markdown
slimproto.markdown
sma.markdown
smappee.markdown
smart_blinds.markdown
smart_home.markdown
smart_meter_texas.markdown
smarther.markdown
smartthings.markdown
smarttub.markdown
smarty.markdown
smhi.markdown
sms.markdown
smtp.markdown
smud.markdown
snapcast.markdown
snips.markdown
snmp.markdown
snooz.markdown
solaredge.markdown
solaredge_local.markdown
solarlog.markdown
solax.markdown
soma.markdown
somfy.markdown
somfy_mylink.markdown
sonarr.markdown
songpal.markdown
sonos.markdown
sony_projector.markdown
soundtouch.markdown
spaceapi.markdown
spc.markdown
speedtestdotnet.markdown
spider.markdown
splunk.markdown
spotify.markdown
sql.markdown
squeezebox.markdown
srp_energy.markdown
ssdp.markdown
starline.markdown
starlingbank.markdown
starlink.markdown
startca.markdown
statistics.markdown
statsd.markdown
steam_online.markdown
steamist.markdown
stiebel_eltron.markdown
stookalert.markdown
stookwijzer.markdown
stream.markdown
streamlabswater.markdown
stt.markdown
subaru.markdown
suez_water.markdown
sun.markdown
sunweg.markdown
supervisord.markdown
supla.markdown
surepetcare.markdown
swepco.markdown
swiss_hydrological_data.markdown
swiss_public_transport.markdown
swisscom.markdown
switch.markdown
switch.mqtt.markdown
switch.rest.markdown
switch.rflink.markdown
switch.template.markdown
switch.xiaomi_aqara.markdown
switch_as_x.markdown
switchbee.markdown
switchbot.markdown
switchbot_cloud.markdown
switcher_kis.markdown
switchmate.markdown
symfonisk.markdown
syncthing.markdown
syncthru.markdown
synology_chat.markdown
synology_dsm.markdown
synology_srm.markdown
syslog.markdown
system_bridge.markdown
system_health.markdown
system_log.markdown
systemmonitor.markdown
tado.markdown
tag.markdown
tag.mqtt.markdown
tailscale.markdown
tailwind.markdown
tami4.markdown
tank_utility.markdown
tankerkoenig.markdown
tapsaff.markdown
tasmota.markdown
tautulli.markdown
tcp.markdown
technove.markdown
ted5000.markdown
tedee.markdown
telegram.markdown
telegram_bot.markdown
telegram_broadcast.markdown
telegram_polling.markdown
telegram_webhooks.markdown
tellduslive.markdown
tellstick.markdown
telnet.markdown
temper.markdown
template.markdown
tensorflow.markdown
tesla_wall_connector.markdown
teslemetry.markdown
tessie.markdown
text.markdown
text.mqtt.markdown
tfiac.markdown
thermobeacon.markdown
thermoplus.markdown
thermopro.markdown
thermoworks_smoke.markdown
thethingsnetwork.markdown
thingspeak.markdown
thinkingcleaner.markdown
third_reality.markdown
thomson.markdown
thread.markdown
threshold.markdown
tibber.markdown
tikteck.markdown
tile.markdown
tilt_ble.markdown
time.markdown
time_date.markdown
timer.markdown
tmb.markdown
tod.markdown
todo.markdown
todoist.markdown
tolo.markdown
tomato.markdown
tomorrowio.markdown
toon.markdown
torque.markdown
totalconnect.markdown
touchline.markdown
tplink.markdown
tplink_lte.markdown
tplink_omada.markdown
tplink_tapo.markdown
traccar.markdown
traccar_server.markdown
tractive.markdown
tradfri.markdown
trafikverket_camera.markdown
trafikverket_ferry.markdown
trafikverket_train.markdown
trafikverket_weatherstation.markdown
transmission.markdown
transport_nsw.markdown
travisci.markdown
trend.markdown
tts.markdown
tuya.markdown
twentemilieu.markdown
twilio.markdown
twilio_call.markdown
twilio_sms.markdown
twinkly.markdown
twitch.markdown
twitter.markdown
ubiwizz.markdown
ubus.markdown
ue_smart_radio.markdown
uk_transport.markdown
ukraine_alarm.markdown
ultraloq.markdown
unifi.markdown
unifi_direct.markdown
unifiled.markdown
unifiprotect.markdown
universal.markdown
upb.markdown
upc_connect.markdown
upcloud.markdown
update.markdown
update.mqtt.markdown
upnp.markdown
uprise_smart_shades.markdown
uptime.markdown
uptimerobot.markdown
usb.markdown
usgs_earthquakes_feed.markdown
utility_meter.markdown
uvc.markdown
v2c.markdown
vacuum.markdown
vacuum.mqtt.markdown
vacuum.template.markdown
vallox.markdown
valve.markdown
valve.mqtt.markdown
vasttrafik.markdown
velbus.markdown
velux.markdown
venstar.markdown
vera.markdown
verisure.markdown
vermont_castings.markdown
versasense.markdown
version.markdown
vesync.markdown
viaggiatreno.markdown
vicare.markdown
vilfo.markdown
vivotek.markdown
vizio.markdown
vlc.markdown
vlc_telnet.markdown
vodafone_station.markdown
voice_assistant.markdown
voicerss.markdown
voip.markdown
volkszaehler.markdown
volumio.markdown
volvooncall.markdown
vulcan.markdown
vultr.markdown
w800rf32.markdown
wake_on_lan.markdown
wake_word.markdown
wallbox.markdown
waqi.markdown
water_heater.markdown
water_heater.mqtt.markdown
waterfurnace.markdown
watson_iot.markdown
watson_tts.markdown
watttime.markdown
waze_travel_time.markdown
weather.markdown
weather.template.markdown
weatherflow.markdown
weatherflow_cloud.markdown
weatherkit.markdown
webhook.markdown
webmin.markdown
webostv.markdown
websocket_api.markdown
wemo.markdown
whirlpool.markdown
whisper.markdown
whois.markdown
wiffi.markdown
wilight.markdown
wirelesstag.markdown
withings.markdown
wiz.markdown
wled.markdown
wolflink.markdown
workday.markdown
worldclock.markdown
worldtidesinfo.markdown
worxlandroid.markdown
ws66i.markdown
wsdot.markdown
wyoming.markdown
x10.markdown
xbox.markdown
xeoma.markdown
xiaomi.markdown
xiaomi_aqara.markdown
xiaomi_ble.markdown
xiaomi_miio.markdown
xiaomi_tv.markdown
xmpp.markdown
xs1.markdown
yale_home.markdown
yale_smart_alarm.markdown
yalexs_ble.markdown
yamaha.markdown
yamaha_musiccast.markdown
yandex_transport.markdown
yandextts.markdown
yardian.markdown
yeelight.markdown
yeelightsunflower.markdown
yi.markdown
yolink.markdown
youless.markdown
youtube.markdown
zabbix.markdown
zamg.markdown
zengge.markdown
zeroconf.markdown
zerproc.markdown
zestimate.markdown
zeversolar.markdown
zha.markdown
zhong_hong.markdown
ziggo_mediabox_xl.markdown
zodiac.markdown
zondergas.markdown
zone.markdown
zoneminder.markdown
zwave_js.markdown
zwave_me.markdown
_layouts
_posts
addons
android
assets
blog
blue
blueprints
changelogs
cloud
code_of_conduct
common-tasks
conference
dashboards
developers
docs
examples
faq
font
getting-started
green
help
home-energy-management
images
installation
integrations
ios
javascripts
more-info
privacy
security
skyconnect
state-of-the-open-home
static
stylesheets
tag
tos
voice_control
yellow
404.html
CNAME
_headers
_redirects
atom.xml
favicon.png
googlef4f3693c209fe788.html
index.html
integrations.json
robots.txt
service_worker.js
version.json
.editorconfig
.gitattributes
.gitignore
.markdownlint.json
.nvmrc
.powrc
.remarkignore
.remarkrc.js
.ruby-version
.textlintrc.json
CLA.md
CODEOWNERS
CODE_OF_CONDUCT.md
Gemfile
Gemfile.lock
LICENSE.md
README.md
Rakefile
_config.yml
config.rb
config.ru
package-lock.json
package.json
home-assistant.io/source/_integrations/modbus.markdown
Claudio Ruggeri - CR-Tech 50da23b28f Update doc for feature Swing Mode added to Modbus integration ()
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-04-22 09:18:08 +02:00

53 KiB

title, description, ha_category, ha_release, ha_iot_class, ha_codeowners, ha_domain, ha_platforms, ha_quality_scale, ha_integration_type
title description ha_category ha_release ha_iot_class ha_codeowners ha_domain ha_platforms ha_quality_scale ha_integration_type
Modbus Instructions on how to integrate modbus and platforms.
Hub
pre 0.7 Local Polling
@janiversen
modbus
binary_sensor
climate
cover
fan
light
sensor
switch
platinum integration

modbus is a communication protocol to control PLCs (Programmable Logic Controller) and RTUs (Remote Terminal Unit).

The integration adheres strictly to the protocol specification using pymodbus for the protocol implementation.

The modbus integration supports all devices adhering to the modbus standard. The communication to the device/devices can be serial (rs-485), TCP, or UDP connections. The modbus integration allows multiple communication channels e.g. a serial port connection combined with one or more TCP connections.

Configuring modbus communication

Configure the modbus communication with modbus devices. This is a general setup needed establish access to the device.

The modbus integration allows you to use multiple connections each with multiple sensors etc.

The modbus integration provides a number of parameters to help communicate with "difficult" devices, these parameters are independent of the type of communication.

{% configuration %} delay: description: "Time to delay sending messages in seconds after connecting. Some modbus devices need a delay of typically 1-2 seconds after connection is established to prepare the communication. If a device does not respond to messages after connecting, then try this parameter. Remark: solely affect the first message." required: false default: 0 type: integer message_wait_milliseconds: description: "Time to wait in milliseconds between requests." required: false default: 30 for serial connection, 0 for all other connections. type: integer name: description: "Name of this hub. Must be unique." required: true type: string timeout: description: "Timeout while waiting for a response in seconds." required: false default: 5 type: integer type: description: "Type of modbus." required: true type: list keys: tcp: description: "TCP/IP connection with socket framer, used with Ethernet enabled devices." udp: description: "UDP connection with socket framer, rarely used." rtuovertcp: description: "TCP/IP connection with rtu framer, used when connection to modbus forwarders." serial: description: "Serial connection with RTU framer, used with TTY port or USB rs485 converter."

{% endconfiguration %}

Configuring tcp connection

type: tcp is required. Used for devices providing a TCP/IP interface directly.

{% configuration %} host: description: "IP address or name of your modbus device, e.g., 192.168.1.1." required: true type: string port: description: "Network port for the communication." required: true type: integer

{% endconfiguration %}

Example: typical tcp configuration

# Example yaml: typical tcp connection
modbus:
  - name: modbus_hub
    type: tcp
    host: IP_ADDRESS
    port: 502

Example: full tcp configuration

# Example yaml: full tcp connection
modbus:
  - name: modbus_hub
    type: tcp
    host: IP_ADDRESS
    port: 502

    delay: 0
    message_wait_milliseconds: 30
    timeout: 5

Configuring a TCP-RTU connection

type: rtuovertcp is required. Used for devices providing a TCP/IP interface directly.

This is typically used, when communicating with a modbus-forwarder, a device that has a TCP/IP connection upwards, and one or more serial connections downwards. lets also write more here, to see if the error moves.

{% configuration %} host: description: "IP address or name of your modbus device, e.g., 192.168.1.1." required: true type: string port: description: "Network port for the communication." required: true type: integer

{% endconfiguration %}

Example: typical TCP-RTU configuration

# Example yaml: typical tcp-rtu connection
modbus:
  - name: modbus_hub
    type: rtuovertcp
    host: IP_ADDRESS
    port: 502

Example: full TCP-RTU configuration

# Example yaml: full tcp-rtu connection
modbus:
  - name: modbus_hub
    type: rtuovertcp
    host: IP_ADDRESS
    port: 502

    delay: 0
    message_wait_milliseconds: 30
    timeout: 5

Configuring a UDP connection

type: udp is required. This is rarely used, and only for very special configurations.

{% configuration %} host: description: "IP address or name of your modbus device, e.g., 192.168.1.1." required: true type: string port: description: "Network port for the communication." required: true type: integer

{% endconfiguration %}

Example: typical udp configuration

# Example yaml: typical udp connection
modbus:
  - name: modbus_hub
    type: udp
    host: IP_ADDRESS
    port: 502

Example: full UDP configuration

# Example yaml: full udp connection
modbus:
  - name: modbus_hub
    type: udp
    host: IP_ADDRESS
    port: 502

    delay: 0
    message_wait_milliseconds: 30
    timeout: 5

Configuring serial connection

type: serial is required. This is used for devices providing a serial rs485 interface.

The physical interface is typically a USB serial-rs485 converter or an rs232-rs485 connected to a serial port.

{% configuration %} baudrate: description: "Speed of the serial connection, higher speed gives better performance." required: true type: integer bytesize: description: "Data size in bits of each byte." required: true type: list keys: "5": description: "5 bit for data, rarely used." "6": description: "6 bit for data, rarely used." "7": description: "7 bit for data, used for very old devices." "8": description: "8 bit for data, standard." method: description: "Method of the connection to modbus." required: true type: list keys: rtu: description: "Binary data transmission preceded by slave id and followed by a crc, standard." ascii: description: "ASCII data transmission preceded by slave id and followed by a crc, used for few devices." parity: description: "Parity of the data bytes." required: true type: list keys: E: description: "Even parity bit." O: description: "Odd parity bit." N: description: "No parity bit, standard." port: description: "Serial port or USB device where your modbus device is connected to your Home Assistant host." required: true type: string stopbits: description: "Stopbits of the data bytes." required: true type: list keys: '1': description: "1 stop bit." '2': description: "2 stop bits, standard."

{% endconfiguration %}

Example: typical serial configuration

# Example yaml:  typical serial connection
modbus:
  - name: modbus_hub
    type: serial
    port: /dev/ttyUSB0
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: E
    stopbits: 1

Example: full serial configuration

# Example yaml: full udp connection
modbus:
  - name: modbus_hub
    type: serial
    port: /dev/ttyUSB0
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: E
    stopbits: 1

    delay: 0
    message_wait_milliseconds: 30
    timeout: 5

Configuring multiple connections

Multiple connections can freely mix different communications:

# Example yaml: multiple tcp connections
modbus:
  - name: modbus_hub
    type: tcp
    host: IP_ADDRESS_1
    port: 2020

  - name: modbus_hub2
    type: tcp
    host: IP_ADDRESS_2
    port: 502
# Example yaml: tcp connection and serial connection
modbus:
  - name: modbus_hub
    type: tcp
    host: IP_ADDRESS_1
    port: 2020

  - name: modbus_hub2
    type: serial
    port: /dev/ttyUSB0
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: E
    stopbits: 1

Configuring modbus entities

modbus entities are grouped below each modbus communication entry.

REMARK Each modbus device must have at least 1 entity defined, otherwise the integration will not be loaded.

Please refer to Parameter usage for conflicting parameters.

All modbus entities have the following parameters:

{% configuration %} address: description: "Address of coil/register." required: true type: integer name: description: "Name of the entity which must be unique within the entity type." required: true type: string scan_interval: description: "Update interval in seconds. scan_interval = 0 for no polling. Entities are read shortly after startup and then according to scan_interval. Remark, when restarting HA the last known value is restored." required: false type: integer default: 15 slave: description: "Identical to device_address" required: false type: integer default: 0 device_address: description: "Id of the device. Used to address multiple devices on a rs485 bus or devices connected to a modbus repeater." required: false type: integer default: 0 unique_id: description: "ID that uniquely identifies this entity. Slaves will be given a unique_id of <<unique_id>>_<<slave_index>>. If two enities have the same unique ID, Home Assistant will raise an exception." required: false type: string

{% endconfiguration %}

Example: entities grouping

# Example yaml: entities grouping
modbus:
  - type: tcp
    host: IP_ADDRESS_1
    port: 2020
    name: "modbus_hub"
    binary_sensors:
      - name: binary_sensor1
        address: 100
    climates:
      - name: "Watlow F4T"
        address: 200
    covers:
      - name: Door1
        address: 300
    fans:
      - name: Fan1
        address: 400
    lights:
      - name: light1
        address: 500
    sensors:
      - name: sensor1
        address: 600
    switches:
      - name: Switch1
        address: 700

The different types of entities are detailed in the following.

Configuring binary sensor entities

The Modbus binary sensor allows you to gather data from coils which as per standard have state ON/OFF.

Normally, a register contains 16 coils, giving different addresses depending on the request used.

Register 512: Coil 1 - 16
Register 513: Coil 17 - 32

input_type: coils would use addresses from 1 through 32, while input_type: input would use addresses 512 and 513. For that reason, many devices (especially older ones) do not share the coil address space with the register address space, and this input would read from a different address space than coil. The problem is present in devices with shared address space and are a frequent cause of problems when configuring entities.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} binary_sensors: description: "A list of all binary sensors configured for this connection." required: false type: map keys: device_class: description: "The type/class to be used for the UI." required: false type: string input_type: description: "Type of request discrete_input, coil, holding or input" required: false default: coil type: string slave_count: description: "Identical to virtual_count." required: false type: integer virtual_count: description: "Generate count+1 binary sensors (master + slaves). Addresses are automatically incremented. The parameter simplifies configuration and provides a much better performance by not using count+1 requests but a single request." required: false type: integer unique_id: description: "ID that uniquely identifies the entity. Slaves will automatically be given a unique_id of <<unique_id>>_<<slave_index>>. If two sensors have the same unique ID, Home Assistant will raise an exception." required: false type: string

{% endconfiguration %}

Example: typical binary sensor configuration

# Example yaml: typical binary_sensor
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    binary_sensors:
      - name: my_relay
        address: 100
        slave: 1

Example: full binary sensor configuration

# Example yaml: binary_sensor with all options
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    binary_sensors:
      - name: my_relay
        address: 100
        device_class: door
        input_type: coil
        scan_interval: 15
        slave: 1
        slave_count: 0
        unique_id: my_relay

Example: multiple identical binary sensor configuration

# Example of 10 identical binary_sensor
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    binary_sensors:
      - name: my_relay
        address: 100
        slave: 1
        slave_count: 10
        unique_id: my_relay

This configuration will poll coil addresses 100 to 110 every 15 seconds and update the binary_sensors: my_relay and my_relay_1 to my_relay_10.

The master configuration like device_class are automatically copied to the slaves.

Configuring climate entities

The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC mode and fan state.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} climates: description: "A list of all climate entities in this modbus instance." required: false type: map keys: count: description: "Number of registers to read. only valid for data_type: custom and data_type: string, for other data types count is automatically calculated." required: false type: integer data_type: description: "Response representation." required: false default: int16 type: list keys: custom: description: "user defined format, structure: and count: must be configured." float16: description: "16 bit signed float (1 register holds 1 value)." float32: description: "32 bit signed float (2 registers holds 1 value)." float64: description: "64 bit signed float (4 register holds 1 value)." int: description: "DEPRECATED is silently converted to int16" int16: description: "16 bit signed integer (1 register holds 1 value)." int32: description: "32 bit signed integer (2 registers holds 1 value)." int64: description: "64 bit signed integer (4 registers holds 1 value)." string: description: "set of 8 bit characters, count: must be configured." uint: description: "DEPRECATED is silently converted to uint16" uint16: description: "16 bit unsigned integer (1 register holds 1 value)." uint32: description: "32 bit unsigned integer (2 registers holds 1 value)." uint64: description: "64 bit unsigned integer (4 registers holds 1 value)." hvac_mode_register: description: "Configuration of register for HVAC mode" required: false type: map keys: address: description: "Address of HVAC mode register." required: true type: integer write_registers: description: "Request type, use write_registers if true else write_register. If more than one value is specified for a specific mode, only the first one is used for writing to the register." required: false type: boolean default: false values: description: "Mapping between the register values and HVAC modes" required: true type: map keys: state_off: description: "Value corresponding to HVAC Off mode." required: false type: [integer, list] state_heat: description: "Value corresponding to HVAC Heat mode." required: false type: [integer, list] state_cool: description: "Value corresponding to HVAC Cool mode." required: false type: [integer, list] state_auto: description: "Value corresponding to HVAC Auto mode." required: false type: [integer, list] state_dry: description: "Value corresponding to HVAC Dry mode." required: false type: [integer, list] state_fan_only: description: "Value corresponding to HVAC Fan only mode." required: false type: [integer, list] state_heat_cool: description: "Value corresponding to HVAC Heat/Cool mode." required: false type: [integer, list] fan_mode_register: description: "Configuration of register for Fan mode" required: false type: map keys: address: description: "Address of Fan mode register. (int to call write_register, list of 1 int to call write_registers)" required: true type: [integer, list] values: description: "Mapping between the register values and Fan modes This is typically used to control one of: Speed, Direction or On/Off state." required: true type: map keys: state_fan_on: description: "Value corresponding to Fan On mode." required: false type: integer state_fan_off: description: "Value corresponding to Fan Off mode." required: false type: integer state_fan_low: description: "Value corresponding to Fan Low mode." required: false type: integer state_fan_medium: description: "Value corresponding to Fan Medium mode." required: false type: integer state_fan_high: description: "Value corresponding to Fan High mode." required: false type: integer state_fan_auto: description: "Value corresponding to Fan Auto mode." required: false type: integer state_fan_top: description: "Value corresponding to Fan Top mode." required: false type: integer state_fan_middle: description: "Value corresponding to Fan Middle mode." required: false type: integer state_fan_focus: description: "Value corresponding to Fan Focus mode." required: false type: integer state_fan_diffuse: description: "Value corresponding to Fan Diffuse mode." required: false type: integer hvac_onoff_register: description: "Address of On/Off state. When zero is read from this register, the HVAC state is set to Off, otherwise the hvac_mode_register dictates the state of the HVAC. If no such register is defined, it defaults to Auto. When the HVAC mode is set to Off, the value 0 is written to the register, otherwise the value 1 is written." required: false type: integer swing_mode_register: description: "Configuration of the register for swing mode" required: false type: map keys: address: description: "Address of swing mode register. (int to call write_register, list of 1 int to call write_registers). - Reading done through holding register" required: true type: [integer, list] values: description: "Mapping between the register values and swing modes" required: true type: map keys: swing_mode_state_on: description: "Value corresponding to swing mode on." required: false type: integer swing_mode_state_off: description: "Value corresponding to swing mode off." required: false type: integer swing_mode_state_horizontal: description: "Value corresponding to swing mode horizontal." required: false type: integer swing_mode_state_vertical: description: "Value corresponding to swing mode vertical." required: false type: integer swing_mode_state_both: description: "Value corresponding to Swing mode both." required: false type: integer input_type: description: Modbus register type for current temperature. required: false default: holding type: list keys: holding: description: "Holding register." input: description: "Input register." max_temp: description: "Maximum setpoint temperature." required: false type: integer default: 35 min_temp: description: "Minimum setpoint temperature." required: false type: integer default: 5 offset: description: "Final offset (output = scale * value + offset)." required: false type: float default: 0 precision: description: "Number of valid decimals." required: false type: integer default: 0 scale: description: "Scale factor (output = scale * value + offset)." required: false type: float default: 1 structure: description: "If data_type: custom is specified a double-quoted Python struct is expected, to format the string to unpack the value. See Python documentation for details. Example: >i." required: false type: string default: ">f" swap: description: "Swap the order of bytes/words, not valid with custom and datatype: string" required: false default: none type: list keys: byte: description: "Swap bytes AB -> BA." word: description: "Swap word ABCD -> CDAB, not valid with data types: int16, uint16" word_byte: description: "Swap word ABCD -> DCBA, not valid with data types: int16, uint16" target_temp_register: description: "Register address for target temperature (Setpoint). Using a list, it is possible to define one register for each of the available HVAC Modes. The list has to have a fixed size of 7 registers corresponding to the 7 available HVAC Modes, as follows: Register 1: HVAC AUTO mode; Register 2: HVAC Cool mode; Register 3: HVAC Dry mode; Register 4: HVAC Fan only mode; Register 5: HVAC Heat mode; Register 6: HVAC Heat Cool mode; Register 7: HVAC OFF mode. It is possible to set duplicated values for the modes where the devices has not a related register." required: true type: [integer, list] target_temp_write_registers: description: "If true use write_registers for target temperature." required: false type: boolean default: false temp_step: description: "Step size target temperature." required: false type: float default: 0.5 temperature_unit: description: "Temperature unit reported by current_temp_register. C or F." required: false default: C type: list keys: C: description: "Celsius" F: description: "Fahrenheit" write_registers: description: "Request type, use write_registers if true else write_register." required: false type: boolean default: false

{% endconfiguration %}

Example: climate configuration

# Example configuration.yaml entry
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    climates:
      - name: "Watlow F4T"
        address: 27586
        input_type: holding
        count: 1
        data_type: custom
        max_temp: 35
        min_temp: 15
        offset: 0
        precision: 1
        scale: 0.1
        max_temp: 30
        structure: ">f"
        target_temp_register: 2782
        target_temp_write_registers: true
        temp_step: 1
        temperature_unit: C

Configuring cover entities

The modbus cover platform allows you to control covers (such as blinds, a roller shutter, or a garage door).

At the moment, platform cover support the opening and closing of a cover. You can control your covers either using coils or holding registers.

Cover that uses input_type: coil is not able to determine intermediary states such as opening and closing. Coil stores only two states — "0" means cover closed, and "1" implies cover open. To allow detecting intermediary states, there is an optional status_register attribute. It will enable you to write your command (e.g., to open a cover) into a coil, and read current cover status back through the register. Additionally, you can specify values for state_open, state_opening, state_closed, and state_closing attributes. These will be matched with the value read from the status_register.

If your cover uses input_type: holding (default) to send commands, it can also read the intermediary states. To adjust which value represents what state, you can fine-tune the optional state attributes, like state_open. These optional state values are also used for specifying values written into the register. If you specify an optional status_register attribute, cover states will be read from status_register instead of the register used for sending commands.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} covers: description: "A list of all cover entities configured for this connection." required: true type: map keys: device_class: description: "The type/class of the cover to set the icon in the frontend." required: false type: device_class default: None input_type: description: "Cover register type." default: holding required: false type: list keys: holding: description: "Holding register." input: description: "Input register." state_open: description: "A value in status_register or register representing an open cover. If your configuration uses the register attribute, this value will be written into the holding register to open the cover." required: false default: 1 type: integer state_closed: description: "A value in status_register or register representing a closed cover. If your configuration uses the register attribute, this value will be written into the holding register to close the cover." required: false default: 0 type: integer state_opening: description: "A value in status_register or register representing an opening cover. Note that this state should be also supported on your connected Modbus cover. If it won't report the state, this state won't be detected." required: false default: 2 type: integer state_closing: description: "A value in status_register or register representing a closing cover. Note that this state should be also supported on your connected Modbus cover. If it will not report the state, this state won't be detected." required: false default: 3 type: integer status_register: description: "Address of register, from which all the cover states will be read. If you specified register attribute, and not status_register attribute, your main register will also be used as a status register." required: false type: integer status_register_type: description: Cover status register type (holding, input), default holding. required: false type: list keys: holding: description: "Holding register." input: description: "Input register." {% endconfiguration %}

Example: Modbus cover

# Example configuration.yaml entry
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    covers:
      - name: Door1
        device_class: door
        input_type: coil
        address: 117
        state_open: 1
        state_opening: 2
        state_closed: 0
        state_closing: 3
        status_register: 119
        status_register_type: holding
      - name: "Door2"
        address: 118

Example: Modbus cover controlled by a coil

This example shows a configuration for a Modbus cover controlled using a coil. Intermediary states like opening/closing are not supported. The cover state is polled from Modbus every 10 seconds.

modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    covers:
      - name: Door1
        slave: 1
        coil: 1
        device_class: door
        scan_interval: 10
      - name: Door2
        slave: 2
        coil: 2
        device_class: door
        scan_interval: 10

Example: Modbus cover controlled by a coil, its state is read from the register

This example shows a configuration for a Modbus cover controlled using a coil. Actual cover state is read from the status_register. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds.

modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    covers:
      - name: Door1
        slave: 1
        device_class: door
        scan_interval: 10
        coil: 1
        status_register: 1
        status_register_type: input
        state_opening: 1
        state_open: 2
        state_closing: 3
        state_closed: 4

Example: Modbus cover controlled by a holding register

This example shows a configuration for a Modbus cover controlled using a holding register, from which we also read current cover state. We've also specified register values to match with the states open/opening/closed/closing. The cover state is polled from Modbus every 10 seconds.

modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    covers:
      - name: Door1
        slave: 1
        device_class: door
        scan_interval: 10
        register: 1
        state_opening: 1
        state_open: 2
        state_closing: 3
        state_closed: 4

Example: Modbus cover controlled by a holding register, its state is read from the status register

This example shows a configuration for a Modbus cover controlled using a holding register. However, cover state is read from a status_register. In this case, we've specified only values for state_open and state_closed, for the rest, default values are used. The cover state is polled from Modbus every 10 seconds.

modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502

    covers:
      - name: Door1
        slave: 1
        device_class: door
        scan_interval: 10
        register: 1
        status_register: 2
        register_type: holding
        state_open: 1
        state_closed: 0

Configuring fan entities

The modbus fan platform allows you to control Modbus coils or registers.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} fans: description: "A list of all fan entities in this modbus instance." required: true type: map keys: command_on: description: "Value to write to turn on the fan." required: false default: 0x01 type: integer command_off: description: "Value to write to turn off the fan." required: false default: 0x00 type: integer write_type: description: Type of write request. required: false default: holding type: list keys: holding: description: "write_register is called." holdings: description: "write_registers is called." coil: description: "write_coil is called." coils: description: "write_coils is called." verify: description: "Read from Modbus device to verify fan. If used without attributes, it uses the toggle register configuration. If omitted, no verification is done, but the state of the fan is set with each toggle." required: false type: map keys: address: description: "Address to read from." required: false default: write address type: integer delay: description: "Delay between write and verify." required: false default: 0 type: integer input_type: description: Type of address. required: false default: same as write_type type: list keys: coil: description: "Coil (1bit relay)." discrete: description: "Discret input (1bit relay)." holding: description: "Holding register." input: description: "Input register." state_on: description: "Value when the fan is on." required: false default: same as command_on type: integer state_off: description: "Value when the fan is off." required: false default: same as command_off type: integer {% endconfiguration %}

Example: fan configuration

# Example configuration.yaml entry
modbus:
  - type: tcp
    host: IP_ADDRESS
    port: 502
    fans:
      - name: "Fan1"
        address: 13
        write_type: coil
      - name: "Fan2"
        slave: 2
        address: 14
        write_type: coil
        verify:
      - name: "Register1"
        address: 11
        command_on: 1
        command_off: 0
        verify:
            input_type: holding
            address: 127
            state_on: 25
            state_off: 1

Configuring light entities

The modbus light platform allows you to control Modbus coils or registers.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} lights: description: "A list of all light entities in this modbus instance." required: true type: map keys: command_on: description: "Value to write to turn on the light." required: false default: 0x01 type: integer command_off: description: "Value to write to turn off the light." required: false default: 0x00 type: integer write_type: description: "Type of write request." required: false default: holding type: list keys: holding: description: "write_register is called." holdings: description: "write_registers is called." coil: description: "write_coil is called." coils: description: "write_coils is called." verify: description: "Read from Modbus device to verify the light. If used without attributes, it uses the toggle register configuration. If omitted no verification, is done, but the state of the light is set with each toggle." required: false type: map keys: address: description: "Address to read from." required: false default: "Same as address" type: integer delay: description: delay between write and verify. required: false default: 0 type: integer input_type: description: Type of address (holding/coil/discrete/input). required: false default: "Same as write_type" type: list keys: coil: description: "Coil (1bit relay)." discrete: description: "Discrete inout (1bit relay)." holding: description: "Holding register." input: description: "Input register." state_on: description: "Value when the light is on." required: false default: "Same as command_on" type: integer state_off: description: "Value when the light is off." required: false default: "Same as command_off" type: integer

{% endconfiguration %}

Example: light configuration

# Example configuration.yaml entry
modbus:
  - type: tcp
    host: IP_ADDRESS
    port: 502
    lights:
      - name: "light1"
        address: 13
        write_type: coil
      - name: "light2"
        slave: 2
        address: 14
        write_type: coil
        verify:
      - name: "Register1"
        address: 11
        command_on: 1
        command_off: 0
        verify:
            input_type: holding
            address: 127
            state_on: 25
            state_off: 1

Configuring sensor entities

The modbus sensor allows you to gather data from Modbus registers.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} sensors: description: "A list of all sensors in this modbus instance." required: true type: map keys: count: description: "Number of registers to read. only valid for data_type: custom and data_type: string, for other data types count is automatically calculated." required: false type: integer data_type: description: "Response representation." required: false default: int16 type: list keys: custom: description: "user defined format, structure: and count: must be configured." float16: description: "16 bit signed float (1 register holds 1 value)." float32: description: "32 bit signed float (2 registers holds 1 value)." float64: description: "64 bit signed float (4 register holds 1 value)." int: description: "DEPRECATED is silently converted to int16" int16: description: "16 bit signed integer (1 register holds 1 value)." int32: description: "32 bit signed integer (2 registers holds 1 value)." int64: description: "64 bit signed integer (4 registers holds 1 value)." string: description: "set of 8 bit characters, count: must be configured." uint: description: "DEPRECATED is silently converted to uint16" uint16: description: "16 bit unsigned integer (1 register holds 1 value)." uint32: description: "32 bit unsigned integer (2 registers holds 1 value)." uint64: description: "64 bit unsigned integer (4 registers holds 1 value)." device_class: description: "The type/class of the sensor to set the icon in the frontend." required: false type: device_class default: None input_type: description: "Modbus register type for sensor." required: false default: holding type: list keys: holding: description: "Holding register." input: description: "Input register." min_value: description: "The minimum allowed value of a sensor. If value < min_value --> min_value. Can be float or integer" required: false type: float max_value: description: "The maximum allowed value of a sensor. If value > max_value --> max_value. Can be float or integer" required: false type: float nan_value: description: If a Modbus sensor has a defined NaN value, this value can be set as a hex string starting with 0x containing one or more bytes (for example, 0xFFFF or 0x80000000) or provided as an integer directly. If triggered, the sensor becomes unavailable. Please note that the hex to int conversion for nan_value does currently not obey home-assistants Modbus encoding using the data_type, structure, or swap arguments. required: false type: string zero_suppress: description: Suppress values close to zero. If -zero_suppress <= value <= +zero_suppress --> 0. Can be float or integer required: false type: float offset: description: "Final offset (output = scale * value + offset)." required: false type: float default: 0 precision: description: "Number of valid decimals." required: false type: integer default: 0 scale: description: "Scale factor (output = scale * value + offset)." required: false type: float default: 1 slave_count: description: "Identical to virtual_count." required: false type: integer virtual_count: description: "Generates x+1 sensors (master + slaves), allowing read of multiple registers with a single read messsage." required: false type: integer state_class: description: "The state_class of the sensor." required: false type: string structure: description: "If data_type: custom is specified a double-quoted Python struct is expected, to format the string to unpack the value. See Python documentation for details. Example: >i." required: false type: string default: ">f" slave_count: description: "Identical to virtual_count." required: false type: integer virtual_count: description: Generates x-1 slave sensors, allowing read of multiple registers with a single read message. required: false type: integer swap: description: "Swap the order of bytes/words, not valid with custom and datatype: string" required: false default: none type: list keys: byte: description: "Swap bytes AB -> BA." word: description: "Swap word ABCD -> CDAB, not valid with data types: int16, uint16" word_byte: description: "Swap word ABCD -> DCBA, not valid with data types: int16, uint16" unit_of_measurement: description: "Unit to attach to value." required: false type: string zero_suppress: description: "Suppress values close to zero. If -zero_suppress <= value <= +zero_suppress --> 0. Can be float or integer" required: false type: float {% endconfiguration %}

If you specify scale or offset as floating point values, double precision floating point arithmetic will be used to calculate final value. This can cause loss of precision for values that are larger than 2^53.

Example: sensor configuration

# Example configuration.yaml entry
modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    sensors:
      - name: Sensor1
        unit_of_measurement: °C
        slave: 1
        address: 100
      - name: Sensor2
        unit_of_measurement: mg
        address: 110
        count: 2
      - name: Sensor3
        unit_of_measurement: °C
        slave: 1
        address: 120
        input_type: input
        data_type: float
        scale: 0.01
        offset: -273.16
        precision: 2

Example: sensor full configuration

Example temperature sensor with a default scan interval:

modbus:
  - name: hub1
    type: tcp
    host: IP_ADDRESS
    port: 502
    sensors:
      - name: Room_1
        slave: 10
        address: 0
        input_type: holding
        unit_of_measurement: °C
        state_class: measurement
        count: 1
        scale: 0.1
        offset: 0
        precision: 1
        data_type: integer

Configuring switch entities

The modbus switch platform allows you to control Modbus coils or registers.

Please refer to Parameter usage for conflicting parameters.

{% configuration %} switches: description: "A list of all switches in this modbus instance." required: true type: map keys: command_on: description: "Value to write to turn on the switch." required: false default: 0x01 type: integer command_off: description: "Value to write to turn off the switch." required: false default: 0x00 type: integer write_type: description: Type of write request. required: false default: holding type: list keys: holding: description: "write_register is called." holdings: description: "write_registers is called." coil: description: "write_coil is called." coils: description: "write_coils is called." verify: description: "Read from Modbus device to verify fan. If used without attributes, it uses the toggle register configuration. If omitted, no verification is done, but the state of the fan is set with each toggle." required: false type: map keys: address: description: "Address to read from." required: false default: "Same as write address" type: integer delay: description: "Delay between write and verify." required: false default: 0 type: integer input_type: description: Type of address. required: false default: same as write_type type: list keys: coil: description: "Coil (1bit relay)." discrete: description: "Discret input (1bit relay)." holding: description: "Holding register." input: description: "Input register." state_on: description: "Value when switch is on." required: false default: "Same as command_on" type: integer state_off: description: "Value when switch is off." required: false default: "Same as command_off" type: integer

{% endconfiguration %}

### Example: switch configuration

# Example configuration.yaml entry
modbus:
  - type: tcp
    host: IP_ADDRESS
    port: 502
    switches:
      - name: Switch1
        address: 13
        write_type: coil
      - name: Switch2
        slave: 2
        address: 14
        write_type: coil
        verify:
      - name: Register1
        address: 11
        command_on: 1
        command_off: 0
        verify:
            input_type: holding
            address: 127
            state_on: 25
            state_off: 1

### Example: switch full configuration

# Example configuration.yaml entry
modbus:
  - type: tcp
    host: IP_ADDRESS
    port: 502
    switches:
      - name: Switch1
        address: 13
        write_type: coil
      - name: Switch2
        slave: 2
        address: 14
        write_type: coil
        verify:
      - name: Register1
        address: 11
        command_on: 1
        command_off: 0
        verify:
            input_type: holding
            address: 127
            state_on: 25
            state_off: 1

Parameters usage matrix

Some parameters exclude other parameters, the following tables show what can be combined:

Datatype: custom string *16 *32 *64
count Yes Yes No No No
structure Yes No No No No
slave_count No No Yes Yes Yes
virtual_count No No Yes Yes Yes
swap: byte No No Yes Yes Yes
swap: word No No No Yes Yes
swap: word_byte No No No Yes Yes

modbus services

The modbus integration provides two generic write services in addition to the platform-specific services.

Service Description
modbus.write_register Write register or registers
modbus.write_coil Write coil or coils

Description:

Attribute Description
hub Hub name (defaults to 'modbus_hub' when omitted)
slave Slave address (0-255)
address Address of the Register (e.g. 138)
value (write_register) A single value or an array of 16-bit values. Single value will call modbus function code 0x06. Array will call modbus function code 0x10. Values might need reverse ordering. E.g., to set 0x0004 you might need to set [4,0], this depend on the byte order of your CPU
state (write_coil) A single boolean or an array of booleans. Single boolean will call modbus function code 0x05. Array will call modbus function code 0x0F

The modbus integration also provides communication stop/restart services. These services will not do any reconfiguring, but simply stop/start the modbus communication layer.

Service Description
modbus.stop Stop communication
modbus.restart Restart communication (Stop first if running)

Description:

Attribute Description
hub Hub name (defaults to 'modbus_hub' when omitted)

Example: writing a float32 type register

To write a float32 datatype register use network format like 10.0 == 0x41200000 (network order float hexadecimal).

service: modbus.write_register
data:
  address: <target register address>
  slave: <target slave address>
  hub: <hub name>
  value: [0x4120, 0x0000]

Service modbus.set-temperature

Service Description
set_temperature Set temperature. Requires value to be passed in, which is the desired target temperature. value should be in the same type as data_type

Service modbus.set_hvac_mode

Service Description
set_hvac_mode Set HVAC mode. Requires value to be passed in, which is the desired mode. value should be a valid HVAC mode. A mapping between the desired state and the value to be written to the HVAC mode register must exist. Calling this service will also set the On/Off register to an appropriate value, if such a register is defined.

Opening an issue

When opening an issue, please add your current configuration (or a scaled down version), with at least:

  • the modbus configuration lines
  • the entity (sensor, etc.) lines

In order for the developers better to identify the problem, please add the following lines to configuration.yaml:

logger:
  default: warning
  logs:
    homeassistant.components.modbus: debug
    pymodbus: debug

and restart Home Assistant, reproduce the problem, and include the log in the issue.

Building on top of modbus

The only recommended way is to inherit the entities needed.