diff --git a/examples/device-dashboard/packed_fs.c b/examples/device-dashboard/packed_fs.c
index 59cd220f..04aaca35 100644
--- a/examples/device-dashboard/packed_fs.c
+++ b/examples/device-dashboard/packed_fs.c
@@ -37,1167 +37,6 @@ static const unsigned char v1[] = {
10, 0 // .
};
static const unsigned char v2[] = {
- 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict'
- 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 67, 111, // ;.import {Co
- 109, 112, 111, 110, 101, 110, 116, 44, 32, 104, 44, 32, // mponent, h,
- 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, 101, 114, // html, render
- 44, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 44, // , useEffect,
- 32, 117, 115, 101, 83, 116, 97, 116, 101, 44, 32, 117, // useState, u
- 115, 101, 82, 101, 102, 125, 32, 102, 114, 111, 109, 32, // seRef} from
- 39, 46, 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, // './preact.mi
- 110, 46, 106, 115, 39, 59, 10, 10, 99, 111, 110, 115, // n.js';..cons
- 116, 32, 77, 97, 120, 77, 101, 116, 114, 105, 99, 115, // t MaxMetrics
- 68, 97, 116, 97, 80, 111, 105, 110, 116, 115, 32, 61, // DataPoints =
- 32, 53, 48, 59, 10, 10, 47, 47, 32, 84, 104, 105, // 50;..// Thi
- 115, 32, 115, 105, 109, 112, 108, 101, 32, 112, 117, 98, // s simple pub
- 108, 105, 115, 104, 47, 115, 117, 98, 115, 99, 114, 105, // lish/subscri
- 98, 101, 32, 105, 115, 32, 117, 115, 101, 100, 32, 116, // be is used t
- 111, 32, 112, 97, 115, 115, 32, 110, 111, 116, 105, 102, // o pass notif
- 105, 99, 97, 116, 105, 111, 110, 115, 32, 116, 104, 97, // ications tha
- 116, 32, 119, 101, 114, 101, 10, 47, 47, 32, 114, 101, // t were.// re
- 99, 101, 105, 118, 101, 100, 32, 102, 114, 111, 109, 32, // ceived from
- 116, 104, 101, 32, 115, 101, 114, 118, 101, 114, 44, 32, // the server,
- 116, 111, 32, 97, 108, 108, 32, 99, 104, 105, 108, 100, // to all child
- 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, // components
- 111, 102, 32, 116, 104, 101, 32, 97, 112, 112, 46, 10, // of the app..
- 118, 97, 114, 32, 80, 117, 98, 83, 117, 98, 32, 61, // var PubSub =
- 32, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, // (function()
- 32, 123, 10, 32, 32, 118, 97, 114, 32, 104, 97, 110, // {. var han
- 100, 108, 101, 114, 115, 32, 61, 32, 123, 125, 44, 32, // dlers = {},
- 105, 100, 32, 61, 32, 48, 59, 10, 32, 32, 114, 101, // id = 0;. re
- 116, 117, 114, 110, 32, 123, 10, 32, 32, 32, 32, 115, // turn {. s
- 117, 98, 115, 99, 114, 105, 98, 101, 58, 32, 102, 117, // ubscribe: fu
- 110, 99, 116, 105, 111, 110, 40, 102, 110, 41, 32, 123, // nction(fn) {
- 10, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, // . handl
- 101, 114, 115, 91, 105, 100, 43, 43, 93, 32, 61, 32, // ers[id++] =
- 102, 110, 59, 10, 32, 32, 32, 32, 125, 44, 10, 32, // fn;. },.
- 32, 32, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, // unsubscri
- 98, 101, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, // be: function
- 40, 105, 100, 41, 32, 123, 10, 32, 32, 32, 32, 32, // (id) {.
- 32, 100, 101, 108, 101, 116, 101, 32, 104, 97, 110, 100, // delete hand
- 108, 101, 114, 115, 91, 105, 100, 93, 59, 10, 32, 32, // lers[id];.
- 32, 32, 125, 44, 10, 32, 32, 32, 32, 112, 117, 98, // },. pub
- 108, 105, 115, 104, 58, 32, 102, 117, 110, 99, 116, 105, // lish: functi
- 111, 110, 40, 100, 97, 116, 97, 41, 32, 123, 10, 32, // on(data) {.
- 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, // for (va
- 114, 32, 107, 32, 105, 110, 32, 104, 97, 110, 100, 108, // r k in handl
- 101, 114, 115, 41, 32, 104, 97, 110, 100, 108, 101, 114, // ers) handler
- 115, 91, 107, 93, 40, 100, 97, 116, 97, 41, 59, 10, // s[k](data);.
- 32, 32, 32, 32, 125, 10, 32, 32, 125, 59, 10, 125, // }. };.}
- 41, 40, 41, 59, 10, 10, 99, 111, 110, 115, 116, 32, // )();..const
- 78, 97, 118, 32, 61, 32, 112, 114, 111, 112, 115, 32, // Nav = props
- 61, 62, 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, // => html`..
- 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // . <
- 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, // div style="f
- 108, 101, 120, 58, 32, 49, 32, 49, 32, 97, 117, 116, // lex: 1 1 aut
- 111, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, // o; display:
- 102, 108, 101, 120, 59, 32, 97, 108, 105, 103, 110, 45, // flex; align-
- 105, 116, 101, 109, 115, 58, 32, 99, 101, 110, 116, 101, // items: cente
- 114, 59, 34, 62, 10, 32, 32, 32, 32, 32, 32, 60, // r;">. <
- 98, 62, 89, 111, 117, 114, 32, 80, 114, 111, 100, 117, // b>Your Produ
- 99, 116, 60, 47, 98, 62, 10, 32, 32, 32, 32, 60, // ct. <
- 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, // /div>.
. <
- 115, 112, 97, 110, 62, 76, 111, 103, 103, 101, 100, 32, // span>Logged
- 105, 110, 32, 97, 115, 58, 60, 47, 115, 112, 97, 110, // in as:. .
- 32, 32, 32, 32, 60, 115, 112, 97, 110, 62, 36, 123, // ${
- 112, 114, 111, 112, 115, 46, 117, 115, 101, 114, 125, 60, // props.user}<
- 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 32, // /span>.
- 32, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, 98, // logout
- 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // . .
- 32, 32, 60, 47, 100, 105, 118, 62, 10, 60, 47, 100, // .`;...cons
- 116, 32, 72, 101, 114, 111, 32, 61, 32, 112, 114, 111, // t Hero = pro
- 112, 115, 32, 61, 62, 32, 104, 116, 109, 108, 96, 10, // ps => html`.
- 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // .
- 10, 32, 32, 60, 104, 49, 32, 115, 116, 121, 108, 101, // . Inte
- 114, 97, 99, 116, 105, 118, 101, 32, 68, 101, 118, 105, // ractive Devi
- 99, 101, 32, 68, 97, 115, 104, 98, 111, 97, 114, 100, // ce Dashboard
- 60, 47, 104, 49, 62, 10, 10, 32, 32, 60, 112, 62, // ..
- 10, 32, 32, 84, 104, 105, 115, 32, 100, 101, 118, 105, // . This devi
- 99, 101, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // ce dashboard
- 32, 105, 115, 32, 100, 101, 118, 101, 108, 111, 112, 101, // is develope
- 100, 32, 119, 105, 116, 104, 32, 109, 111, 100, 101, 114, // d with moder
- 110, 32, 97, 110, 100, 32, 99, 111, 109, 112, 97, 99, // n and compac
- 116, 32, 80, 114, 101, 97, 99, 116, 32, 102, 114, 97, // t Preact fra
- 109, 101, 119, 111, 114, 107, 44, 10, 32, 32, 105, 110, // mework,. in
- 32, 111, 114, 100, 101, 114, 32, 116, 111, 32, 102, 105, // order to fi
- 116, 32, 111, 110, 32, 97, 32, 118, 101, 114, 121, 32, // t on a very
- 115, 109, 97, 108, 108, 32, 100, 101, 118, 105, 99, 101, // small device
- 115, 46, 32, 84, 104, 105, 115, 32, 105, 115, 10, 32, // s. This is.
- 32, 97, 32, 60, 97, 32, 104, 114, 101, 102, 61, 34, // a hybr
- 105, 100, 32, 115, 101, 114, 118, 101, 114, 60, 47, 97, // id server which. pr
- 111, 118, 105, 100, 101, 115, 32, 98, 111, 116, 104, 32, // ovides both
- 115, 116, 97, 116, 105, 99, 32, 97, 110, 100, 32, 100, // static and d
- 121, 110, 97, 109, 105, 99, 32, 99, 111, 110, 116, 101, // ynamic conte
- 110, 116, 46, 32, 32, 83, 116, 97, 116, 105, 99, 32, // nt. Static
- 102, 105, 108, 101, 115, 44, 32, 108, 105, 107, 101, 32, // files, like
- 67, 83, 83, 47, 74, 83, 47, 72, 84, 77, 76, 10, // CSS/JS/HTML.
- 32, 32, 111, 114, 32, 105, 109, 97, 103, 101, 115, 44, // or images,
- 32, 97, 114, 101, 32, 99, 111, 109, 112, 105, 108, 101, // are compile
- 100, 32, 105, 110, 116, 111, 32, 116, 104, 101, 32, 115, // d into the s
- 101, 114, 118, 101, 114, 32, 98, 105, 110, 97, 114, 121, // erver binary
- 46, 10, 10, 32, 32, 84, 104, 105, 115, 32, 85, 73, // ... This UI
- 32, 117, 115, 101, 115, 32, 116, 104, 101, 32, 82, 69, // uses the RE
- 83, 84, 32, 65, 80, 73, 32, 105, 109, 112, 108, 101, // ST API imple
- 109, 101, 110, 116, 101, 100, 32, 98, 121, 32, 116, 104, // mented by th
- 101, 32, 100, 101, 118, 105, 99, 101, 44, 32, 119, 104, // e device, wh
- 105, 99, 104, 32, 121, 111, 117, 32, 99, 97, 110, 32, // ich you can
- 101, 120, 97, 109, 105, 110, 101, 10, 32, 32, 117, 115, // examine. us
- 105, 110, 103, 32, 32, 60, 99, 111, 100, 101, 62, 99, // ing c
- 117, 114, 108, 60, 47, 99, 111, 100, 101, 62, 32, 99, // url
c
- 111, 109, 109, 97, 110, 100, 45, 108, 105, 110, 101, 32, // ommand-line
- 117, 116, 105, 108, 105, 116, 121, 58, 10, 32, 32, 60, // utility:. <
- 47, 112, 62, 10, 10, 32, 32, 60, 100, 105, 118, 62, // /p>..
- 60, 99, 111, 100, 101, 62, 99, 117, 114, 108, 32, 108, // curl l
- 111, 99, 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, // ocalhost:800
- 48, 47, 97, 112, 105, 47, 99, 111, 110, 102, 105, 103, // 0/api/config
- 47, 103, 101, 116, 60, 47, 99, 111, 100, 101, 62, 32, // /get
- 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, 105, //
. curl
- 32, 108, 111, 99, 97, 108, 104, 111, 115, 116, 58, 56, // localhost:8
- 48, 48, 48, 47, 97, 112, 105, 47, 99, 111, 110, 102, // 000/api/conf
- 105, 103, 47, 115, 101, 116, 32, 45, 100, 32, 39, 118, // ig/set -d 'v
- 97, 108, 117, 101, 49, 61, 55, 38, 118, 97, 108, 117, // alue1=7&valu
- 101, 50, 61, 104, 101, 108, 108, 111, 39, 60, 47, 99, // e2=hello'
.
- 32, 32, 60, 100, 105, 118, 62, 60, 99, 111, 100, 101, // curl localh
- 111, 115, 116, 58, 56, 48, 48, 48, 47, 97, 112, 105, // ost:8000/api
- 47, 109, 101, 115, 115, 97, 103, 101, 47, 115, 101, 110, // /message/sen
- 100, 32, 45, 100, 32, 39, 109, 115, 103, 61, 104, 101, // d -d 'msg=he
- 108, 108, 111, 39, 60, 47, 99, 111, 100, 101, 62, 32, // llo'
- 60, 47, 100, 105, 118, 62, 10, 10, 32, 32, 60, 112, //
.. . A device
- 32, 99, 97, 110, 32, 115, 101, 110, 100, 32, 110, 111, // can send no
- 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 32, // tifications
- 116, 111, 32, 116, 104, 105, 115, 32, 100, 97, 115, 104, // to this dash
- 98, 111, 97, 114, 100, 32, 97, 116, 32, 97, 110, 121, // board at any
- 116, 105, 109, 101, 46, 32, 78, 111, 116, 105, 102, 105, // time. Notifi
- 99, 97, 116, 105, 111, 110, 115, 10, 32, 32, 97, 114, // cations. ar
- 101, 32, 115, 101, 110, 116, 32, 111, 118, 101, 114, 32, // e sent over
- 87, 101, 98, 115, 111, 99, 107, 101, 116, 32, 97, 116, // Websocket at
- 32, 85, 82, 73, 32, 60, 99, 111, 100, 101, 62, 99, // URI c
- 117, 114, 108, 32, 108, 111, 99, 97, 108, 104, 111, 115, // url localhos
- 116, 58, 56, 48, 48, 48, 47, 97, 112, 105, 47, 119, // t:8000/api/w
- 97, 116, 99, 104, 60, 47, 99, 111, 100, 101, 62, 10, // atch
.
- 32, 32, 97, 115, 32, 74, 83, 79, 78, 32, 115, 116, // as JSON st
- 114, 105, 110, 103, 115, 32, 60, 99, 111, 100, 101, 62, // rings
- 123, 34, 110, 97, 109, 101, 34, 58, 32, 34, 46, 46, // {"name": "..
- 34, 44, 32, 34, 100, 97, 116, 97, 34, 58, 32, 46, // ", "data": .
- 46, 46, 125, 60, 47, 99, 111, 100, 101, 62, 10, 32, // ..}
.
- 32, 60, 47, 112, 62, 10, 60, 47, 100, 105, 118, 62, //
.
- 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 10, 99, // .`;..c
- 111, 110, 115, 116, 32, 76, 111, 103, 105, 110, 32, 61, // onst Login =
- 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, 114, // function(pr
- 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, 110, // ops) {. con
- 115, 116, 32, 91, 117, 115, 101, 114, 44, 32, 115, 101, // st [user, se
- 116, 85, 115, 101, 114, 93, 32, 61, 32, 117, 115, 101, // tUser] = use
- 83, 116, 97, 116, 101, 40, 39, 39, 41, 59, 10, 32, // State('');.
- 32, 99, 111, 110, 115, 116, 32, 91, 112, 97, 115, 115, // const [pass
- 44, 32, 115, 101, 116, 80, 97, 115, 115, 93, 32, 61, // , setPass] =
- 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, // useState(''
- 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, // );. const l
- 111, 103, 105, 110, 32, 61, 32, 101, 118, 32, 61, 62, // ogin = ev =>
- 10, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99, 104, // . fetch
- 40, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // (.
- 39, 47, 97, 112, 105, 47, 108, 111, 103, 105, 110, 39, // '/api/login'
- 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // ,.
- 123, 104, 101, 97, 100, 101, 114, 115, 58, 32, 123, 65, // {headers: {A
- 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, // uthorization
- 58, 32, 39, 66, 97, 115, 105, 99, 32, 39, 32, 43, // : 'Basic ' +
- 32, 98, 116, 111, 97, 40, 117, 115, 101, 114, 32, 43, // btoa(user +
- 32, 39, 58, 39, 32, 43, 32, 112, 97, 115, 115, 41, // ':' + pass)
- 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // }}).
- 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, // .then(r =>
- 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 10, 32, // r.json()).
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, // .th
- 101, 110, 40, 114, 32, 61, 62, 32, 114, 32, 38, 38, // en(r => r &&
- 32, 112, 114, 111, 112, 115, 46, 108, 111, 103, 105, 110, // props.login
- 40, 114, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, // (r)).
- 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, 101, 114, // .catch(er
- 114, 32, 61, 62, 32, 101, 114, 114, 41, 59, 10, 32, // r => err);.
- 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, 108, // return html
- 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, // `.
- 10, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, // .
.
- 60, 104, 49, 32, 115, 116, 121, 108, 101, 61, 34, 99, //
Device Dash
- 98, 111, 97, 114, 100, 32, 76, 111, 103, 105, 110, 32, // board Login
- 60, 47, 104, 49, 62, 10, 32, 32, 32, 32, 60, 100, // .
. <
- 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 39, // input type='
- 116, 101, 120, 116, 39, 32, 112, 108, 97, 99, 101, 104, // text' placeh
- 111, 108, 100, 101, 114, 61, 39, 78, 97, 109, 101, 39, // older='Name'
- 32, 115, 116, 121, 108, 101, 61, 34, 119, 105, 100, 116, // style="widt
- 104, 58, 32, 49, 48, 48, 37, 59, 34, 10, 32, 32, // h: 100%;".
- 32, 32, 32, 32, 32, 32, 111, 110, 105, 110, 112, 117, // oninpu
- 116, 61, 36, 123, 101, 118, 32, 61, 62, 32, 115, 101, // t=${ev => se
- 116, 85, 115, 101, 114, 40, 101, 118, 46, 116, 97, 114, // tUser(ev.tar
- 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, // get.value)}
- 118, 97, 108, 117, 101, 61, 36, 123, 117, 115, 101, 114, // value=${user
- 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, 47, 100, // } />. .
. setPass(
- 101, 118, 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, // ev.target.va
- 108, 117, 101, 41, 125, 32, 118, 97, 108, 117, 101, 61, // lue)} value=
- 36, 123, 112, 97, 115, 115, 125, 10, 32, 32, 32, 32, // ${pass}.
- 32, 32, 32, 32, 111, 110, 99, 104, 97, 110, 103, 101, // onchange
- 61, 36, 123, 108, 111, 103, 105, 110, 125, 32, 47, 62, // =${login} />
- 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // .
.
- 32, 32, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, //
.
- 32, 32, 32, 60, 98, 117, 116, 116, 111, 110, 32, 99, // Login
- 32, 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, 32, // .
- 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, //
.
- 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
.
- 32, 32, 32, 32, 86, 97, 108, 105, 100, 32, 108, 111, // Valid lo
- 103, 105, 110, 115, 58, 32, 97, 100, 109, 105, 110, 58, // gins: admin:
- 112, 97, 115, 115, 48, 44, 32, 117, 115, 101, 114, 49, // pass0, user1
- 58, 112, 97, 115, 115, 49, 44, 32, 117, 115, 101, 114, // :pass1, user
- 50, 58, 112, 97, 115, 115, 50, 10, 32, 32, 32, 32, // 2:pass2.
- 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .
`;
- 10, 125, 59, 10, 10, 10, 99, 111, 110, 115, 116, 32, // .};...const
- 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, // Configuratio
- 110, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, // n = function
- 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, 32, // (props) {.
- 99, 111, 110, 115, 116, 32, 91, 117, 114, 108, 44, 32, // const [url,
- 115, 101, 116, 85, 114, 108, 93, 32, 61, 32, 117, 115, // setUrl] = us
- 101, 83, 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, // eState(props
- 46, 99, 111, 110, 102, 105, 103, 46, 117, 114, 108, 32, // .config.url
- 124, 124, 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, // || '');. co
- 110, 115, 116, 32, 91, 112, 117, 98, 44, 32, 115, 101, // nst [pub, se
- 116, 80, 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, // tPub] = useS
- 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, // tate(props.c
- 111, 110, 102, 105, 103, 46, 112, 117, 98, 32, 124, 124, // onfig.pub ||
- 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, 110, 115, // '');. cons
- 116, 32, 91, 115, 117, 98, 44, 32, 115, 101, 116, 83, // t [sub, setS
- 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, // ub] = useSta
- 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, 111, 110, // te(props.con
- 102, 105, 103, 46, 115, 117, 98, 32, 124, 124, 32, 39, // fig.sub || '
- 39, 41, 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, // ');.. useEf
- 102, 101, 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, // fect(() => {
- 10, 32, 32, 32, 32, 115, 101, 116, 85, 114, 108, 40, // . setUrl(
- 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config
- 46, 117, 114, 108, 41, 59, 10, 32, 32, 32, 32, 115, // .url);. s
- 101, 116, 80, 117, 98, 40, 112, 114, 111, 112, 115, 46, // etPub(props.
- 99, 111, 110, 102, 105, 103, 46, 112, 117, 98, 41, 59, // config.pub);
- 10, 32, 32, 32, 32, 115, 101, 116, 83, 117, 98, 40, // . setSub(
- 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config
- 46, 115, 117, 98, 41, 59, 10, 32, 32, 125, 44, 32, // .sub);. },
- 91, 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, // [props.confi
- 103, 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, // g]);.. cons
- 116, 32, 117, 112, 100, 97, 116, 101, 32, 61, 32, 40, // t update = (
- 110, 97, 109, 101, 44, 32, 118, 97, 108, 41, 32, 61, // name, val) =
- 62, 32, 102, 101, 116, 99, 104, 40, 39, 47, 97, 112, // > fetch('/ap
- 105, 47, 99, 111, 110, 102, 105, 103, 47, 115, 101, 116, // i/config/set
- 39, 44, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, // ', {.
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 109, 101, 116, 104, 111, 100, 58, 32, 39, // method: '
- 112, 111, 115, 116, 39, 44, 10, 32, 32, 32, 32, 32, // post',.
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, 32, 96, // body: `
- 36, 123, 110, 97, 109, 101, 125, 61, 36, 123, 101, 110, // ${name}=${en
- 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, 112, 111, // codeURICompo
- 110, 101, 110, 116, 40, 118, 97, 108, 41, 125, 96, 10, // nent(val)}`.
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 125, 41, 46, 99, // }).c
- 97, 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, // atch(err =>
- 101, 114, 114, 41, 59, 10, 32, 32, 99, 111, 110, 115, // err);. cons
- 116, 32, 117, 112, 100, 97, 116, 101, 117, 114, 108, 32, // t updateurl
- 61, 32, 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, // = ev => upda
- 116, 101, 40, 39, 117, 114, 108, 39, 44, 32, 117, 114, // te('url', ur
- 108, 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, // l);. const
- 117, 112, 100, 97, 116, 101, 112, 117, 98, 32, 61, 32, // updatepub =
- 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, // ev => update
- 40, 39, 112, 117, 98, 39, 44, 32, 112, 117, 98, 41, // ('pub', pub)
- 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 117, 112, // ;. const up
- 100, 97, 116, 101, 115, 117, 98, 32, 61, 32, 101, 118, // datesub = ev
- 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, 40, 39, // => update('
- 115, 117, 98, 39, 44, 32, 115, 117, 98, 41, 59, 10, // sub', sub);.
- 10, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // . console.l
- 111, 103, 40, 112, 114, 111, 112, 115, 44, 32, 91, 117, // og(props, [u
- 114, 108, 44, 32, 112, 117, 98, 44, 32, 115, 117, 98, // rl, pub, sub
- 93, 41, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, // ]);. return
- 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, // html`.
.
.
- 32, 32, 68, 101, 118, 105, 99, 101, 32, 67, 111, 110, // Device Con
- 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 60, 47, // figuration
- 104, 51, 62, 10, 32, 32, 60, 100, 105, 118, 32, 115, // h3>. . M
- 81, 84, 84, 32, 115, 101, 114, 118, 101, 114, 58, 60, // QTT server:<
- 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 60, // /span>. <
- 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 34, // input type="
- 116, 101, 120, 116, 34, 32, 115, 116, 121, 108, 101, 61, // text" style=
- 34, 102, 108, 101, 120, 58, 32, 49, 32, 49, 48, 48, // "flex: 1 100
- 37, 59, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32, // %;".
- 32, 32, 118, 97, 108, 117, 101, 61, 36, 123, 117, 114, // value=${ur
- 108, 125, 32, 111, 110, 99, 104, 97, 110, 103, 101, 61, // l} onchange=
- 36, 123, 117, 112, 100, 97, 116, 101, 117, 114, 108, 125, // ${updateurl}
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, // . o
- 110, 105, 110, 112, 117, 116, 61, 36, 123, 101, 118, 32, // ninput=${ev
- 61, 62, 32, 115, 101, 116, 85, 114, 108, 40, 101, 118, // => setUrl(ev
- 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, 108, 117, // .target.valu
- 101, 41, 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, // e)} />. <
- 98, 117, 116, 116, 111, 110, 32, 99, 108, 97, 115, 115, // button class
- 61, 34, 98, 116, 110, 34, 32, 100, 105, 115, 97, 98, // ="btn" disab
- 108, 101, 100, 61, 36, 123, 33, 117, 114, 108, 125, 32, // led=${!url}
- 111, 110, 99, 108, 105, 99, 107, 61, 36, 123, 117, 112, // onclick=${up
- 100, 97, 116, 101, 117, 114, 108, 125, 10, 32, 32, 32, // dateurl}.
- 32, 32, 32, 115, 116, 121, 108, 101, 61, 34, 109, 97, // style="ma
- 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 32, 49, // rgin-left: 1
- 101, 109, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // em; backgrou
- 110, 100, 58, 32, 35, 56, 97, 97, 59, 34, 62, 85, // nd: #8aa;">U
- 112, 100, 97, 116, 101, 60, 47, 98, 117, 116, 116, 111, // pdate.
.
- 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
- 10, 32, 32, 32, 32, 60, 115, 112, 97, 110, 32, 99, // . Subs
- 99, 114, 105, 98, 101, 32, 116, 111, 112, 105, 99, 58, // cribe topic:
- 60, 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, // .
- 60, 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, //
- 115, 101, 116, 83, 117, 98, 40, 101, 118, 46, 116, 97, // setSub(ev.ta
- 114, 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, // rget.value)}
- 32, 47, 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, // />. Upda
- 116, 101, 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, // te.
- 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. <
- 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 109, // div style="m
- 97, 114, 103, 105, 110, 58, 32, 48, 46, 53, 101, 109, // argin: 0.5em
- 32, 48, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, // 0; display:
- 32, 102, 108, 101, 120, 59, 34, 62, 10, 32, 32, 32, // flex;">.
- 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, // Publish
- 116, 111, 112, 105, 99, 58, 60, 47, 115, 112, 97, 110, // topic: . se
- 116, 80, 117, 98, 40, 101, 118, 46, 116, 97, 114, 103, // tPub(ev.targ
- 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, 47, // et.value)} /
- 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, 116, 111, // >. Update
- 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, 32, 32, // .
- 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, 105, // .
. You c
- 97, 110, 32, 117, 115, 101, 32, 60, 97, 32, 104, 114, // an use . Hive
- 77, 81, 32, 87, 101, 98, 115, 111, 99, 107, 101, 116, // MQ Websocket
- 32, 119, 101, 98, 32, 99, 108, 105, 101, 110, 116, 60, // web client<
- 47, 97, 62, 32, 116, 111, 32, 115, 101, 110, 100, 32, // /a> to send
- 109, 101, 115, 115, 97, 103, 101, 115, 32, 116, 111, 32, // messages to
- 116, 104, 105, 115, 32, 99, 111, 110, 115, 111, 108, 101, // this console
- 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, // .. .
- 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, // . D
- 101, 118, 105, 99, 101, 32, 107, 101, 101, 112, 115, 32, // evice keeps
- 97, 32, 112, 101, 114, 115, 105, 115, 116, 101, 110, 116, // a persistent
- 32, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 32, // connection
- 116, 111, 32, 116, 104, 101, 32, 99, 111, 110, 102, 105, // to the confi
- 103, 117, 114, 101, 100, 32, 77, 81, 84, 84, 32, 115, // gured MQTT s
- 101, 114, 118, 101, 114, 46, 10, 32, 32, 32, 32, 67, // erver.. C
- 104, 97, 110, 103, 101, 115, 32, 116, 111, 32, 116, 104, // hanges to th
- 105, 115, 32, 99, 111, 110, 102, 105, 103, 117, 114, 97, // is configura
- 116, 105, 111, 110, 32, 97, 114, 101, 32, 112, 114, 111, // tion are pro
- 112, 97, 103, 97, 116, 101, 100, 32, 116, 111, 32, 97, // pagated to a
- 108, 108, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // ll dashboard
- 115, 58, 32, 116, 114, 121, 10, 32, 32, 32, 32, 99, // s: try. c
- 104, 97, 110, 103, 105, 110, 103, 32, 116, 104, 101, 109, // hanging them
- 32, 105, 110, 32, 116, 104, 105, 115, 32, 100, 97, 115, // in this das
- 104, 98, 111, 97, 114, 100, 32, 97, 110, 100, 32, 111, // hboard and o
- 98, 115, 101, 114, 118, 101, 32, 99, 104, 97, 110, 103, // bserve chang
- 101, 115, 32, 105, 110, 32, 116, 104, 101, 32, 111, 116, // es in the ot
- 104, 101, 114, 32, 111, 112, 101, 110, 101, 100, 10, 32, // her opened.
- 32, 32, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // dashboard
- 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 60, 100, // ..
. Note
- 58, 32, 97, 100, 109, 105, 110, 105, 115, 116, 114, 97, // : administra
- 116, 111, 114, 115, 32, 99, 97, 110, 32, 115, 101, 101, // tors can see
- 32, 116, 104, 105, 115, 32, 115, 101, 99, 116, 105, 111, // this sectio
- 110, 32, 97, 110, 100, 32, 99, 97, 110, 32, 99, 104, // n and can ch
- 97, 110, 103, 101, 32, 100, 101, 118, 105, 99, 101, 10, // ange device.
- 32, 32, 32, 32, 99, 111, 110, 102, 105, 103, 117, 114, // configur
- 97, 116, 105, 111, 110, 44, 32, 119, 104, 105, 108, 115, // ation, whils
- 116, 32, 117, 115, 101, 114, 115, 32, 99, 97, 110, 110, // t users cann
- 111, 116, 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, // ot..
- 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, // .`;.};
- 10, 10, 10, 99, 111, 110, 115, 116, 32, 77, 101, 115, // ...const Mes
- 115, 97, 103, 101, 32, 61, 32, 109, 32, 61, 62, 32, // sage = m =>
- 104, 116, 109, 108, 96, 60, 100, 105, 118, 32, 115, 116, // html`.
- 32, 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, // qos:
- 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, 101, // ${m.message
- 46, 113, 111, 115, 125, 32, 60, 47, 115, 112, 97, 110, // .qos} .
- 116, 111, 112, 105, 99, 58, 32, 36, 123, 109, 46, 109, // topic: ${m.m
- 101, 115, 115, 97, 103, 101, 46, 116, 111, 112, 105, 99, // essage.topic
- 125, 32, 60, 47, 115, 112, 97, 110, 62, 10, 32, 32, // } .
- 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, // data:
- 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, 101, // ${m.message
- 46, 100, 97, 116, 97, 125, 60, 47, 115, 112, 97, 110, // .data} .
`;..
- 99, 111, 110, 115, 116, 32, 77, 101, 115, 115, 97, 103, // const Messag
- 101, 115, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // es = functio
- 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, // n(props) {.
- 32, 99, 111, 110, 115, 116, 32, 91, 109, 101, 115, 115, // const [mess
- 97, 103, 101, 115, 44, 32, 115, 101, 116, 77, 101, 115, // ages, setMes
- 115, 97, 103, 101, 115, 93, 32, 61, 32, 117, 115, 101, // sages] = use
- 83, 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, 32, // State([]);.
- 32, 99, 111, 110, 115, 116, 32, 91, 116, 120, 116, 44, // const [txt,
- 32, 115, 101, 116, 84, 120, 116, 93, 32, 61, 32, 117, // setTxt] = u
- 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, 41, 59, // seState('');
- 10, 10, 32, 32, 117, 115, 101, 69, 102, 102, 101, 99, // .. useEffec
- 116, 40, 40, 41, 32, 61, 62, 32, 123, 10, 32, 32, // t(() => {.
- 32, 32, 99, 111, 110, 115, 116, 32, 105, 100, 32, 61, // const id =
- 32, 80, 117, 98, 83, 117, 98, 46, 115, 117, 98, 115, // PubSub.subs
- 99, 114, 105, 98, 101, 40, 102, 117, 110, 99, 116, 105, // cribe(functi
- 111, 110, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, // on(msg) {.
- 32, 32, 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, // if (msg.
- 110, 97, 109, 101, 32, 61, 61, 32, 39, 109, 101, 115, // name == 'mes
- 115, 97, 103, 101, 39, 41, 32, 115, 101, 116, 77, 101, // sage') setMe
- 115, 115, 97, 103, 101, 115, 40, 120, 32, 61, 62, 32, // ssages(x =>
- 120, 46, 99, 111, 110, 99, 97, 116, 40, 91, 109, 115, // x.concat([ms
- 103, 46, 100, 97, 116, 97, 93, 41, 41, 59, 10, 32, // g.data]));.
- 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, 32, 114, // });. r
- 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, 117, 98, // eturn PubSub
- 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, // .unsubscribe
- 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, 32, 91, // (id);. }, [
- 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, 116, // ]);.. const
- 32, 115, 101, 110, 100, 109, 101, 115, 115, 97, 103, 101, // sendmessage
- 32, 61, 32, 101, 118, 32, 61, 62, 32, 102, 101, 116, // = ev => fet
- 99, 104, 40, 39, 47, 97, 112, 105, 47, 109, 101, 115, // ch('/api/mes
- 115, 97, 103, 101, 47, 115, 101, 110, 100, 39, 44, 32, // sage/send',
- 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // {.
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 109, 101, 116, 104, // meth
- 111, 100, 58, 32, 39, 112, 111, 115, 116, 39, 44, 10, // od: 'post',.
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, 32, // body:
- 96, 109, 101, 115, 115, 97, 103, 101, 61, 36, 123, 101, // `message=${e
- 110, 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, 112, // ncodeURIComp
- 111, 110, 101, 110, 116, 40, 116, 120, 116, 41, 125, 96, // onent(txt)}`
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // .
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
- 32, 32, 32, 32, 32, 125, 41, 46, 116, 104, 101, 110, // }).then
- 40, 114, 32, 61, 62, 32, 115, 101, 116, 84, 120, 116, // (r => setTxt
- 40, 39, 39, 41, 41, 59, 10, 32, 32, 99, 111, 110, // (''));. con
- 115, 116, 32, 99, 111, 110, 110, 115, 116, 97, 116, 117, // st connstatu
- 115, 32, 61, 32, 112, 114, 111, 112, 115, 46, 99, 111, // s = props.co
- 110, 102, 105, 103, 46, 99, 111, 110, 110, 101, 99, 116, // nfig.connect
- 101, 100, 32, 63, 32, 39, 99, 111, 110, 110, 101, 99, // ed ? 'connec
- 116, 101, 100, 39, 32, 58, 32, 39, 100, 105, 99, 111, // ted' : 'dico
- 110, 110, 101, 99, 116, 101, 100, 39, 59, 10, 32, 32, // nnected';.
- 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, 108, 96, // return html`
- 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, // ..
- 32, 60, 104, 51, 32, 115, 116, 121, 108, 101, 61, 34, //
MQTT mess
- 97, 103, 101, 115, 60, 47, 104, 51, 62, 10, 32, 32, // ages .
- 60, 100, 105, 118, 62, 10, 32, 32, 32, 32, 77, 81, //
. MQ
- 84, 84, 32, 115, 101, 114, 118, 101, 114, 32, 115, 116, // TT server st
- 97, 116, 117, 115, 58, 32, 60, 98, 62, 36, 123, 99, // atus: ${c
- 111, 110, 110, 115, 116, 97, 116, 117, 115, 125, 60, 47, // onnstatus}
- 98, 62, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, // b>.
.
- 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
. ${
- 109, 101, 115, 115, 97, 103, 101, 115, 46, 109, 97, 112, // messages.map
- 40, 109, 101, 115, 115, 97, 103, 101, 32, 61, 62, 32, // (message =>
- 104, 40, 77, 101, 115, 115, 97, 103, 101, 44, 32, 123, // h(Message, {
- 109, 101, 115, 115, 97, 103, 101, 125, 41, 41, 125, 10, // message}))}.
- 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. <
- 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 109, // div style="m
- 97, 114, 103, 105, 110, 58, 32, 48, 46, 53, 101, 109, // argin: 0.5em
- 32, 48, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, // 0; display:
- 32, 102, 108, 101, 120, 34, 62, 10, 32, 32, 32, 32, // flex">.
- 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, 61, //
Publish m
- 101, 115, 115, 97, 103, 101, 58, 60, 47, 115, 112, 97, // essage:. setTx
- 116, 40, 101, 118, 46, 116, 97, 114, 103, 101, 116, 46, // t(ev.target.
- 118, 97, 108, 117, 101, 41, 125, 32, 47, 62, 10, 32, // value)} />.
- 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, // . . Mess
- 97, 103, 101, 32, 103, 101, 116, 115, 32, 112, 97, 115, // age gets pas
- 115, 101, 100, 32, 116, 111, 32, 116, 104, 101, 32, 100, // sed to the d
- 101, 118, 105, 99, 101, 32, 118, 105, 97, 32, 82, 69, // evice via RE
- 83, 84, 46, 32, 84, 104, 101, 110, 32, 97, 32, 100, // ST. Then a d
- 101, 118, 105, 99, 101, 32, 115, 101, 110, 100, 115, 32, // evice sends
- 105, 116, 32, 116, 111, 10, 32, 32, 32, 32, 116, 104, // it to. th
- 101, 32, 77, 81, 84, 84, 32, 115, 101, 114, 118, 101, // e MQTT serve
- 114, 32, 111, 118, 101, 114, 32, 77, 81, 84, 84, 46, // r over MQTT.
- 32, 65, 108, 108, 32, 77, 81, 84, 84, 32, 109, 101, // All MQTT me
- 115, 115, 97, 103, 101, 115, 32, 111, 110, 32, 97, 32, // ssages on a
- 115, 117, 98, 115, 99, 114, 105, 98, 101, 100, 32, 116, // subscribed t
- 111, 112, 105, 99, 10, 32, 32, 32, 32, 114, 101, 99, // opic. rec
- 101, 105, 118, 101, 100, 32, 98, 121, 32, 97, 32, 100, // eived by a d
- 101, 118, 105, 99, 101, 44, 32, 97, 114, 101, 32, 112, // evice, are p
- 114, 111, 112, 97, 103, 97, 116, 101, 100, 32, 116, 111, // ropagated to
- 32, 116, 104, 105, 115, 32, 100, 97, 115, 104, 98, 111, // this dashbo
- 97, 114, 100, 32, 118, 105, 97, 32, 116, 104, 101, 10, // ard via the.
- 32, 32, 32, 32, 47, 97, 112, 105, 47, 119, 97, 116, // /api/wat
- 99, 104, 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, // ch..
- 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, // .`;.};
- 10, 10, 47, 47, 32, 69, 120, 112, 101, 99, 116, 101, // ..// Expecte
- 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 115, 58, // d arguments:
- 10, 47, 47, 32, 100, 97, 116, 97, 58, 32, 116, 105, // .// data: ti
- 109, 101, 115, 101, 114, 105, 101, 115, 44, 32, 101, 46, // meseries, e.
- 103, 46, 32, 91, 32, 91, 49, 54, 53, 52, 51, 54, // g. [ [165436
- 49, 51, 53, 50, 44, 32, 49, 57, 93, 44, 32, 91, // 1352, 19], [
- 49, 54, 53, 52, 51, 54, 49, 51, 53, 51, 44, 32, // 1654361353,
- 49, 56, 93, 44, 32, 46, 46, 46, 32, 93, 10, 47, // 18], ... ]./
- 47, 32, 119, 105, 100, 116, 104, 44, 32, 104, 101, 105, // / width, hei
- 103, 104, 116, 44, 32, 121, 116, 105, 99, 107, 115, 44, // ght, yticks,
- 32, 120, 116, 105, 99, 107, 115, 44, 32, 121, 109, 105, // xticks, ymi
- 110, 44, 32, 121, 109, 97, 120, 44, 32, 120, 109, 105, // n, ymax, xmi
- 110, 44, 32, 120, 109, 97, 120, 10, 99, 111, 110, 115, // n, xmax.cons
- 116, 32, 83, 86, 71, 32, 61, 32, 102, 117, 110, 99, // t SVG = func
- 116, 105, 111, 110, 40, 112, 114, 111, 112, 115, 41, 32, // tion(props)
- 123, 10, 32, 32, 47, 47, 32, 32, 32, 32, 32, 32, // {. //
- 32, 32, 32, 32, 32, 32, 119, 10, 32, 32, 47, 47, // w. //
- 32, 32, 32, 43, 45, 45, 45, 45, 45, 45, 45, 45, // +--------
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------
- 45, 43, 10, 32, 32, 47, 47, 32, 32, 32, 124, 32, // -+. // |
- 32, 32, 32, 32, 32, 32, 32, 104, 49, 32, 32, 32, // h1
- 32, 32, 32, 32, 32, 32, 32, 32, 124, 10, 32, 32, // |.
- 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, 43, 45, // // | +-
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 43, 32, // ----------+
- 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, 32, 32, // |. //
- 124, 32, 32, 32, 32, 124, 32, 32, 32, 32, 32, 32, // | |
- 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, 124, 32, // | |
- 32, 104, 10, 32, 32, 47, 47, 32, 32, 32, 124, 32, // h. // |
- 119, 49, 32, 124, 32, 32, 32, 32, 32, 32, 32, 32, // w1 |
- 32, 32, 32, 124, 32, 119, 50, 32, 124, 10, 32, 32, // | w2 |.
- 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, 43, 45, // // | +-
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 43, 32, // ----------+
- 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, 32, 32, // |. //
- 124, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 50, // | h2
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 10, // |.
- 32, 32, 47, 47, 32, 32, 32, 43, 45, 45, 45, 45, // // +----
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------
- 45, 45, 45, 45, 45, 43, 10, 32, 32, 47, 47, 10, // -----+. //.
- 32, 32, 108, 101, 116, 32, 119, 32, 61, 32, 112, 114, // let w = pr
- 111, 112, 115, 46, 119, 105, 100, 116, 104, 44, 32, 104, // ops.width, h
- 32, 61, 32, 112, 114, 111, 112, 115, 46, 104, 101, 105, // = props.hei
- 103, 104, 116, 44, 32, 119, 49, 32, 61, 32, 51, 48, // ght, w1 = 30
- 44, 32, 119, 50, 32, 61, 32, 48, 44, 32, 104, 49, // , w2 = 0, h1
- 32, 61, 32, 56, 44, 32, 104, 50, 32, 61, 32, 49, // = 8, h2 = 1
- 56, 59, 10, 32, 32, 108, 101, 116, 32, 121, 116, 105, // 8;. let yti
- 99, 107, 115, 32, 61, 32, 112, 114, 111, 112, 115, 46, // cks = props.
- 121, 116, 105, 99, 107, 115, 32, 124, 124, 32, 52, 44, // yticks || 4,
- 32, 120, 116, 105, 99, 107, 115, 32, 61, 32, 112, 114, // xticks = pr
- 111, 112, 115, 46, 120, 116, 105, 99, 107, 115, 32, 124, // ops.xticks |
- 124, 32, 53, 59, 10, 32, 32, 108, 101, 116, 32, 100, // | 5;. let d
- 97, 116, 97, 32, 61, 32, 112, 114, 111, 112, 115, 46, // ata = props.
- 100, 97, 116, 97, 32, 124, 124, 32, 91, 93, 59, 10, // data || [];.
- 32, 32, 108, 101, 116, 32, 121, 109, 105, 110, 32, 61, // let ymin =
- 32, 112, 114, 111, 112, 115, 46, 121, 109, 105, 110, 32, // props.ymin
- 124, 124, 32, 48, 59, 10, 32, 32, 108, 101, 116, 32, // || 0;. let
- 121, 109, 97, 120, 32, 61, 32, 112, 114, 111, 112, 115, // ymax = props
- 46, 121, 109, 97, 120, 32, 124, 124, 32, 77, 97, 116, // .ymax || Mat
- 104, 46, 109, 97, 120, 46, 97, 112, 112, 108, 121, 40, // h.max.apply(
- 110, 117, 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, // null, data.m
- 97, 112, 40, 112, 32, 61, 62, 32, 112, 91, 49, 93, // ap(p => p[1]
- 41, 41, 59, 10, 32, 32, 108, 101, 116, 32, 120, 109, // ));. let xm
- 105, 110, 32, 61, 32, 112, 114, 111, 112, 115, 46, 120, // in = props.x
- 109, 105, 110, 32, 124, 124, 32, 77, 97, 116, 104, 46, // min || Math.
- 109, 105, 110, 46, 97, 112, 112, 108, 121, 40, 110, 117, // min.apply(nu
- 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, 97, 112, // ll, data.map
- 40, 112, 32, 61, 62, 32, 112, 91, 48, 93, 41, 41, // (p => p[0]))
- 59, 10, 32, 32, 108, 101, 116, 32, 120, 109, 97, 120, // ;. let xmax
- 32, 61, 32, 112, 114, 111, 112, 115, 46, 120, 109, 97, // = props.xma
- 120, 32, 124, 124, 32, 77, 97, 116, 104, 46, 109, 97, // x || Math.ma
- 120, 46, 97, 112, 112, 108, 121, 40, 110, 117, 108, 108, // x.apply(null
- 44, 32, 100, 97, 116, 97, 46, 109, 97, 112, 40, 112, // , data.map(p
- 32, 61, 62, 32, 112, 91, 48, 93, 41, 41, 59, 10, // => p[0]));.
- 10, 32, 32, 47, 47, 32, 89, 45, 97, 120, 105, 115, // . // Y-axis
- 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, 115, 32, // tick lines
- 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, 10, 32, // and labels.
- 32, 108, 101, 116, 32, 121, 116, 97, 32, 61, 32, 40, // let yta = (
- 110, 101, 119, 32, 65, 114, 114, 97, 121, 40, 121, 116, // new Array(yt
- 105, 99, 107, 115, 32, 43, 32, 49, 41, 41, 46, 102, // icks + 1)).f
- 105, 108, 108, 40, 48, 41, 46, 109, 97, 112, 40, 40, // ill(0).map((
- 95, 44, 32, 105, 41, 32, 61, 62, 32, 105, 41, 59, // _, i) => i);
- 32, 32, 47, 47, 32, 105, 110, 100, 105, 99, 101, 115, // // indices
- 10, 32, 32, 108, 101, 116, 32, 121, 116, 105, 32, 61, // . let yti =
- 32, 105, 32, 61, 62, 32, 104, 32, 45, 32, 104, 50, // i => h - h2
- 32, 45, 32, 40, 104, 32, 45, 32, 104, 49, 32, 45, // - (h - h1 -
- 32, 104, 50, 41, 32, 42, 32, 105, 32, 47, 32, 121, // h2) * i / y
- 116, 105, 99, 107, 115, 59, 32, 32, 32, 32, 32, 32, // ticks;
- 32, 32, 32, 32, 47, 47, 32, 105, 110, 100, 101, 120, // // index
- 39, 115, 32, 89, 10, 32, 32, 108, 101, 116, 32, 121, // 's Y. let y
- 116, 118, 32, 61, 32, 105, 32, 61, 62, 32, 40, 121, // tv = i => (y
- 109, 97, 120, 32, 45, 32, 121, 109, 105, 110, 41, 32, // max - ymin)
- 42, 32, 105, 32, 47, 32, 121, 116, 105, 99, 107, 115, // * i / yticks
- 59, 10, 32, 32, 108, 101, 116, 32, 121, 116, 108, 32, // ;. let ytl
- 61, 32, 121, 32, 61, 62, 32, 104, 116, 109, 108, 96, // = y => html`
- 60, 108, 105, 110, 101, 32, 120, 49, 61, 36, 123, 119, // `;. le
- 116, 32, 121, 116, 116, 32, 61, 32, 40, 121, 44, 32, // t ytt = (y,
- 118, 41, 32, 61, 62, 32, 104, 116, 109, 108, 96, 60, // v) => html`<
- 116, 101, 120, 116, 32, 120, 61, 48, 32, 121, 61, 36, // text x=0 y=$
- 123, 121, 32, 43, 32, 53, 125, 32, 99, 108, 97, 115, // {y + 5} clas
- 115, 61, 34, 108, 97, 98, 101, 108, 34, 62, 36, 123, // s="label">${
- 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, 59, 10, // v}`;.
- 10, 32, 32, 47, 47, 32, 88, 45, 97, 120, 105, 115, // . // X-axis
- 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, 115, 32, // tick lines
- 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, 10, 32, // and labels.
- 32, 108, 101, 116, 32, 100, 97, 116, 101, 102, 109, 116, // let datefmt
- 32, 61, 32, 117, 110, 105, 120, 32, 61, 62, 32, 40, // = unix => (
- 110, 101, 119, 32, 68, 97, 116, 101, 40, 117, 110, 105, // new Date(uni
- 120, 32, 42, 32, 49, 48, 48, 48, 41, 41, 46, 116, // x * 1000)).t
- 111, 73, 83, 79, 83, 116, 114, 105, 110, 103, 40, 41, // oISOString()
- 46, 115, 117, 98, 115, 116, 114, 40, 49, 52, 44, 32, // .substr(14,
- 53, 41, 59, 10, 32, 32, 108, 101, 116, 32, 120, 116, // 5);. let xt
- 97, 32, 61, 32, 40, 110, 101, 119, 32, 65, 114, 114, // a = (new Arr
- 97, 121, 40, 120, 116, 105, 99, 107, 115, 32, 43, 32, // ay(xticks +
- 49, 41, 41, 46, 102, 105, 108, 108, 40, 48, 41, 46, // 1)).fill(0).
- 109, 97, 112, 40, 40, 95, 44, 32, 105, 41, 32, 61, // map((_, i) =
- 62, 32, 105, 41, 59, 32, 32, 47, 47, 32, 105, 110, // > i); // in
- 100, 105, 99, 101, 115, 10, 32, 32, 108, 101, 116, 32, // dices. let
- 120, 116, 105, 32, 61, 32, 105, 32, 61, 62, 32, 119, // xti = i => w
- 49, 32, 43, 32, 40, 119, 32, 45, 32, 119, 49, 32, // 1 + (w - w1
- 45, 32, 119, 50, 41, 32, 42, 32, 105, 32, 47, 32, // - w2) * i /
- 120, 116, 105, 99, 107, 115, 59, 32, 32, 32, 32, 32, // xticks;
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, 47, 32, // //
- 105, 110, 100, 101, 120, 39, 115, 32, 88, 10, 32, 32, // index's X.
- 108, 101, 116, 32, 120, 116, 118, 32, 61, 32, 105, 32, // let xtv = i
- 61, 62, 32, 100, 97, 116, 101, 102, 109, 116, 40, 120, // => datefmt(x
- 109, 105, 110, 32, 43, 32, 40, 120, 109, 97, 120, 32, // min + (xmax
- 45, 32, 120, 109, 105, 110, 41, 32, 42, 32, 105, 32, // - xmin) * i
- 47, 32, 120, 116, 105, 99, 107, 115, 41, 59, 10, 32, // / xticks);.
- 32, 108, 101, 116, 32, 120, 116, 108, 32, 61, 32, 120, // let xtl = x
- 32, 61, 62, 32, 104, 116, 109, 108, 96, 60, 112, 97, // => html` `;. let
- 120, 116, 116, 32, 61, 32, 40, 120, 44, 32, 118, 41, // xtt = (x, v)
- 32, 61, 62, 10, 32, 32, 32, 32, 32, 32, 104, 116, // =>. ht
- 109, 108, 96, 60, 116, 101, 120, 116, 32, 120, 61, 36, // ml`${
- 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, 59, 10, // v} `;.
- 10, 32, 32, 47, 47, 32, 84, 114, 97, 110, 115, 102, // . // Transf
- 111, 114, 109, 32, 100, 97, 116, 97, 32, 112, 111, 105, // orm data poi
- 110, 116, 115, 32, 97, 114, 114, 97, 121, 32, 105, 110, // nts array in
- 116, 111, 32, 99, 111, 111, 114, 100, 105, 110, 97, 116, // to coordinat
- 101, 10, 32, 32, 108, 101, 116, 32, 100, 120, 32, 61, // e. let dx =
- 32, 118, 32, 61, 62, 32, 119, 49, 32, 43, 32, 40, // v => w1 + (
- 118, 32, 45, 32, 120, 109, 105, 110, 41, 32, 47, 32, // v - xmin) /
- 40, 40, 120, 109, 97, 120, 32, 45, 32, 120, 109, 105, // ((xmax - xmi
- 110, 41, 32, 124, 124, 32, 49, 41, 32, 42, 32, 40, // n) || 1) * (
- 119, 32, 45, 32, 119, 49, 32, 45, 32, 119, 50, 41, // w - w1 - w2)
- 59, 10, 32, 32, 108, 101, 116, 32, 100, 121, 32, 61, // ;. let dy =
- 32, 118, 32, 61, 62, 32, 104, 32, 45, 32, 104, 50, // v => h - h2
- 32, 45, 32, 40, 118, 32, 45, 32, 121, 109, 105, 110, // - (v - ymin
- 41, 32, 47, 32, 40, 40, 121, 109, 97, 120, 32, 45, // ) / ((ymax -
- 32, 121, 109, 105, 110, 41, 32, 124, 124, 32, 49, 41, // ymin) || 1)
- 32, 42, 32, 40, 104, 32, 45, 32, 104, 49, 32, 45, // * (h - h1 -
- 32, 104, 50, 41, 59, 10, 32, 32, 108, 101, 116, 32, // h2);. let
- 100, 100, 32, 61, 32, 100, 97, 116, 97, 46, 109, 97, // dd = data.ma
- 112, 40, 112, 32, 61, 62, 32, 91, 77, 97, 116, 104, // p(p => [Math
- 46, 114, 111, 117, 110, 100, 40, 100, 120, 40, 112, 91, // .round(dx(p[
- 48, 93, 41, 41, 44, 32, 77, 97, 116, 104, 46, 114, // 0])), Math.r
- 111, 117, 110, 100, 40, 100, 121, 40, 112, 91, 49, 93, // ound(dy(p[1]
- 41, 41, 93, 41, 59, 10, 32, 32, 108, 101, 116, 32, // ))]);. let
- 100, 100, 108, 32, 61, 32, 100, 100, 46, 108, 101, 110, // ddl = dd.len
- 103, 116, 104, 59, 10, 32, 32, 47, 47, 32, 65, 110, // gth;. // An
- 100, 32, 112, 108, 111, 116, 32, 116, 104, 101, 32, 100, // d plot the d
- 97, 116, 97, 32, 97, 115, 32, 60, 112, 97, 116, 104, // ata as element.
- 108, 101, 116, 32, 98, 101, 103, 105, 110, 48, 32, 61, // let begin0 =
- 32, 100, 100, 108, 32, 63, 32, 96, 77, 32, 36, 123, // ddl ? `M ${
- 100, 100, 91, 48, 93, 91, 48, 93, 125, 44, 36, 123, // dd[0][0]},${
- 100, 100, 91, 48, 93, 91, 49, 93, 125, 96, 32, 58, // dd[0][1]}` :
- 32, 96, 77, 32, 48, 44, 48, 96, 59, 10, 32, 32, // `M 0,0`;.
- 108, 101, 116, 32, 98, 101, 103, 105, 110, 32, 61, 32, // let begin =
- 96, 77, 32, 36, 123, 119, 49, 125, 44, 36, 123, 104, // `M ${w1},${h
- 32, 45, 32, 104, 50, 125, 96, 59, 32, 32, 47, 47, // - h2}`; //
- 32, 73, 110, 105, 116, 105, 97, 108, 32, 112, 111, 105, // Initial poi
- 110, 116, 10, 32, 32, 108, 101, 116, 32, 101, 110, 100, // nt. let end
- 32, 61, 32, 100, 100, 108, 32, 63, 32, 96, 76, 32, // = ddl ? `L
- 36, 123, 100, 100, 91, 100, 100, 108, 32, 45, 32, 49, // ${dd[ddl - 1
- 93, 91, 48, 93, 125, 44, 36, 123, 104, 32, 45, 32, // ][0]},${h -
- 104, 50, 125, 96, 32, 58, 32, 96, 76, 32, 36, 123, // h2}` : `L ${
- 119, 49, 125, 44, 36, 123, 104, 32, 45, 32, 104, 50, // w1},${h - h2
- 125, 96, 59, 10, 32, 32, 108, 101, 116, 32, 115, 101, // }`;. let se
- 114, 105, 101, 115, 32, 61, 32, 100, 100, 108, 32, 63, // ries = ddl ?
- 32, 100, 100, 46, 109, 97, 112, 40, 112, 32, 61, 62, // dd.map(p =>
- 32, 96, 76, 32, 36, 123, 112, 91, 48, 93, 125, 32, // `L ${p[0]}
- 36, 123, 112, 91, 49, 93, 125, 96, 41, 32, 58, 32, // ${p[1]}`) :
- 91, 93, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, // [];.. retur
- 110, 32, 104, 116, 109, 108, 96, 10, 60, 115, 118, 103, // n html`.. . $
- 123, 121, 116, 97, 46, 109, 97, 112, 40, 105, 32, 61, // {yta.map(i =
- 62, 32, 121, 116, 108, 40, 121, 116, 105, 40, 105, 41, // > ytl(yti(i)
- 41, 41, 125, 10, 32, 32, 36, 123, 121, 116, 97, 46, // ))}. ${yta.
- 109, 97, 112, 40, 105, 32, 61, 62, 32, 121, 116, 116, // map(i => ytt
- 40, 121, 116, 105, 40, 105, 41, 44, 32, 121, 116, 118, // (yti(i), ytv
- 40, 105, 41, 41, 41, 125, 10, 32, 32, 36, 123, 120, // (i)))}. ${x
- 116, 97, 46, 109, 97, 112, 40, 105, 32, 61, 62, 32, // ta.map(i =>
- 120, 116, 108, 40, 120, 116, 105, 40, 105, 41, 41, 41, // xtl(xti(i)))
- 125, 10, 32, 32, 36, 123, 100, 97, 116, 97, 46, 108, // }. ${data.l
- 101, 110, 103, 116, 104, 32, 63, 32, 120, 116, 97, 46, // ength ? xta.
- 109, 97, 112, 40, 105, 32, 61, 62, 32, 120, 116, 116, // map(i => xtt
- 40, 120, 116, 105, 40, 105, 41, 44, 32, 120, 116, 118, // (xti(i), xtv
- 40, 105, 41, 41, 41, 32, 58, 32, 39, 39, 125, 10, // (i))) : ''}.
- 32, 32, 60, 112, 97, 116, 104, 32, 100, 61, 34, 36, // .
.`;.};...co
- 110, 115, 116, 32, 67, 104, 97, 114, 116, 32, 61, 32, // nst Chart =
- 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, 114, 111, // function(pro
- 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, 110, 115, // ps) {. cons
- 116, 32, 91, 100, 97, 116, 97, 44, 32, 115, 101, 116, // t [data, set
- 68, 97, 116, 97, 93, 32, 61, 32, 117, 115, 101, 83, // Data] = useS
- 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, 32, 32, // tate([]);.
- 117, 115, 101, 69, 102, 102, 101, 99, 116, 40, 40, 41, // useEffect(()
- 32, 61, 62, 32, 123, 10, 32, 32, 32, 32, 99, 111, // => {. co
- 110, 115, 116, 32, 105, 100, 32, 61, 32, 80, 117, 98, // nst id = Pub
- 83, 117, 98, 46, 115, 117, 98, 115, 99, 114, 105, 98, // Sub.subscrib
- 101, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 109, // e(function(m
- 115, 103, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, // sg) {.
- 105, 102, 32, 40, 109, 115, 103, 46, 110, 97, 109, 101, // if (msg.name
- 32, 33, 61, 32, 39, 109, 101, 116, 114, 105, 99, 115, // != 'metrics
- 39, 41, 32, 114, 101, 116, 117, 114, 110, 59, 10, 32, // ') return;.
- 32, 32, 32, 32, 32, 115, 101, 116, 68, 97, 116, 97, // setData
- 40, 120, 32, 61, 62, 32, 120, 46, 99, 111, 110, 99, // (x => x.conc
- 97, 116, 40, 91, 109, 115, 103, 46, 100, 97, 116, 97, // at([msg.data
- 93, 41, 46, 115, 112, 108, 105, 99, 101, 40, 45, 77, // ]).splice(-M
- 97, 120, 77, 101, 116, 114, 105, 99, 115, 68, 97, 116, // axMetricsDat
- 97, 80, 111, 105, 110, 116, 115, 41, 41, 59, 10, 32, // aPoints));.
- 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, 32, 114, // });. r
- 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, 117, 98, // eturn PubSub
- 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, // .unsubscribe
- 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, 32, 91, // (id);. }, [
- 93, 41, 59, 10, 10, 32, 32, 108, 101, 116, 32, 120, // ]);.. let x
- 109, 97, 120, 32, 61, 32, 48, 44, 32, 109, 105, 115, // max = 0, mis
- 115, 105, 110, 103, 32, 61, 32, 77, 97, 120, 77, 101, // sing = MaxMe
- 116, 114, 105, 99, 115, 68, 97, 116, 97, 80, 111, 105, // tricsDataPoi
- 110, 116, 115, 32, 45, 32, 100, 97, 116, 97, 46, 108, // nts - data.l
- 101, 110, 103, 116, 104, 59, 10, 32, 32, 105, 102, 32, // ength;. if
- 40, 109, 105, 115, 115, 105, 110, 103, 32, 62, 32, 48, // (missing > 0
- 41, 32, 120, 109, 97, 120, 32, 61, 32, 77, 97, 116, // ) xmax = Mat
- 104, 46, 114, 111, 117, 110, 100, 40, 68, 97, 116, 101, // h.round(Date
- 46, 110, 111, 119, 40, 41, 32, 47, 32, 49, 48, 48, // .now() / 100
- 48, 41, 32, 43, 32, 109, 105, 115, 115, 105, 110, 103, // 0) + missing
- 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, // ;. return h
- 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, 99, 108, // tml`..
Data Cha
- 114, 116, 60, 47, 104, 51, 62, 10, 32, 32, 60, 100, // rt . . <${
- 83, 86, 71, 125, 32, 104, 101, 105, 103, 104, 116, 61, // SVG} height=
- 50, 52, 48, 32, 119, 105, 100, 116, 104, 61, 54, 48, // 240 width=60
- 48, 32, 121, 109, 105, 110, 61, 48, 32, 121, 109, 97, // 0 ymin=0 yma
- 120, 61, 50, 48, 32, 120, 109, 97, 120, 61, 36, 123, // x=20 xmax=${
- 120, 109, 97, 120, 125, 32, 100, 97, 116, 97, 61, 36, // xmax} data=$
- 123, 100, 97, 116, 97, 125, 32, 47, 62, 10, 32, 32, // {data} />.
- 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, 105, //
. . This
- 99, 104, 97, 114, 116, 32, 112, 108, 111, 116, 115, 32, // chart plots
- 108, 105, 118, 101, 32, 115, 101, 110, 115, 111, 114, 32, // live sensor
- 100, 97, 116, 97, 44, 32, 115, 101, 110, 116, 32, 98, // data, sent b
- 121, 32, 97, 32, 100, 101, 118, 105, 99, 101, 32, 118, // y a device v
- 105, 97, 32, 47, 97, 112, 105, 47, 119, 97, 116, 99, // ia /api/watc
- 104, 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, // h.. .
- 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, 10, // `;.};.
- 10, 99, 111, 110, 115, 116, 32, 65, 112, 112, 32, 61, // .const App =
- 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, 114, // function(pr
- 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, 110, // ops) {. con
- 115, 116, 32, 91, 117, 115, 101, 114, 44, 32, 115, 101, // st [user, se
- 116, 85, 115, 101, 114, 93, 32, 61, 32, 117, 115, 101, // tUser] = use
- 83, 116, 97, 116, 101, 40, 39, 39, 41, 59, 10, 32, // State('');.
- 32, 99, 111, 110, 115, 116, 32, 91, 99, 111, 110, 102, // const [conf
- 105, 103, 44, 32, 115, 101, 116, 67, 111, 110, 102, 105, // ig, setConfi
- 103, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, 116, // g] = useStat
- 101, 40, 123, 125, 41, 59, 10, 10, 32, 32, 99, 111, // e({});.. co
- 110, 115, 116, 32, 103, 101, 116, 99, 111, 110, 102, 105, // nst getconfi
- 103, 32, 61, 32, 40, 41, 32, 61, 62, 10, 32, 32, // g = () =>.
- 32, 32, 32, 32, 102, 101, 116, 99, 104, 40, 39, 47, // fetch('/
- 97, 112, 105, 47, 99, 111, 110, 102, 105, 103, 47, 103, // api/config/g
- 101, 116, 39, 44, 32, 123, 104, 101, 97, 100, 101, 114, // et', {header
- 115, 58, 32, 123, 65, 117, 116, 104, 111, 114, 105, 122, // s: {Authoriz
- 97, 116, 105, 111, 110, 58, 32, 39, 39, 125, 125, 41, // ation: ''}})
- 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, // . .
- 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, 46, // then(r => r.
- 106, 115, 111, 110, 40, 41, 41, 10, 32, 32, 32, 32, // json()).
- 32, 32, 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, // .then(
- 114, 32, 61, 62, 32, 115, 101, 116, 67, 111, 110, 102, // r => setConf
- 105, 103, 40, 114, 41, 41, 10, 32, 32, 32, 32, 32, // ig(r)).
- 32, 32, 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, // .catch(
- 101, 114, 114, 32, 61, 62, 32, 99, 111, 110, 115, 111, // err => conso
- 108, 101, 46, 108, 111, 103, 40, 101, 114, 114, 41, 41, // le.log(err))
- 59, 10, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, // ;.. const l
- 111, 103, 105, 110, 32, 61, 32, 102, 117, 110, 99, 116, // ogin = funct
- 105, 111, 110, 40, 117, 41, 32, 123, 10, 32, 32, 32, // ion(u) {.
- 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, // document.co
- 111, 107, 105, 101, 32, 61, 32, 96, 97, 99, 99, 101, // okie = `acce
- 115, 115, 95, 116, 111, 107, 101, 110, 61, 36, 123, 117, // ss_token=${u
- 46, 116, 111, 107, 101, 110, 125, 59, 112, 97, 116, 104, // .token};path
- 61, 47, 59, 109, 97, 120, 45, 97, 103, 101, 61, 51, // =/;max-age=3
- 54, 48, 48, 96, 59, 10, 32, 32, 32, 32, 115, 101, // 600`;. se
- 116, 85, 115, 101, 114, 40, 117, 46, 117, 115, 101, 114, // tUser(u.user
- 41, 59, 10, 32, 32, 32, 32, 114, 101, 116, 117, 114, // );. retur
- 110, 32, 103, 101, 116, 99, 111, 110, 102, 105, 103, 40, // n getconfig(
- 41, 59, 10, 32, 32, 125, 59, 10, 10, 32, 32, 99, // );. };.. c
- 111, 110, 115, 116, 32, 108, 111, 103, 111, 117, 116, 32, // onst logout
- 61, 32, 101, 118, 32, 61, 62, 32, 123, 10, 32, 32, // = ev => {.
- 32, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, // document.c
- 111, 111, 107, 105, 101, 32, 61, 32, 96, 97, 99, 99, // ookie = `acc
- 101, 115, 115, 95, 116, 111, 107, 101, 110, 61, 59, 112, // ess_token=;p
- 97, 116, 104, 61, 47, 59, 109, 97, 120, 45, 97, 103, // ath=/;max-ag
- 101, 61, 48, 96, 59, 10, 32, 32, 32, 32, 115, 101, // e=0`;. se
- 116, 85, 115, 101, 114, 40, 39, 39, 41, 59, 10, 32, // tUser('');.
- 32, 125, 59, 10, 10, 32, 32, 47, 47, 32, 87, 97, // };.. // Wa
- 116, 99, 104, 32, 102, 111, 114, 32, 110, 111, 116, 105, // tch for noti
- 102, 105, 99, 97, 116, 105, 111, 110, 115, 46, 32, 65, // fications. A
- 115, 32, 115, 111, 111, 110, 32, 97, 115, 32, 97, 32, // s soon as a
- 110, 111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, // notification
- 32, 97, 114, 114, 105, 118, 101, 115, 44, 32, 112, 97, // arrives, pa
- 115, 115, 32, 105, 116, 32, 111, 110, 10, 32, 32, 47, // ss it on. /
- 47, 32, 116, 111, 32, 97, 108, 108, 32, 115, 117, 98, // / to all sub
- 115, 99, 114, 105, 98, 101, 100, 32, 99, 111, 109, 112, // scribed comp
- 111, 110, 101, 110, 116, 115, 10, 32, 32, 99, 111, 110, // onents. con
- 115, 116, 32, 119, 97, 116, 99, 104, 32, 61, 32, 102, // st watch = f
- 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, // unction() {.
- 32, 32, 32, 32, 118, 97, 114, 32, 108, 32, 61, 32, // var l =
- 119, 105, 110, 100, 111, 119, 46, 108, 111, 99, 97, 116, // window.locat
- 105, 111, 110, 44, 32, 112, 114, 111, 116, 111, 32, 61, // ion, proto =
- 32, 108, 46, 112, 114, 111, 116, 111, 99, 111, 108, 46, // l.protocol.
- 114, 101, 112, 108, 97, 99, 101, 40, 39, 104, 116, 116, // replace('htt
- 112, 39, 44, 32, 39, 119, 115, 39, 41, 59, 10, 32, // p', 'ws');.
- 32, 32, 32, 118, 97, 114, 32, 116, 105, 100, 44, 32, // var tid,
- 119, 115, 85, 82, 73, 32, 61, 32, 112, 114, 111, 116, // wsURI = prot
- 111, 32, 43, 32, 39, 47, 47, 39, 32, 43, 32, 108, // o + '//' + l
- 46, 104, 111, 115, 116, 32, 43, 32, 39, 47, 97, 112, // .host + '/ap
- 105, 47, 119, 97, 116, 99, 104, 39, 10, 32, 32, 32, // i/watch'.
- 32, 118, 97, 114, 32, 114, 101, 99, 111, 110, 110, 101, // var reconne
- 99, 116, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // ct = functio
- 110, 40, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, // n() {.
- 118, 97, 114, 32, 119, 115, 32, 61, 32, 110, 101, 119, // var ws = new
- 32, 87, 101, 98, 83, 111, 99, 107, 101, 116, 40, 119, // WebSocket(w
- 115, 85, 82, 73, 41, 59, 10, 32, 32, 32, 32, 32, // sURI);.
- 32, 119, 115, 46, 111, 110, 111, 112, 101, 110, 32, 61, // ws.onopen =
- 32, 40, 41, 32, 61, 62, 32, 99, 111, 110, 115, 111, // () => conso
- 108, 101, 46, 108, 111, 103, 40, 39, 119, 115, 32, 99, // le.log('ws c
- 111, 110, 110, 101, 99, 116, 101, 100, 39, 41, 59, 10, // onnected');.
- 32, 32, 32, 32, 32, 32, 119, 115, 46, 111, 110, 109, // ws.onm
- 101, 115, 115, 97, 103, 101, 32, 61, 32, 102, 117, 110, // essage = fun
- 99, 116, 105, 111, 110, 40, 101, 118, 41, 32, 123, 10, // ction(ev) {.
- 32, 32, 32, 32, 32, 32, 32, 32, 116, 114, 121, 32, // try
- 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // {.
- 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 74, 83, // var msg = JS
- 79, 78, 46, 112, 97, 114, 115, 101, 40, 101, 118, 46, // ON.parse(ev.
- 100, 97, 116, 97, 41, 59, 10, 32, 32, 32, 32, 32, // data);.
- 32, 32, 32, 32, 32, 80, 117, 98, 83, 117, 98, 46, // PubSub.
- 112, 117, 98, 108, 105, 115, 104, 40, 109, 115, 103, 41, // publish(msg)
- 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // ;.
- 105, 102, 32, 40, 109, 115, 103, 46, 110, 97, 109, 101, // if (msg.name
- 32, 33, 61, 32, 39, 109, 101, 116, 114, 105, 99, 115, // != 'metrics
- 39, 41, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // ') console.l
- 111, 103, 40, 39, 119, 115, 45, 62, 39, 44, 32, 109, // og('ws->', m
- 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, // sg);.
- 32, 125, 32, 99, 97, 116, 99, 104, 32, 40, 101, 41, // } catch (e)
- 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // {.
- 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, // console.log
- 40, 39, 73, 110, 118, 97, 108, 105, 100, 32, 119, 115, // ('Invalid ws
- 32, 102, 114, 97, 109, 101, 58, 39, 44, 32, 101, 118, // frame:', ev
- 46, 100, 97, 116, 97, 41, 59, 32, 32, 47, 47, 32, // .data); //
- 101, 115, 108, 105, 110, 116, 45, 100, 105, 115, 97, 98, // eslint-disab
- 108, 101, 45, 108, 105, 110, 101, 10, 32, 32, 32, 32, // le-line.
- 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 32, 32, // }.
- 125, 59, 10, 32, 32, 32, 32, 32, 32, 119, 115, 46, // };. ws.
- 111, 110, 99, 108, 111, 115, 101, 32, 61, 32, 102, 117, // onclose = fu
- 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, 32, // nction() {.
- 32, 32, 32, 32, 32, 32, 32, 99, 108, 101, 97, 114, // clear
- 84, 105, 109, 101, 111, 117, 116, 40, 116, 105, 100, 41, // Timeout(tid)
- 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 116, 105, // ;. ti
- 100, 32, 61, 32, 115, 101, 116, 84, 105, 109, 101, 111, // d = setTimeo
- 117, 116, 40, 114, 101, 99, 111, 110, 110, 101, 99, 116, // ut(reconnect
- 44, 32, 49, 48, 48, 48, 41, 59, 10, 32, 32, 32, // , 1000);.
- 32, 32, 32, 32, 32, 99, 111, 110, 115, 111, 108, 101, // console
- 46, 108, 111, 103, 40, 39, 119, 115, 32, 100, 105, 115, // .log('ws dis
- 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, 41, 59, // connected');
- 10, 32, 32, 32, 32, 32, 32, 125, 59, 10, 32, 32, // . };.
- 32, 32, 125, 59, 10, 32, 32, 32, 32, 114, 101, 99, // };. rec
- 111, 110, 110, 101, 99, 116, 40, 41, 59, 10, 32, 32, // onnect();.
- 125, 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, 102, // };.. useEff
- 101, 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, 10, // ect(() => {.
- 32, 32, 32, 32, 47, 47, 32, 67, 97, 108, 108, 101, // // Calle
- 100, 32, 111, 110, 99, 101, 32, 97, 116, 32, 105, 110, // d once at in
- 105, 116, 32, 116, 105, 109, 101, 10, 32, 32, 32, 32, // it time.
- 80, 117, 98, 83, 117, 98, 46, 115, 117, 98, 115, 99, // PubSub.subsc
- 114, 105, 98, 101, 40, 109, 115, 103, 32, 61, 62, 32, // ribe(msg =>
- 109, 115, 103, 46, 110, 97, 109, 101, 32, 61, 61, 32, // msg.name ==
- 39, 99, 111, 110, 102, 105, 103, 39, 32, 38, 38, 32, // 'config' &&
- 103, 101, 116, 99, 111, 110, 102, 105, 103, 40, 41, 41, // getconfig())
- 59, 10, 32, 32, 32, 32, 102, 101, 116, 99, 104, 40, // ;. fetch(
- 39, 47, 97, 112, 105, 47, 108, 111, 103, 105, 110, 39, // '/api/login'
- 44, 32, 123, 104, 101, 97, 100, 101, 114, 115, 58, 32, // , {headers:
- 123, 65, 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, // {Authorizati
- 111, 110, 58, 32, 39, 39, 125, 125, 41, 10, 32, 32, // on: ''}}).
- 32, 32, 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, // .then(
- 114, 32, 61, 62, 32, 114, 46, 106, 115, 111, 110, 40, // r => r.json(
- 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, // )). .
- 116, 104, 101, 110, 40, 114, 32, 61, 62, 32, 108, 111, // then(r => lo
- 103, 105, 110, 40, 114, 41, 41, 10, 32, 32, 32, 32, // gin(r)).
- 32, 32, 32, 32, 46, 116, 104, 101, 110, 40, 119, 97, // .then(wa
- 116, 99, 104, 41, 10, 32, 32, 32, 32, 32, 32, 32, // tch).
- 32, 46, 99, 97, 116, 99, 104, 40, 101, 114, 114, 32, // .catch(err
- 61, 62, 32, 115, 101, 116, 85, 115, 101, 114, 40, 39, // => setUser('
- 39, 41, 41, 59, 10, 32, 32, 125, 44, 32, 91, 93, // '));. }, []
- 41, 59, 10, 10, 32, 32, 105, 102, 32, 40, 33, 117, // );.. if (!u
- 115, 101, 114, 41, 32, 114, 101, 116, 117, 114, 110, 32, // ser) return
- 104, 116, 109, 108, 96, 60, 36, 123, 76, 111, 103, 105, // html`<${Logi
- 110, 125, 32, 108, 111, 103, 105, 110, 61, 36, 123, 108, // n} login=${l
- 111, 103, 105, 110, 125, 32, 47, 62, 96, 59, 10, 10, // ogin} />`;..
- 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm
- 108, 96, 10, 60, 36, 123, 78, 97, 118, 125, 32, 117, // l`.<${Nav} u
- 115, 101, 114, 61, 36, 123, 117, 115, 101, 114, 125, 32, // ser=${user}
- 108, 111, 103, 111, 117, 116, 61, 36, 123, 108, 111, 103, // logout=${log
- 111, 117, 116, 125, 32, 47, 62, 10, 60, 100, 105, 118, // out} />..
. <${He
- 114, 111, 125, 32, 47, 62, 60, 47, 100, 105, 118, 62, // ro} />
- 10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, // . <${Chart
- 125, 32, 47, 62, 60, 47, 100, 105, 118, 62, 10, 32, // } />
.
- 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, // . ${u
- 115, 101, 114, 32, 61, 61, 32, 39, 97, 100, 109, 105, // ser == 'admi
- 110, 39, 32, 38, 38, 32, 104, 40, 67, 111, 110, 102, // n' && h(Conf
- 105, 103, 117, 114, 97, 116, 105, 111, 110, 44, 32, 123, // iguration, {
- 99, 111, 110, 102, 105, 103, 125, 41, 125, 10, 32, 32, // config})}.
- 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 32, //
.
- 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, //
- 60, 36, 123, 77, 101, 115, 115, 97, 103, 101, 115, 125, // <${Messages}
- 32, 99, 111, 110, 102, 105, 103, 61, 36, 123, 99, 111, // config=${co
- 110, 102, 105, 103, 125, 32, 47, 62, 60, 47, 100, 105, // nfig} />.
.
- 60, 47, 100, 105, 118, 62, 96, 59, 10, 125, 59, 10, // `;.};.
- 10, 119, 105, 110, 100, 111, 119, 46, 111, 110, 108, 111, // .window.onlo
- 97, 100, 32, 61, 32, 40, 41, 32, 61, 62, 32, 114, // ad = () => r
- 101, 110, 100, 101, 114, 40, 104, 40, 65, 112, 112, 41, // ender(h(App)
- 44, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 98, // , document.b
- 111, 100, 121, 41, 59, 10, 0 // ody);.
-};
-static const unsigned char v3[] = {
118, 97, 114, 32, 101, 44, 110, 44, 95, 44, 116, 44, // var e,n,_,t,
111, 44, 114, 44, 117, 44, 108, 61, 123, 125, 44, 105, // o,r,u,l={},i
61, 91, 93, 44, 99, 61, 47, 97, 99, 105, 116, 124, // =[],c=/acit|
@@ -2299,7 +1138,7 @@ static const unsigned char v3[] = {
115, 101, 69, 114, 114, 111, 114, 66, 111, 117, 110, 100, // seErrorBound
97, 114, 121, 125, 59, 10, 0 // ary};.
};
-static const unsigned char v4[] = {
+static const unsigned char v3[] = {
42, 32, 123, 32, 98, 111, 120, 45, 115, 105, 122, 105, // * { box-sizi
110, 103, 58, 32, 98, 111, 114, 100, 101, 114, 45, 98, // ng: border-b
111, 120, 59, 32, 125, 10, 104, 116, 109, 108, 44, 32, // ox; }.html,
@@ -2454,7 +1293,7 @@ static const unsigned char v4[] = {
123, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, // { width: 100
37, 59, 32, 125, 32, 125, 10, 0 // %; } }.
};
-static const unsigned char v5[] = {
+static const unsigned char v4[] = {
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, // .PNG........
73, 72, 68, 82, 0, 0, 0, 128, 0, 0, 0, 128, // IHDR........
8, 6, 0, 0, 0, 195, 62, 97, 203, 0, 0, 0, // ......>a....
@@ -2778,6 +1617,1177 @@ static const unsigned char v5[] = {
126, 121, 49, 188, 0, 0, 0, 0, 73, 69, 78, 68, // ~y1.....IEND
174, 66, 96, 130, 0 // .B`.
};
+static const unsigned char v5[] = {
+ 39, 117, 115, 101, 32, 115, 116, 114, 105, 99, 116, 39, // 'use strict'
+ 59, 10, 105, 109, 112, 111, 114, 116, 32, 123, 67, 111, // ;.import {Co
+ 109, 112, 111, 110, 101, 110, 116, 44, 32, 104, 44, 32, // mponent, h,
+ 104, 116, 109, 108, 44, 32, 114, 101, 110, 100, 101, 114, // html, render
+ 44, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 44, // , useEffect,
+ 32, 117, 115, 101, 83, 116, 97, 116, 101, 44, 32, 117, // useState, u
+ 115, 101, 82, 101, 102, 125, 32, 102, 114, 111, 109, 32, // seRef} from
+ 39, 46, 47, 112, 114, 101, 97, 99, 116, 46, 109, 105, // './preact.mi
+ 110, 46, 106, 115, 39, 59, 10, 10, 99, 111, 110, 115, // n.js';..cons
+ 116, 32, 77, 97, 120, 77, 101, 116, 114, 105, 99, 115, // t MaxMetrics
+ 68, 97, 116, 97, 80, 111, 105, 110, 116, 115, 32, 61, // DataPoints =
+ 32, 53, 48, 59, 10, 10, 47, 47, 32, 84, 104, 105, // 50;..// Thi
+ 115, 32, 115, 105, 109, 112, 108, 101, 32, 112, 117, 98, // s simple pub
+ 108, 105, 115, 104, 47, 115, 117, 98, 115, 99, 114, 105, // lish/subscri
+ 98, 101, 32, 105, 115, 32, 117, 115, 101, 100, 32, 116, // be is used t
+ 111, 32, 112, 97, 115, 115, 32, 110, 111, 116, 105, 102, // o pass notif
+ 105, 99, 97, 116, 105, 111, 110, 115, 32, 116, 104, 97, // ications tha
+ 116, 32, 119, 101, 114, 101, 10, 47, 47, 32, 114, 101, // t were.// re
+ 99, 101, 105, 118, 101, 100, 32, 102, 114, 111, 109, 32, // ceived from
+ 116, 104, 101, 32, 115, 101, 114, 118, 101, 114, 44, 32, // the server,
+ 116, 111, 32, 97, 108, 108, 32, 99, 104, 105, 108, 100, // to all child
+ 32, 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 32, // components
+ 111, 102, 32, 116, 104, 101, 32, 97, 112, 112, 46, 10, // of the app..
+ 118, 97, 114, 32, 80, 117, 98, 83, 117, 98, 32, 61, // var PubSub =
+ 32, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, // (function()
+ 32, 123, 10, 32, 32, 118, 97, 114, 32, 104, 97, 110, // {. var han
+ 100, 108, 101, 114, 115, 32, 61, 32, 123, 125, 44, 32, // dlers = {},
+ 105, 100, 32, 61, 32, 48, 59, 10, 32, 32, 114, 101, // id = 0;. re
+ 116, 117, 114, 110, 32, 123, 10, 32, 32, 32, 32, 115, // turn {. s
+ 117, 98, 115, 99, 114, 105, 98, 101, 58, 32, 102, 117, // ubscribe: fu
+ 110, 99, 116, 105, 111, 110, 40, 102, 110, 41, 32, 123, // nction(fn) {
+ 10, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, // . handl
+ 101, 114, 115, 91, 105, 100, 43, 43, 93, 32, 61, 32, // ers[id++] =
+ 102, 110, 59, 10, 32, 32, 32, 32, 125, 44, 10, 32, // fn;. },.
+ 32, 32, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, // unsubscri
+ 98, 101, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, // be: function
+ 40, 105, 100, 41, 32, 123, 10, 32, 32, 32, 32, 32, // (id) {.
+ 32, 100, 101, 108, 101, 116, 101, 32, 104, 97, 110, 100, // delete hand
+ 108, 101, 114, 115, 91, 105, 100, 93, 59, 10, 32, 32, // lers[id];.
+ 32, 32, 125, 44, 10, 32, 32, 32, 32, 112, 117, 98, // },. pub
+ 108, 105, 115, 104, 58, 32, 102, 117, 110, 99, 116, 105, // lish: functi
+ 111, 110, 40, 100, 97, 116, 97, 41, 32, 123, 10, 32, // on(data) {.
+ 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, // for (va
+ 114, 32, 107, 32, 105, 110, 32, 104, 97, 110, 100, 108, // r k in handl
+ 101, 114, 115, 41, 32, 104, 97, 110, 100, 108, 101, 114, // ers) handler
+ 115, 91, 107, 93, 40, 100, 97, 116, 97, 41, 59, 10, // s[k](data);.
+ 32, 32, 32, 32, 125, 10, 32, 32, 125, 59, 10, 125, // }. };.}
+ 41, 40, 41, 59, 10, 10, 99, 111, 110, 115, 116, 32, // )();..const
+ 78, 97, 118, 32, 61, 32, 112, 114, 111, 112, 115, 32, // Nav = props
+ 61, 62, 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, // => html`..
+ 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // . <
+ 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, // div style="f
+ 108, 101, 120, 58, 32, 49, 32, 49, 32, 97, 117, 116, // lex: 1 1 aut
+ 111, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, 32, // o; display:
+ 102, 108, 101, 120, 59, 32, 97, 108, 105, 103, 110, 45, // flex; align-
+ 105, 116, 101, 109, 115, 58, 32, 99, 101, 110, 116, 101, // items: cente
+ 114, 59, 34, 62, 10, 32, 32, 32, 32, 32, 32, 60, // r;">. <
+ 98, 62, 89, 111, 117, 114, 32, 80, 114, 111, 100, 117, // b>Your Produ
+ 99, 116, 60, 47, 98, 62, 10, 32, 32, 32, 32, 60, // ct. <
+ 47, 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, // /div>.
. <
+ 115, 112, 97, 110, 62, 76, 111, 103, 103, 101, 100, 32, // span>Logged
+ 105, 110, 32, 97, 115, 58, 60, 47, 115, 112, 97, 110, // in as:. .
+ 32, 32, 32, 32, 60, 115, 112, 97, 110, 62, 36, 123, // ${
+ 112, 114, 111, 112, 115, 46, 117, 115, 101, 114, 125, 60, // props.user}<
+ 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 32, // /span>.
+ 32, 60, 97, 32, 99, 108, 97, 115, 115, 61, 34, 98, // logout
+ 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // . .
+ 32, 32, 60, 47, 100, 105, 118, 62, 10, 60, 47, 100, // . `;...cons
+ 116, 32, 72, 101, 114, 111, 32, 61, 32, 112, 114, 111, // t Hero = pro
+ 112, 115, 32, 61, 62, 32, 104, 116, 109, 108, 96, 10, // ps => html`.
+ 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // .
+ 10, 32, 32, 60, 104, 49, 32, 115, 116, 121, 108, 101, // . Inte
+ 114, 97, 99, 116, 105, 118, 101, 32, 68, 101, 118, 105, // ractive Devi
+ 99, 101, 32, 68, 97, 115, 104, 98, 111, 97, 114, 100, // ce Dashboard
+ 60, 47, 104, 49, 62, 10, 10, 32, 32, 60, 112, 62, // ..
+ 10, 32, 32, 84, 104, 105, 115, 32, 100, 101, 118, 105, // . This devi
+ 99, 101, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // ce dashboard
+ 32, 105, 115, 32, 100, 101, 118, 101, 108, 111, 112, 101, // is develope
+ 100, 32, 117, 115, 105, 110, 103, 32, 116, 104, 101, 32, // d using the
+ 109, 111, 100, 101, 114, 110, 32, 97, 110, 100, 32, 99, // modern and c
+ 111, 109, 112, 97, 99, 116, 32, 80, 114, 101, 97, 99, // ompact Preac
+ 116, 32, 102, 114, 97, 109, 101, 119, 111, 114, 107, 44, // t framework,
+ 10, 32, 32, 105, 110, 32, 111, 114, 100, 101, 114, 32, // . in order
+ 116, 111, 32, 102, 105, 116, 32, 111, 110, 32, 118, 101, // to fit on ve
+ 114, 121, 32, 115, 109, 97, 108, 108, 32, 100, 101, 118, // ry small dev
+ 105, 99, 101, 115, 46, 32, 84, 104, 105, 115, 32, 105, // ices. This i
+ 115, 10, 32, 32, 97, 32, 60, 97, 32, 104, 114, 101, // s. a h
+ 121, 98, 114, 105, 100, 32, 115, 101, 114, 118, 101, 114, // ybrid server
+ 60, 47, 97, 62, 32, 119, 104, 105, 99, 104, 10, 32, // which.
+ 32, 112, 114, 111, 118, 105, 100, 101, 115, 32, 98, 111, // provides bo
+ 116, 104, 32, 115, 116, 97, 116, 105, 99, 32, 97, 110, // th static an
+ 100, 32, 100, 121, 110, 97, 109, 105, 99, 32, 99, 111, // d dynamic co
+ 110, 116, 101, 110, 116, 46, 32, 32, 83, 116, 97, 116, // ntent. Stat
+ 105, 99, 32, 102, 105, 108, 101, 115, 44, 32, 108, 105, // ic files, li
+ 107, 101, 32, 67, 83, 83, 47, 74, 83, 47, 72, 84, // ke CSS/JS/HT
+ 77, 76, 10, 32, 32, 111, 114, 32, 105, 109, 97, 103, // ML. or imag
+ 101, 115, 44, 32, 97, 114, 101, 32, 99, 111, 109, 112, // es, are comp
+ 105, 108, 101, 100, 32, 105, 110, 116, 111, 32, 116, 104, // iled into th
+ 101, 32, 115, 101, 114, 118, 101, 114, 32, 98, 105, 110, // e server bin
+ 97, 114, 121, 46, 10, 10, 32, 32, 84, 104, 105, 115, // ary... This
+ 32, 85, 73, 32, 117, 115, 101, 115, 32, 116, 104, 101, // UI uses the
+ 32, 82, 69, 83, 84, 32, 65, 80, 73, 32, 105, 109, // REST API im
+ 112, 108, 101, 109, 101, 110, 116, 101, 100, 32, 98, 121, // plemented by
+ 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, 101, 44, // the device,
+ 32, 119, 104, 105, 99, 104, 32, 121, 111, 117, 32, 99, // which you c
+ 97, 110, 32, 101, 120, 97, 109, 105, 110, 101, 10, 32, // an examine.
+ 32, 117, 115, 105, 110, 103, 32, 32, 60, 99, 111, 100, // using curl command-li
+ 110, 101, 32, 117, 116, 105, 108, 105, 116, 121, 58, 10, // ne utility:.
+ 32, 32, 60, 47, 112, 62, 10, 10, 32, 32, 60, 100, //
.. cur
+ 108, 32, 45, 117, 32, 97, 100, 109, 105, 110, 58, 112, // l -u admin:p
+ 97, 115, 115, 48, 32, 108, 111, 99, 97, 108, 104, 111, // ass0 localho
+ 115, 116, 58, 56, 48, 48, 48, 47, 97, 112, 105, 47, // st:8000/api/
+ 99, 111, 110, 102, 105, 103, 47, 103, 101, 116, 60, 47, // config/get
+ 99, 111, 100, 101, 62, 32, 60, 47, 100, 105, 118, 62, // code>
+ 10, 32, 32, 60, 100, 105, 118, 62, 60, 99, 111, 100, // . curl -u ad
+ 109, 105, 110, 58, 112, 97, 115, 115, 48, 32, 108, 111, // min:pass0 lo
+ 99, 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, // calhost:8000
+ 47, 97, 112, 105, 47, 99, 111, 110, 102, 105, 103, 47, // /api/config/
+ 115, 101, 116, 32, 45, 100, 32, 39, 112, 117, 98, 61, // set -d 'pub=
+ 109, 103, 47, 116, 111, 112, 105, 99, 39, 60, 47, 99, // mg/topic'
.
+ 32, 32, 60, 100, 105, 118, 62, 60, 99, 111, 100, 101, // curl -u adm
+ 105, 110, 58, 112, 97, 115, 115, 48, 32, 108, 111, 99, // in:pass0 loc
+ 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, 47, // alhost:8000/
+ 97, 112, 105, 47, 109, 101, 115, 115, 97, 103, 101, 47, // api/message/
+ 115, 101, 110, 100, 32, 45, 100, 32, 39, 109, 101, 115, // send -d 'mes
+ 115, 97, 103, 101, 61, 104, 101, 108, 108, 111, 39, 60, // sage=hello'<
+ 47, 99, 111, 100, 101, 62, 32, 60, 47, 100, 105, 118, // /code>
.. . T
+ 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, 99, 97, // he device ca
+ 110, 32, 115, 101, 110, 100, 32, 110, 111, 116, 105, 102, // n send notif
+ 105, 99, 97, 116, 105, 111, 110, 115, 32, 116, 111, 32, // ications to
+ 116, 104, 105, 115, 32, 100, 97, 115, 104, 98, 111, 97, // this dashboa
+ 114, 100, 32, 97, 116, 32, 97, 110, 121, 116, 105, 109, // rd at anytim
+ 101, 46, 32, 78, 111, 116, 105, 102, 105, 99, 97, 116, // e. Notificat
+ 105, 111, 110, 115, 10, 32, 32, 97, 114, 101, 32, 115, // ions. are s
+ 101, 110, 116, 32, 111, 118, 101, 114, 32, 87, 101, 98, // ent over Web
+ 83, 111, 99, 107, 101, 116, 32, 97, 116, 32, 85, 82, // Socket at UR
+ 73, 32, 60, 99, 111, 100, 101, 62, 47, 97, 112, 105, // I /api
+ 47, 119, 97, 116, 99, 104, 60, 47, 99, 111, 100, 101, // /watch
as JSON st
+ 114, 105, 110, 103, 115, 58, 32, 60, 99, 111, 100, 101, // rings: {"name": ".
+ 46, 34, 44, 32, 34, 100, 97, 116, 97, 34, 58, 32, // .", "data":
+ 46, 46, 46, 125, 60, 47, 99, 111, 100, 101, 62, 10, // ...}
.
+ 32, 32, 60, 100, 105, 118, 62, 84, 114, 121, 32, 60, //
Try <
+ 99, 111, 100, 101, 62, 119, 115, 99, 97, 116, 32, 45, // code>wscat -
+ 45, 97, 117, 116, 104, 32, 117, 115, 101, 114, 49, 58, // -auth user1:
+ 112, 97, 115, 115, 49, 32, 45, 45, 99, 111, 110, 110, // pass1 --conn
+ 101, 99, 116, 32, 119, 115, 58, 47, 47, 108, 111, 99, // ect ws://loc
+ 97, 108, 104, 111, 115, 116, 58, 56, 48, 48, 48, 47, // alhost:8000/
+ 97, 112, 105, 47, 119, 97, 116, 99, 104, 60, 47, 99, // api/watch
.
+ 32, 60, 47, 112, 62, 10, 60, 47, 100, 105, 118, 62, // .
+ 10, 60, 47, 100, 105, 118, 62, 96, 59, 10, 10, 99, // .`;..c
+ 111, 110, 115, 116, 32, 76, 111, 103, 105, 110, 32, 61, // onst Login =
+ 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, 114, // function(pr
+ 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, 110, // ops) {. con
+ 115, 116, 32, 91, 117, 115, 101, 114, 44, 32, 115, 101, // st [user, se
+ 116, 85, 115, 101, 114, 93, 32, 61, 32, 117, 115, 101, // tUser] = use
+ 83, 116, 97, 116, 101, 40, 39, 39, 41, 59, 10, 32, // State('');.
+ 32, 99, 111, 110, 115, 116, 32, 91, 112, 97, 115, 115, // const [pass
+ 44, 32, 115, 101, 116, 80, 97, 115, 115, 93, 32, 61, // , setPass] =
+ 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, // useState(''
+ 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, // );. const l
+ 111, 103, 105, 110, 32, 61, 32, 101, 118, 32, 61, 62, // ogin = ev =>
+ 10, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99, 104, // . fetch
+ 40, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // (.
+ 39, 47, 97, 112, 105, 47, 108, 111, 103, 105, 110, 39, // '/api/login'
+ 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // ,.
+ 123, 104, 101, 97, 100, 101, 114, 115, 58, 32, 123, 65, // {headers: {A
+ 117, 116, 104, 111, 114, 105, 122, 97, 116, 105, 111, 110, // uthorization
+ 58, 32, 39, 66, 97, 115, 105, 99, 32, 39, 32, 43, // : 'Basic ' +
+ 32, 98, 116, 111, 97, 40, 117, 115, 101, 114, 32, 43, // btoa(user +
+ 32, 39, 58, 39, 32, 43, 32, 112, 97, 115, 115, 41, // ':' + pass)
+ 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, // }}).
+ 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, 62, // .then(r =>
+ 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 10, 32, // r.json()).
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, // .th
+ 101, 110, 40, 114, 32, 61, 62, 32, 114, 32, 38, 38, // en(r => r &&
+ 32, 112, 114, 111, 112, 115, 46, 108, 111, 103, 105, 110, // props.login
+ 40, 114, 41, 41, 10, 32, 32, 32, 32, 32, 32, 32, // (r)).
+ 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, 101, 114, // .catch(er
+ 114, 32, 61, 62, 32, 101, 114, 114, 41, 59, 10, 32, // r => err);.
+ 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, 108, // return html
+ 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, // `.
+ 10, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, // .
.
+ 60, 104, 49, 32, 115, 116, 121, 108, 101, 61, 34, 99, //
Device Dash
+ 98, 111, 97, 114, 100, 32, 76, 111, 103, 105, 110, 32, // board Login
+ 60, 47, 104, 49, 62, 10, 32, 32, 32, 32, 60, 100, // .
. <
+ 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 39, // input type='
+ 116, 101, 120, 116, 39, 32, 112, 108, 97, 99, 101, 104, // text' placeh
+ 111, 108, 100, 101, 114, 61, 39, 78, 97, 109, 101, 39, // older='Name'
+ 32, 115, 116, 121, 108, 101, 61, 34, 119, 105, 100, 116, // style="widt
+ 104, 58, 32, 49, 48, 48, 37, 59, 34, 10, 32, 32, // h: 100%;".
+ 32, 32, 32, 32, 32, 32, 111, 110, 105, 110, 112, 117, // oninpu
+ 116, 61, 36, 123, 101, 118, 32, 61, 62, 32, 115, 101, // t=${ev => se
+ 116, 85, 115, 101, 114, 40, 101, 118, 46, 116, 97, 114, // tUser(ev.tar
+ 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, // get.value)}
+ 118, 97, 108, 117, 101, 61, 36, 123, 117, 115, 101, 114, // value=${user
+ 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, 47, 100, // } />. .
. setPass(
+ 101, 118, 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, // ev.target.va
+ 108, 117, 101, 41, 125, 32, 118, 97, 108, 117, 101, 61, // lue)} value=
+ 36, 123, 112, 97, 115, 115, 125, 10, 32, 32, 32, 32, // ${pass}.
+ 32, 32, 32, 32, 111, 110, 99, 104, 97, 110, 103, 101, // onchange
+ 61, 36, 123, 108, 111, 103, 105, 110, 125, 32, 47, 62, // =${login} />
+ 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, // .
.
+ 32, 32, 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, //
.
+ 32, 32, 32, 60, 98, 117, 116, 116, 111, 110, 32, 99, // Login
+ 32, 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, 32, // .
+ 32, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, //
.
+ 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
.
+ 32, 32, 32, 32, 86, 97, 108, 105, 100, 32, 108, 111, // Valid lo
+ 103, 105, 110, 115, 58, 32, 97, 100, 109, 105, 110, 58, // gins: admin:
+ 112, 97, 115, 115, 48, 44, 32, 117, 115, 101, 114, 49, // pass0, user1
+ 58, 112, 97, 115, 115, 49, 44, 32, 117, 115, 101, 114, // :pass1, user
+ 50, 58, 112, 97, 115, 115, 50, 10, 32, 32, 32, 32, // 2:pass2.
+ 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .
`;
+ 10, 125, 59, 10, 10, 10, 99, 111, 110, 115, 116, 32, // .};...const
+ 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, // Configuratio
+ 110, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, // n = function
+ 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, 32, // (props) {.
+ 99, 111, 110, 115, 116, 32, 91, 117, 114, 108, 44, 32, // const [url,
+ 115, 101, 116, 85, 114, 108, 93, 32, 61, 32, 117, 115, // setUrl] = us
+ 101, 83, 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, // eState(props
+ 46, 99, 111, 110, 102, 105, 103, 46, 117, 114, 108, 32, // .config.url
+ 124, 124, 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, // || '');. co
+ 110, 115, 116, 32, 91, 112, 117, 98, 44, 32, 115, 101, // nst [pub, se
+ 116, 80, 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, // tPub] = useS
+ 116, 97, 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, // tate(props.c
+ 111, 110, 102, 105, 103, 46, 112, 117, 98, 32, 124, 124, // onfig.pub ||
+ 32, 39, 39, 41, 59, 10, 32, 32, 99, 111, 110, 115, // '');. cons
+ 116, 32, 91, 115, 117, 98, 44, 32, 115, 101, 116, 83, // t [sub, setS
+ 117, 98, 93, 32, 61, 32, 117, 115, 101, 83, 116, 97, // ub] = useSta
+ 116, 101, 40, 112, 114, 111, 112, 115, 46, 99, 111, 110, // te(props.con
+ 102, 105, 103, 46, 115, 117, 98, 32, 124, 124, 32, 39, // fig.sub || '
+ 39, 41, 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, // ');.. useEf
+ 102, 101, 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, // fect(() => {
+ 10, 32, 32, 32, 32, 115, 101, 116, 85, 114, 108, 40, // . setUrl(
+ 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config
+ 46, 117, 114, 108, 41, 59, 10, 32, 32, 32, 32, 115, // .url);. s
+ 101, 116, 80, 117, 98, 40, 112, 114, 111, 112, 115, 46, // etPub(props.
+ 99, 111, 110, 102, 105, 103, 46, 112, 117, 98, 41, 59, // config.pub);
+ 10, 32, 32, 32, 32, 115, 101, 116, 83, 117, 98, 40, // . setSub(
+ 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, 103, // props.config
+ 46, 115, 117, 98, 41, 59, 10, 32, 32, 125, 44, 32, // .sub);. },
+ 91, 112, 114, 111, 112, 115, 46, 99, 111, 110, 102, 105, // [props.confi
+ 103, 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, // g]);.. cons
+ 116, 32, 117, 112, 100, 97, 116, 101, 32, 61, 32, 40, // t update = (
+ 110, 97, 109, 101, 44, 32, 118, 97, 108, 41, 32, 61, // name, val) =
+ 62, 32, 102, 101, 116, 99, 104, 40, 39, 47, 97, 112, // > fetch('/ap
+ 105, 47, 99, 111, 110, 102, 105, 103, 47, 115, 101, 116, // i/config/set
+ 39, 44, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, // ', {.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 109, 101, 116, 104, 111, 100, 58, 32, 39, // method: '
+ 112, 111, 115, 116, 39, 44, 10, 32, 32, 32, 32, 32, // post',.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, 32, 96, // body: `
+ 36, 123, 110, 97, 109, 101, 125, 61, 36, 123, 101, 110, // ${name}=${en
+ 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, 112, 111, // codeURICompo
+ 110, 101, 110, 116, 40, 118, 97, 108, 41, 125, 96, 10, // nent(val)}`.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 32, 125, 41, 46, 99, // }).c
+ 97, 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, // atch(err =>
+ 101, 114, 114, 41, 59, 10, 32, 32, 99, 111, 110, 115, // err);. cons
+ 116, 32, 117, 112, 100, 97, 116, 101, 117, 114, 108, 32, // t updateurl
+ 61, 32, 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, // = ev => upda
+ 116, 101, 40, 39, 117, 114, 108, 39, 44, 32, 117, 114, // te('url', ur
+ 108, 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, // l);. const
+ 117, 112, 100, 97, 116, 101, 112, 117, 98, 32, 61, 32, // updatepub =
+ 101, 118, 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, // ev => update
+ 40, 39, 112, 117, 98, 39, 44, 32, 112, 117, 98, 41, // ('pub', pub)
+ 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 117, 112, // ;. const up
+ 100, 97, 116, 101, 115, 117, 98, 32, 61, 32, 101, 118, // datesub = ev
+ 32, 61, 62, 32, 117, 112, 100, 97, 116, 101, 40, 39, // => update('
+ 115, 117, 98, 39, 44, 32, 115, 117, 98, 41, 59, 10, // sub', sub);.
+ 10, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, // . console.l
+ 111, 103, 40, 112, 114, 111, 112, 115, 44, 32, 91, 117, // og(props, [u
+ 114, 108, 44, 32, 112, 117, 98, 44, 32, 115, 117, 98, // rl, pub, sub
+ 93, 41, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, // ]);. return
+ 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, // html`.
.
.
+ 32, 32, 68, 101, 118, 105, 99, 101, 32, 67, 111, 110, // Device Con
+ 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 60, 47, // figuration
+ 104, 51, 62, 10, 32, 32, 60, 100, 105, 118, 32, 115, // h3>. . M
+ 81, 84, 84, 32, 115, 101, 114, 118, 101, 114, 58, 60, // QTT server:<
+ 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, 60, // /span>. <
+ 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, 34, // input type="
+ 116, 101, 120, 116, 34, 32, 115, 116, 121, 108, 101, 61, // text" style=
+ 34, 102, 108, 101, 120, 58, 32, 49, 32, 49, 48, 48, // "flex: 1 100
+ 37, 59, 34, 10, 32, 32, 32, 32, 32, 32, 32, 32, // %;".
+ 32, 32, 118, 97, 108, 117, 101, 61, 36, 123, 117, 114, // value=${ur
+ 108, 125, 32, 111, 110, 99, 104, 97, 110, 103, 101, 61, // l} onchange=
+ 36, 123, 117, 112, 100, 97, 116, 101, 117, 114, 108, 125, // ${updateurl}
+ 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, // . o
+ 110, 105, 110, 112, 117, 116, 61, 36, 123, 101, 118, 32, // ninput=${ev
+ 61, 62, 32, 115, 101, 116, 85, 114, 108, 40, 101, 118, // => setUrl(ev
+ 46, 116, 97, 114, 103, 101, 116, 46, 118, 97, 108, 117, // .target.valu
+ 101, 41, 125, 32, 47, 62, 10, 32, 32, 32, 32, 60, // e)} />. <
+ 98, 117, 116, 116, 111, 110, 32, 99, 108, 97, 115, 115, // button class
+ 61, 34, 98, 116, 110, 34, 32, 100, 105, 115, 97, 98, // ="btn" disab
+ 108, 101, 100, 61, 36, 123, 33, 117, 114, 108, 125, 32, // led=${!url}
+ 111, 110, 99, 108, 105, 99, 107, 61, 36, 123, 117, 112, // onclick=${up
+ 100, 97, 116, 101, 117, 114, 108, 125, 10, 32, 32, 32, // dateurl}.
+ 32, 32, 32, 115, 116, 121, 108, 101, 61, 34, 109, 97, // style="ma
+ 114, 103, 105, 110, 45, 108, 101, 102, 116, 58, 32, 49, // rgin-left: 1
+ 101, 109, 59, 32, 98, 97, 99, 107, 103, 114, 111, 117, // em; backgrou
+ 110, 100, 58, 32, 35, 56, 97, 97, 59, 34, 62, 85, // nd: #8aa;">U
+ 112, 100, 97, 116, 101, 60, 47, 98, 117, 116, 116, 111, // pdate.
.
+ 32, 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, //
+ 10, 32, 32, 32, 32, 60, 115, 112, 97, 110, 32, 99, // . Subs
+ 99, 114, 105, 98, 101, 32, 116, 111, 112, 105, 99, 58, // cribe topic:
+ 60, 47, 115, 112, 97, 110, 62, 10, 32, 32, 32, 32, // .
+ 60, 105, 110, 112, 117, 116, 32, 116, 121, 112, 101, 61, //
+ 115, 101, 116, 83, 117, 98, 40, 101, 118, 46, 116, 97, // setSub(ev.ta
+ 114, 103, 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, // rget.value)}
+ 32, 47, 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, // />. Upda
+ 116, 101, 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, // te.
+ 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. <
+ 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 109, // div style="m
+ 97, 114, 103, 105, 110, 58, 32, 48, 46, 53, 101, 109, // argin: 0.5em
+ 32, 48, 59, 32, 100, 105, 115, 112, 108, 97, 121, 58, // 0; display:
+ 32, 102, 108, 101, 120, 59, 34, 62, 10, 32, 32, 32, // flex;">.
+ 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, // Publish
+ 116, 111, 112, 105, 99, 58, 60, 47, 115, 112, 97, 110, // topic: . se
+ 116, 80, 117, 98, 40, 101, 118, 46, 116, 97, 114, 103, // tPub(ev.targ
+ 101, 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, 47, // et.value)} /
+ 62, 10, 32, 32, 32, 32, 60, 98, 117, 116, 116, 111, // >. Update
+ 60, 47, 98, 117, 116, 116, 111, 110, 62, 10, 32, 32, // .
+ 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 100, 105, // .
. You c
+ 97, 110, 32, 117, 115, 101, 32, 60, 97, 32, 104, 114, // an use . Hive
+ 77, 81, 32, 87, 101, 98, 115, 111, 99, 107, 101, 116, // MQ Websocket
+ 32, 119, 101, 98, 32, 99, 108, 105, 101, 110, 116, 60, // web client<
+ 47, 97, 62, 32, 116, 111, 32, 115, 101, 110, 100, 32, // /a> to send
+ 109, 101, 115, 115, 97, 103, 101, 115, 32, 116, 111, 32, // messages to
+ 116, 104, 105, 115, 32, 99, 111, 110, 115, 111, 108, 101, // this console
+ 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, // .. .
+ 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, // . T
+ 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, 107, 101, // he device ke
+ 101, 112, 115, 32, 97, 32, 112, 101, 114, 115, 105, 115, // eps a persis
+ 116, 101, 110, 116, 32, 99, 111, 110, 110, 101, 99, 116, // tent connect
+ 105, 111, 110, 32, 116, 111, 32, 116, 104, 101, 32, 99, // ion to the c
+ 111, 110, 102, 105, 103, 117, 114, 101, 100, 32, 77, 81, // onfigured MQ
+ 84, 84, 32, 115, 101, 114, 118, 101, 114, 46, 10, 32, // TT server..
+ 32, 32, 32, 67, 104, 97, 110, 103, 101, 115, 32, 116, // Changes t
+ 111, 32, 116, 104, 105, 115, 32, 99, 111, 110, 102, 105, // o this confi
+ 103, 117, 114, 97, 116, 105, 111, 110, 32, 97, 114, 101, // guration are
+ 32, 112, 114, 111, 112, 97, 103, 97, 116, 101, 100, 32, // propagated
+ 116, 111, 32, 97, 108, 108, 32, 100, 97, 115, 104, 98, // to all dashb
+ 111, 97, 114, 100, 115, 58, 32, 116, 114, 121, 10, 32, // oards: try.
+ 32, 32, 32, 99, 104, 97, 110, 103, 105, 110, 103, 32, // changing
+ 116, 104, 101, 109, 32, 105, 110, 32, 116, 104, 105, 115, // them in this
+ 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, 32, 97, // dashboard a
+ 110, 100, 32, 111, 98, 115, 101, 114, 118, 101, 32, 99, // nd observe c
+ 104, 97, 110, 103, 101, 115, 32, 105, 110, 32, 111, 116, // hanges in ot
+ 104, 101, 114, 32, 111, 112, 101, 110, 101, 100, 10, 32, // her opened.
+ 32, 32, 32, 100, 97, 115, 104, 98, 111, 97, 114, 100, // dashboard
+ 115, 46, 10, 32, 32, 60, 47, 100, 105, 118, 62, 60, // s..
<
+ 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 109, // div class="m
+ 115, 103, 34, 62, 10, 32, 32, 32, 32, 78, 111, 116, // sg">. Not
+ 101, 58, 32, 97, 100, 109, 105, 110, 105, 115, 116, 114, // e: administr
+ 97, 116, 111, 114, 115, 32, 99, 97, 110, 32, 115, 101, // ators can se
+ 101, 32, 116, 104, 105, 115, 32, 115, 101, 99, 116, 105, // e this secti
+ 111, 110, 32, 97, 110, 100, 32, 99, 97, 110, 32, 99, // on and can c
+ 104, 97, 110, 103, 101, 32, 100, 101, 118, 105, 99, 101, // hange device
+ 10, 32, 32, 32, 32, 99, 111, 110, 102, 105, 103, 117, // . configu
+ 114, 97, 116, 105, 111, 110, 44, 32, 119, 104, 105, 108, // ration, whil
+ 115, 116, 32, 117, 115, 101, 114, 115, 32, 99, 97, 110, // st users can
+ 110, 111, 116, 46, 10, 32, 32, 60, 47, 100, 105, 118, // not.. .`;.}
+ 59, 10, 10, 10, 99, 111, 110, 115, 116, 32, 77, 101, // ;...const Me
+ 115, 115, 97, 103, 101, 32, 61, 32, 109, 32, 61, 62, // ssage = m =>
+ 32, 104, 116, 109, 108, 96, 60, 100, 105, 118, 32, 115, // html`
+ 10, 32, 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, // . qos
+ 58, 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, // : ${m.messag
+ 101, 46, 113, 111, 115, 125, 32, 60, 47, 115, 112, 97, // e.qos} . topic: ${m.
+ 109, 101, 115, 115, 97, 103, 101, 46, 116, 111, 112, 105, // message.topi
+ 99, 125, 32, 60, 47, 115, 112, 97, 110, 62, 10, 32, // c} .
+ 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, 115, // data
+ 58, 32, 36, 123, 109, 46, 109, 101, 115, 115, 97, 103, // : ${m.messag
+ 101, 46, 100, 97, 116, 97, 125, 60, 47, 115, 112, 97, // e.data}.
`;.
+ 10, 99, 111, 110, 115, 116, 32, 77, 101, 115, 115, 97, // .const Messa
+ 103, 101, 115, 32, 61, 32, 102, 117, 110, 99, 116, 105, // ges = functi
+ 111, 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, // on(props) {.
+ 32, 32, 99, 111, 110, 115, 116, 32, 91, 109, 101, 115, // const [mes
+ 115, 97, 103, 101, 115, 44, 32, 115, 101, 116, 77, 101, // sages, setMe
+ 115, 115, 97, 103, 101, 115, 93, 32, 61, 32, 117, 115, // ssages] = us
+ 101, 83, 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, // eState([]);.
+ 32, 32, 99, 111, 110, 115, 116, 32, 91, 116, 120, 116, // const [txt
+ 44, 32, 115, 101, 116, 84, 120, 116, 93, 32, 61, 32, // , setTxt] =
+ 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, 41, // useState('')
+ 59, 10, 10, 32, 32, 117, 115, 101, 69, 102, 102, 101, // ;.. useEffe
+ 99, 116, 40, 40, 41, 32, 61, 62, 32, 123, 10, 32, // ct(() => {.
+ 32, 32, 32, 99, 111, 110, 115, 116, 32, 105, 100, 32, // const id
+ 61, 32, 80, 117, 98, 83, 117, 98, 46, 115, 117, 98, // = PubSub.sub
+ 115, 99, 114, 105, 98, 101, 40, 102, 117, 110, 99, 116, // scribe(funct
+ 105, 111, 110, 40, 109, 115, 103, 41, 32, 123, 10, 32, // ion(msg) {.
+ 32, 32, 32, 32, 32, 105, 102, 32, 40, 109, 115, 103, // if (msg
+ 46, 110, 97, 109, 101, 32, 61, 61, 32, 39, 109, 101, // .name == 'me
+ 115, 115, 97, 103, 101, 39, 41, 32, 115, 101, 116, 77, // ssage') setM
+ 101, 115, 115, 97, 103, 101, 115, 40, 120, 32, 61, 62, // essages(x =>
+ 32, 120, 46, 99, 111, 110, 99, 97, 116, 40, 91, 109, // x.concat([m
+ 115, 103, 46, 100, 97, 116, 97, 93, 41, 41, 59, 10, // sg.data]));.
+ 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, 32, // });.
+ 114, 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, 117, // return PubSu
+ 98, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, // b.unsubscrib
+ 101, 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, 32, // e(id);. },
+ 91, 93, 41, 59, 10, 10, 32, 32, 99, 111, 110, 115, // []);.. cons
+ 116, 32, 115, 101, 110, 100, 109, 101, 115, 115, 97, 103, // t sendmessag
+ 101, 32, 61, 32, 101, 118, 32, 61, 62, 32, 102, 101, // e = ev => fe
+ 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, 109, 101, // tch('/api/me
+ 115, 115, 97, 103, 101, 47, 115, 101, 110, 100, 39, 44, // ssage/send',
+ 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, // {.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 109, 101, 116, // met
+ 104, 111, 100, 58, 32, 39, 112, 111, 115, 116, 39, 44, // hod: 'post',
+ 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // .
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 32, 98, 111, 100, 121, 58, // body:
+ 32, 96, 109, 101, 115, 115, 97, 103, 101, 61, 36, 123, // `message=${
+ 101, 110, 99, 111, 100, 101, 85, 82, 73, 67, 111, 109, // encodeURICom
+ 112, 111, 110, 101, 110, 116, 40, 116, 120, 116, 41, 125, // ponent(txt)}
+ 96, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // `.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, //
+ 32, 32, 32, 32, 32, 32, 125, 41, 46, 116, 104, 101, // }).the
+ 110, 40, 114, 32, 61, 62, 32, 115, 101, 116, 84, 120, // n(r => setTx
+ 116, 40, 39, 39, 41, 41, 59, 10, 32, 32, 99, 111, // t(''));. co
+ 110, 115, 116, 32, 99, 111, 110, 110, 115, 116, 97, 116, // nst connstat
+ 117, 115, 32, 61, 32, 112, 114, 111, 112, 115, 46, 99, // us = props.c
+ 111, 110, 102, 105, 103, 46, 99, 111, 110, 110, 101, 99, // onfig.connec
+ 116, 101, 100, 32, 63, 32, 39, 99, 111, 110, 110, 101, // ted ? 'conne
+ 99, 116, 101, 100, 39, 32, 58, 32, 39, 100, 105, 115, // cted' : 'dis
+ 99, 111, 110, 110, 101, 99, 116, 101, 100, 39, 59, 10, // connected';.
+ 32, 32, 114, 101, 116, 117, 114, 110, 32, 104, 116, 109, // return htm
+ 108, 96, 10, 60, 100, 105, 118, 32, 99, 108, 97, 115, // l`.
+ 10, 32, 32, 60, 104, 51, 32, 115, 116, 121, 108, 101, // .
MQTT me
+ 115, 115, 97, 103, 101, 115, 60, 47, 104, 51, 62, 10, // ssages .
+ 32, 32, 60, 100, 105, 118, 62, 10, 32, 32, 32, 32, //
.
+ 77, 81, 84, 84, 32, 115, 101, 114, 118, 101, 114, 32, // MQTT server
+ 115, 116, 97, 116, 117, 115, 58, 32, 60, 98, 62, 36, // status: $
+ 123, 99, 111, 110, 110, 115, 116, 97, 116, 117, 115, 125, // {connstatus}
+ 60, 47, 98, 62, 10, 32, 32, 60, 47, 100, 105, 118, // .
.
.
+ 36, 123, 109, 101, 115, 115, 97, 103, 101, 115, 46, 109, // ${messages.m
+ 97, 112, 40, 109, 101, 115, 115, 97, 103, 101, 32, 61, // ap(message =
+ 62, 32, 104, 40, 77, 101, 115, 115, 97, 103, 101, 44, // > h(Message,
+ 32, 123, 109, 101, 115, 115, 97, 103, 101, 125, 41, 41, // {message}))
+ 125, 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, // }.
.
+ 32, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, //
.
+ 32, 32, 60, 115, 112, 97, 110, 32, 99, 108, 97, 115, // Publish
+ 32, 109, 101, 115, 115, 97, 103, 101, 58, 60, 47, 115, // message:. set
+ 84, 120, 116, 40, 101, 118, 46, 116, 97, 114, 103, 101, // Txt(ev.targe
+ 116, 46, 118, 97, 108, 117, 101, 41, 125, 32, 47, 62, // t.value)} />
+ 10, 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, // .
.
+ 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, //
. Th
+ 101, 32, 109, 101, 115, 115, 97, 103, 101, 32, 103, 101, // e message ge
+ 116, 115, 32, 112, 97, 115, 115, 101, 100, 32, 116, 111, // ts passed to
+ 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, 101, 32, // the device
+ 118, 105, 97, 32, 82, 69, 83, 84, 46, 32, 84, 104, // via REST. Th
+ 101, 110, 32, 116, 104, 101, 32, 100, 101, 118, 105, 99, // en the devic
+ 101, 32, 115, 101, 110, 100, 115, 32, 105, 116, 32, 116, // e sends it t
+ 111, 10, 32, 32, 32, 32, 116, 104, 101, 32, 77, 81, // o. the MQ
+ 84, 84, 32, 115, 101, 114, 118, 101, 114, 32, 111, 118, // TT server ov
+ 101, 114, 32, 77, 81, 84, 84, 46, 32, 65, 108, 108, // er MQTT. All
+ 32, 77, 81, 84, 84, 32, 109, 101, 115, 115, 97, 103, // MQTT messag
+ 101, 115, 32, 111, 110, 32, 97, 32, 115, 117, 98, 115, // es on a subs
+ 99, 114, 105, 98, 101, 100, 32, 116, 111, 112, 105, 99, // cribed topic
+ 10, 32, 32, 32, 32, 114, 101, 99, 101, 105, 118, 101, // . receive
+ 100, 32, 98, 121, 32, 116, 104, 101, 32, 100, 101, 118, // d by the dev
+ 105, 99, 101, 44, 32, 97, 114, 101, 32, 112, 114, 111, // ice, are pro
+ 112, 97, 103, 97, 116, 101, 100, 32, 116, 111, 32, 116, // pagated to t
+ 104, 105, 115, 32, 100, 97, 115, 104, 98, 111, 97, 114, // his dashboar
+ 100, 32, 118, 105, 97, 32, 47, 97, 112, 105, 47, 119, // d via /api/w
+ 97, 116, 99, 104, 46, 10, 32, 32, 60, 47, 100, 105, // atch.. .
`;.
+ 125, 59, 10, 10, 47, 47, 32, 69, 120, 112, 101, 99, // };..// Expec
+ 116, 101, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, // ted argument
+ 115, 58, 10, 47, 47, 32, 100, 97, 116, 97, 58, 32, // s:.// data:
+ 116, 105, 109, 101, 115, 101, 114, 105, 101, 115, 44, 32, // timeseries,
+ 101, 46, 103, 46, 32, 91, 32, 91, 49, 54, 53, 52, // e.g. [ [1654
+ 51, 54, 49, 51, 53, 50, 44, 32, 49, 57, 93, 44, // 361352, 19],
+ 32, 91, 49, 54, 53, 52, 51, 54, 49, 51, 53, 51, // [1654361353
+ 44, 32, 49, 56, 93, 44, 32, 46, 46, 46, 32, 93, // , 18], ... ]
+ 10, 47, 47, 32, 119, 105, 100, 116, 104, 44, 32, 104, // .// width, h
+ 101, 105, 103, 104, 116, 44, 32, 121, 116, 105, 99, 107, // eight, ytick
+ 115, 44, 32, 120, 116, 105, 99, 107, 115, 44, 32, 121, // s, xticks, y
+ 109, 105, 110, 44, 32, 121, 109, 97, 120, 44, 32, 120, // min, ymax, x
+ 109, 105, 110, 44, 32, 120, 109, 97, 120, 10, 99, 111, // min, xmax.co
+ 110, 115, 116, 32, 83, 86, 71, 32, 61, 32, 102, 117, // nst SVG = fu
+ 110, 99, 116, 105, 111, 110, 40, 112, 114, 111, 112, 115, // nction(props
+ 41, 32, 123, 10, 32, 32, 47, 47, 32, 32, 32, 32, // ) {. //
+ 32, 32, 32, 32, 32, 32, 32, 32, 119, 10, 32, 32, // w.
+ 47, 47, 32, 32, 32, 43, 45, 45, 45, 45, 45, 45, // // +------
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------
+ 45, 45, 45, 43, 10, 32, 32, 47, 47, 32, 32, 32, // ---+. //
+ 124, 32, 32, 32, 32, 32, 32, 32, 32, 104, 49, 32, // | h1
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 124, 10, // |.
+ 32, 32, 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, // // |
+ 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // +-----------
+ 43, 32, 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, // + |. //
+ 32, 32, 124, 32, 32, 32, 32, 124, 32, 32, 32, 32, // | |
+ 32, 32, 32, 32, 32, 32, 32, 124, 32, 32, 32, 32, // |
+ 124, 32, 32, 104, 10, 32, 32, 47, 47, 32, 32, 32, // | h. //
+ 124, 32, 119, 49, 32, 124, 32, 32, 32, 32, 32, 32, // | w1 |
+ 32, 32, 32, 32, 32, 124, 32, 119, 50, 32, 124, 10, // | w2 |.
+ 32, 32, 47, 47, 32, 32, 32, 124, 32, 32, 32, 32, // // |
+ 43, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // +-----------
+ 43, 32, 32, 32, 32, 124, 10, 32, 32, 47, 47, 32, // + |. //
+ 32, 32, 124, 32, 32, 32, 32, 32, 32, 32, 32, 32, // |
+ 104, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, // h2
+ 124, 10, 32, 32, 47, 47, 32, 32, 32, 43, 45, 45, // |. // +--
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, // ------------
+ 45, 45, 45, 45, 45, 45, 45, 43, 10, 32, 32, 47, // -------+. /
+ 47, 10, 32, 32, 108, 101, 116, 32, 119, 32, 61, 32, // /. let w =
+ 112, 114, 111, 112, 115, 46, 119, 105, 100, 116, 104, 44, // props.width,
+ 32, 104, 32, 61, 32, 112, 114, 111, 112, 115, 46, 104, // h = props.h
+ 101, 105, 103, 104, 116, 44, 32, 119, 49, 32, 61, 32, // eight, w1 =
+ 51, 48, 44, 32, 119, 50, 32, 61, 32, 48, 44, 32, // 30, w2 = 0,
+ 104, 49, 32, 61, 32, 56, 44, 32, 104, 50, 32, 61, // h1 = 8, h2 =
+ 32, 49, 56, 59, 10, 32, 32, 108, 101, 116, 32, 121, // 18;. let y
+ 116, 105, 99, 107, 115, 32, 61, 32, 112, 114, 111, 112, // ticks = prop
+ 115, 46, 121, 116, 105, 99, 107, 115, 32, 124, 124, 32, // s.yticks ||
+ 52, 44, 32, 120, 116, 105, 99, 107, 115, 32, 61, 32, // 4, xticks =
+ 112, 114, 111, 112, 115, 46, 120, 116, 105, 99, 107, 115, // props.xticks
+ 32, 124, 124, 32, 53, 59, 10, 32, 32, 108, 101, 116, // || 5;. let
+ 32, 100, 97, 116, 97, 32, 61, 32, 112, 114, 111, 112, // data = prop
+ 115, 46, 100, 97, 116, 97, 32, 124, 124, 32, 91, 93, // s.data || []
+ 59, 10, 32, 32, 108, 101, 116, 32, 121, 109, 105, 110, // ;. let ymin
+ 32, 61, 32, 112, 114, 111, 112, 115, 46, 121, 109, 105, // = props.ymi
+ 110, 32, 124, 124, 32, 48, 59, 10, 32, 32, 108, 101, // n || 0;. le
+ 116, 32, 121, 109, 97, 120, 32, 61, 32, 112, 114, 111, // t ymax = pro
+ 112, 115, 46, 121, 109, 97, 120, 32, 124, 124, 32, 77, // ps.ymax || M
+ 97, 116, 104, 46, 109, 97, 120, 46, 97, 112, 112, 108, // ath.max.appl
+ 121, 40, 110, 117, 108, 108, 44, 32, 100, 97, 116, 97, // y(null, data
+ 46, 109, 97, 112, 40, 112, 32, 61, 62, 32, 112, 91, // .map(p => p[
+ 49, 93, 41, 41, 59, 10, 32, 32, 108, 101, 116, 32, // 1]));. let
+ 120, 109, 105, 110, 32, 61, 32, 112, 114, 111, 112, 115, // xmin = props
+ 46, 120, 109, 105, 110, 32, 124, 124, 32, 77, 97, 116, // .xmin || Mat
+ 104, 46, 109, 105, 110, 46, 97, 112, 112, 108, 121, 40, // h.min.apply(
+ 110, 117, 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, // null, data.m
+ 97, 112, 40, 112, 32, 61, 62, 32, 112, 91, 48, 93, // ap(p => p[0]
+ 41, 41, 59, 10, 32, 32, 108, 101, 116, 32, 120, 109, // ));. let xm
+ 97, 120, 32, 61, 32, 112, 114, 111, 112, 115, 46, 120, // ax = props.x
+ 109, 97, 120, 32, 124, 124, 32, 77, 97, 116, 104, 46, // max || Math.
+ 109, 97, 120, 46, 97, 112, 112, 108, 121, 40, 110, 117, // max.apply(nu
+ 108, 108, 44, 32, 100, 97, 116, 97, 46, 109, 97, 112, // ll, data.map
+ 40, 112, 32, 61, 62, 32, 112, 91, 48, 93, 41, 41, // (p => p[0]))
+ 59, 10, 10, 32, 32, 47, 47, 32, 89, 45, 97, 120, // ;.. // Y-ax
+ 105, 115, 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, // is tick line
+ 115, 32, 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, // s and labels
+ 10, 32, 32, 108, 101, 116, 32, 121, 116, 97, 32, 61, // . let yta =
+ 32, 40, 110, 101, 119, 32, 65, 114, 114, 97, 121, 40, // (new Array(
+ 121, 116, 105, 99, 107, 115, 32, 43, 32, 49, 41, 41, // yticks + 1))
+ 46, 102, 105, 108, 108, 40, 48, 41, 46, 109, 97, 112, // .fill(0).map
+ 40, 40, 95, 44, 32, 105, 41, 32, 61, 62, 32, 105, // ((_, i) => i
+ 41, 59, 32, 32, 47, 47, 32, 105, 110, 100, 105, 99, // ); // indic
+ 101, 115, 10, 32, 32, 108, 101, 116, 32, 121, 116, 105, // es. let yti
+ 32, 61, 32, 105, 32, 61, 62, 32, 104, 32, 45, 32, // = i => h -
+ 104, 50, 32, 45, 32, 40, 104, 32, 45, 32, 104, 49, // h2 - (h - h1
+ 32, 45, 32, 104, 50, 41, 32, 42, 32, 105, 32, 47, // - h2) * i /
+ 32, 121, 116, 105, 99, 107, 115, 59, 32, 32, 32, 32, // yticks;
+ 32, 32, 32, 32, 32, 32, 47, 47, 32, 105, 110, 100, // // ind
+ 101, 120, 39, 115, 32, 89, 10, 32, 32, 108, 101, 116, // ex's Y. let
+ 32, 121, 116, 118, 32, 61, 32, 105, 32, 61, 62, 32, // ytv = i =>
+ 40, 121, 109, 97, 120, 32, 45, 32, 121, 109, 105, 110, // (ymax - ymin
+ 41, 32, 42, 32, 105, 32, 47, 32, 121, 116, 105, 99, // ) * i / ytic
+ 107, 115, 59, 10, 32, 32, 108, 101, 116, 32, 121, 116, // ks;. let yt
+ 108, 32, 61, 32, 121, 32, 61, 62, 32, 104, 116, 109, // l = y => htm
+ 108, 96, 60, 108, 105, 110, 101, 32, 120, 49, 61, 36, // l`
`;.
+ 108, 101, 116, 32, 121, 116, 116, 32, 61, 32, 40, 121, // let ytt = (y
+ 44, 32, 118, 41, 32, 61, 62, 32, 104, 116, 109, 108, // , v) => html
+ 96, 60, 116, 101, 120, 116, 32, 120, 61, 48, 32, 121, // `
+ 36, 123, 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, // ${v} `
+ 59, 10, 10, 32, 32, 47, 47, 32, 88, 45, 97, 120, // ;.. // X-ax
+ 105, 115, 32, 116, 105, 99, 107, 32, 108, 105, 110, 101, // is tick line
+ 115, 32, 97, 110, 100, 32, 108, 97, 98, 101, 108, 115, // s and labels
+ 10, 32, 32, 108, 101, 116, 32, 100, 97, 116, 101, 102, // . let datef
+ 109, 116, 32, 61, 32, 117, 110, 105, 120, 32, 61, 62, // mt = unix =>
+ 32, 40, 110, 101, 119, 32, 68, 97, 116, 101, 40, 117, // (new Date(u
+ 110, 105, 120, 32, 42, 32, 49, 48, 48, 48, 41, 41, // nix * 1000))
+ 46, 116, 111, 73, 83, 79, 83, 116, 114, 105, 110, 103, // .toISOString
+ 40, 41, 46, 115, 117, 98, 115, 116, 114, 40, 49, 52, // ().substr(14
+ 44, 32, 53, 41, 59, 10, 32, 32, 108, 101, 116, 32, // , 5);. let
+ 120, 116, 97, 32, 61, 32, 40, 110, 101, 119, 32, 65, // xta = (new A
+ 114, 114, 97, 121, 40, 120, 116, 105, 99, 107, 115, 32, // rray(xticks
+ 43, 32, 49, 41, 41, 46, 102, 105, 108, 108, 40, 48, // + 1)).fill(0
+ 41, 46, 109, 97, 112, 40, 40, 95, 44, 32, 105, 41, // ).map((_, i)
+ 32, 61, 62, 32, 105, 41, 59, 32, 32, 47, 47, 32, // => i); //
+ 105, 110, 100, 105, 99, 101, 115, 10, 32, 32, 108, 101, // indices. le
+ 116, 32, 120, 116, 105, 32, 61, 32, 105, 32, 61, 62, // t xti = i =>
+ 32, 119, 49, 32, 43, 32, 40, 119, 32, 45, 32, 119, // w1 + (w - w
+ 49, 32, 45, 32, 119, 50, 41, 32, 42, 32, 105, 32, // 1 - w2) * i
+ 47, 32, 120, 116, 105, 99, 107, 115, 59, 32, 32, 32, // / xticks;
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47, // /
+ 47, 32, 105, 110, 100, 101, 120, 39, 115, 32, 88, 10, // / index's X.
+ 32, 32, 108, 101, 116, 32, 120, 116, 118, 32, 61, 32, // let xtv =
+ 105, 32, 61, 62, 32, 100, 97, 116, 101, 102, 109, 116, // i => datefmt
+ 40, 120, 109, 105, 110, 32, 43, 32, 40, 120, 109, 97, // (xmin + (xma
+ 120, 32, 45, 32, 120, 109, 105, 110, 41, 32, 42, 32, // x - xmin) *
+ 105, 32, 47, 32, 120, 116, 105, 99, 107, 115, 41, 59, // i / xticks);
+ 10, 32, 32, 108, 101, 116, 32, 120, 116, 108, 32, 61, // . let xtl =
+ 32, 120, 32, 61, 62, 32, 104, 116, 109, 108, 96, 60, // x => html`<
+ 112, 97, 116, 104, 32, 100, 61, 34, 77, 32, 36, 123, // path d="M ${
+ 120, 125, 44, 36, 123, 104, 49, 125, 32, 76, 32, 36, // x},${h1} L $
+ 123, 120, 125, 44, 36, 123, 104, 32, 45, 32, 104, 50, // {x},${h - h2
+ 125, 34, 32, 99, 108, 97, 115, 115, 61, 34, 116, 105, // }" class="ti
+ 99, 107, 34, 47, 62, 96, 59, 10, 32, 32, 108, 101, // ck"/>`;. le
+ 116, 32, 120, 116, 116, 32, 61, 32, 40, 120, 44, 32, // t xtt = (x,
+ 118, 41, 32, 61, 62, 10, 32, 32, 32, 32, 32, 32, // v) =>.
+ 104, 116, 109, 108, 96, 60, 116, 101, 120, 116, 32, 120, // html`
+ 36, 123, 118, 125, 60, 47, 116, 101, 120, 116, 62, 96, // ${v} `
+ 59, 10, 10, 32, 32, 47, 47, 32, 84, 114, 97, 110, // ;.. // Tran
+ 115, 102, 111, 114, 109, 32, 100, 97, 116, 97, 32, 112, // sform data p
+ 111, 105, 110, 116, 115, 32, 97, 114, 114, 97, 121, 32, // oints array
+ 105, 110, 116, 111, 32, 99, 111, 111, 114, 100, 105, 110, // into coordin
+ 97, 116, 101, 10, 32, 32, 108, 101, 116, 32, 100, 120, // ate. let dx
+ 32, 61, 32, 118, 32, 61, 62, 32, 119, 49, 32, 43, // = v => w1 +
+ 32, 40, 118, 32, 45, 32, 120, 109, 105, 110, 41, 32, // (v - xmin)
+ 47, 32, 40, 40, 120, 109, 97, 120, 32, 45, 32, 120, // / ((xmax - x
+ 109, 105, 110, 41, 32, 124, 124, 32, 49, 41, 32, 42, // min) || 1) *
+ 32, 40, 119, 32, 45, 32, 119, 49, 32, 45, 32, 119, // (w - w1 - w
+ 50, 41, 59, 10, 32, 32, 108, 101, 116, 32, 100, 121, // 2);. let dy
+ 32, 61, 32, 118, 32, 61, 62, 32, 104, 32, 45, 32, // = v => h -
+ 104, 50, 32, 45, 32, 40, 118, 32, 45, 32, 121, 109, // h2 - (v - ym
+ 105, 110, 41, 32, 47, 32, 40, 40, 121, 109, 97, 120, // in) / ((ymax
+ 32, 45, 32, 121, 109, 105, 110, 41, 32, 124, 124, 32, // - ymin) ||
+ 49, 41, 32, 42, 32, 40, 104, 32, 45, 32, 104, 49, // 1) * (h - h1
+ 32, 45, 32, 104, 50, 41, 59, 10, 32, 32, 108, 101, // - h2);. le
+ 116, 32, 100, 100, 32, 61, 32, 100, 97, 116, 97, 46, // t dd = data.
+ 109, 97, 112, 40, 112, 32, 61, 62, 32, 91, 77, 97, // map(p => [Ma
+ 116, 104, 46, 114, 111, 117, 110, 100, 40, 100, 120, 40, // th.round(dx(
+ 112, 91, 48, 93, 41, 41, 44, 32, 77, 97, 116, 104, // p[0])), Math
+ 46, 114, 111, 117, 110, 100, 40, 100, 121, 40, 112, 91, // .round(dy(p[
+ 49, 93, 41, 41, 93, 41, 59, 10, 32, 32, 108, 101, // 1]))]);. le
+ 116, 32, 100, 100, 108, 32, 61, 32, 100, 100, 46, 108, // t ddl = dd.l
+ 101, 110, 103, 116, 104, 59, 10, 32, 32, 47, 47, 32, // ength;. //
+ 65, 110, 100, 32, 112, 108, 111, 116, 32, 116, 104, 101, // And plot the
+ 32, 100, 97, 116, 97, 32, 97, 115, 32, 60, 112, 97, // data as
element.
+ 32, 32, 108, 101, 116, 32, 98, 101, 103, 105, 110, 48, // let begin0
+ 32, 61, 32, 100, 100, 108, 32, 63, 32, 96, 77, 32, // = ddl ? `M
+ 36, 123, 100, 100, 91, 48, 93, 91, 48, 93, 125, 44, // ${dd[0][0]},
+ 36, 123, 100, 100, 91, 48, 93, 91, 49, 93, 125, 96, // ${dd[0][1]}`
+ 32, 58, 32, 96, 77, 32, 48, 44, 48, 96, 59, 10, // : `M 0,0`;.
+ 32, 32, 108, 101, 116, 32, 98, 101, 103, 105, 110, 32, // let begin
+ 61, 32, 96, 77, 32, 36, 123, 119, 49, 125, 44, 36, // = `M ${w1},$
+ 123, 104, 32, 45, 32, 104, 50, 125, 96, 59, 32, 32, // {h - h2}`;
+ 47, 47, 32, 73, 110, 105, 116, 105, 97, 108, 32, 112, // // Initial p
+ 111, 105, 110, 116, 10, 32, 32, 108, 101, 116, 32, 101, // oint. let e
+ 110, 100, 32, 61, 32, 100, 100, 108, 32, 63, 32, 96, // nd = ddl ? `
+ 76, 32, 36, 123, 100, 100, 91, 100, 100, 108, 32, 45, // L ${dd[ddl -
+ 32, 49, 93, 91, 48, 93, 125, 44, 36, 123, 104, 32, // 1][0]},${h
+ 45, 32, 104, 50, 125, 96, 32, 58, 32, 96, 76, 32, // - h2}` : `L
+ 36, 123, 119, 49, 125, 44, 36, 123, 104, 32, 45, 32, // ${w1},${h -
+ 104, 50, 125, 96, 59, 10, 32, 32, 108, 101, 116, 32, // h2}`;. let
+ 115, 101, 114, 105, 101, 115, 32, 61, 32, 100, 100, 108, // series = ddl
+ 32, 63, 32, 100, 100, 46, 109, 97, 112, 40, 112, 32, // ? dd.map(p
+ 61, 62, 32, 96, 76, 32, 36, 123, 112, 91, 48, 93, // => `L ${p[0]
+ 125, 32, 36, 123, 112, 91, 49, 93, 125, 96, 41, 32, // } ${p[1]}`)
+ 58, 32, 91, 93, 59, 10, 10, 32, 32, 114, 101, 116, // : [];.. ret
+ 117, 114, 110, 32, 104, 116, 109, 108, 96, 10, 60, 115, // urn html`.. .
+ 32, 36, 123, 121, 116, 97, 46, 109, 97, 112, 40, 105, // ${yta.map(i
+ 32, 61, 62, 32, 121, 116, 108, 40, 121, 116, 105, 40, // => ytl(yti(
+ 105, 41, 41, 41, 125, 10, 32, 32, 36, 123, 121, 116, // i)))}. ${yt
+ 97, 46, 109, 97, 112, 40, 105, 32, 61, 62, 32, 121, // a.map(i => y
+ 116, 116, 40, 121, 116, 105, 40, 105, 41, 44, 32, 121, // tt(yti(i), y
+ 116, 118, 40, 105, 41, 41, 41, 125, 10, 32, 32, 36, // tv(i)))}. $
+ 123, 120, 116, 97, 46, 109, 97, 112, 40, 105, 32, 61, // {xta.map(i =
+ 62, 32, 120, 116, 108, 40, 120, 116, 105, 40, 105, 41, // > xtl(xti(i)
+ 41, 41, 125, 10, 32, 32, 36, 123, 100, 97, 116, 97, // ))}. ${data
+ 46, 108, 101, 110, 103, 116, 104, 32, 63, 32, 120, 116, // .length ? xt
+ 97, 46, 109, 97, 112, 40, 105, 32, 61, 62, 32, 120, // a.map(i => x
+ 116, 116, 40, 120, 116, 105, 40, 105, 41, 44, 32, 120, // tt(xti(i), x
+ 116, 118, 40, 105, 41, 41, 41, 32, 58, 32, 39, 39, // tv(i))) : ''
+ 125, 10, 32, 32, 60, 112, 97, 116, 104, 32, 100, 61, // }. .
+ 60, 112, 97, 116, 104, 32, 100, 61, 34, 36, 123, 98, // .
+ 115, 118, 103, 62, 96, 59, 10, 125, 59, 10, 10, 10, // svg>`;.};...
+ 99, 111, 110, 115, 116, 32, 67, 104, 97, 114, 116, 32, // const Chart
+ 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 112, // = function(p
+ 114, 111, 112, 115, 41, 32, 123, 10, 32, 32, 99, 111, // rops) {. co
+ 110, 115, 116, 32, 91, 100, 97, 116, 97, 44, 32, 115, // nst [data, s
+ 101, 116, 68, 97, 116, 97, 93, 32, 61, 32, 117, 115, // etData] = us
+ 101, 83, 116, 97, 116, 101, 40, 91, 93, 41, 59, 10, // eState([]);.
+ 32, 32, 117, 115, 101, 69, 102, 102, 101, 99, 116, 40, // useEffect(
+ 40, 41, 32, 61, 62, 32, 123, 10, 32, 32, 32, 32, // () => {.
+ 99, 111, 110, 115, 116, 32, 105, 100, 32, 61, 32, 80, // const id = P
+ 117, 98, 83, 117, 98, 46, 115, 117, 98, 115, 99, 114, // ubSub.subscr
+ 105, 98, 101, 40, 102, 117, 110, 99, 116, 105, 111, 110, // ibe(function
+ 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 32, 32, // (msg) {.
+ 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, 110, 97, // if (msg.na
+ 109, 101, 32, 33, 61, 32, 39, 109, 101, 116, 114, 105, // me != 'metri
+ 99, 115, 39, 41, 32, 114, 101, 116, 117, 114, 110, 59, // cs') return;
+ 10, 32, 32, 32, 32, 32, 32, 115, 101, 116, 68, 97, // . setDa
+ 116, 97, 40, 120, 32, 61, 62, 32, 120, 46, 99, 111, // ta(x => x.co
+ 110, 99, 97, 116, 40, 91, 109, 115, 103, 46, 100, 97, // ncat([msg.da
+ 116, 97, 93, 41, 46, 115, 112, 108, 105, 99, 101, 40, // ta]).splice(
+ 45, 77, 97, 120, 77, 101, 116, 114, 105, 99, 115, 68, // -MaxMetricsD
+ 97, 116, 97, 80, 111, 105, 110, 116, 115, 41, 41, 59, // ataPoints));
+ 10, 32, 32, 32, 32, 125, 41, 59, 10, 32, 32, 32, // . });.
+ 32, 114, 101, 116, 117, 114, 110, 32, 80, 117, 98, 83, // return PubS
+ 117, 98, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, // ub.unsubscri
+ 98, 101, 40, 105, 100, 41, 59, 10, 32, 32, 125, 44, // be(id);. },
+ 32, 91, 93, 41, 59, 10, 10, 32, 32, 108, 101, 116, // []);.. let
+ 32, 120, 109, 97, 120, 32, 61, 32, 48, 44, 32, 109, // xmax = 0, m
+ 105, 115, 115, 105, 110, 103, 32, 61, 32, 77, 97, 120, // issing = Max
+ 77, 101, 116, 114, 105, 99, 115, 68, 97, 116, 97, 80, // MetricsDataP
+ 111, 105, 110, 116, 115, 32, 45, 32, 100, 97, 116, 97, // oints - data
+ 46, 108, 101, 110, 103, 116, 104, 59, 10, 32, 32, 105, // .length;. i
+ 102, 32, 40, 109, 105, 115, 115, 105, 110, 103, 32, 62, // f (missing >
+ 32, 48, 41, 32, 120, 109, 97, 120, 32, 61, 32, 77, // 0) xmax = M
+ 97, 116, 104, 46, 114, 111, 117, 110, 100, 40, 68, 97, // ath.round(Da
+ 116, 101, 46, 110, 111, 119, 40, 41, 32, 47, 32, 49, // te.now() / 1
+ 48, 48, 48, 41, 32, 43, 32, 109, 105, 115, 115, 105, // 000) + missi
+ 110, 103, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, // ng;. return
+ 32, 104, 116, 109, 108, 96, 10, 60, 100, 105, 118, 32, // html`..
Data C
+ 104, 97, 114, 116, 60, 47, 104, 51, 62, 10, 32, 32, // hart .
+ 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, //
. <
+ 36, 123, 83, 86, 71, 125, 32, 104, 101, 105, 103, 104, // ${SVG} heigh
+ 116, 61, 50, 52, 48, 32, 119, 105, 100, 116, 104, 61, // t=240 width=
+ 54, 48, 48, 32, 121, 109, 105, 110, 61, 48, 32, 121, // 600 ymin=0 y
+ 109, 97, 120, 61, 50, 48, 32, 120, 109, 97, 120, 61, // max=20 xmax=
+ 36, 123, 120, 109, 97, 120, 125, 32, 100, 97, 116, 97, // ${xmax} data
+ 61, 36, 123, 100, 97, 116, 97, 125, 32, 47, 62, 10, // =${data} />.
+ 32, 32, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, //
. <
+ 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 109, // div class="m
+ 115, 103, 34, 62, 10, 32, 32, 32, 32, 84, 104, 105, // sg">. Thi
+ 115, 32, 99, 104, 97, 114, 116, 32, 112, 108, 111, 116, // s chart plot
+ 115, 32, 108, 105, 118, 101, 32, 115, 101, 110, 115, 111, // s live senso
+ 114, 32, 100, 97, 116, 97, 44, 32, 115, 101, 110, 116, // r data, sent
+ 32, 98, 121, 32, 116, 104, 101, 32, 100, 101, 118, 105, // by the devi
+ 99, 101, 32, 118, 105, 97, 32, 47, 97, 112, 105, 47, // ce via /api/
+ 119, 97, 116, 99, 104, 46, 10, 32, 32, 60, 47, 100, // watch.. .
`;
+ 10, 125, 59, 10, 10, 99, 111, 110, 115, 116, 32, 65, // .};..const A
+ 112, 112, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, // pp = functio
+ 110, 40, 112, 114, 111, 112, 115, 41, 32, 123, 10, 32, // n(props) {.
+ 32, 99, 111, 110, 115, 116, 32, 91, 117, 115, 101, 114, // const [user
+ 44, 32, 115, 101, 116, 85, 115, 101, 114, 93, 32, 61, // , setUser] =
+ 32, 117, 115, 101, 83, 116, 97, 116, 101, 40, 39, 39, // useState(''
+ 41, 59, 10, 32, 32, 99, 111, 110, 115, 116, 32, 91, // );. const [
+ 99, 111, 110, 102, 105, 103, 44, 32, 115, 101, 116, 67, // config, setC
+ 111, 110, 102, 105, 103, 93, 32, 61, 32, 117, 115, 101, // onfig] = use
+ 83, 116, 97, 116, 101, 40, 123, 125, 41, 59, 10, 10, // State({});..
+ 32, 32, 99, 111, 110, 115, 116, 32, 103, 101, 116, 99, // const getc
+ 111, 110, 102, 105, 103, 32, 61, 32, 40, 41, 32, 61, // onfig = () =
+ 62, 10, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99, // >. fetc
+ 104, 40, 39, 47, 97, 112, 105, 47, 99, 111, 110, 102, // h('/api/conf
+ 105, 103, 47, 103, 101, 116, 39, 44, 32, 123, 104, 101, // ig/get', {he
+ 97, 100, 101, 114, 115, 58, 32, 123, 65, 117, 116, 104, // aders: {Auth
+ 111, 114, 105, 122, 97, 116, 105, 111, 110, 58, 32, 39, // orization: '
+ 39, 125, 125, 41, 10, 32, 32, 32, 32, 32, 32, 32, // '}}).
+ 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, // .then(r =
+ 62, 32, 114, 46, 106, 115, 111, 110, 40, 41, 41, 10, // > r.json()).
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, // .t
+ 104, 101, 110, 40, 114, 32, 61, 62, 32, 115, 101, 116, // hen(r => set
+ 67, 111, 110, 102, 105, 103, 40, 114, 41, 41, 10, 32, // Config(r)).
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 46, 99, 97, // .ca
+ 116, 99, 104, 40, 101, 114, 114, 32, 61, 62, 32, 99, // tch(err => c
+ 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 101, // onsole.log(e
+ 114, 114, 41, 41, 59, 10, 10, 32, 32, 99, 111, 110, // rr));.. con
+ 115, 116, 32, 108, 111, 103, 105, 110, 32, 61, 32, 102, // st login = f
+ 117, 110, 99, 116, 105, 111, 110, 40, 117, 41, 32, 123, // unction(u) {
+ 10, 32, 32, 32, 32, 100, 111, 99, 117, 109, 101, 110, // . documen
+ 116, 46, 99, 111, 111, 107, 105, 101, 32, 61, 32, 96, // t.cookie = `
+ 97, 99, 99, 101, 115, 115, 95, 116, 111, 107, 101, 110, // access_token
+ 61, 36, 123, 117, 46, 116, 111, 107, 101, 110, 125, 59, // =${u.token};
+ 112, 97, 116, 104, 61, 47, 59, 109, 97, 120, 45, 97, // path=/;max-a
+ 103, 101, 61, 51, 54, 48, 48, 96, 59, 10, 32, 32, // ge=3600`;.
+ 32, 32, 115, 101, 116, 85, 115, 101, 114, 40, 117, 46, // setUser(u.
+ 117, 115, 101, 114, 41, 59, 10, 32, 32, 32, 32, 114, // user);. r
+ 101, 116, 117, 114, 110, 32, 103, 101, 116, 99, 111, 110, // eturn getcon
+ 102, 105, 103, 40, 41, 59, 10, 32, 32, 125, 59, 10, // fig();. };.
+ 10, 32, 32, 99, 111, 110, 115, 116, 32, 108, 111, 103, // . const log
+ 111, 117, 116, 32, 61, 32, 101, 118, 32, 61, 62, 32, // out = ev =>
+ 123, 10, 32, 32, 32, 32, 100, 111, 99, 117, 109, 101, // {. docume
+ 110, 116, 46, 99, 111, 111, 107, 105, 101, 32, 61, 32, // nt.cookie =
+ 96, 97, 99, 99, 101, 115, 115, 95, 116, 111, 107, 101, // `access_toke
+ 110, 61, 59, 112, 97, 116, 104, 61, 47, 59, 109, 97, // n=;path=/;ma
+ 120, 45, 97, 103, 101, 61, 48, 96, 59, 10, 32, 32, // x-age=0`;.
+ 32, 32, 115, 101, 116, 85, 115, 101, 114, 40, 39, 39, // setUser(''
+ 41, 59, 10, 32, 32, 125, 59, 10, 10, 32, 32, 47, // );. };.. /
+ 47, 32, 87, 97, 116, 99, 104, 32, 102, 111, 114, 32, // / Watch for
+ 110, 111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, // notification
+ 115, 46, 32, 65, 115, 32, 115, 111, 111, 110, 32, 97, // s. As soon a
+ 115, 32, 97, 32, 110, 111, 116, 105, 102, 105, 99, 97, // s a notifica
+ 116, 105, 111, 110, 32, 97, 114, 114, 105, 118, 101, 115, // tion arrives
+ 44, 32, 112, 97, 115, 115, 32, 105, 116, 32, 111, 110, // , pass it on
+ 10, 32, 32, 47, 47, 32, 116, 111, 32, 97, 108, 108, // . // to all
+ 32, 115, 117, 98, 115, 99, 114, 105, 98, 101, 100, 32, // subscribed
+ 99, 111, 109, 112, 111, 110, 101, 110, 116, 115, 10, 32, // components.
+ 32, 99, 111, 110, 115, 116, 32, 119, 97, 116, 99, 104, // const watch
+ 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, // = function(
+ 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, // ) {. var
+ 108, 32, 61, 32, 119, 105, 110, 100, 111, 119, 46, 108, // l = window.l
+ 111, 99, 97, 116, 105, 111, 110, 44, 32, 112, 114, 111, // ocation, pro
+ 116, 111, 32, 61, 32, 108, 46, 112, 114, 111, 116, 111, // to = l.proto
+ 99, 111, 108, 46, 114, 101, 112, 108, 97, 99, 101, 40, // col.replace(
+ 39, 104, 116, 116, 112, 39, 44, 32, 39, 119, 115, 39, // 'http', 'ws'
+ 41, 59, 10, 32, 32, 32, 32, 118, 97, 114, 32, 116, // );. var t
+ 105, 100, 44, 32, 119, 115, 85, 82, 73, 32, 61, 32, // id, wsURI =
+ 112, 114, 111, 116, 111, 32, 43, 32, 39, 47, 47, 39, // proto + '//'
+ 32, 43, 32, 108, 46, 104, 111, 115, 116, 32, 43, 32, // + l.host +
+ 39, 47, 97, 112, 105, 47, 119, 97, 116, 99, 104, 39, // '/api/watch'
+ 10, 32, 32, 32, 32, 118, 97, 114, 32, 114, 101, 99, // . var rec
+ 111, 110, 110, 101, 99, 116, 32, 61, 32, 102, 117, 110, // onnect = fun
+ 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, 32, 32, // ction() {.
+ 32, 32, 32, 32, 118, 97, 114, 32, 119, 115, 32, 61, // var ws =
+ 32, 110, 101, 119, 32, 87, 101, 98, 83, 111, 99, 107, // new WebSock
+ 101, 116, 40, 119, 115, 85, 82, 73, 41, 59, 10, 32, // et(wsURI);.
+ 32, 32, 32, 32, 32, 119, 115, 46, 111, 110, 111, 112, // ws.onop
+ 101, 110, 32, 61, 32, 40, 41, 32, 61, 62, 32, 99, // en = () => c
+ 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 39, // onsole.log('
+ 119, 115, 32, 99, 111, 110, 110, 101, 99, 116, 101, 100, // ws connected
+ 39, 41, 59, 10, 32, 32, 32, 32, 32, 32, 119, 115, // ');. ws
+ 46, 111, 110, 109, 101, 115, 115, 97, 103, 101, 32, 61, // .onmessage =
+ 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 101, 118, // function(ev
+ 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, // ) {.
+ 116, 114, 121, 32, 123, 10, 32, 32, 32, 32, 32, 32, // try {.
+ 32, 32, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, // var msg
+ 61, 32, 74, 83, 79, 78, 46, 112, 97, 114, 115, 101, // = JSON.parse
+ 40, 101, 118, 46, 100, 97, 116, 97, 41, 59, 10, 32, // (ev.data);.
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 80, 117, 98, // Pub
+ 83, 117, 98, 46, 112, 117, 98, 108, 105, 115, 104, 40, // Sub.publish(
+ 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, // msg);.
+ 32, 32, 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, // if (msg.
+ 110, 97, 109, 101, 32, 33, 61, 32, 39, 109, 101, 116, // name != 'met
+ 114, 105, 99, 115, 39, 41, 32, 99, 111, 110, 115, 111, // rics') conso
+ 108, 101, 46, 108, 111, 103, 40, 39, 119, 115, 45, 62, // le.log('ws->
+ 39, 44, 32, 109, 115, 103, 41, 59, 10, 32, 32, 32, // ', msg);.
+ 32, 32, 32, 32, 32, 125, 32, 99, 97, 116, 99, 104, // } catch
+ 32, 40, 101, 41, 32, 123, 10, 32, 32, 32, 32, 32, // (e) {.
+ 32, 32, 32, 32, 32, 99, 111, 110, 115, 111, 108, 101, // console
+ 46, 108, 111, 103, 40, 39, 73, 110, 118, 97, 108, 105, // .log('Invali
+ 100, 32, 119, 115, 32, 102, 114, 97, 109, 101, 58, 39, // d ws frame:'
+ 44, 32, 101, 118, 46, 100, 97, 116, 97, 41, 59, 32, // , ev.data);
+ 32, 47, 47, 32, 101, 115, 108, 105, 110, 116, 45, 100, // // eslint-d
+ 105, 115, 97, 98, 108, 101, 45, 108, 105, 110, 101, 10, // isable-line.
+ 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, // }.
+ 32, 32, 32, 32, 125, 59, 10, 32, 32, 32, 32, 32, // };.
+ 32, 119, 115, 46, 111, 110, 99, 108, 111, 115, 101, 32, // ws.onclose
+ 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, // = function()
+ 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 99, // {. c
+ 108, 101, 97, 114, 84, 105, 109, 101, 111, 117, 116, 40, // learTimeout(
+ 116, 105, 100, 41, 59, 10, 32, 32, 32, 32, 32, 32, // tid);.
+ 32, 32, 116, 105, 100, 32, 61, 32, 115, 101, 116, 84, // tid = setT
+ 105, 109, 101, 111, 117, 116, 40, 114, 101, 99, 111, 110, // imeout(recon
+ 110, 101, 99, 116, 44, 32, 49, 48, 48, 48, 41, 59, // nect, 1000);
+ 10, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, // . con
+ 115, 111, 108, 101, 46, 108, 111, 103, 40, 39, 119, 115, // sole.log('ws
+ 32, 100, 105, 115, 99, 111, 110, 110, 101, 99, 116, 101, // disconnecte
+ 100, 39, 41, 59, 10, 32, 32, 32, 32, 32, 32, 125, // d');. }
+ 59, 10, 32, 32, 32, 32, 125, 59, 10, 32, 32, 32, // ;. };.
+ 32, 114, 101, 99, 111, 110, 110, 101, 99, 116, 40, 41, // reconnect()
+ 59, 10, 32, 32, 125, 59, 10, 10, 32, 32, 117, 115, // ;. };.. us
+ 101, 69, 102, 102, 101, 99, 116, 40, 40, 41, 32, 61, // eEffect(() =
+ 62, 32, 123, 10, 32, 32, 32, 32, 47, 47, 32, 67, // > {. // C
+ 97, 108, 108, 101, 100, 32, 111, 110, 99, 101, 32, 97, // alled once a
+ 116, 32, 105, 110, 105, 116, 32, 116, 105, 109, 101, 10, // t init time.
+ 32, 32, 32, 32, 80, 117, 98, 83, 117, 98, 46, 115, // PubSub.s
+ 117, 98, 115, 99, 114, 105, 98, 101, 40, 109, 115, 103, // ubscribe(msg
+ 32, 61, 62, 32, 109, 115, 103, 46, 110, 97, 109, 101, // => msg.name
+ 32, 61, 61, 32, 39, 99, 111, 110, 102, 105, 103, 39, // == 'config'
+ 32, 38, 38, 32, 103, 101, 116, 99, 111, 110, 102, 105, // && getconfi
+ 103, 40, 41, 41, 59, 10, 32, 32, 32, 32, 102, 101, // g());. fe
+ 116, 99, 104, 40, 39, 47, 97, 112, 105, 47, 108, 111, // tch('/api/lo
+ 103, 105, 110, 39, 44, 32, 123, 104, 101, 97, 100, 101, // gin', {heade
+ 114, 115, 58, 32, 123, 65, 117, 116, 104, 111, 114, 105, // rs: {Authori
+ 122, 97, 116, 105, 111, 110, 58, 32, 39, 39, 125, 125, // zation: ''}}
+ 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, // ). .t
+ 104, 101, 110, 40, 114, 32, 61, 62, 32, 114, 46, 106, // hen(r => r.j
+ 115, 111, 110, 40, 41, 41, 10, 32, 32, 32, 32, 32, // son()).
+ 32, 32, 32, 46, 116, 104, 101, 110, 40, 114, 32, 61, // .then(r =
+ 62, 32, 108, 111, 103, 105, 110, 40, 114, 41, 41, 10, // > login(r)).
+ 32, 32, 32, 32, 32, 32, 32, 32, 46, 116, 104, 101, // .the
+ 110, 40, 119, 97, 116, 99, 104, 41, 10, 32, 32, 32, // n(watch).
+ 32, 32, 32, 32, 32, 46, 99, 97, 116, 99, 104, 40, // .catch(
+ 101, 114, 114, 32, 61, 62, 32, 115, 101, 116, 85, 115, // err => setUs
+ 101, 114, 40, 39, 39, 41, 41, 59, 10, 32, 32, 125, // er(''));. }
+ 44, 32, 91, 93, 41, 59, 10, 10, 32, 32, 105, 102, // , []);.. if
+ 32, 40, 33, 117, 115, 101, 114, 41, 32, 114, 101, 116, // (!user) ret
+ 117, 114, 110, 32, 104, 116, 109, 108, 96, 60, 36, 123, // urn html`<${
+ 76, 111, 103, 105, 110, 125, 32, 108, 111, 103, 105, 110, // Login} login
+ 61, 36, 123, 108, 111, 103, 105, 110, 125, 32, 47, 62, // =${login} />
+ 96, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, // `;.. return
+ 32, 104, 116, 109, 108, 96, 10, 60, 36, 123, 78, 97, // html`.<${Na
+ 118, 125, 32, 117, 115, 101, 114, 61, 36, 123, 117, 115, // v} user=${us
+ 101, 114, 125, 32, 108, 111, 103, 111, 117, 116, 61, 36, // er} logout=$
+ 123, 108, 111, 103, 111, 117, 116, 125, 32, 47, 62, 10, // {logout} />.
+ 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, // .
+ 32, 32, 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, //
.
+ 60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, //
<
+ 36, 123, 72, 101, 114, 111, 125, 32, 47, 62, 60, 47, // ${Hero} />
+ 100, 105, 118, 62, 10, 32, 32, 32, 32, 60, 100, 105, // div>.
<${C
+ 104, 97, 114, 116, 125, 32, 47, 62, 60, 47, 100, 105, // hart} /> .
.
+ 32, 36, 123, 117, 115, 101, 114, 32, 61, 61, 32, 39, // ${user == '
+ 97, 100, 109, 105, 110, 39, 32, 38, 38, 32, 104, 40, // admin' && h(
+ 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, // Configuratio
+ 110, 44, 32, 123, 99, 111, 110, 102, 105, 103, 125, 41, // n, {config})
+ 125, 10, 32, 32, 32, 32, 60, 47, 100, 105, 118, 62, // }.
+ 10, 32, 32, 32, 32, 60, 100, 105, 118, 32, 99, 108, // .
<${Messa
+ 103, 101, 115, 125, 32, 99, 111, 110, 102, 105, 103, 61, // ges} config=
+ 36, 123, 99, 111, 110, 102, 105, 103, 125, 32, 47, 62, // ${config} />
+ 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 100, //
. .
`;
+ 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, // .};..window.
+ 111, 110, 108, 111, 97, 100, 32, 61, 32, 40, 41, 32, // onload = ()
+ 61, 62, 32, 114, 101, 110, 100, 101, 114, 40, 104, 40, // => render(h(
+ 65, 112, 112, 41, 44, 32, 100, 111, 99, 117, 109, 101, // App), docume
+ 110, 116, 46, 98, 111, 100, 121, 41, 59, 10, 0 // nt.body);.
+};
static const struct packed_file {
const char *name;
@@ -2785,11 +2795,11 @@ static const struct packed_file {
size_t size;
time_t mtime;
} packed_files[] = {
- {"/web_root/index.html", v1, sizeof(v1), 1654437619},
- {"/web_root/main.js", v2, sizeof(v2), 1654714271},
- {"/web_root/preact.min.js", v3, sizeof(v3), 1652374364},
- {"/web_root/style.css", v4, sizeof(v4), 1654709515},
- {"/web_root/user.png", v5, sizeof(v5), 1626172939},
+ {"/web_root/index.html", v1, sizeof(v1), 1655487950},
+ {"/web_root/preact.min.js", v2, sizeof(v2), 1655487950},
+ {"/web_root/style.css", v3, sizeof(v3), 1655487950},
+ {"/web_root/user.png", v4, sizeof(v4), 1655487950},
+ {"/web_root/main.js", v5, sizeof(v5), 1656008519},
{NULL, NULL, 0, 0}
};
diff --git a/examples/device-dashboard/web_root/main.js b/examples/device-dashboard/web_root/main.js
index 4bebf590..1fa535c0 100644
--- a/examples/device-dashboard/web_root/main.js
+++ b/examples/device-dashboard/web_root/main.js
@@ -43,8 +43,8 @@ const Hero = props => html`
Interactive Device Dashboard
- This device dashboard is developed with modern and compact Preact framework,
- in order to fit on a very small devices. This is
+ This device dashboard is developed using the modern and compact Preact framework,
+ in order to fit on very small devices. This is
a hybrid server which
provides both static and dynamic content. Static files, like CSS/JS/HTML
or images, are compiled into the server binary.
@@ -53,14 +53,14 @@ const Hero = props => html`
using curl
command-line utility:
-
curl localhost:8000/api/config/get
-
curl localhost:8000/api/config/set -d 'value1=7&value2=hello'
-
curl localhost:8000/api/message/send -d 'msg=hello'
+
curl -u admin:pass0 localhost:8000/api/config/get
+
curl -u admin:pass0 localhost:8000/api/config/set -d 'pub=mg/topic'
+
curl -u admin:pass0 localhost:8000/api/message/send -d 'message=hello'
- A device can send notifications to this dashboard at anytime. Notifications
- are sent over Websocket at URI curl localhost:8000/api/watch
- as JSON strings {"name": "..", "data": ...}
+ The device can send notifications to this dashboard at anytime. Notifications
+ are sent over WebSocket at URI /api/watch
as JSON strings: {"name": "..", "data": ...}
+
Try wscat --auth user1:pass1 --connect ws://localhost:8000/api/watch
`;
@@ -153,10 +153,10 @@ const Configuration = function(props) {
HiveMQ Websocket web client to send messages to this console.
- Device keeps a persistent connection to the configured MQTT server.
+ The device keeps a persistent connection to the configured MQTT server.
Changes to this configuration are propagated to all dashboards: try
- changing them in this dashboard and observe changes in the other opened
- dashboard.
+ changing them in this dashboard and observe changes in other opened
+ dashboards.
Note: administrators can see this section and can change device
configuration, whilst users cannot.
@@ -186,7 +186,7 @@ const Messages = function(props) {
method: 'post',
body: `message=${encodeURIComponent(txt)}`
}).then(r => setTxt(''));
- const connstatus = props.config.connected ? 'connected' : 'diconnected';
+ const connstatus = props.config.connected ? 'connected' : 'disconnected';
return html`
MQTT messages
@@ -203,10 +203,9 @@ const Messages = function(props) {
oninput=${ev => setTxt(ev.target.value)} />
- Message gets passed to the device via REST. Then a device sends it to
+ The message gets passed to the device via REST. Then the device sends it to
the MQTT server over MQTT. All MQTT messages on a subscribed topic
- received by a device, are propagated to this dashboard via the
- /api/watch.
+ received by the device, are propagated to this dashboard via /api/watch.
`;
};
@@ -298,7 +297,7 @@ const Chart = function(props) {
<${SVG} height=240 width=600 ymin=0 ymax=20 xmax=${xmax} data=${data} />
- This chart plots live sensor data, sent by a device via /api/watch.
+ This chart plots live sensor data, sent by the device via /api/watch.
`;
};