diff --git a/.eslintrc.js b/.eslintrc.js index e03c58d..1fc0053 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -19,6 +19,9 @@ module.exports = { "plugins": [ "react", "flowtype" ], + "globals": { + "require": false + }, "rules": { // possible errors "getter-return": "error", diff --git a/config/entropia/index.js b/config/entropia/index.js index 5f65001..879cbdc 100644 --- a/config/entropia/index.js +++ b/config/entropia/index.js @@ -1,10 +1,10 @@ // @flow import type { Config } from "config/flowtypes"; -import { hex, rgb, rgba, rainbow } from "config/colors"; +import { hex } from "config/colors"; import * as types from "config/types"; import { mdi } from "config/icon"; -const config : Config = { +const config: Config = { space: { name: "Entropia", color: "orange", @@ -18,7 +18,7 @@ const config : Config = { type: types.option({ "A1 ON": "on", "A1 OFF": "off" }) }, defaultValue: "off" - }, + }, hauptraum_table_light_on_hack: { command: { name: "/public/sensoren/TPH/leinwand/control", diff --git a/config/rzl/index.js b/config/rzl/index.js index 853ede2..a09eb8b 100644 --- a/config/rzl/index.js +++ b/config/rzl/index.js @@ -1,9 +1,9 @@ // @flow import type { Config } from "config/flowtypes"; import * as types from "config/types"; -import { hex, rgb, rgba, rainbow } from "config/colors"; +import { hex, rainbow } from "config/colors"; import { mdi, rawMdi, mdiBattery } from "config/icon"; -import { esper_topics, esper_statistics, floalt, tradfri_remote, tasmota } from "./utils"; +import { esper, floalt, tradfri, tasmota } from "./utils"; import * as onkyo from "./onkyo"; @@ -15,7 +15,7 @@ const config: Config = { }, topics: [ { - led_stahltraeger: { + ledStahltraeger: { state: { name: "/service/openhab/out/pca301_ledstrips/state", type: types.option({ ON: "on", OFF: "off" }) @@ -97,23 +97,23 @@ const config: Config = { name: "stat/sonoff4/POWER", type: types.option({ ON: "on", OFF: "off" }) }, - defaultValue: "off", + defaultValue: "off" }, loetarbeitsplatz5: { state: { name: "stat/sonoff5/POWER", type: types.option({ ON: "on", OFF: "off" }) }, - defaultValue: "off", + defaultValue: "off" }, - door_status: { + doorStatus: { state: { name: "/service/status", type: types.option({ "\"open\"": "on", "\"closed\"": "off" }) }, defaultValue: "off" }, - presence_status: { + presenceStatus: { state: { name: "service/status/presence", type: types.jsonArray @@ -167,22 +167,24 @@ const config: Config = { otherwise: "awaiting_interaction" }) }, - defaultValue: "unavailable", + defaultValue: "unavailable" }, printer_3d_progress: { state: { name: "/service/ultimaker/job", - type: msg => JSON.parse(msg.toString()).progress || "0" + type: (msg) => JSON.parse(msg.toString()).progress || "0" }, defaultValue: "0" }, kitchen_light_color: { state: { - name: "/service/openhab/out/kitchen_light_all_color_temperature/state", + name: "/service/openhab/out/kitchen_light_all_color_temperature" + + "/state", type: types.string }, command: { - name: "/service/openhab/in/kitchen_light_all_color_temperature/command", + name: "/service/openhab/in/kitchen_light_all_color_temperature" + + "/command", type: types.string }, defaultValue: "0" @@ -200,16 +202,18 @@ const config: Config = { }, kitchen_sink_light_brightness: { state: { - name: "/service/openhab/out/tradfri_0100_gwb8d7af2b448f_65545_brightness/state", + name: "/service/openhab/out/tradfri_0100_" + + "gwb8d7af2b448f_65545_brightness/state", type: types.string }, command: { - name: "/service/openhab/in/tradfri_0100_gwb8d7af2b448f_65545_brightness/command", + name: "/service/openhab/in/tradfri_0100_" + + "gwb8d7af2b448f_65545_brightness/command", type: types.string }, defaultValue: "0" }, - nebenraum_power_status: { + nebenraumPowerStatus: { state: { name: "/service/nebenraum-power", type: types.option({ ON: "on", OFF: "off" }) @@ -228,17 +232,17 @@ const config: Config = { floalt.topics("65538"), floalt.topics("65539"), floalt.topics("65540"), - tradfri_remote.topics("65536"), - tradfri_remote.topics("65547"), + tradfri.remote.topics("65536"), + tradfri.remote.topics("65547"), //Theken-Floalts floalt.topics("65543"), floalt.topics("65544"), - tradfri_remote.topics("65542"), - tradfri_remote.topics("65546"), + tradfri.remote.topics("65542"), + tradfri.remote.topics("65546"), - esper_topics("afba40", "flyfry"), - esper_topics("afba45", "alarm"), + esper.topics("afba40", "flyfry"), + esper.topics("afba45", "alarm"), onkyo.topics ], @@ -248,14 +252,15 @@ const config: Config = { name: "LED Stahlträger", position: [340, 590], icon: mdi("white-balance-iridescent"), - iconColor: ({led_stahltraeger}) => led_stahltraeger == "on" ? rainbow : hex("#000000"), + iconColor: ({ledStahltraeger}) => + (ledStahltraeger === "on" ? rainbow : hex("#000000")), ui: [ { type: "toggle", text: "Stahlträger LED", - topic: "led_stahltraeger", + topic: "ledStahltraeger", icon: mdi("power") - }, + } ] }, led_olymp: { @@ -290,8 +295,8 @@ const config: Config = { name: "Twinkle", position: [530, 560], icon: ({twinkle}) => - twinkle == "on" ? rawMdi("led-on flip-v") : rawMdi("led-off flip-v"), - iconColor: ({twinkle}) => twinkle == "on" ? rainbow : hex("#000000"), + (twinkle === "on" ? rawMdi("led-on flip-v") : rawMdi("led-off flip-v")), + iconColor: ({twinkle}) => (twinkle === "on" ? rainbow : hex("#000000")), ui: [ { type: "toggle", @@ -305,7 +310,7 @@ const config: Config = { name: "Ventilator", position: [530, 440], icon: mdi("fan"), - iconColor: ({fan}) => fan == "on" ? hex("#00FF00") : hex("#000000"), + iconColor: ({fan}) => (fan === "on" ? hex("#00FF00") : hex("#000000")), ui: [ { type: "toggle", @@ -332,7 +337,8 @@ const config: Config = { name: "Videospiele", position: [100, 100], icon: mdi("gamepad-variant"), - iconColor: ({videogames}) => videogames == "on" ? hex("#00FF00") : hex("#000000"), + iconColor: ({videogames}) => + (videogames === "on" ? hex("#00FF00") : hex("#000000")), ui: [ { type: "toggle", @@ -346,7 +352,8 @@ const config: Config = { name: "Rechner", position: [297, 90], icon: mdi("desktop-classic"), - iconColor: ({olymp_pc}) => olymp_pc == "on" ? hex("#00FF00") : hex("#000000"), + iconColor: ({olymp_pc}) => + (olymp_pc === "on" ? hex("#00FF00") : hex("#000000")), ui: [ { type: "toggle", @@ -380,8 +387,9 @@ const config: Config = { name: "Fliegenbratgerät", position: [450, 570], icon: mdi("fire"), - iconColor: ({flyfry}) => flyfry == "on" ? hex("#6666FF") : hex("#000000"), - ui: esper_statistics("flyfry", [ + iconColor: ({flyfry}) => + (flyfry === "on" ? hex("#6666FF") : hex("#000000")), + ui: esper.statistics("flyfry", [ { type: "toggle", text: "Fliegenbratgerät", @@ -400,23 +408,24 @@ const config: Config = { transient_off: hex("#b3b300"), on: hex("#00ff00"), off: hex("#000000"), - unknown: hex("#888888"), + unknown: hex("#888888") })[projector], ui: [ { type: "toggle", text: "Beamer", topic: "projector", - toggled: val => val == "transient_on" || val == "on", + toggled: (val) => val === "transient_on" || val === "on", icon: mdi("power") } ] }, rundumleuchte: { name: "Rundumleuchte", - position: [310,275], + position: [310, 275], icon: mdi("alarm-light"), - iconColor: ({rundumleuchte}) => rundumleuchte == "on" ? hex("#F0DF10") : hex("#000000"), + iconColor: ({rundumleuchte}) => + (rundumleuchte === "on" ? hex("#F0DF10") : hex("#000000")), ui: [ { type: "toggle", @@ -430,7 +439,8 @@ const config: Config = { name: "Lötarbeitsplatz", position: [205, 455], icon: mdi("eyedropper-variant"), - iconColor: ({loetarbeitsplatz4}) => loetarbeitsplatz4 == "on" ? hex("#FF0000") : hex("#000000"), + iconColor: ({loetarbeitsplatz4}) => + (loetarbeitsplatz4 === "on" ? hex("#FF0000") : hex("#000000")), ui: [ { type: "text", @@ -444,7 +454,8 @@ const config: Config = { name: "Lötarbeitsplatz", position: [205, 405], icon: mdi("eyedropper-variant"), - iconColor: ({loetarbeitsplatz5}) => loetarbeitsplatz5 == "on" ? hex("#FF0000") : hex("#000000"), + iconColor: ({loetarbeitsplatz5}) => + (loetarbeitsplatz5 === "on" ? hex("#FF0000") : hex("#000000")), ui: [ { type: "text", @@ -459,13 +470,14 @@ const config: Config = { position: [340, 250], icon: mdi("alarm-bell"), iconColor: () => hex("#000000"), - ui: esper_statistics("alarm") + ui: esper.statistics("alarm") }, door: { name: "Tür", - position: [455,350], + position: [455, 350], icon: mdi("swap-vertical"), - iconColor: ({door_status}) => door_status == "on" ? hex("#00FF00") : hex("#FF0000"), + iconColor: ({doorStatus}) => + (doorStatus === "on" ? hex("#00FF00") : hex("#FF0000")), ui: [ { type: "link", @@ -476,7 +488,7 @@ const config: Config = { { type: "text", text: "Anwesend", - topic: "presence_status", + topic: "presenceStatus", icon: mdi("account") }, { @@ -512,7 +524,7 @@ const config: Config = { name: "Ultimaker 3", position: [754, 560], icon: mdi("printer-3d"), - iconColor: ({printer_3d_status}) => + iconColor: ({printer_3d_status}) => ({ awaiting_interaction: hex("#b3b300"), printing: hex("#00ff00"), @@ -563,7 +575,7 @@ const config: Config = { type: "toggle", on: "50", off: "0", - toggled: n => parseInt(n) > 0, + toggled: (n) => parseInt(n) > 0, topic: "kitchen_light_brightness", text: "Ein/Ausschalten", icon: mdi("power") @@ -675,7 +687,7 @@ const config: Config = { type: "toggle", on: "50", off: "0", - toggled: n => parseInt(n) > 0, + toggled: (n) => parseInt(n) > 0, topic: "kitchen_sink_light_brightness", text: "Ein/Ausschalten", icon: mdi("power") @@ -742,56 +754,57 @@ const config: Config = { position: [400, 344], icon: mdi("light-switch"), iconColor: (state) => //if any remote is low make icon red - ["65536", "65542", "65546", "65547"].some( - x => state[tradfri_remote.low(x)] == "true") ? hex("#ff0000") : hex("#000000"), + (["65536", "65542", "65546", "65547"] + .some((x) => state[tradfri.remote.low(x)] === "true") + ? hex("#ff0000") : hex("#000000")), ui: [ { type: "progress", - icon: mdiBattery(tradfri_remote.level("65536")), + icon: mdiBattery(tradfri.remote.level("65536")), min: 0, max: 100, text: "Licht Tisch 1", - topic: tradfri_remote.level("65536") + topic: tradfri.remote.level("65536") }, { type: "progress", - icon: mdiBattery(tradfri_remote.level("65547")), + icon: mdiBattery(tradfri.remote.level("65547")), min: 0, max: 100, text: "Licht Tisch 2", - topic: tradfri_remote.level("65547") + topic: tradfri.remote.level("65547") }, { type: "progress", - icon: mdiBattery(tradfri_remote.level("65542")), + icon: mdiBattery(tradfri.remote.level("65542")), min: 0, max: 100, text: "Licht Theke 1", - topic: tradfri_remote.level("65542") + topic: tradfri.remote.level("65542") }, { type: "progress", - icon: mdiBattery(tradfri_remote.level("65546")), + icon: mdiBattery(tradfri.remote.level("65546")), min: 0, max: 100, text: "Licht Theke 2", - topic: tradfri_remote.level("65546") + topic: tradfri.remote.level("65546") } ] }, - nebenraum_power_status: { + nebenraumPowerStatus: { name: "Strom Fablab", position: [613, 537], - icon: ({nebenraum_power_status}) => - nebenraum_power_status == "on" ? rawMdi("flash") : rawMdi("flash-off"), - iconColor: ({nebenraum_power_status}) => - nebenraum_power_status == "on" ? hex("#00ff00") : hex("#000000"), + icon: ({nebenraumPowerStatus}) => + (nebenraumPowerStatus === "on" ? rawMdi("flash") : rawMdi("flash-off")), + iconColor: ({nebenraumPowerStatus}) => + (nebenraumPowerStatus === "on" ? hex("#00ff00") : hex("#000000")), ui: [ { type: "text", icon: mdi("power"), text: "Strom Fablab", - topic: "nebenraum_power_status" + topic: "nebenraumPowerStatus" } ] } diff --git a/config/rzl/onkyo.js b/config/rzl/onkyo.js index 8074cc9..b2aabb8 100644 --- a/config/rzl/onkyo.js +++ b/config/rzl/onkyo.js @@ -78,7 +78,7 @@ export const topics: Topics = { unknown: "SLI00" }) }, - defaultValue: "unknown", + defaultValue: "unknown" }, onkyo_radios: { state: { @@ -118,87 +118,89 @@ export const topics: Topics = { }; export const controls: Controls = { - onkyo: { - name: "Onkyo", - position: [350, 650], - iconColor: ({onkyo_connection, onkyo_power}) => - onkyo_connection != "connected" ? hex("#888888") : (onkyo_power == "on" ? hex("#00FF00") : hex("#000000")), - icon: mdi("audio-video"), - ui: [ - { - type: "toggle", - text: "Power", - icon: mdi("power"), - topic: "onkyo_power", - enableCondition: ({ onkyo_connection }) => onkyo_connection == "connected" + onkyo: { + name: "Onkyo", + position: [350, 650], + iconColor: ({onkyo_connection, onkyo_power}) => + (onkyo_connection !== "connected" ? hex("#888888") : + (onkyo_power === "on" ? hex("#00FF00") : hex("#000000"))), + icon: mdi("audio-video"), + ui: [ + { + type: "toggle", + text: "Power", + icon: mdi("power"), + topic: "onkyo_power", + enableCondition: (state) => state.onkyo_connection === "connected" + }, + { + type: "section", + text: "Lautstärkeregelung" + }, + { + type: "slider", + text: "Volume", + topic: "onkyo_volume", + min: 0, + max: 50, + icon: mdi("volume-high"), + enableCondition: (state) => state.onkyo_connection === "connected" + }, + { + type: "toggle", + text: "Mute", + topic: "onkyo_mute", + icon: mdi("volume-off"), + enableCondition: (state) => state.onkyo_connection === "connected" + }, + { + type: "section", + text: "Eingänge" + }, + { + type: "dropDown", + text: "Eingang", + topic: "onkyo_inputs", + options: { + netzwerk: "Netzwerk", + tisch: "Tisch", + chromecast: "Chromecast", + pult: "Pult", + front: "Front HDMI" }, - { - type: "section", - text: "Lautstärkeregelung" + icon: mdi("usb"), + enableCondition: (state) => state.onkyo_connection === "connected" + }, + { + type: "dropDown", + text: "Netzwerksender", + topic: "onkyo_radios", + options: { + mpd: "MPD", + kohina: "Kohina", + somafm_dronezone: "Drone Zone (SomaFM)", + somafm_thetrip: "The Trip (SomaFM)", + querfunk: "Querfunk", + somafm_defconradio: "Defcon Radio (SomaFM)", + somafm_secretagent: "Secret Agent (SomaFM)", + somafm_lush: "Lush (SomaFM)", + somafm_beatblender: "Beat Blender (Soma FM)", + ponyville: "Ponyville FM" }, - { - type: "slider", - text: "Volume", - topic: "onkyo_volume", - min: 0, - max: 50, - icon: mdi("volume-high"), - enableCondition: ({ onkyo_connection }) => onkyo_connection == "connected" - }, - { - type: "toggle", - text: "Mute", - topic: "onkyo_mute", - icon: mdi("volume-off"), - enableCondition: ({ onkyo_connection }) => onkyo_connection == "connected" - }, - { - type: "section", - text: "Eingänge" - }, - { - type: "dropDown", - text: "Eingang", - topic: "onkyo_inputs", - options: { - netzwerk: "Netzwerk", - tisch: "Tisch", - chromecast: "Chromecast", - pult: "Pult", - front: "Front HDMI" - }, - icon: mdi("usb"), - enableCondition: ({ onkyo_connection }) => onkyo_connection == "connected" - }, - { - type: "dropDown", - text: "Netzwerksender", - topic: "onkyo_radios", - options: { - mpd: "MPD", - kohina: "Kohina", - somafm_dronezone: "Drone Zone (SomaFM)", - somafm_thetrip: "The Trip (SomaFM)", - querfunk: "Querfunk", - somafm_defconradio: "Defcon Radio (SomaFM)", - somafm_secretagent: "Secret Agent (SomaFM)", - somafm_lush: "Lush (SomaFM)", - somafm_beatblender: "Beat Blender (Soma FM)", - ponyville: "Ponyville FM" - }, - icon: mdi("radio"), - enableCondition: (state) => state.onkyo_connection == "connected" && state.onkyo_inputs == "netzwerk" - }, - { - type: "section", - text: "External" - }, - { - type: "link", - link: "http://mpd.rzl/mpd/player/index.php", - text: "Open MPD Interface", - icon: mdi("open-in-new") - } - ] - } + icon: mdi("radio"), + enableCondition: (state) => state.onkyo_connection === "connected" + && state.onkyo_inputs === "netzwerk" + }, + { + type: "section", + text: "External" + }, + { + type: "link", + link: "http://mpd.rzl/mpd/player/index.php", + text: "Open MPD Interface", + icon: mdi("open-in-new") + } + ] + } }; diff --git a/config/rzl/utils.js b/config/rzl/utils.js index 76a1a0e..413b06c 100644 --- a/config/rzl/utils.js +++ b/config/rzl/utils.js @@ -4,45 +4,6 @@ import { mdi } from "config/icon"; import { hex } from "config/colors"; import * as types from "config/types"; -export const esper_topics = (chip_id: string, name: string) => ({ - [ `esper_${name}_version` ]: { - state: { - name: `/service/esper/${chip_id}/info`, - type: types.json("version.esper") - }, - defaultValue: "UNKNOWN" - }, - [ `esper_${name}_ip` ]: { - state: { - name: `/service/esper/${chip_id}/info`, - type: types.json("network.ip") - }, - defaultValue: "UNKNOWN" - }, - [ `esper_${name}_rssi` ]: { - state: { - name: `/service/esper/${chip_id}/info`, - type: types.json("wifi.rssi") - }, - defaultValue: "UNKNOWN" - }, - [ `esper_${name}_uptime` ]: { - state: { - name: `/service/esper/${chip_id}/info`, - type: msg => new Date(JSON.parse(msg.toString()).time.startup * 1000) - .toLocaleString() - }, - defaultValue: "UNKNOWN", - }, - [ `esper_${name}_device` ]: { - state: { - name: `/service/esper/${chip_id}/info`, - type: types.json("device") - }, - defaultValue: "UNKNOWN" - } -}); - export const tasmota = { topics: (id: string, name: string) => ({ [name]: { @@ -62,106 +23,160 @@ export const tasmota = { type: types.string }, defaultValue: "offline" - }, + } }), - icon_color: (name: string, on_color: Color = hex("#00FF00")) => (state: State) => { - if (state[`${name}_online`] === "offline") { - return hex("#888888"); - } else { - if (state[name] === "on") { - return on_color; + icon_color: (name: string, on_color: Color = hex("#00FF00")) => + (state: State) => { + if (state[`${name}_online`] === "offline") { + return hex("#888888"); } else { - return hex("#000000"); + if (state[name] === "on") { + return on_color; + } else { + return hex("#000000"); + } } } - } -} +}; export const floalt = { - color: (light_id: string) => `floalt_${light_id}_color`, - brightness: (light_id: string) => `floalt_${light_id}_brightness`, - topics: (light_id: string) => ({ - [ `floalt_${light_id}_color` ]: { + color: (lightId: string) => `floalt_${lightId}_color`, + brightness: (lightId: string) => `floalt_${lightId}_brightness`, + topics: (lightId: string) => ({ + [`floalt_${lightId}_color`]: { state: { - name: `/service/openhab/out/tradfri_0220_gwb8d7af2b448f_${light_id}_color_temperature/state`, + name: `/service/openhab/out/tradfri_0220_gwb8d7af2b448f_${lightId}` + + "_color_temperature/state", type: types.string }, command: { - name: `/service/openhab/in/tradfri_0220_gwb8d7af2b448f_${light_id}_color_temperature/command`, + name: `/service/openhab/in/tradfri_0220_gwb8d7af2b448f_${lightId}` + + "_color_temperature/command", type: types.string }, defaultValue: "0" }, - [ `floalt_${light_id}_brightness` ]: { + [`floalt_${lightId}_brightness`]: { state: { - name: `/service/openhab/out/tradfri_0220_gwb8d7af2b448f_${light_id}_brightness/state`, + name: `/service/openhab/out/tradfri_0220_gwb8d7af2b448f_${lightId}` + + "_brightness/state", type: types.string }, command: { - name: `/service/openhab/in/tradfri_0220_gwb8d7af2b448f_${light_id}_brightness/command`, + name: `/service/openhab/in/tradfri_0220_gwb8d7af2b448f_${lightId}` + + "_brightness/command", type: types.string }, defaultValue: "0" } }) -} +}; -export const tradfri_remote = { - level: (remote_id: string) => `tradfri_remote_${remote_id}_level`, - low: (remote_id: string) => `tradfri_remote_${remote_id}_low`, - topics: (remote_id: string) => ({ - [ `tradfri_remote_${remote_id}_level` ]: { +const tradfriRemote = { + level: (remoteId: string) => `tradfri_remote_${remoteId}_level`, + low: (remoteId: string) => `tradfri_remote_${remoteId}_low`, + topics: (remoteId: string) => ({ + [`tradfri_remote_${remoteId}_level`]: { state: { - name: `/service/openhab/out/tradfri_0830_gwb8d7af2b448f_${remote_id}_battery_level/state`, + name: `/service/openhab/out/tradfri_0830_gwb8d7af2b448f_${remoteId}` + + "_battery_level/state", type: types.string }, defaultValue: "0" }, - [ `tradfri_remote_${remote_id}_low` ]: { + [`tradfri_remote_${remoteId}_low`]: { state: { - name: `/service/openhab/out/tradfri_0830_gwb8d7af2b448f_${remote_id}_battery_low/state`, + name: `/service/openhab/out/tradfri_0830_gwb8d7af2b448f_${remoteId}` + + "_battery_low/state", type: types.option({ ON: "true", OFF: "false" }) }, - defaultValue: "false", + defaultValue: "false" } }) -} +}; -export const esper_statistics = (name: string, - prev_ui: Array = []): Array => ( - prev_ui.concat([ - { - type: "section", - text: "Funkdose" - }, - { - type: "text", - text: "Device Variant", - icon: mdi("chart-donut"), - topic: `esper_${name}_device` - }, - { - type: "text", - text: "Version", - icon: mdi("source-branch"), - topic: `esper_${name}_version` - }, - { - type: "text", - text: "IP", - icon: mdi("access-point-network"), - topic: `esper_${name}_ip` - }, - { - type: "text", - text: "RSSI", - icon: mdi("wifi"), - topic: `esper_${name}_rssi` - }, - { - type: "text", - text: "Running since…", - icon: mdi("av-timer"), - topic: `esper_${name}_uptime` - } - ]) - ); +export const tradfri = { + remote: tradfriRemote +}; + +const esperStatistics = (name: string, + prev_ui: Array = []): Array => ( + prev_ui.concat([ + { + type: "section", + text: "Funkdose" + }, + { + type: "text", + text: "Device Variant", + icon: mdi("chart-donut"), + topic: `esper_${name}_device` + }, + { + type: "text", + text: "Version", + icon: mdi("source-branch"), + topic: `esper_${name}_version` + }, + { + type: "text", + text: "IP", + icon: mdi("access-point-network"), + topic: `esper_${name}_ip` + }, + { + type: "text", + text: "RSSI", + icon: mdi("wifi"), + topic: `esper_${name}_rssi` + }, + { + type: "text", + text: "Running since…", + icon: mdi("av-timer"), + topic: `esper_${name}_uptime` + } + ]) +); +const esperTopics = (chipId: string, name: string) => ({ + [`esper_${name}_version`]: { + state: { + name: `/service/esper/${chipId}/info`, + type: types.json("version.esper") + }, + defaultValue: "UNKNOWN" + }, + [`esper_${name}_ip`]: { + state: { + name: `/service/esper/${chipId}/info`, + type: types.json("network.ip") + }, + defaultValue: "UNKNOWN" + }, + [`esper_${name}_rssi`]: { + state: { + name: `/service/esper/${chipId}/info`, + type: types.json("wifi.rssi") + }, + defaultValue: "UNKNOWN" + }, + [`esper_${name}_uptime`]: { + state: { + name: `/service/esper/${chipId}/info`, + type: (msg) => new Date(JSON.parse(msg.toString()).time.startup * 1000) + .toLocaleString() + }, + defaultValue: "UNKNOWN" + }, + [`esper_${name}_device`]: { + state: { + name: `/service/esper/${chipId}/info`, + type: types.json("device") + }, + defaultValue: "UNKNOWN" + } +}); + +export const esper = { + topics: esperTopics, + statistics: esperStatistics +}; diff --git a/package.json b/package.json index cee7ba8..0f781e9 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dev": "webpack --bail --config webpack.config.js --mode development --env", "watch": "webpack-dev-server --open --config webpack.config.js --mode development --env", "travis": "./travis.sh", - "lint": "eslint --ext js --ext jsx src/", + "lint": "eslint --ext js --ext jsx src/ config/", "precommit": "yarn lint" }, "dependencies": {