esp32_ethernet_milight_hub/web/src/index.html

449 lines
17 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ESP32 PoE-MiLight Hub</title>
<link rel="stylesheet" href="css/bootstrap.min.css" title="main"/>
<link href="css/bootstrap-toggle.min.css" rel="stylesheet"/>
<link href="css/bootstrap-slider.min.css" rel="stylesheet"/>
<link href="css/selectize.bootstrap3.min.css" rel="stylesheet"/>
<link href="css/bootstrap-select.min.css" rel="stylesheet"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->
<link href="css/style.css" rel="stylesheet" />
<link href="data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAA/38NABD+CwD/jQsA9pUOABRu/wD/HQwA+gPrAP4MbAAZ8f8ACxb9AP4GkwCW/AoADYj+AP59CQD7FAkAC//nAJYK/QAQ/w4Acgv/AP71CwCSDP8A+AkYAP7rBAAN/+0A/xEcAP1rCwAM/okADf+HAI/7CgAL/5sADP95AA0U/wD4/gsADXr+ABAO/gDlC/8A+v0NAA3/EwB4Ef8A8wr7AP0IeAAN7P4Abf8LAAuJ/wCVDv8A+hcGACH+DgBz/wsA+g7/ABT+ZQAMCv0Aagn/AJT/DQD+EPsADP7sAOf/DAD/Dx0A/g2AAB4N/gB0/gwADZz/ABLu/wAM/BYA+wqMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYAAAAAAAAAAAAAAUsAAA+NwAAGzIAAAAAAAAAIj0AKhAAHh8AAAAAAAoAAAANAAAAABwAAAA/AAAzIAAAAAAAAAAAAAAmAgAAADsjAAAAAAAAAAASLwAAAAAAAAAAAAAAAAAAAAAAABMnNAAAAAAAAAAAAAArMDwVLREAAAAAAAAAAAAADDUdAAAAAAAAAAAAAAAAAAAAAAAAJDEAAAAAAAAAACU4AAAAKDYAAAAAAAAAAAAAFCEAAAcAAAA6AAAAAAEAAAAXAAAAAABACAAWLgAaAwAAAAAAAAALKQAAOQYAAA4EAAAAAAAAAAAAABkPAAAAAAAAAP5/AADmZwAA8k8AALvdAACf+QAAz/MAAP//AAAf+AAAH/gAAP//AADP8wAAn/kAALvdAADyTwAA5mcAAP5/AAA=" rel="icon" type="image/x-icon" />
</head>
<body>
<script src="js/jquery.min.js"></script>
<script src="js/theme-select.js" lang="text/javascript"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/bootstrap-toggle.min.js"></script>
<script src="js/underscore-min.js"></script>
<script src="js/bootstrap-slider.min.js"></script>
<script src="js/selectize.min.js"></script>
<script src="js/bootstrap-select.min.js"></script>
<script src="js/rgb2hsv.js" lang="text/javascript"></script>
<script src="js/script.js" lang="text/javascript"></script>
<nav class="navbar navbar-inverse">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="/">MiLight Hub</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="#settings" data-toggle="modal" data-target="#settings-modal">Einstellungen</a></li>
<li class="dropdown">
<a href="#admin" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">ESP <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#admin-actions" data-toggle="modal" data-target="#admin-actions-modal">Befehle</a></li>
<li role="separator" class="divider"></li>
<li><a href="#backup" data-toggle="modal" data-target="#backup-settings-modal">Backup</a></li>
</ul>
</li>
<li>
<a href="#sniff" id="sniff">
<i class="glyphicon glyphicon-play"></i>
<span>Starte Sniffing</span>
</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container" id="content">
<center><h2>ESP32 PoE MiLight Gateway</h2>
Carsten Schmiemann, 2021</center>
<div class="row" id="device-id-aliases-row">
<div class="col-sm-3">
<label for="deviceAliases" id="device-id-aliases">
Lampen-Name
</label>
<select id="deviceAliases" placeholder="Namen erstellen...">
</select>
</div>
</div>
<div></div>
<div class="row">
<div class="col-sm-3">
<label for="deviceId" id="device-id-label">
Fernbedienungs-ID
<span class="error-info"></span>
</label>
<select id="deviceId" placeholder="Fernbedienungs ID erstellen...">
</select>
</div>
<div class="col-sm-4">
<div class="mode-option" id="group-option" data-for="cct,rgbw,rgb_cct,fut089,fut091">
<label for="groupId">Gruppe</label>
<div class="btn-group" id="groupId" data-toggle="buttons">
<label class="btn btn-default active">
<input type="radio" name="options" autocomplete="off" data-value="1" checked> 1
</label>
<label class="btn btn-default">
<input type="radio" name="options" autocomplete="off" data-value="2"> 2
</label>
<label class="btn btn-default">
<input type="radio" name="options" autocomplete="off" data-value="3"> 3
</label>
<label class="btn btn-default">
<input type="radio" name="options" autocomplete="off" data-value="4"> 4
</label>
<label class="btn btn-default mode-option" data-for="fut089">
<input type="radio" name="options" autocomplete="off" data-value="5"> 5
</label>
<label class="btn btn-default mode-option" data-for="fut089">
<input type="radio" name="options" autocomplete="off" data-value="6"> 6
</label>
<label class="btn btn-default mode-option" data-for="fut089">
<input type="radio" name="options" autocomplete="off" data-value="7"> 7
</label>
<label class="btn btn-default mode-option" data-for="fut089">
<input type="radio" name="options" autocomplete="off" data-value="8"> 8
</label>
<label class="btn btn-default">
<input type="radio" name="options" autocomplete="off" data-value="0"> All
</label>
</div>
</div>
</div>
<div class="col-sm-4">
<label for="mode">Vorschaltgerät Typ</label>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
<label>Effekt</label>
<span class="caret"></span>
</button>
<ul class="dropdown-menu" id="mode">
<li data-value="rgbw">
<a href="#">RGBW</a>
</li>
<li data-value="cct">
<a href="#">CCT</a>
</li>
<li data-value="rgb_cct" class="active">
<a href="#">RGB+CCT</a>
</li>
<li data-value="rgb">
<a href="#">RGB</a>
</li>
<li data-value="fut089">
<a href="#">FUT089 / B8</a>
</li>
<li data-value="fut091">
<a href="#">FUT091 / B2</a>
</li>
<li data-value="fut020">
<a href="#">FUT020</a>
</li>
</ul>
</div>
</div>
</div>
<div class="row"><div class="col-sm-12">
<div class="mode-option" data-for="rgbw,rgb_cct,rgb,fut089,fut020">
<div class="row">
<div class="col-sm-12">
<h5>Farbe</h5>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<span class="hue-picker">
<span class="hue-picker-inner"></span>
<span class="hue-value-display"></span>
</span>
</div>
</div>
</div>
</div></div>
<div class="mode-option" data-for="rgb_cct,fut089">
<div class="row">
<div class="col-sm-12">
<h5>Sättigung</h5>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<input class="slider raw-update" name="saturation"
data-slider-min="0"
data-slider-max="100"
data-slider-value="100"
/>
</div>
</div>
</div>
<div class="mode-option" data-for="cct,rgb_cct,fut089,fut091">
<div class="row">
<div class="col-sm-12">
<h5>Farbtemperatur</h5>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="white-temp-picker">
<input class="slider raw-update" name="temperature"
data-slider-min="0"
data-slider-max="100"
data-slider-value="100"
/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h5>Helligkeit</h5>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<input class="slider raw-update" name="level"
data-slider-min="0"
data-slider-max="100"
data-slider-value="100"
/>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<h5>Befehle</h5>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<ul class="command-buttons">
<li>
<input type="checkbox" name="status" class="raw-update" data-toggle="toggle" checked/>
</li>
<div class="mode-option inline" data-for="rgbw,rgb_cct,fut089,fut020">
<li>
<button type="button" class="btn btn-default command-btn" data-command="set_white">Weiß</button>
</li>
</div>
<li>
<button type="button" id="btnHeight" class="btn btn-info command-btn" data-command="night_mode">Nacht</button>
</li>
<li>
<button type="button" class="btn btn-success command-btn" data-command="pair">
<i class="glyphicon glyphicon-plus"></i>
Koppeln
</button>
</li>
<li>
<button type="button" class="btn btn-danger command-btn" data-command="unpair">
<i class="glyphicon glyphicon-remove"></i>
Entkoppeln
</button>
</li>
</ul>
<p></p>
<ul class="command-buttons">
<div class="mode-option inline" data-for="rgb,fut020">
<li>
<div class="plus-minus-group">
<button type="button" class="btn btn-default btn-number command-btn" data-command="previous_mode">
<span class="glyphicon glyphicon-minus"></span>
</button>
<span class="title">Effekt</span>
<button type="button" class="btn btn-default btn-number command-btn clearfix" data-command="next_mode">
<span class="glyphicon glyphicon-plus"></span>
</button>
<div class="clearfix"></div>
</div>
</li>
</div>
<div class="mode-option inline" data-for="rgbw,rgb_cct,fut089">
<li>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
Effekt
<span class="caret"></span>
</button>
<ul class="dropdown-menu mode-dropdown">
</ul>
</div>
</li>
</div>
<div class="mode-option inline" data-for="rgb,rgbw,rgb_cct,fut089">
<li>
<div class="plus-minus-group">
<button type="button" class="btn btn-default btn-number command-btn" data-command="mode_speed_down">
<span class="glyphicon glyphicon-minus"></span>
</button>
<span class="title">Geschwindigkeit</span>
<button type="button" class="btn btn-default btn-number command-btn" data-command="mode_speed_up">
<span class="glyphicon glyphicon-plus"></span>
</button>
<div class="clearfix"></div>
</div>
</li>
</div>
</ul>
</div>
</div>
<!-- The content of this modal is dynamically injected into the settings modal -->
<div id="gateway-servers-modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h2 class="modal-title">Gateway Server</h2>
</div>
<div class="modal-body">
<div class="row">
<div class="col col-sm-12">
<form id="gateway-server-form">
<table class="table">
<thead>
<tr>
<th>Fernbedienungs ID</th>
<th>UDP Port</th>
<th>Protokoll Version</th>
<th>
<a class="btn btn-success gateway-add-btn" id="add-server-btn">
<i class="glyphicon glyphicon-plus"></i>
</a>
</th>
</tr>
</thead>
<tbody id="gateway-server-configs">
</tbody>
</table>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div>&nbsp;</div>
<div id="settings-modal" class="modal fade" role="dialog">
<div class="modal-dialog modal-dialog-settings">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h2 class="modal-title">Einstellungen</h2>
</div>
<div class="modal-body">
<div>&nbsp;</div>
<div class="row">
<div class="col-sm-12">
<form action="#" id="settings">
<input type="submit" class="btn btn-success" value="Submit" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="alert alert-warning alert-block" id="traffic-sniff">
<button type="button" class="close" id="traffic-sniff-close">&times;</button>
<h4>Paket-Sniffer (Senden und Empfangen)</h4>
<div id="sniffed-traffic"></div>
</div>
</div>
<div id="backup-settings-modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h2 class="modal-title">Backup & Wiederherstellen der Einstellungen</h2>
</div>
<div class="modal-body">
<div>
<h3 class="section-title">Sichern der Einstellungen</h3>
<a href="/settings" download="settings.json" class="btn btn-primary">Backup der Einstellungen</a>
</div>
<div>
<h3 class="section-title">Sichern der Einstellungen</h3>
<form action="/settings" method="post" enctype="multipart/form-data">
<div class="input-group">
<label class="input-group-btn">
<span class="btn btn-primary">
Durchsuchen
<input type="file" name="file" accept=".json" style="display: none;">
</span>
</label>
<input type="text" class="form-control" readonly="">
<label class="input-group-btn">
<span class="btn btn-success">
Hochladen
<input type="submit" style="display: none;">
</span>
</label>
</div>
</form>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div id="admin-actions-modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h2 class="modal-title">ESP/Hub Actions</h2>
</div>
<div class="modal-body">
<ul class="action-buttons">
<li>
<button class="btn btn-danger btn-sm system-btn" data-command="restart">Neustarten</button>
</li>
<li>
<button class="btn btn-danger btn-sm system-btn" data-command="clear_wifi_config">WiFi trennen</button>
</li>
</ul>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</body>
</html>