Dumb Clima – sterowanie klimatyzacją GREE uniwersalnym pilotem Broadlink RM4 Pro

Chcę przedstawić rozwiązanie, nad którym trochę dumałem bo mnie wkurzał brak możliwości sterowania z HA klimatyzacją w domu. Klima oczywiście z gatunku Dumb :smiley:
Trochę się z tym męczyłem bo nie mogłem zakumać na jakiej zasadzie działa sterowanie klimą. Pilot od klimy prosty jak drut.
ON/OFF, plus i minus do ustawiania temperatury, przycisk od trybu pracy i od wentylatora. image

Metodą wieeeelu prób doszedłem dotego jak to działa. A więc włączamy klimę, ustawiamy temp. i chcemy zmienić temp o 1 stopień. Naciskamy + i w tym momencie nie jest wysyłany sygnał przycisku tylko stan wszystkich ustawień pilota. Jeśli nauczymy HA tego kodu to niezależnie od tego co mamy w danym momencie ustawione na klimatyzacji to po wysłaniu tego plusika + klima ustawi się w stan zapamiętany kodem. Stanowi to problem jeśli chcemy płynnie sterować klimatyzacją z panelu HA. Z drugiej strony to może być ekstra przy tworzeniu automatyzacji typu. Lato + temp. wysoka + zamknięte okna = włącz klimę na np. 24 stopnie.

Wymyśliłem więc prosty uniwersalny pilot na dashboard. Pokazuję na nim temp. w domu i na zewnątrz, włącznik i wcześniej zdefiniowane ustawienia dla chłodzenia (z lewej) i grzania (prawa strona)

Teraz po kolei przedstawię kroki jak to osiągnąć.

Podsumowanie

1. Zapewniamy sobie dostęp do katalogu:

\192.168.XX.xxx\config.storage\

Czyli instalujemy dodatek Samba share i konfigurujemy go w Supervisor’ze
Jak wkleisz na kompie w eksploratorze całą ścieżkę \\192.168.XX.XXX\config.storage\ (oczywiście po wpisaniu poprawnego IP swojego HA, to jesteś w domu).
image

2. Tworzymy skrypty do sczytywania kodów

Wchodzimy do: Konfiguracja → Skrypty → Dodaj skrypt
i możemy wpisać jak na screenach (na czerwono zaznaczyłem na co zwrócić uwagę)
image

image

Jak widać na powyższym obrazku definiujemy to co skrypt ma zrobić. Ma uczyć pilota poleceń (command) dla danego urządzenia (device).
Można wskazać jedno konkretne polecenie, można też podać całą listę kodów, która nas interesują).

Po zapisaniu i kliknięciu na: Uruchom skrypt pojawi się info w powiadomieniach, i to jest czas, żeby nacisnąć przycisk na pilocie. Sprawdzamy w powiadomieniach jakiego kodu chce, kierujemy na Broadlinka wciskamy i tak z każdym kodem aż sczytamy wszystkie.

image

image

Po sczytaniu wszystkich kodów z danego pilota, wchodzimy w lokalizację:

\\192.168.XX.XXX\config.storage\

Znajdujemy plik w stylu: broadlink_remote_YOUR_MAC_codes listujemy sobie go i wewnątrz mamy coś takiego:
image

3. Tworzym przełączniki
W configuration.yaml dodajemy wpis:
image

Nastęnie tworzymy plik switch.yaml i w nim wklejamy:
image

Zrzut mojego pliku: switch.zip (1,2 KB)

Ciąg znaków, który podajemy w command_on i command_off znajdujemy w pliku broadlink_remote_24dfa7xxxxxx_codes.

Uwaga. Podajemy ten sam kod dla comand_on i off .
Po restarcie HA switche pojawią się jako encje.

image

Taka dygresja. Jak sobie napaskudzisz i sczytasz miliard kodów to one będą cały czas leżały w pliku broadlink_remote_24dfa7xxxxxx_codes. Warto sobie zrobić porządek i wywalić niepotrzebne kody. Robimy to analogicznie jak w punkcie 2 , z tym, że wybieramy Pilot: delete_command. Wyzwalamy skrypt i po chwili niepotrzebne kody znikają.

image

4. Robimy sterowanie:
Zainstaluj dodatek button-card i hui-element (ja dodawałem przez repozytorium w HACS)
Następnie: Edytuj dasboard → dodaj kartę → Edytor konfiguracji Yaml

I wklej poniższy kod (po wklejeniu zmień wszystkie entity na właściwe):
image

kod karty:
karta.zip (595 bajtów)

Na koniec. Broadlink RM4 Pro to model dokładnie taki:
BroadLink RM Pro+ - centrala sterująca - Botland - Sklep dla robotyków

do niego mam kabel rozszerzający możliwości pilota i będący jednocześnie czujnikiem temperatury i wilgotności (z niego jest temp na górze pilota)
Czujnik temperatury i wilgotności dla pilota Botland - Sklep dla robotyków

Oczywiście można wybrać tańszy model, ja wybrałem jednak ten, gdyż ma możliwość sterowania nie tylko po IR ale także RF. Na tą chwilę mam wzmacniacz audio, który ma sterowanie właśnie po RF, w przszłości pewnie jeszcze coś się znajdzie. Poza tym umiejscowiony centralnie w domu załatwia sterowanie klimą, dekoderem, TV, projektorem i audio. Czymś jeszcze ale nie pamiętam :slight_smile:

3 Likes

Nakląłem się trochę bo autor delikatnie poszedł na skróty a dwa zmieniła się szata graficzna HA.
Drogą eliminacji doszedłem że :

  • metody z z bloga na literke “H” nie działają ( posiadam RM4CMini),
  • zostało pominięte jak nadać IP Broadlinkowi (ok).

Wklejam wycinek z mojego komputera jak wygląda ekran skryptu do uczenia się.
Device - musimy wkopiować sobie nazwę jak się nasz odbiornik nazywa oraz wybieramy encję ( ten zielony przycisk z lewej strony) Echhhh.

Właściwa ścieżka - bynajmniej u mnie to :
\config.storage

CD…
Ponieważ udało mi się tego dokonać czyli “nauczyć” HA sterowania klimą dzięki temu postowi dopiszę od siebie jak sobie to trochę ułatwić.
Na samym początku mi to nie szło - klima nie reagowała na Broadlinka.
Ja potrzebowałem tylko funkcję wentylacji i załączenia chłodzenia więc nie “uczyłem” wszystkich kodów.
Aby ta “nauka” szła postawiłem pilota obok klimy ( zasilanie dostał z Power Banku) , plik z kodami otworzyłem programem Notepad++ ( program za każdym razem odświeża sobie zawartość gdy wpada nowy kod ) i po kolei generowałem kody z pilota które były mi potrzebne. Dzięki tej metodzie poszło dość szybko bo widziałem reakcję klimy a i właściwa sekwencja wpadała do pliku.

Jedynie czego mi brakuje to pomimo tego iż poszczególne kody widoczne są jako przełącznik to nie można ich użyć w automatyzacji ( czyli włącz mi klimę a potem albo tryb wentylacji albo chłodzenia )- albo Ja jeszcze tego nie rozgryzłem.

2 Likes

A może da się to ogarnąć na skryptach:

  • pierwszy skrypt: włącz klimę, odczekaj 1 sekundę (opoźnienie), włącz tryb wentylacji
  • drugi skrypt: włącz klimę, odczekaj 1 sekundę (opoźnienie), włącz tryb chłodzenia

Wtedy w automatyzacji mozesz użyć tych skryptów.

Wyjaśnię :slight_smile: pomimo że widać te przełączniki jako switche to HA ich nie widzi w automatyzacji - nie można ich wybrać z listy Urządzeń. Tak jest bynajmniej u mnie.

Raczej chodzilo mi o to (z dokumentacji Broadlink - Home Assistant):
After learning IR and RF codes with the remote.learn_command service, you can use remote.send_command to send them. You can also use this service to send base64 codes taken from elsewhere.

Sending a sequence of base64 codes

You can send a sequence of base64 codes just like normal commands:

# Example configuration.yaml entry
script:
  turn_on_ac:
    sequence:
      - service: remote.send_command
        target:
          entity_id: remote.bedroom
        data:
          command:
            - b64:JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA=
            - b64:JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA=

Masz nawet Twój przykład :slight_smile:

  • pierwszy command to napewno włącz klimę,
  • drugi command to jakieś ustawienie klimy.

To co klikasz z pilota, musisz wyklikać w skrypcie, problemem może być weryfikacja czy klima już działa.

Aaaa - OK. Przy okazji sobie sprawdzę. THX :slight_smile:
Czy klima działa to nie jest problem - sprawdzam warunek poboru mocy bo mam ją wpiętą do wtyczki.

Panowie - po ostatnich aktualizacjach cosik pozmieniali bo nie jestem w stanie “uczyć” kodów przy pomocy HA.
Sadzi mi błędem :

