Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pár problémů s clymate.py #12

Open
HEXA-CEO opened this issue Dec 31, 2024 · 1 comment
Open

Pár problémů s clymate.py #12

HEXA-CEO opened this issue Dec 31, 2024 · 1 comment

Comments

@HEXA-CEO
Copy link

Dobrý den,
v logu se mi objevilo pár chyb, které jsem odstranil díky umělé halucinaci (ChatGPT).
(omlouvám se za neumělé formátování textu)

/homeassistant/custom_components/bmr_hc64/climate.py


1. V integraci bmr_hc64 je volání HTTP endpointu http://10.x.x.x/letoLoadRooms, které vypršelo (timeout).
To může být způsobeno buď nedostupností zařízení na této IP adrese, nebo příliš krátkým nastaveným timeoutem.
V souboru switch.py je problém pravděpodobně spojen s voláním metod jako self._bmr.getLowMode() nebo jiných
metod z objektu self._bmr, které komunikují se zařízením.

Řešení: Úprava timeoutu
Pokud knihovna pybmr podporuje nastavení timeoutu, zkuste přidat timeout při vytvoření objektu:

bmr = pybmr.Bmr(base_url, user, password, timeout=20) ---
=> Restart HA: zatím bez chyb (je to tak dobře?)


2. Integrace bmr_hc64 pro třídu BmrRoomClimate nepoužívá správně atributy
pro podporu metod turn_on a turn_off. Tento problém spočívá v nedostatečné deklaraci vlastnosti supported_features v této třídě.

Řešení: Najděte třídu BmrRoomClimate v kódu integrace a doplňte:
from homeassistant.components.climate import ClimateEntityFeature

class BmrRoomClimate(ClimateEntity):
# Další vlastnosti a metody třídy...

@property
def supported_features(self):
    """Return the list of supported features."""
    return (
        ClimateEntityFeature.TURN_ON |
        ClimateEntityFeature.TURN_OFF |
        ClimateEntityFeature.TARGET_TEMPERATURE |
        ClimateEntityFeature.PRESET_MODE
    )

def turn_on(self):
    """Turn on the heating."""
    self._bmr.setHeatingState(True)

def turn_off(self):
    """Turn off the heating."""
    self._bmr.setHeatingState(False)

=> Restar HA: Zatím bez chyb... je to OK?

================================================
3. Po dalším restartu chyba s Timeout...
Logger: homeassistant.helpers.entity
Zdroj: helpers/entity.py:1288

  • Update of sensor.bmr_hc64_circ11_temperature is taking over 10 seconds
  • Update of climate.bmr_hc64_circ11 is taking over 10 seconds
  • Update of switch.bmr_hc64_away is taking over 10 seconds
  • Update of sensor.bmr_hc64_circ16_temperature is taking over 10 seconds-
    Řešení
    Místo 30 sekund použijte delší interval?
@throttle(timedelta(seconds=60))
def update(self):

=> tak nevím, je to OK?

