Ogranicznik ustawień klimatyzacji -atrybuty, encje, stany, urządzenia

Dzień dobry.
Mam dodany klimatyzator przez integrację SmartThinq, dziecko “się czasem myli” i ustawia chłodzenie na 16 gdy na zewnątrz jest 18oC, zamiast otworzyć sobie okno i pooddychać świeżym wiejskim powietrzem.
Jak użyć atrybuty stanu by odczytać aktualne ustawienie i zmienić na własne w NR? Na razie robię tylko takie banalne rzeczy: wykryłeś ruch, jest noc to zaświeć na 2 minuty, jak dalej jest ruch to przedłuż o 2 minuty, nie ma to wyłącz. Na żarówce Tuya no to jeszcze umiem w funkcji ustawić jasność:

msg.payload={"service": "turn_on",
data:
    {"brightness":3}
};
return msg;

by się zaświeciła w określonej jasności zmiennej typu bajt. No i jak rozumiem jest to ten atrybut, ustawiam go, ale jak odczytać że klima jest w trybie chłodzenia, ustawiona na mniej niż 23oC, z innego źródła będę wiedział jaka jest temperatura zewnętrzna i temperatura w pokoju (zresztą klima też to podaje). Nie znalazłem nic ciekawego w google jak odczytać taki zestaw danych.

hvac_modes:
  - "off"
  - heat
  - dry
  - cool
  - fan_only
  - heat_cool
min_temp: 16
max_temp: 30
target_temp_step: 1
fan_modes:
  - low
  - LOW_MID
  - medium
  - MID_HIGH
  - high
  - diffuse
swing_modes:
  - VerticalOff
  - VerticalTop
  - VerticalMiddleTop1
  - VerticalMiddleTop2
  - VerticalMiddleBottom2
  - VerticalMiddleBottom1
  - VerticalBottom
  - VerticalSwing
  - HorizontalOff
  - HorizontalLeft
  - HorizontalMiddleLeft
  - HorizontalCenter
  - HorizontalMiddleRight
  - HorizontalRight
  - HorizontalLeftHalf
  - HorizontalRightHalf
  - HorizontalSwing
current_temperature: 23.5
temperature: 25
fan_mode: diffuse
swing_mode: VerticalSwing
swing_mode_horizontal: HorizontalMiddleRight
swing_mode_vertical: VerticalSwing
friendly_name: KlimaPi
supported_features: 425

Możecie coś podpowiedzieć?

 $entity().attributes.hvac_modes=heat

zmień tylko atrybut którego chcesz używać.

1 polubienie

Dziękuję za odpowiedź, oczywiście nie do końca to jeszcze rozumiem. Ustawiłem ID encji climate.klimapi i domyślając się, że $ odnosi się do niej wpisałem w to okno $entity().attributes.temperature<25 i otrzymuję na wyjściu z noda current state w okno debug “off”, czyli stan z hvac_modes - klima faktycznie jest wyłączona, a ja chciałem sprawdzić czy temperatura jest ustawiona na mniej niż 25.
Dobra, nie będę klepał klimą on/off, potrenuję na żarówce. Problemem jest to że podpinając wynik do dwóch debug dostaję zawsze false, czyli jest przesłany stan żarówki na debug 8. Ustawiam warunek >127, przesuwam suwak jasności powyżej lub poniżej a zawsze dostaję ON w zależności od ustawienia żarówki, zawsze na 8, nigdy na 7.
Dobra, metodą walenia pałką w puszkę ustawiłem if jsonata i teraz dostaję on na 7 lub 8 w zależności w którą stronę się przesunę suwak jasności przy 50%:


ale pojawia się problem przy wyłączeniu, wtedy JSON się pruje, że nic nie dostaje, a to NaN jest do opcji z numeric zamiast string, ale obie krzyczą jak wyłączę światło, nie dostaję już informacji off jak w opcji if state IS. Jak to naprawić, czy może nie jest zepsute?
Może po prostu dołożę wcześniej tak jak było poprzednio z wynikiem on/off i nie będę sprawdzał jasności wyłączonej żarówki, ale dziwne że nie napisze po prostu, że jest 0.

Dla innych typów danych musisz zmienić:


On/off boolean

Pokaż co tam masz w state nodes?

Debug ustaw na complete msg object.
Screenshot - 22.08.2024 , 11_38_56

Wtedy odczytasz wszystkie atrybuty

Przy każdym z nich masz path
Screenshot - 22.08.2024 , 11_42_30
w podanym przykładzie:
data.attributes.away_preset_days

Światło: $entity().attributes.data.state

Temperatura: data.attributes.temperature

Odczyt stanu termostatu.

[
    {
        "id": "0e5101e29a1a5599",
        "type": "server-state-changed",
        "z": "fc50f35d867d17f6",
        "name": "Termostat",
        "server": "7463fdcca985ae84",
        "version": 5,
        "outputs": 1,
        "exposeAsEntityConfig": "",
        "entityId": "climate.termostat_p",
        "entityIdType": "exact",
        "outputInitially": false,
        "stateType": "str",
        "ifState": "",
        "ifStateType": "str",
        "ifStateOperator": "is",
        "outputOnlyOnStateChange": false,
        "for": 0,
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 1040,
        "y": 1480,
        "wires": [
            [
                "dbb7cc77c0d98d45"
            ]
        ]
    },
    {
        "id": "5e86e770f825dc40",
        "type": "switch",
        "z": "fc50f35d867d17f6",
        "name": "Czy Grzeje?",
        "property": "data.new_state.attributes.hvac_action",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "heating",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 1250,
        "y": 1480,
        "wires": [
            [
                "468cfee1b5497569"
            ]
        ]
    },
    {
        "id": "dbb7cc77c0d98d45",
        "type": "switch",
        "z": "fc50f35d867d17f6",
        "name": "",
        "property": "data.new_state.attributes.hvac_action",
        "propertyType": "msg",
        "rules": [
            {
                "t": "neq",
                "v": "data.old_state.attributes.hvac_action",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 1135,
        "y": 1480,
        "wires": [
            [
                "5e86e770f825dc40"
            ]
        ],
        "l": false
    },
    {
        "id": "468cfee1b5497569",
        "type": "debug",
        "z": "fc50f35d867d17f6",
        "name": "debug 58",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1420,
        "y": 1480,
        "wires": []
    },
    {
        "id": "7463fdcca985ae84",
        "type": "server",
        "name": "Home Assistant",
        "version": 5,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": true,
        "heartbeatInterval": "30",
        "areaSelector": "friendlyName",
        "deviceSelector": "friendlyName",
        "entitySelector": "friendlyName",
        "statusSeparator": ": ",
        "statusYear": "hidden",
        "statusMonth": "short",
        "statusDay": "numeric",
        "statusHourCycle": "default",
        "statusTimeFormat": "h:m",
        "enableGlobalContextStore": true
    }
]
2 polubienia

Będę potrzebował chwili by to przetrawić, dziękuję.