Xiaomi Mi Air Purifier 3C - integracja z HA

Wyżej pokazałeś swoją stronę - kliknij encje a następnie w trybik - tam jest nazwa encji.
Z tego co widzę nadajesz nazwę "Opisową (własną " . natomiast w kodzie powinna być nazwa encji ( z małych liter) i bez spacji

oki zmieniłem na prawidłową nazwę i chyba się udało :slight_smile:
jak to teraz działa ?? trzeba czekać aż prześle ustawienia do chmury xiaomi ?? czy o od razu już to jest aktywne ?? 2 sprawa czyli teraz muszę wyłączyć stworzoną automatyzację w aplikacji ??

:grinning:
Działa automat teraz niezależnie, sterowana przez HA
Wyłącz inna automatyzacje bo będą się dublować (jedna i druga będzie zmieniała ustawienia silnika)
Do testu zwiększ na suwaku obroty silnika a po chwili automatyzacja po odczycie z sensora dostosuje je do kodu który użyłeś do automatyzacji.

dobrze teraz to chyba działa ale chciałbym zmienić trochę ustawienia żeby już od 10 ( pm 2,5) silnik startował co najmniej na 1000 obrotów czy wg kodu oznaczenia 100 to wartość zanieczyszczania (10) …200 to 20 PM … 300 to 30 PM … a procenty to jest moc wiatraka ?? mój wiatrak ma aż 2000 obrotów czy trzeba dokończyć też kod bo wg kodu jest 1600 max

Dla testu teraz mam na wyświetlaczu poziom zanieczyszczenia 20 i wiatrak idzie na minimum w dalszym ciągu

    | float %} {% if poziom_zanieczyszczen < 10 %}
      100
    {% elif poziom_zanieczyszczen < 20 %}
      200
    {% elif poziom_zanieczyszczen < 30 %}
      300
    {% elif poziom_zanieczyszczen < 40 %}
      400
    {% elif poziom_zanieczyszczen < 50 %}
      500
    {% elif poziom_zanieczyszczen < 60 %}
      600
    {% elif poziom_zanieczyszczen < 70 %}
      700
    {% elif poziom_zanieczyszczen < 80 %}
      800
    {% elif poziom_zanieczyszczen < 90 %}
      900
    {% elif poziom_zanieczyszczen < 100 %}
      1000
    {% elif poziom_zanieczyszczen < 110 %}
      1100
    {% elif poziom_zanieczyszczen < 120 %}
      1200
    {% elif poziom_zanieczyszczen < 130 %}
      1300
    {% elif poziom_zanieczyszczen < 140 %}
      1400
    {% elif poziom_zanieczyszczen < 150 %}
      1500
    {% else %}
      1600
    {% endif %}

20 % - < “20” -Jest to wartość z odczytu sensora . % należy do kodu
Czyli Jeśli wartość sensora jest < 20 to ustaw 1200

{% if poziom_zanieczyszczen <= 10 %}  # 10 lub mniej to 1000
  1000
{% elif poziom_zanieczyszczen < 20 %}  # poniżej 20 to 1200
  1200
{% elif poziom_zanieczyszczen < 30 %}
  1300
{% elif poziom_zanieczyszczen < 40 %}
  1400
{% elif poziom_zanieczyszczen < 50 %}
  1500
{% elif poziom_zanieczyszczen < 60 %}
  1600
{% elif poziom_zanieczyszczen < 70 %}
  1700
{% elif poziom_zanieczyszczen < 80 %}
  1800
{% elif poziom_zanieczyszczen < 90 %}
  1900
{% elif poziom_zanieczyszczen < 100 %}
  1000
{% elif poziom_zanieczyszczen < 110 %}
  1100
{% elif poziom_zanieczyszczen < 120 %}
  1200
{% elif poziom_zanieczyszczen < 130 %}
  1300
{% elif poziom_zanieczyszczen < 140 %}
  1400
{% elif poziom_zanieczyszczen < 150 %}
  1500
{% else %}
  2000
{% endif %}
1 polubienie

chyba robię cos źle bo na wyświetlaczu mam 20 PM a silnik dalej idzie na najniższych obrotach 390 rpm

alias: "Filter - dynamiczne sterowanie "
description: ""
trigger:
  - platform: state
    entity_id: sensor.mi_air_purifier_3c_pm2_5
action:
  - service: number.set_value
    data_template:
      entity_id: number.filter_favorite_level
      value: >
        {% set poziom_zanieczyszczen = states('sensor.mi_air_purifier_3c_pm2_5')
        | float %} {% if poziom_zanieczyszczen < 10 %}
          1000
        {% elif poziom_zanieczyszczen < 20 %}
          1200
        {% elif poziom_zanieczyszczen < 30 %}
          1300
        {% elif poziom_zanieczyszczen < 40 %}
          1400
        {% elif poziom_zanieczyszczen < 50 %}
          1500
        {% elif poziom_zanieczyszczen < 60 %}
          1600
        {% elif poziom_zanieczyszczen < 70 %}
          1700
        {% elif poziom_zanieczyszczen < 80 %}
          1800
        {% elif poziom_zanieczyszczen < 90 %}
          1900
        {% elif poziom_zanieczyszczen < 100 %}
          1000
        {% elif poziom_zanieczyszczen < 110 %}
          1100
        {% elif poziom_zanieczyszczen < 120 %}
          1200
        {% elif poziom_zanieczyszczen < 130 %}
          1300
        {% elif poziom_zanieczyszczen < 140 %}
          1400
        {% elif poziom_zanieczyszczen < 150 %}
          1500
        {% else %}
          1600
        {% endif %}

:thinking:

  1. Czy silnik działa płynne zakresowo czy “skokowo”
    Czy jesteś wstanie ustawić obroty silnika np. 1222, 1228 czy tylko 1000, 1500 itp
  2. Przeładuj Automatyzacje w Ustawienia > Narzędzia deweloperskie > Ponownie wczytaj > Automatyzacje
  3. Odśwież przeglądarkę “F5”
    /
    Narzędzia > Integracje > Twój oczyszczacz

Po prawej stronie widać jak działa automatyzacja i jakie dane teraz mam “0”

Silnik działa płynnie a regulacja obrotów jest co 1 jednostkę ale jak suwakiem favorite ustawię np 1500 obroty to już tak zostaje nie dostosowuję się do ustawień z automatyzacji

w dzienniku zdarzeń widać ślady działania i odczytów PM ale nie steruje w dalszej chwili obrotami silnika , obroty silnika startują gdzie s w przedziale od 40-50 i coraz mocniej


W kodzie masz entity_id: number.filter_favorite_level (tak jak ja)
Ale czy twoja nazw tego entity jest taka sama w HA to nie wiem
/
Masz inna nazwę Favorite motor sp xxx sprawdź i popraw kod
Z entity_id: number.filter_favorite_level na entity_id: number.xxxxxxxxx

Oki teraz to działa w końcu :slight_smile: mam na wyświetlaczu w tej chwili 3 PM i prędkość wiatraka ustawiła się na 1000 rpm będę to musiał jednak trochę pozmieniać na niższe wartości

Mój kod tak wygląda obecnie czy on jest dobrze dostosowany teraz bo mam dostępne 2000 obrotów w moim xiaomi

alias: "mi_air_purifier_3c - dynamiczne sterowanie "
description: ""
trigger:
  - platform: state
    entity_id: sensor.mi_air_purifier_3c_pm2_5
action:
  - service: number.set_value
    data_template:
      entity_id: number.mi_air_purifier_3c_favorite_motor_speed
      value: >
        {% set poziom_zanieczyszczen = states('sensor.mi_air_purifier_3c_pm2_5')
        | float %} {% if poziom_zanieczyszczen < 10 %}
          1000
        {% elif poziom_zanieczyszczen < 20 %}
          1200
        {% elif poziom_zanieczyszczen < 30 %}
          1300
        {% elif poziom_zanieczyszczen < 40 %}
          1400
        {% elif poziom_zanieczyszczen < 50 %}
          1500
        {% elif poziom_zanieczyszczen < 60 %}
          1600
        {% elif poziom_zanieczyszczen < 70 %}
          1700
        {% elif poziom_zanieczyszczen < 80 %}
          1800
        {% elif poziom_zanieczyszczen < 90 %}
          1900
        {% elif poziom_zanieczyszczen < 100 %}
          1000
        {% elif poziom_zanieczyszczen < 110 %}
          1100
        {% elif poziom_zanieczyszczen < 120 %}
          1200
        {% elif poziom_zanieczyszczen < 130 %}
          1300
        {% elif poziom_zanieczyszczen < 140 %}
          1400
        {% elif poziom_zanieczyszczen < 150 %}
          1500
        {% else %}
          1600
        {% endif %}
        {% elif poziom_zanieczyszczen < 140 %}
          1400
        {% elif poziom_zanieczyszczen < 150 %}
          1500
# Tutaj możesz dopisać resztę kodu np.{% elif poziom_zanieczyszczen < 160 %} 1500 itp.
         

 
        {% else %}  # " inaczej"
          1600   # Tu jest wartość jaka ma być jeśli sensor odczyta wartość inną np. jeśli odczyta 800 to silnik zostanie ustawiony 1600 , można to zmienić na 2000 (full) 
        {% endif %}

Od pierwszego elif do {% else %} możesz edytować jak chcesz pamiętając o zachowaniu poprawności kodu i logiki (<,>,==)

 {% elif poziom_zanieczyszczen < xxx %}
                xxxx

oki ale nie rozumie jeszcze jednego bo 100 % to już jest poziom zanieczyszczenia o najwyższej skali w xiaomi czyli ok 600 PM to po co dalej pisać kod 110 % 120 % 130 % itp. nie lepiej ustawić na 100% już full obroty i koniec czy się mylę ??

czy mogę go zakończyć w ten sposób

    {% set poziom_zanieczyszczen = states('sensor.mi_air_purifier_3c_pm2_5')
    | float %} {% if poziom_zanieczyszczen < 10 %}
      390
    {% elif poziom_zanieczyszczen < 20 %}
      1300
    {% elif poziom_zanieczyszczen < 30 %}
      1400
    {% elif poziom_zanieczyszczen < 40 %}
      1500
    {% elif poziom_zanieczyszczen < 50 %}
      1600
    {% elif poziom_zanieczyszczen < 60 %}
      1700
    {% elif poziom_zanieczyszczen < 70 %}
      1800
    {% elif poziom_zanieczyszczen < 80 %}
      1900
    {% elif poziom_zanieczyszczen < 90 %}
      2000
    {% elif poziom_zanieczyszczen < 100 %}
      2000
   {% else %}
      2000
    {% endif %}

Nie 100% - to jest 100 z odczytu sensora sensor.mi_air_purifier_3c_pm2_5. Czyli 100 pm2.5
Mój sensor PM2.5
ScreenShot_20231015141600
I ta wartość jest wykorzystana w kodzie np.( <20, <30,< 40 itp.)
/
Ten ostatni kod wygląda prawidłowo.
Do 10 PM2. silnik będzie ustawiony na 390 a powyżej 100 PM2.5 zostanie ustawiony na całą moc

1 polubienie

sorki za zadawanie zbyt wielu głupich z mojej strony pytań ale już to prawie mam wszystko ustawione tak jak chciałem czy ostatecznie mogę zostawić kod w taki sposób że 100 % to już obroty 2000 a każda inna wartość czyli np. 200 MP (200%) to już będzie też full obroty 2000

alias: "mi_air_purifier_3c - dynamiczne sterowanie "
description: ""
trigger:
  - platform: state
    entity_id: sensor.mi_air_purifier_3c_pm2_5
action:
  - service: number.set_value
    data_template:
      entity_id: number.mi_air_purifier_3c_favorite_motor_speed
      value: >
        {% set poziom_zanieczyszczen = states('sensor.mi_air_purifier_3c_pm2_5')
        | float %} {% if poziom_zanieczyszczen < 10 %}
          390
        {% elif poziom_zanieczyszczen < 20 %}
          1300
        {% elif poziom_zanieczyszczen < 30 %}
          1400
        {% elif poziom_zanieczyszczen < 40 %}
          1500
        {% elif poziom_zanieczyszczen < 50 %}
          1600
        {% elif poziom_zanieczyszczen < 60 %}
          1700
        {% elif poziom_zanieczyszczen < 70 %}
          1800
        {% elif poziom_zanieczyszczen < 80 %}
          1900
        {% elif poziom_zanieczyszczen < 90 %}
          2000
        {% elif poziom_zanieczyszczen < 100 %}
          2000
        {% else %}
          2000
        {% endif %}

Powinno działać
Można i tak zakończyć

...
{% elif poziom_zanieczyszczen < 101 %}
   1999
{% elif poziom_zanieczyszczen > 100 %}
   2000
....

Jeśli jest mniejsze od 101 (czyli 100,99. …) to … 1999
Jeśli jest większą od 100 (czyli 101,102. …) to … 2000

Na samym końca jest {% else %} które jest “zabezpieczeniem” ( jeśli z powyższych warunku żaden nie zostanie spełniony to przyjmij wartość 2000)

1 polubienie

Bardzo ci dziękuję za pomoc teraz mój oczyszczacz powietrza działa prawidło gdybym nie trafił tutaj na forum i na twoja pomoc to na pewno bym go zwrócił bo byłem strasznie nie zadowolony z jego pracy teraz elegancko sam sobie reguluje obroty wg moich ustaleń , mam jeszcze pytanie czy jest jeszcze jakiś magiczny sposób na tryb nocny i wyłączenie podświetlenia wyświetlacza wszystko w godzinach 22:00-8:00

OFF TOPIC techniczny
@testxp
Zacznij prawidłowo wstawiać kod do postów - zobacz jak zedytowałem twoje posty wyżej (chodzi o linijki z trzeba odwrotnymi apostrofami - tymi spod “klawisza tyldy”, tak samo jak na githubie).

1 polubienie

Automatyzacja:

alias: Wyłącz oczyszczacza led i przełącz na tryb noc
description: ""
trigger:
  - platform: time
    at: "22:00:00"
condition: []
action:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.filter_led # Do podmiany
  - service: fan.set_preset_mode
    data:
      preset_mode: Silent # Do podmiany, musisz zobaczyć jaki przyjmuje stan gdy przełączysz go w tryb noc 
    target:
      entity_id: fan.filter # do podmiany
mode: single

O 22.00 wyłączy podświetlenie i przejdzie w tryb noc
Do włączenia podobnie automatyzacja:
Wyzwalacz - Czas .Akcja - Wywołanie usługi - switch.turn_on…

Co może być przyczyną wolnej komunikacji między HA a Xiaomi , wczoraj jak ręcznie ustawiłem suwak prędkości to zaraz automatycznie wracał do ustalonej pozycji , dzisiaj już tak nie jest czasami musze czekać 5,10 minut albo w końcu ręcznie uruchomić akcję
Zauważyłem że dopiero jak się zmieni wartość na wyświetlaczu to wtedy wraca na swoje obroty


Jeszcze raz mój kod:

alias: "mi_air_purifier_3c - dynamiczne sterowanie "
description: “”
trigger:

  • platform: state
    entity_id: sensor.mi_air_purifier_3c_pm2_5
    action:
  • service: number.set_value
    data_template:
    entity_id: number.mi_air_purifier_3c_favorite_motor_speed
    value: >
    {% set poziom_zanieczyszczen = states(‘sensor.mi_air_purifier_3c_pm2_5’)
    | float %} {% if poziom_zanieczyszczen < 7 %}
    390
    {% elif poziom_zanieczyszczen < 15 %}
    1300
    {% elif poziom_zanieczyszczen < 30 %}
    1400
    {% elif poziom_zanieczyszczen < 40 %}
    1500
    {% elif poziom_zanieczyszczen < 50 %}
    1600
    {% elif poziom_zanieczyszczen < 60 %}
    1700
    {% elif poziom_zanieczyszczen < 70 %}
    1800
    {% elif poziom_zanieczyszczen < 80 %}
    1900
    {% elif poziom_zanieczyszczen < 90 %}
    1999
    {% elif poziom_zanieczyszczen < 101 %}
    2000
    {% elif poziom_zanieczyszczen > 100 %}
    2100
    {% else %}
    2200
    {% endif %}

Czy masz oczyszczacz zintegrowany przez chmurę zamiast lokalnie?