================================================
4. Logger: urllib3.connectionpool
Zdroj: custom_components/bmr_hc64/sensor.py:110
integrace: BMR HC64 (dokumentace)

  • Retrying (Retry(total=9, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f60e7ccd0>, 'Connection to 10.x.x.x timed out. (connect timeout=10)')': /menu.html
  • Retrying (Retry(total=9, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f4e728e90>, 'Connection to 10.x.x.x timed out. (connect timeout=10)')': /menu.html

Řešení
Pokud používáte timeout pro HTTP požadavky, může být nastaven příliš krátce a způsobit problémy s načítáním dat.
pokud používáte knihovnu urllib3, můžete změnit hodnotu connect timeout:

from urllib3 import PoolManager
from urllib3.util.retry import Retry

http = PoolManager(
    retries=Retry(total=9, backoff_factor=0.1),
    timeout=10  # Zkuste zvýšit tuto hodnotu na např. 20 sekund
)

=> Úprava knihovny pybmr... to nedám :-)

================================================
5. ChatGPT mi dále doporučil:
Nahrazení starých proměnných:

CURRENT_HVAC_COOL,
    CURRENT_HVAC_HEAT,
    CURRENT_HVAC_IDLE,
    CURRENT_HVAC_OFF,
    HVAC_MODE_AUTO,
    HVAC_MODE_HEAT,
    HVAC_MODE_HEAT_COOL,
    HVAC_MODE_OFF,
    SUPPORT_PRESET_MODE,
    SUPPORT_TARGET_TEMPERATURE

Byly nahrazeny novými:

from homeassistant.components.climate import ClimateEntity, PLATFORM_SCHEMA, HVACAction, HVACMode
from homeassistant.components.climate.const import (
    HVACAction.COOL,
    HVACAction.HEAT,
    HVACAction.IDLE,
    HVACAction.OFF,
    HVACMode.AUTO,
    HVACMode.HEAT,
    HVACMode.HEAT_COOL,
    HVACMode.OFF,
    ClimateEntityFeature.PRESET_MODE,
    ClimateEntityFeature.TARGET_TEMPERATURE,
)

from homeassistant.const import (
    ATTR_TEMPERATURE,
    CONF_PASSWORD,
    CONF_USERNAME,
    UnitOfTemperature.CELSIUS,
)

soubor sensory.py

from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, TEMP_CELSIUS
=> from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, **UnitOfTemperature**

return TEMP_CELSIUS
=>return UnitOfTemperature.CELSIUS

=> plánujete update?

6. Zajištění kompatibility s HVACMode
Pokud stále používáte metody jako auto, heat, off, ujistěte se, že je správně nastaveno i rozhraní pro HVAC Mode (režim topení). Tato nastavení by měla být uvedena v rámci vaší třídy.

class BmrRoomClimate(ClimateEntity):
    # Další části třídy...

    @property
    def hvac_modes(self):
        """Return the list of available HVAC modes."""
        return [HVACMode.OFF, HVACMode.HEAT, HVACMode.AUTO]

    @property
    def hvac_mode(self):
        """Return the current HVAC mode."""
        return HVACMode.HEAT if self._heating_on else HVACMode.OFF


=> nepodařilo se mi to... Plánujete update?

==========================================
7. Další chyby v logu
Přepsání funkce setup_platform
Integrace bmr_hc64 používá blokující volání importlib.import_module v rámci event loopu, což není v Home Assistant povoleno, protože to může způsobovat problémy se stabilitou.

Příčina: import_module není asynchronní, ale je volána v asynchronním kontextu (event loop).
Tento problém pochází z implementace integrace bmr_hc64.

Řešení
Nahrazení funkce setup_platform v souboru climate.py

def setup_platform(hass, config, add_entities, discovery_info=None):
import pybmr
...

asynchronní verzí:

import asyncio # Přidání asynchronních funkcí

async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
import pybmr # Import knihovny uvnitř funkce

base_url = config.get(CONF_BASE_URL)
user = config.get(CONF_USERNAME)
password = config.get(CONF_PASSWORD)

# Vytvoření instance pybmr asynchronně
bmr = await asyncio.get_event_loop().run_in_executor(None, pybmr.Bmr, base_url, user, password)

entities = [
    BmrRoomClimate(
        bmr=bmr,
        config=circuit_config,
        away_temperature=config.get(CONF_AWAY_TEMPERATURE, TEMP_MIN),
        can_cool=config.get(CONF_CAN_COOL, False),
        min_temperature=config.get(CONF_MIN_TEMPERATURE),
        max_temperature=config.get(CONF_MAX_TEMPERATURE),
    )
    for circuit_config in config.get(CONF_CIRCUITS)
]
async_add_entities(entities)

=> nepodařilo se...

S pozdravem
DM

@HEXA-CEO HEXA-CEO changed the title Pár problémů s cůlymate.py Pár problémů s clymate.py Dec 31, 2024
@Rotif
Copy link

Rotif commented Jan 10, 2025

Buď tak hodný a hoď sem konečnou verzi Tebou upravených souborů.
Dík

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants