homebridge-hunter-hydrawise
Version:
HomeKit integration for Hunter Hydrawise Irrigation Controllers.
176 lines (158 loc) • 8.5 kB
HTML
<style>
.hbhh-blockquote {
background-color: rgb(201, 218, 224);
border-left: 5px solid rgb(10, 110, 147);
font-size: 0.9rem;
font-weight: 550;
}
</style>
<p class="text-center">
<img src="https://raw.githubusercontent.com/hjdhjd/homebridge-hunter-hydrawise/main/images/homebridge-hunter-hydrawise.svg" alt="homebridge-hunter-hydrawise logo" class="w-50" />
</p>
<div id="pageFirstRun" style="display: none;">
<div class="mx-auto text-left" style="width: 90%;">
<p>Welcome to <strong>homebridge-hunter-hydrawise</strong>. To get started:
<ol>
<li>Ensure you have a <a href="https://app.hydrawise.com">Hydrawise account</a>.</li>
<li><a hred="https://app.hydrawise.com/config/account-details">Generate a Hydrawise API key</a>, should you need one, from the account details section of the Hydrawise site and enter it below.</li>
</ol>
</p>
<table class="table table-sm table-borderless">
<tr>
<td class="text-center">
<input type="text" maxLength="19" minLength="19" placeholder="Hydrawise API Key" size="30" id="apiKey"></input>
</td>
</tr>
<tr>
<td class="m-0 p-2 text-center font-weight-bold text-danger" id="loginError">
</td>
</tr>
</table>
<blockquote class="blockquote hbhh-blockquote mb-0 mt-0 pb-0 pt-0">
Things to keep in mind regarding the Hydrawise API:
<ul dir="auto">
<li>The Hydrawise API is rate-limited with the following constraints:</li>
<ul dir="auto">
<li>A limit of 3 API calls to start, stop, or suspend any zone within a 30 second interval.</li>
<li>An additional limit across the entire API of no more than 30 calls in any 5 minute period.</li>
</ul>
<li>While the API provides the ability to suspend a zone, it does not provide the ability to resume a schedule.</li>
</ul>
</blockquote>
</div>
<div class="text-center">
<br>
<button type="button" class="btn btn-primary" id="firstRun">Configure Plugin →</button>
<br>
To optimize performance and responsiveness, make this plugin a <a target="_blank" href="https://github.com/homebridge/homebridge/wiki/Child-Bridges">child bridge</a> once you've completed configuration.
</div>
</div>
<div id="menuWrapper" class="btn-group w-100 mb-0" role="group" aria-label="UI Menu" style="display: none;">
<button type="button" class="btn btn-primary" id="menuSettings">Settings</button>
<button type="button" class="btn btn-primary" id="menuFeatureOptions">Feature Options</button>
<button type="button" class="btn btn-primary mr-0" id="menuHome">Support</button>
</div>
<div id="pageFeatureOptions" class="mt-2" style="display: none;" tabindex="0">
<!-- Header information bar -->
<div id="headerInfo" class="alert alert-info bg-transparent py-2 px-3 mb-2"></div>
<!-- Main content area -->
<div class="feature-main-content">
<!-- Sidebar -->
<aside id="sidebar" class="me-3">
<div class="sidebar-content">
<nav id="controllersContainer" class="p-2"></nav>
<nav id="devicesContainer" class="p-2"></nav>
</div>
</aside>
<!-- Main content -->
<main class="feature-content">
<!-- Device stats using CSS Grid -->
<div id="deviceStatsContainer"></div>
<!-- Search panel -->
<div id="search" class="mb-3"></div>
<!-- Options content area -->
<div id="optionsContainer" class="options-content alert-info rounded p-3">
<div id="configTable"></div>
</div>
</main>
</div>
</div>
<div id="pageSupport" class="mt-4" style="display: none;">
<h5>Introduction</h5>
<p class="px-4">I hope you enjoy this plugin as much as I enjoy developing it. All my projects are labors of love. If you'd like to show your appreciation - <a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise">star this project on GitHub</A> and do some good in your community, either financially or with your time: a food bank, an animal shelter (two of my passions), or whatever resonates with you that can give something back to the world around you. If you're looking for a couple of my faves: <a target="_blank" href="https://wck.org/donate">World Central Kitchen</a> and <a target="_blank" href="https://bestfriends.org/donate">Best Friends</a>.</p>
<div class="px-4">
Plugins by <a target="_blank" href="https://github.com/hjdhjd">HJD</a>:
<ul dir="auto">
<li><a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise">homebridge-hunter-hydrawise: Hunter Hydrawise integration for HomeKit.</a></li>
<li><a target="_blank" href="https://github.com/hjdhjd/homebridge-ratgdo">homebridge-ratgdo: Ratgdo (non-myQ Liftmaster and Chamberlain) garage door and gate opener support for HomeKit</a></li>
<li><a target="_blank" href="https://github.com/hjdhjd/homebridge-unifi-access">homebridge-unifi-access: HomeKit integration for the UniFi Access ecosystem</a></li>
<li><a target="_blank" href="https://github.com/hjdhjd/homebridge-unifi-protect">homebridge-unifi-protect: Complete HomeKit integration for the entire UniFi Protect ecosystem</a></li>
</ul>
</div>
<h5>Getting Started</h5>
<ul dir="auto">
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise#installation">Installation</a>: installing this plugin, including system requirements.
</li>
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise#notes">Additional Notes</a>: some things you should be aware of, including Hydrawise-specific quirks.
</li>
</ul>
<h5>Advanced Topics</h5>
<ul dir="auto">
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise/blob/main/docs/FeatureOptions.md">Feature Options</a>: granular options to allow you to show or hide specific irrigation controllers, and more.
</li>
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise/blob/main/docs/MQTT.md">MQTT</a>: how to configure MQTT support.
</li>
</ul>
<h5>Notes</h5>
Things to keep in mind regarding the Hydrawise API:
<ul dir="auto">
<li>The Hydrawise API is rate-limited with the following constraints:</li>
<ul dir="auto">
<li>A limit of 3 API calls to start, stop, or suspend any zone within a 30 second interval.</li>
<li>An additional limit across the entire API of no more than 30 calls in any 5 minute period.</li>
</ul>
<li>While the API provides the ability to suspend a zone, it does not provide the ability to resume a schedule.</li>
</ul>
<h5>Support</h5>
<ul>
<li>
<a target="_blank" href="https://discord.gg/QXqfHEW">Discord Support Channel</a>
</li>
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise/issues/new/choose">Create a Developer Support Request</a>
</li>
<li>
<a target="_blank" href="https://github.com/hjdhjd/homebridge-hunter-hydrawise/blob/main/docs/Changelog.md">Changelog and Release Notes</a>
</li>
</ul>
</div>
<script type="module">
/* Copyright(C) 2017-2025, HJD (https://github.com/hjdhjd). All rights reserved.
*
* Plugin webUI script loader.
*/
;
// Compute a timestamp for cache-busting so each URL appears unique.
const timestamp = Date.now();
// Next, set up an import map that will append a cache-busting query string to our modules.
const importMap = {
imports: {
"./ui.mjs": new URL("./ui.mjs", import.meta.url).href + "?cb=" + timestamp,
"./lib/featureOptions.js": new URL("./lib/featureOptions.js", import.meta.url).href + "?cb=" + timestamp,
"./lib/webUi.mjs": new URL("./lib/webUi.mjs", import.meta.url).href + "?cb=" + timestamp,
"./lib/webUi-featureOptions.mjs": new URL("./lib/webUi-featureOptions.mjs", import.meta.url).href + "?cb=" + timestamp
}
};
// Append the import map script to the document head so the browser applies it.
const mapScript = document.createElement("script");
mapScript.type = "importmap";
mapScript.textContent = JSON.stringify(importMap);
document.head.appendChild(mapScript);
// Finally, import the UI entry point so we always load a fresh copy.
await import("./ui.mjs");
</script>