Improved thread safety
This commit is contained in:
parent
ae9ffb65c1
commit
39f727206f
@ -3,6 +3,7 @@ import logging
|
||||
from homeassistant.components.websocket_api import event_message
|
||||
from homeassistant.helpers import device_registry, entity_registry
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .const import DATA_BROWSERS, DOMAIN, DATA_ADDERS
|
||||
from .sensor import BrowserSensor
|
||||
@ -130,11 +131,14 @@ class BrowserModBrowser:
|
||||
er.async_remove(self.entities["camera"].entity_id)
|
||||
del self.entities["camera"]
|
||||
|
||||
self.send(
|
||||
None, browserEntities={k: v.entity_id for k, v in self.entities.items()}
|
||||
hass.create_task(
|
||||
self.send(
|
||||
None, browserEntities={k: v.entity_id for k, v in self.entities.items()}
|
||||
)
|
||||
)
|
||||
|
||||
def send(self, command, **kwargs):
|
||||
@callback
|
||||
async def send(self, command, **kwargs):
|
||||
"""Send a command to this browser."""
|
||||
if self.connection is None:
|
||||
return
|
||||
|
File diff suppressed because one or more lines are too long
@ -9,6 +9,8 @@ from homeassistant.components.websocket_api import (
|
||||
|
||||
from homeassistant.components import websocket_api
|
||||
|
||||
from homeassistant.core import callback
|
||||
|
||||
from .const import (
|
||||
BROWSER_ID,
|
||||
DATA_STORE,
|
||||
@ -40,6 +42,7 @@ async def async_setup_connection(hass):
|
||||
browserID = msg[BROWSER_ID]
|
||||
store = hass.data[DOMAIN][DATA_STORE]
|
||||
|
||||
@callback
|
||||
def send_update(data):
|
||||
connection.send_message(event_message(msg["id"], {"result": data}))
|
||||
|
||||
|
@ -27,7 +27,7 @@ async def async_setup_services(hass):
|
||||
if target not in browsers:
|
||||
continue
|
||||
browser = browsers[target]
|
||||
browser.send(service, **data)
|
||||
hass.create_task(browser.send(service, **data))
|
||||
|
||||
def handle_service(call):
|
||||
service = call.service
|
||||
|
@ -13,7 +13,7 @@ export const ConnectionMixin = (SuperClass) => {
|
||||
public browserEntities = {};
|
||||
|
||||
LOG(...args) {
|
||||
return;
|
||||
if (window.browser_mod_log === undefined) return;
|
||||
const dt = new Date();
|
||||
console.log(`${dt.toLocaleTimeString()}`, ...args);
|
||||
|
||||
@ -37,6 +37,7 @@ export const ConnectionMixin = (SuperClass) => {
|
||||
this.update_config(msg.result);
|
||||
}
|
||||
this._connectionResolve?.();
|
||||
this._connectionResolve = undefined;
|
||||
}
|
||||
|
||||
private update_config(cfg) {
|
||||
|
@ -32,6 +32,7 @@ interface FullyKiosk {
|
||||
declare global {
|
||||
interface Window {
|
||||
browser_mod?: BrowserMod;
|
||||
browser_mod_log?: any;
|
||||
fully?: FullyKiosk;
|
||||
hassConnection?: Promise<any>;
|
||||
customCards?: [{}?];
|
||||
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "browser_mod",
|
||||
"version": "2.0.0b2",
|
||||
"version": "2.0.0b4",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
31
test/automations.yaml
Normal file
31
test/automations.yaml
Normal file
@ -0,0 +1,31 @@
|
||||
- id: "1660669793583"
|
||||
alias: Toggle bed light
|
||||
description: ""
|
||||
trigger:
|
||||
- platform: time_pattern
|
||||
seconds: /3
|
||||
condition: []
|
||||
action:
|
||||
- type: toggle
|
||||
device_id: 98861bdf58b3c79183c03be06da14f27
|
||||
entity_id: light.bed_light
|
||||
domain: light
|
||||
mode: single
|
||||
|
||||
- alias: Popup when kitchen light togggled
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: light.kitchen_lights
|
||||
action:
|
||||
- service: browser_mod.sequence
|
||||
data:
|
||||
sequence:
|
||||
- service: delay
|
||||
data:
|
||||
time: 5000
|
||||
- service: browser_mod.popup
|
||||
data:
|
||||
title: automation
|
||||
content:
|
||||
type: markdown
|
||||
content: "{%raw%}{{states('light.bed_light')}}{%endraw%}"
|
@ -1,5 +1,7 @@
|
||||
default_config:
|
||||
|
||||
automation: !include test/automations.yaml
|
||||
|
||||
demo:
|
||||
|
||||
http:
|
||||
@ -12,6 +14,8 @@ logger:
|
||||
logs:
|
||||
custom_components.browser_mod: info
|
||||
|
||||
# debugpy:
|
||||
|
||||
# browser_mod:
|
||||
# devices:
|
||||
# camdevice:
|
||||
|
@ -32,6 +32,7 @@ views:
|
||||
action: more-info
|
||||
|
||||
- !include views/popup.yaml
|
||||
- !include views/frontend-backend.yaml
|
||||
|
||||
- title: Popup card
|
||||
popup_cards:
|
||||
|
30
test/views/frontend-backend.yaml
Normal file
30
test/views/frontend-backend.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
title: frontend vs backend
|
||||
|
||||
cards:
|
||||
- type: entities
|
||||
entities:
|
||||
- light.bed_light
|
||||
- light.kitchen_lights
|
||||
|
||||
- type: button
|
||||
name: fire-dom-event
|
||||
tap_action:
|
||||
action: fire-dom-event
|
||||
browser_mod:
|
||||
service: browser_mod.popup
|
||||
data:
|
||||
title: fire-dom-event
|
||||
content:
|
||||
type: markdown
|
||||
content: "{{states('light.bed_light')}}"
|
||||
|
||||
- type: button
|
||||
name: call-service
|
||||
tap_action:
|
||||
action: call-service
|
||||
service: browser_mod.popup
|
||||
data:
|
||||
title: call-service
|
||||
content:
|
||||
type: markdown
|
||||
content: "{{states('light.bed_light')}}"
|
Loading…
x
Reference in New Issue
Block a user