Forum użytkowników automatyki budynkowej
Inne => BleBox => Wątek zaczęty przez: DaM w Maj 13, 2018, 08:14:40 pm
-
Witam.
Chciałem się z wami podzielić komponentami do Home Assistant (https://www.home-assistant.io/), które napisałem integrującymi switchBox(D) i wLightBox.
Wszystko opisałem dokładnie tutaj (https://github.com/d4m/hassio_components).
Jeśli ktoś używa hass i posiada pojedynczego switchBoxa, prosiłbym o przetestowanie. Mam u siebie tylko switchBoxD, niby API jest spójne dla obydwu wersji, ale nie mam pewności czy działa.
-
Nieśmiało sugeruję, że przydał by mi się jeszcze dimmerbox..
-
Czy możesz pokrótce napisać co takiego oferuje Home Assistant, że zdecydowałeś się go używać zamiast softu dostarczonego z blebox?
-
Nie ja byłem wywołany do tablicy ale odpowiem jak jest u mnie ... :)
Używam HA do wielu rzeczy, których wBox nie obsługuje - mam parę sensorów DYI, kamery ONVIF, bramkę do sterowania oknami Velux, Ikea Tradfri, i system podlewania na OpenSprinkler. Totalny mix standardów, spowodowany względami historycznymi, i HA daje sobie z tym radę, lepiej lub gorzej.
Nie sądzę, żeby wBox kiedykolwiek był w stanie to obsłużyć, i dobrze - lepiej żeby robił jedną rzecz a dobrze. Dla mnie najważniejsza jest dobra integracja kostek przez API, i to jest zrobione w Blebox bardzo dobrze (no może z wyjątkiem zabezpieczeń, mam nadzieję że kiedyś wszystkie kostki będą wspierać przynajmniej user/password).
-
Nieśmiało sugeruję, że przydał by mi się jeszcze dimmerbox..
Chwilę to trwało, ale dopiero na urlopie mam chwilę, żeby się pobawić i wrzuciłem na githuba nowy komponent dla dimmerBox'a.
Czy możesz pokrótce napisać co takiego oferuje Home Assistant, że zdecydowałeś się go używać zamiast softu dostarczonego z blebox?
Podobnie jak kolega @abial, oprócz blebox'ów mam trochę swoich zabawek np. na esp8622.
-
Twoja integracja nie działa z pojedynczym switchBoxem.
Poniżej wersja działająca:
import logging
import voluptuous as vol
import json
import asyncio
import async_timeout
import numpy as np
from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA)
from homeassistant.const import (CONF_NAME, CONF_HOST, CONF_TIMEOUT, STATE_OFF, STATE_ON)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.aiohttp_client import async_get_clientsession
LOGGING = logging.getLogger(__name__)
CONF_RELAY = 'relay'
DEFAULT_NAME = 'Blebox switchBox'
DEFAULT_RELAY = 0
DEFAULT_TIMEOUT = 10
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_RELAY, default=DEFAULT_RELAY): cv.positive_int,
vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
})
@asyncio.coroutine
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
name = config.get(CONF_NAME)
host = config.get(CONF_HOST)
relay = config.get(CONF_RELAY)
timeout = config.get(CONF_TIMEOUT)
switch = BleboxSwitchBoxSwitch(name, host, relay, timeout)
yield from switch.async_relay_init(hass)
async_add_devices([switch])
class BleboxSwitchBoxSwitch(SwitchDevice):
def __init__(self, name, host, relay, timeout):
self._name = name
self._state = 0
self._host = host
self._relay = relay
self._timeout = timeout
self._available = False
@property
def available(self):
return self._available
@property
def name(self):
return self._name
@property
def state(self):
return self._state
@state.setter
def state(self, state):
self._state = STATE_ON if state else STATE_OFF
@property
def is_on(self):
return self._state == STATE_ON
@asyncio.coroutine
def async_turn_on(self, **kwargs):
yield from self.set_relay_state(1)
@asyncio.coroutine
def async_turn_off(self, **kwargs):
yield from self.set_relay_state(0)
@asyncio.coroutine
def async_relay_init(self, hass):
relay_info = yield from self.async_update_relay_info(hass)
if not self._name:
self._name = DEFAULT_NAME #//relay_info['name'] if relay_info else DEFAULT_NAME
return relay_info
@asyncio.coroutine
def async_update_relay_info(self, hass):
relay_info = yield from self.get_relay_info(hass)
if relay_info:
self.state = relay_info['state']
self._available = True
else:
self.state = 0
self._available = False
return relay_info
@asyncio.coroutine
def async_update(self):
yield from self.async_update_relay_info(self.hass)
@asyncio.coroutine
def set_relay_state(self, state):
websession = async_get_clientsession(self.hass)
resource = 'http://%s/s/%s' % ( self._host, state )
try:
with async_timeout.timeout(self._timeout, loop=self.hass.loop):
req = yield from websession.get(resource)
text = yield from req.text()
relay_info = json.loads(text)
return relay_info[0]
except:
return None
@asyncio.coroutine
def get_relay_info(self, hass):
websession = async_get_clientsession(hass)
resource = 'http://%s/api/relay/state' % self._host
try:
with async_timeout.timeout(self._timeout, loop=hass.loop):
req = yield from websession.get(resource)
text = yield from req.text()
relay_info = json.loads(text)
return relay_info[0]
except Exception as e:
return None
-
Wrzuciłem na github poprawkę, dzięki której pojedynczy switchBox również działa.
Typ urządzenia jest wykrywany automatycznie, ewentualnie można go ustawić na stałe w konfiguracji, np.: - platform: blebox_switchbox
type: switchBox
lub - platform: blebox_switchbox
type: switchBoxD
Jeśli podczas startu nie uda się połączyć ze switchboxem to nie zostanie on dodany, aż do następnego restartu HAss kiedy uda się połaczyć z bleboxem.
Ten problem rozwiązuje właśnie dodanie na stałe typu do konfiguracji.
-
Ciesze się że w końcu się ktoś zainteresował integracja bleboxa z Hassio. Mam problem z dodaniem componentu do konfiguracji. Niestety pojawia się komunikat "Platform not found: light.blebox_dimmerbox"
Skrypt jest w config/custom_components/light/blebox_dimmerbox.py
Dodałem także do configuration.yaml
light:
- platform: blebox_dimmerbox
host: 192.168.0.117
-
W którejś z ostatnich aktualizacji HA była reorganizacja katalogów dla custom components.
Zmień sobie nazwę katalogu light na blebox_dimmerbox, a nazwę pliku blebox_dimmerbox.py na light.py i powinno działać.
W wolnej chwili wrzucę poprawkę na githuba.
-
Tak to zalatwilo sprawe! Dziekuje
-
Coś mi nie gra, nie wiem w czym rzecz. Możecie zerknąć co jest nie tak?
skrypt jest w config\custom_components\blebox_dimmerbox\light.py
configuration.yaml:
light:
- platform: blebox_dimmerbox
host: 192.168.0.155
- platform: blebox_dimmerbox
host: 192.168.0.156
a ciągle mam:
Integration blebox_dimmerbox not found when trying to verify its light platform.
Ogarnąłem kuwetę. Dla potomnych, chodzi o dodatkowe pliki których nie ma w repo:
__init__.py - (opis: https://developers.home-assistant.io/docs/en/creating_integration_file_structure.html (https://developers.home-assistant.io/docs/en/creating_integration_file_structure.html))
manifest.json(przykład, opis: https://developers.home-assistant.io/docs/en/creating_integration_manifest.html (https://developers.home-assistant.io/docs/en/creating_integration_manifest.html)):
{
"domain": "blebox_dimmerbox",
"name": "Light",
"documentation": "https://www.example.com",
"dependencies": [],
"codeowners": [],
"requirements": []
}
-
Tak tak wiem, zaktualizowałem w końcu repo ;)
Plik manifest.json nie jest wymagany dla custom components, sam pusty __init__.py wystarczy.
-
Zauważyłem że pojawiła się aktualizacja w repo ;)
Jest jakaś szansa na integrację pod shutterBox'a? Wiem że działa bezpośrednio z asystentem ale złożone reguły raczej robi się na HA albo openHab czy innym Domoticzu.
-
Póki co raczej marne szanse.
Z czasem słabo, a nie mam u siebie żadnego shutterBoxa, żeby testować i sprawnie to ogarnąć.
-
Masz drobny błąd w kodzie dla lightBox'a:
@asyncio.coroutine
def get_device_state(self, hass):
websession = async_get_clientsession(hass)
resource = 'http://%s/api/device/state' % self._host
try:
with async_timeout.timeout(self._timeout, loop=hass.loop):
req = yield from websession.get(resource)
text = yield from req.text()
device_state = json.loads(text)
device = device_info['device']
return device
except:
return None
device_state = json.loads(text)
device = device_info['device']
-
A co w przypadku wLightBoxS ? jest jakieś rozwiązanie ?