Add activity tracker
This commit is contained in:
parent
8fe408bcc6
commit
f12cc164b6
@ -16,7 +16,8 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
|
|
||||||
class BrowserBinarySensor(BrowserModEntity, BinarySensorEntity):
|
class BrowserBinarySensor(BrowserModEntity, BinarySensorEntity):
|
||||||
def __init__(self, coordinator, browserID, parameter, name):
|
def __init__(self, coordinator, browserID, parameter, name):
|
||||||
super().__init__(coordinator, browserID, name)
|
BrowserModEntity.__init__(self, coordinator, browserID, name)
|
||||||
|
BinarySensorEntity.__init__(self)
|
||||||
self.parameter = parameter
|
self.parameter = parameter
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -25,3 +26,27 @@ class BrowserBinarySensor(BrowserModEntity, BinarySensorEntity):
|
|||||||
data = data.get("browser", {})
|
data = data.get("browser", {})
|
||||||
data = data.get(self.parameter, None)
|
data = data.get(self.parameter, None)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
class ActivityBinarySensor(BrowserModEntity, BinarySensorEntity):
|
||||||
|
def __init__(self, coordinator, browserID):
|
||||||
|
BrowserModEntity.__init__(self, coordinator, browserID, None)
|
||||||
|
BinarySensorEntity.__init__(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
return f"{self.browserID}-activity"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def entity_registry_visible_default(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self):
|
||||||
|
return "motion"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self):
|
||||||
|
data = self._data
|
||||||
|
data = data.get("activity", False)
|
||||||
|
return data
|
||||||
|
@ -7,7 +7,7 @@ from .const import DATA_BROWSERS, DOMAIN, DATA_ADDERS
|
|||||||
from .coordinator import Coordinator
|
from .coordinator import Coordinator
|
||||||
from .sensor import BrowserSensor
|
from .sensor import BrowserSensor
|
||||||
from .light import BrowserModLight
|
from .light import BrowserModLight
|
||||||
from .binary_sensor import BrowserBinarySensor
|
from .binary_sensor import BrowserBinarySensor, ActivityBinarySensor
|
||||||
from .media_player import BrowserModPlayer
|
from .media_player import BrowserModPlayer
|
||||||
from .camera import BrowserModCamera
|
from .camera import BrowserModCamera
|
||||||
|
|
||||||
@ -68,6 +68,12 @@ class BrowserModBrowser:
|
|||||||
if self.data.get("browser", {}).get("charging", None) is not None:
|
if self.data.get("browser", {}).get("charging", None) is not None:
|
||||||
_assert_browser_sensor("binary_sensor", "charging", "Browser charging")
|
_assert_browser_sensor("binary_sensor", "charging", "Browser charging")
|
||||||
|
|
||||||
|
if "activity" not in self.entities:
|
||||||
|
adder = hass.data[DOMAIN][DATA_ADDERS]["binary_sensor"]
|
||||||
|
new = ActivityBinarySensor(coordinator, browserID)
|
||||||
|
adder([new])
|
||||||
|
self.entities["activity"] = new
|
||||||
|
|
||||||
if "screen" not in self.entities:
|
if "screen" not in self.entities:
|
||||||
adder = hass.data[DOMAIN][DATA_ADDERS]["light"]
|
adder = hass.data[DOMAIN][DATA_ADDERS]["light"]
|
||||||
new = BrowserModLight(coordinator, browserID, self)
|
new = BrowserModLight(coordinator, browserID, self)
|
||||||
|
@ -909,6 +909,41 @@ const ServicesMixin = (SuperClass) => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ActivityMixin = (SuperClass) => {
|
||||||
|
return class ActivityMixinClass extends SuperClass {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.activityTriggered = false;
|
||||||
|
this._activityCooldown = 15000;
|
||||||
|
for (const ev of ["pointerdown", "pointermove", "keydown"]) {
|
||||||
|
window.addEventListener(ev, () => this.activityTrigger());
|
||||||
|
}
|
||||||
|
this.addEventListener("fully-update", () => {
|
||||||
|
this.activityTrigger();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
activityTrigger() {
|
||||||
|
if (!this.activityTriggered) {
|
||||||
|
this.sendUpdate({
|
||||||
|
activity: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.activityTriggered = true;
|
||||||
|
clearTimeout(this._activityTimeout);
|
||||||
|
this._activityTimeout = setTimeout(() => this.activityReset(), this._activityCooldown);
|
||||||
|
}
|
||||||
|
activityReset() {
|
||||||
|
clearTimeout(this._activityTimeout);
|
||||||
|
if (this.activityTriggered) {
|
||||||
|
this.sendUpdate({
|
||||||
|
activity: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.activityTriggered = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
* Copyright 2017 Google LLC
|
* Copyright 2017 Google LLC
|
||||||
@ -1301,7 +1336,7 @@ var pjson = {
|
|||||||
- Media_seek
|
- Media_seek
|
||||||
- Screensavers
|
- Screensavers
|
||||||
*/
|
*/
|
||||||
class BrowserMod extends ServicesMixin(PopupMixin(BrowserStateMixin(CameraMixin(MediaPlayerMixin(ScreenSaverMixin(FullyMixin(RequireInteractMixin(ConnectionMixin(EventTarget))))))))) {
|
class BrowserMod extends ServicesMixin(PopupMixin(ActivityMixin(BrowserStateMixin(CameraMixin(MediaPlayerMixin(ScreenSaverMixin(FullyMixin(RequireInteractMixin(ConnectionMixin(EventTarget)))))))))) {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.connect();
|
this.connect();
|
||||||
|
@ -24,7 +24,8 @@ class BrowserSensor(BrowserModEntity, SensorEntity):
|
|||||||
unit_of_measurement=None,
|
unit_of_measurement=None,
|
||||||
device_class=None,
|
device_class=None,
|
||||||
):
|
):
|
||||||
super().__init__(coordinator, browserID, name)
|
BrowserModEntity.__init__(self, coordinator, browserID, name)
|
||||||
|
SensorEntity.__init__(self)
|
||||||
self.parameter = parameter
|
self.parameter = parameter
|
||||||
self._device_class = device_class
|
self._device_class = device_class
|
||||||
self._unit_of_measurement = unit_of_measurement
|
self._unit_of_measurement = unit_of_measurement
|
||||||
|
40
js/plugin/activity.ts
Normal file
40
js/plugin/activity.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
export const ActivityMixin = (SuperClass) => {
|
||||||
|
return class ActivityMixinClass extends SuperClass {
|
||||||
|
activityTriggered = false;
|
||||||
|
_activityCooldown = 15000;
|
||||||
|
_activityTimeout;
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
for (const ev of ["pointerdown", "pointermove", "keydown"]) {
|
||||||
|
window.addEventListener(ev, () => this.activityTrigger());
|
||||||
|
}
|
||||||
|
this.addEventListener("fully-update", () => {
|
||||||
|
this.activityTrigger();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
activityTrigger() {
|
||||||
|
if (!this.activityTriggered) {
|
||||||
|
this.sendUpdate({
|
||||||
|
activity: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.activityTriggered = true;
|
||||||
|
clearTimeout(this._activityTimeout);
|
||||||
|
this._activityTimeout = setTimeout(
|
||||||
|
() => this.activityReset(),
|
||||||
|
this._activityCooldown
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
activityReset() {
|
||||||
|
clearTimeout(this._activityTimeout);
|
||||||
|
if (this.activityTriggered) {
|
||||||
|
this.sendUpdate({
|
||||||
|
activity: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.activityTriggered = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
@ -9,6 +9,7 @@ import { RequireInteractMixin } from "./require-interact";
|
|||||||
import { FullyMixin } from "./fullyKiosk";
|
import { FullyMixin } from "./fullyKiosk";
|
||||||
import { BrowserStateMixin } from "./browser";
|
import { BrowserStateMixin } from "./browser";
|
||||||
import { ServicesMixin } from "./services";
|
import { ServicesMixin } from "./services";
|
||||||
|
import { ActivityMixin } from "./activity";
|
||||||
import "./popups";
|
import "./popups";
|
||||||
import { PopupMixin } from "./popups";
|
import { PopupMixin } from "./popups";
|
||||||
import pjson from "../../package.json";
|
import pjson from "../../package.json";
|
||||||
@ -59,11 +60,13 @@ import pjson from "../../package.json";
|
|||||||
*/
|
*/
|
||||||
export class BrowserMod extends ServicesMixin(
|
export class BrowserMod extends ServicesMixin(
|
||||||
PopupMixin(
|
PopupMixin(
|
||||||
BrowserStateMixin(
|
ActivityMixin(
|
||||||
CameraMixin(
|
BrowserStateMixin(
|
||||||
MediaPlayerMixin(
|
CameraMixin(
|
||||||
ScreenSaverMixin(
|
MediaPlayerMixin(
|
||||||
FullyMixin(RequireInteractMixin(ConnectionMixin(EventTarget)))
|
ScreenSaverMixin(
|
||||||
|
FullyMixin(RequireInteractMixin(ConnectionMixin(EventTarget)))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user