mirror of
https://github.com/jomjol/AI-on-the-edge-device-docs.git
synced 2025-12-07 12:07:01 +03:00
894 lines
32 KiB
HTML
894 lines
32 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html class="no-js" lang="en">
|
|
<head>
|
|
<meta charset="utf-8"/>
|
|
<meta content="width=device-width,initial-scale=1" name="viewport"/>
|
|
<link href="https://jomjol.github.io/AI-on-the-edge-device-docs/Integration-Home-Assistant/" rel="canonical"/>
|
|
<link href="../Parameters/" rel="prev"/>
|
|
<link href="../External-LED/" rel="next"/>
|
|
<link href="../img/favicon.ico" rel="icon"/>
|
|
<meta content="mkdocs-1.5.3, mkdocs-material-9.4.6" name="generator"/>
|
|
<title>Integration into Home Assistant - AI on the Edge Device</title>
|
|
<link href="../assets/stylesheets/main.35e1ed30.min.css" rel="stylesheet"/>
|
|
<link href="../assets/stylesheets/palette.356b1318.min.css" rel="stylesheet"/>
|
|
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" rel="stylesheet"/>
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
</head>
|
|
<body data-md-color-accent="indigo" data-md-color-primary="blue" data-md-color-scheme="default" dir="ltr">
|
|
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
|
|
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
<a class="md-skip" href="#integration-into-home-assistant">1.
|
|
Skip to content
|
|
</a>
|
|
</div>
|
|
<div data-md-component="announce">
|
|
</div>
|
|
<header class="md-header md-header--shadow" data-md-component="header">
|
|
<nav aria-label="Header" class="md-header__inner md-grid">
|
|
<a aria-label="AI on the Edge Device" class="md-header__button md-logo" data-md-component="logo" href=".." title="AI on the Edge Device">
|
|
<img alt="logo" src="../img/logo.svg"/>
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
AI on the Edge Device
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Integration into Home Assistant
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<label class="md-header__button md-icon" for="__search">
|
|
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
|
|
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
|
|
</label>
|
|
<nav aria-label="Search" class="md-search__options">
|
|
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
|
|
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"></path></svg>
|
|
</button>
|
|
</nav>
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" data-md-scrollfix="">
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="md-header__source">
|
|
<a class="md-source" data-md-component="source" href="https://github.com/jomjol/AI-on-the-edge-device-docs" title="Go to repository">
|
|
<div class="md-source__icon md-icon">
|
|
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
<div class="md-container" data-md-component="container">
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
<nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a aria-label="AI on the Edge Device" class="md-nav__button md-logo" data-md-component="logo" href=".." title="AI on the Edge Device">
|
|
<img alt="logo" src="../img/logo.svg"/>
|
|
</a>
|
|
AI on the Edge Device
|
|
</label>
|
|
<div class="md-nav__source">
|
|
<a class="md-source" data-md-component="source" href="https://github.com/jomjol/AI-on-the-edge-device-docs" title="Go to repository">
|
|
<div class="md-source__icon md-icon">
|
|
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_1" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Getting Started
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_1_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Getting Started
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="..">
|
|
<span class="md-ellipsis">
|
|
Welcome
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Installation/">
|
|
<span class="md-ellipsis">
|
|
Installation
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../initial-setup/">
|
|
<span class="md-ellipsis">
|
|
Initial Setup
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Hardware-Compatibility/">
|
|
<span class="md-ellipsis">
|
|
Hardware Compatibility
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Best-Practice/">
|
|
<span class="md-ellipsis">
|
|
Best Practice
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../FAQs/">
|
|
<span class="md-ellipsis">
|
|
Frequently Asked Questions
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_2" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Configuration
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_2_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Configuration
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Reference-Image/">
|
|
<span class="md-ellipsis">
|
|
Reference Image
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Alignment/">
|
|
<span class="md-ellipsis">
|
|
Alignment References
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../ROI-Configuration/">
|
|
<span class="md-ellipsis">
|
|
ROIs (Regions of Interest)
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Configuration/">
|
|
<span class="md-ellipsis">
|
|
Graphical Configuration
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Choosing-the-Model/">
|
|
<span class="md-ellipsis">
|
|
Model Selection
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../ota/">
|
|
<span class="md-ellipsis">
|
|
Over-The-Air (OTA) Update
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
|
<input checked="" class="md-nav__toggle md-toggle" id="__nav_3" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Advanced
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="true" aria-labelledby="__nav_3_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Advanced
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Parameters/">
|
|
<span class="md-ellipsis">
|
|
Parameters
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--active">
|
|
<input class="md-nav__toggle md-toggle" id="__toc" type="checkbox"/>
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
<span class="md-ellipsis">
|
|
Integration into Home Assistant
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<a class="md-nav__link md-nav__link--active" href="./">
|
|
<span class="md-ellipsis">
|
|
Integration into Home Assistant
|
|
</span>
|
|
</a>
|
|
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-mqtt-automatically-setup-entities-using-home-assistant-mqtt-discovery">1.1
|
|
Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)
|
|
</a>
|
|
<nav aria-label="Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)" class="md-nav">
|
|
<ul class="md-nav__list">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-mqtt-manually-setup-entities">1.1.1
|
|
Using MQTT (Manually Setup Entities)
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#examples">1.1.2
|
|
Examples
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#statistics-graph">1.1.3
|
|
Statistics Graph
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#influxdb-graphs">1.1.4
|
|
InfluxDb Graphs
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-rest">1.2
|
|
Using REST
|
|
</a>
|
|
<nav aria-label="Using REST" class="md-nav">
|
|
<ul class="md-nav__list">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#photo">1.2.0.1
|
|
Photo
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../External-LED/">
|
|
<span class="md-ellipsis">
|
|
External LED
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../data-logging/">
|
|
<span class="md-ellipsis">
|
|
Data Logging
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../rolling-installation/">
|
|
<span class="md-ellipsis">
|
|
Living on the Edge
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Watermeter-specific-analog---digital-transition/">
|
|
<span class="md-ellipsis">
|
|
Analog/Digital Transition on Water Meters
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../collect-new-images/">
|
|
<span class="md-ellipsis">
|
|
Collect images to improve the models
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Learn-models-with-your-own-images/">
|
|
<span class="md-ellipsis">
|
|
Learn a model with your own images
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Correction%20Algorithm/">
|
|
<span class="md-ellipsis">
|
|
Correction Algorithm
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Neural-Network-Types/">
|
|
<span class="md-ellipsis">
|
|
Neural Network Types
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Additional-Information/">
|
|
<span class="md-ellipsis">
|
|
Additional Information
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../New-Releases-Notification/">
|
|
<span class="md-ellipsis">
|
|
Notification about new Releases
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_4" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Troubleshooting
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_4_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Troubleshooting
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Error-Codes/">
|
|
<span class="md-ellipsis">
|
|
Reduced webinterface (error codes)
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../StatusLED-BlinkCodes/">
|
|
<span class="md-ellipsis">
|
|
Board status LED (blink codes)
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../WLAN-disconnect-reason/">
|
|
<span class="md-ellipsis">
|
|
WLAN disconnect reasons
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Error-Debugging/">
|
|
<span class="md-ellipsis">
|
|
Often observed issues
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Frequent-Reboots/">
|
|
<span class="md-ellipsis">
|
|
Basic hardware/config issues
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Demo-Mode/">
|
|
<span class="md-ellipsis">
|
|
Demo mode
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_5" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Quick Links
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_5_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Quick Links
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/releases">
|
|
<span class="md-ellipsis">
|
|
Releases
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="https://jomjol.github.io/AI-on-the-edge-device/index.html">
|
|
<span class="md-ellipsis">
|
|
Web Installer/Console
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/issues">
|
|
<span class="md-ellipsis">
|
|
Create an Issue
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/discussions">
|
|
<span class="md-ellipsis">
|
|
Join a Discussion
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_6" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
API's
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_6_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_6">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
API's
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../REST-API/">
|
|
<span class="md-ellipsis">
|
|
REST API
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../MQTT-API/">
|
|
<span class="md-ellipsis">
|
|
MQTT API
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Influx-DB/">
|
|
<span class="md-ellipsis">
|
|
Influx DB
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_7" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Development
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_7_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_7">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Development
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Build-Instructions/">
|
|
<span class="md-ellipsis">
|
|
Build the Project
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Upload-files-by-script/">
|
|
<span class="md-ellipsis">
|
|
Scripted File Upload
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Testing/">
|
|
<span class="md-ellipsis">
|
|
Testing Option for VSCode
|
|
</span>
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../Release-creation/">
|
|
<span class="md-ellipsis">
|
|
Preparing for Release
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
<input class="md-nav__toggle md-toggle" id="__nav_8" type="checkbox"/>
|
|
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
|
<span class="md-ellipsis">
|
|
Old Pages (no longer maintained)
|
|
</span>
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav aria-expanded="false" aria-labelledby="__nav_8_label" class="md-nav" data-md-level="1">
|
|
<label class="md-nav__title" for="__nav_8">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Old Pages (no longer maintained)
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="../outdated--Integrated-Functions/">
|
|
<span class="md-ellipsis">
|
|
Integrated Functions
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="..">
|
|
<span class="md-ellipsis">
|
|
Assorted Pages
|
|
</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-mqtt-automatically-setup-entities-using-home-assistant-mqtt-discovery">1.1
|
|
Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)
|
|
</a>
|
|
<nav aria-label="Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)" class="md-nav">
|
|
<ul class="md-nav__list">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-mqtt-manually-setup-entities">1.1.1
|
|
Using MQTT (Manually Setup Entities)
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#examples">1.1.2
|
|
Examples
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#statistics-graph">1.1.3
|
|
Statistics Graph
|
|
</a>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#influxdb-graphs">1.1.4
|
|
InfluxDb Graphs
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#using-rest">1.2
|
|
Using REST
|
|
</a>
|
|
<nav aria-label="Using REST" class="md-nav">
|
|
<ul class="md-nav__list">
|
|
<li class="md-nav__item">
|
|
<a class="md-nav__link" href="#photo">1.2.0.1
|
|
Photo
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="md-content" data-md-component="content">
|
|
<article class="md-content__inner md-typeset">
|
|
<h1 id="integration-into-home-assistant"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.</span> Integration into Home Assistant</h1>
|
|
<p>There are 3 ways to get the data into your Home Assistant:</p>
|
|
<ol>
|
|
<li>Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)</li>
|
|
<li>Using MQTT (Manually Setup Entities)</li>
|
|
<li>Using REST calls</li>
|
|
</ol>
|
|
<p>The first one is the easier way if you already have MQTT in use.</p>
|
|
<h2 id="using-mqtt-automatically-setup-entities-using-home-assistant-mqtt-discovery"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1</span> Using MQTT (Automatically Setup Entities using Home Assistant MQTT Discovery)</h2>
|
|
<p>Starting with Version <code>>12.0.1</code>, AI-on-the-edge-devices support Home Assistant Discovery.</p>
|
|
<ol>
|
|
<li>Check <a href="https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery">here</a> to learn more about it and how to enable it in Homeassistant.</li>
|
|
<li>
|
|
<p>You also have to enable it in the MQTT settings of your device:</p>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/199350781-e2a59eeb-b5bb-407b-9c0d-2aafab50daab.png"/></p>
|
|
<p>Make sure to select the right Meter Type to get the right units!</p>
|
|
</li>
|
|
</ol>
|
|
<p>On the next start of the device, it will send discovery topics and Home Assistant should pick them up and show them under <code>Settings > Integrations > MQTT</code>:</p>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/199352538-ddcc3484-39ef-44f4-a853-53286807d30b.png">
|
|
<img alt="grafik" src="https://user-images.githubusercontent.com/1783586/199352565-9b0ade28-cb43-47b4-821f-7909cad41a73.png"/>
|
|
<img alt="grafik" src="https://user-images.githubusercontent.com/1783586/199352619-217df627-4b87-4fa0-86a2-f5347c452fdb.png"/></img></p>
|
|
<h3 id="using-mqtt-manually-setup-entities"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.1</span> Using MQTT (Manually Setup Entities)</h3>
|
|
<p>First make sure with an MQTT client (for example <a href="http://mqtt-explorer.com/">MQTT Explorer</a>) that MQTT works as expected and to get a list of the available topics!</p>
|
|
<p>Then add a sensor for each property:</p>
|
|
<pre><code class="language-yaml">mqtt:
|
|
sensor:
|
|
- state_topic: "wasserzaehler/main/value"
|
|
name: "Watermeter Value"
|
|
unique_id: watermeter_value
|
|
unit_of_measurement: 'm³'
|
|
state_class: total_increasing
|
|
device_class: water # Needs Home Assistant 2022.11!
|
|
icon: 'mdi:water-pump'
|
|
availability_topic: wasserzaehler/connection
|
|
payload_available: connected
|
|
payload_not_available: connection lost
|
|
|
|
- state_topic: "wasserzaehler/main/rate"
|
|
name: "Watermeter Rate"
|
|
unique_id: watermeter_rate
|
|
unit_of_measurement: 'm³/min'
|
|
state_class: measurement
|
|
device_class: water # Needs Home Assistant 2022.11!
|
|
icon: 'mdi:water-pump'
|
|
availability_topic: wasserzaehler/connection
|
|
payload_available: connected
|
|
payload_not_available: connection lost
|
|
|
|
- state_topic: "wasserzaehler/main/error"
|
|
name: "Watermeter Error"
|
|
unique_id: watermeter_error
|
|
icon: "mdi:water-alert"
|
|
availability_topic: wasserzaehler/connection
|
|
payload_available: connected
|
|
payload_not_available: connection lost
|
|
|
|
- state_topic: "wasserzaehler/uptime"
|
|
name: "Watermeter Uptime"
|
|
unique_id: watermeter_uptime
|
|
unit_of_measurement: 's'
|
|
state_class: measurement
|
|
device_class: duration
|
|
entity_category: diagnostic
|
|
icon: "mdi:timer-outline"
|
|
availability_topic: wasserzaehler/connection
|
|
payload_available: connected
|
|
payload_not_available: connection lost
|
|
</code></pre>
|
|
<p>If you run the discovery once, you can also extract the information from there (MQTT Info, untested):</p>
|
|
<pre><code class="language-yaml">mqtt: # Extracted form the Discovery but untested!
|
|
sensor:
|
|
- name: Value
|
|
unique_id: wasserzaehler-main_value
|
|
icon: mdi:gauge
|
|
state_topic: wasserzaehler/main/value
|
|
unit_of_measurement: m³
|
|
device_class: water
|
|
state_class: total_increasing
|
|
availability_topic: wasserzaehler/connection
|
|
payload_available: connected
|
|
payload_not_available: connection lost
|
|
</code></pre>
|
|
<p>If you want to convert the <code>m³</code> to <code>l</code>, use a template sensor:</p>
|
|
<pre><code class="language-yaml">template:
|
|
- sensor:
|
|
- name: "Watermeter in l"
|
|
unique_id: watermeter_in_l
|
|
icon: "mdi:gauge"
|
|
state: "{{ states('sensor.watermeter_value')|float(default=0) * 1000 }}" # Convert 1 m3 => 1000 l
|
|
unit_of_measurement: l
|
|
availability: "{{ states('sensor.watermeter_value') not in ['unknown', 'unavailable', 'none'] }}"
|
|
</code></pre>
|
|
<p>If you you want to have the consumption per day, you can use an <a href="https://www.home-assistant.io/integrations/utility_meter/">Utility Meter</a>.
|
|
it is a helper and can be used to reset the total increasing values once a day</p>
|
|
<pre><code class="language-yaml">utility_meter:
|
|
utility_meter_gas_per_day:
|
|
source: sensor.gasmeter_value
|
|
cycle: daily
|
|
|
|
utility_meter_water_per_day:
|
|
source: sensor.watermeter_value
|
|
cycle: daily
|
|
</code></pre>
|
|
<p>Note that you also can add it using the UI.</p>
|
|
<h3 id="examples"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.2</span> Examples</h3>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/193472069-4135736e-e63a-4afb-8009-5b97aa5c9ac5.png"/></p>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/193472091-1484aac4-ddc2-48ba-896c-28370963fc2d.png"/></p>
|
|
<h3 id="statistics-graph"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.3</span> Statistics Graph</h3>
|
|
<p>Creating Statistics Graphs (e.g. usage per day) is easy using the <a href="https://www.home-assistant.io/home-energy-management/">Energy Dashboard</a>:
|
|
<img alt="grafik" src="https://user-images.githubusercontent.com/1783586/193471893-d8ab8f5f-0906-4076-8926-8b5a69a24bce.png"/></p>
|
|
<p>Note that there seems to be a bug in the graph, see <a href="https://github.com/home-assistant/frontend/issues/13995">https://github.com/home-assistant/frontend/issues/13995</a>!</p>
|
|
<h3 id="influxdb-graphs"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.4</span> InfluxDb Graphs</h3>
|
|
<p>See also <a href="../Influx-DB">Influx-DB</a>.</p>
|
|
<p>If you have setup InfluxDB already, it is also possible to fetch statistics from there, e.g. daily usage:</p>
|
|
<pre><code>from(bucket: "HomeAssistant")
|
|
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|
|
|> filter(fn: (r) => r["entity_id"] == "wasserverbrauch_tag")
|
|
|> filter(fn: (r) => r["_field"] == "value")
|
|
|> timeShift(duration: -1d)
|
|
|> aggregateWindow(every: 1d, fn: max, createEmpty: false)
|
|
|> yield(name: "mean")
|
|
</code></pre>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/193473347-c81fc301-c52f-4af0-9fcb-56fab12cacac.png"/></p>
|
|
<h2 id="using-rest"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2</span> Using REST</h2>
|
|
<p>When using REST, Home Assistant has to periodically call an URL on the ESP32 which in return provides the requested data.</p>
|
|
<p>See <a href="../REST-API">REST API</a> for a list of available URLs.</p>
|
|
<p>The most practical one is the <code>json</code> entrypoint which provides the most relevant data JSON formatted:
|
|
<code>http://<IP>/json</code>
|
|
This would return:</p>
|
|
<pre><code class="language-JSON">{
|
|
"main":
|
|
{
|
|
"value": "512.3020",
|
|
"raw": "0512.3020",
|
|
"error": "no error",
|
|
"rate": 0.000000,
|
|
"timestamp": "2022-10-02T20:32:06"
|
|
[..]
|
|
}
|
|
}
|
|
</code></pre>
|
|
<p>To do such a REST call, you need to create a REST sensor:</p>
|
|
<pre><code class="language-yaml">sensor:
|
|
|
|
- platform: rest
|
|
name: "Gasmeter JSON"
|
|
resource: http://<IP>/json
|
|
json_attributes:
|
|
- main
|
|
value_template: '{{ value_json.value }}'
|
|
headers:
|
|
Content-Type: application/json
|
|
scan_interval: 60
|
|
|
|
template:
|
|
sensor:
|
|
- name: "Gasmeter Value from JSON"
|
|
unique_id: gas_meter_value_from_json
|
|
state: "{{ state_attr('sensor.gasmeter_json','main')['value'] }}"
|
|
unit_of_measurement: 'm³'
|
|
|
|
- name: "Watermeter Value from JSON"
|
|
unique_id: water_meter_value_from_json
|
|
state: >-
|
|
{{ state_attr('sensor.watermeter_json','main')['value'] | float }}
|
|
unit_of_measurement: 'm³'
|
|
device_class: water
|
|
state_class: total_increasing
|
|
icon: mdi:gauge
|
|
|
|
</code></pre>
|
|
<p>The 2nd way is to use the html api call from value.html : </p>
|
|
<p><code>sensor:
|
|
- platform: rest
|
|
resource: http://<IP>/value.html
|
|
name: cold_water
|
|
unique_id: cold_water_from_rest
|
|
unit_of_measurement: "L"
|
|
device_class: water
|
|
state_class: total_increasing
|
|
icon: mdi:gauge
|
|
scan_interval : 120</code></p>
|
|
<p>See also https://community.home-assistant.io/t/rest-sensor-nested-json/243420/9</p>
|
|
<h4 id="photo"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.0.1</span> Photo</h4>
|
|
<p>REST can also be used to show the photo of the last round:</p>
|
|
<p><img alt="grafik" src="https://user-images.githubusercontent.com/1783586/193546075-b247942f-9106-47a4-a64b-42ff96dd9078.png"/></p>
|
|
<p>To access it, use <code>http://<IP>/img_tmp/alg_roi.jpg</code> resp <code>http://<IP>/img_tmp/raw.jpg</code>.</p>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
<footer class="md-footer">
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
|
|
Material for MkDocs
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
<script src="../assets/javascripts/bundle.aecac24b.min.js"></script>
|
|
</body>
|
|
</html> |