Szczegóły :
`Logger: homeassistant.components.websocket_api.http.connection
Source: util/json.py:38
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 27 czerwca 2021, 12:35:33 (15 occurrences)
Last logged: 10:13:10

[139989132688640] Expecting value: line 1 column 1 (char 0)
[139989128654272] Expecting value: line 1 column 1 (char 0)
[139989061588016] Expecting value: line 1 column 1 (char 0)
[139989151387312] Expecting value: line 1 column 1 (char 0)
[139989128297872] Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/util/json.py”, line 32, in load_json
return json.loads(fdesc.read()) # type: ignore
File “/usr/local/lib/python3.8/json/init.py”, line 357, in loads
return _default_decoder.decode(s)
File “/usr/local/lib/python3.8/json/decoder.py”, line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File “/usr/local/lib/python3.8/json/decoder.py”, line 355, in raw_decode
raise JSONDecodeError(“Expecting value”, s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py”, line 185, in handle_call_service
await hass.services.async_call(
File “/usr/src/homeassistant/homeassistant/core.py”, line 1491, in async_call
task.result()
File “/usr/src/homeassistant/homeassistant/core.py”, line 1526, in _execute_service
await handler.job.target(service_call)
File “/usr/src/homeassistant/homeassistant/components/script/init.py”, line 278, in service_handler
await script_entity.async_turn_on(
File “/usr/src/homeassistant/homeassistant/components/script/init.py”, line 382, in async_turn_on
await coro
File “/usr/src/homeassistant/homeassistant/components/script/init.py”, line 404, in _async_run
return await self.script.async_run(variables, context)
File “/usr/src/homeassistant/homeassistant/helpers/script.py”, line 1216, in async_run
await asyncio.shield(run.async_run())
File “/usr/src/homeassistant/homeassistant/helpers/script.py”, line 350, in async_run
await self._async_step(log_exceptions=False)
File “/usr/src/homeassistant/homeassistant/helpers/script.py”, line 368, in _async_step
await getattr(self, handler)()
File “/usr/src/homeassistant/homeassistant/helpers/script.py”, line 568, in _async_call_service_step
await service_task
File “/usr/src/homeassistant/homeassistant/core.py”, line 1491, in async_call
task.result()
File “/usr/src/homeassistant/homeassistant/core.py”, line 1526, in _execute_service
await handler.job.target(service_call)
File “/usr/src/homeassistant/homeassistant/helpers/entity_component.py”, line 213, in handle_service
await self.hass.helpers.service.entity_service_call(
File “/usr/src/homeassistant/homeassistant/helpers/service.py”, line 658, in entity_service_call
future.result() # pop exception if have
File “/usr/src/homeassistant/homeassistant/helpers/entity.py”, line 760, in async_request_call
await coro
File “/usr/src/homeassistant/homeassistant/helpers/service.py”, line 695, in _handle_entity_call
await result
File “/usr/src/homeassistant/homeassistant/components/broadlink/remote.py”, line 327, in async_learn_command
await self._async_load_storage()
File “/usr/src/homeassistant/homeassistant/components/broadlink/remote.py”, line 251, in _async_load_storage
self._codes.update(await self._code_storage.async_load() or {})
File “/usr/src/homeassistant/homeassistant/helpers/storage.py”, line 108, in async_load
return await self._load_task
File “/usr/src/homeassistant/homeassistant/helpers/storage.py”, line 113, in _async_load
return await self._async_load_data()
File “/usr/src/homeassistant/homeassistant/helpers/storage.py”, line 127, in _async_load_data
data = await self.hass.async_add_executor_job(
File “/usr/local/lib/python3.8/concurrent/futures/thread.py”, line 57, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/src/homeassistant/homeassistant/util/json.py”, line 38, in load_json
raise HomeAssistantError(error) from error
homeassistant.exceptions.HomeAssistantError: Expecting value: line 1 column 1 (char 0)
`
Graficzna forma praktycznie jak w poście wyżej i na tej podstawie się “uczył”:

Tak nie działa to raczej błędy HA
Zainstaluj sobie Broadlink Manager
Tutorial : Universal IR Remote in Home Assistant with Broadlink RM4/Pro

Youtube: Broadlink

Niestety dostałem komunikat że

error while creating mount source path ‘/broadlinkmanager’: mkdir /broadlinkmanager: read-only file system.

i tyle :slight_smile:
Dziś nad tym nie posiedzę - za późno mnie wzięło na instalacje.
Terminal SSH ma wyłączony tryb ochrony.

Przed komendami trzeba podać sudo

Niestety ale ta metoda u mnie chyba nie zadziała - nie mam natywnej instalacji na Ubuntu , mam na Proxmoxie.
Doinstalowałem sobie dockera ale on tak samo pisze że nie mam praw do zapisu.
Komenda sudo nic nie daje.

Nauka poleceń Broadlink

BroadlinkIRTools
Program informacje

Program:
BroadlinkIRTools
Wymagania : Wyłączony ads block
Programu nie testowałem.

A sprawdziliście integrację smartIR? U mnie działa idealnie. Opisywałem to w tym temacie: