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

Argo WREM2 v1 commands not decoded correctly #2133

Open
mateuszdrab opened this issue Aug 29, 2024 · 15 comments
Open

Argo WREM2 v1 commands not decoded correctly #2133

mateuszdrab opened this issue Aug 29, 2024 · 15 comments

Comments

@mateuszdrab
Copy link

Version/revision of the library used

v2.8.6

Describe the bug

I also seem to be experiencing decoding issues with a Technibel WREM2 v1 remote (similarly to #1859)

Symptom is that all IR communications received by Tasmota (and hence the library) are decoded as iFeel Temperature Reports instead of actual command messages. The provided reading for the sensor is erroneous (when misinterpreting command messages, otherwise the iFeel readings from respective reports are accurate and correct), suggesting that the message bytes are not an actual iFeel report but an actual command which is misinterpreted by the library.

Example code used

This issue can be reproduced on both Tasmota (tasmota-ir, version 14.2 and when using [IRrecvDumpV2.ino].(https://github.com/crankyoldgit/IRremoteESP8266/blob/master/examples/IRrecvDumpV2/IRrecvDumpV2.ino) pulled from master.

Expected behaviour

Commands decoded correctly and not as iFeel reports

Output of raw data from [IRrecvDumpV2.ino]

iFeel enabled unless otherwise indicated
Temperature at remote 20
Target temp is 10
Cooling mode is on

# Turn off

Timestamp : 000036.015
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6422, 3190,  408, 872,  428, 848,  428, 2126,  402, 2150,  408, 872,  404, 2152,  402, 874,  402, 2152,  402, 2154,  406, 872,  428, 2126,  404, 876,  404, 2150,  430, 2124,  432, 2122,  432, 2124,  404, 874,  404, 874,  426, 852,  428, 850,  412, 864,  406, 872,  404, 874,  400, 2154,  428, 2128,  402, 876,  402, 874,  400, 2154,  404, 2150,  406, 2150,  400, 878,  400, 876,  402, 874,  416, 2136,  404, 2152,  402, 876,  402, 874,  402, 874,  428, 852,  402, 874,  404, 872,  400, 876,  402, 876,  404, 872,  430, 846,  402, 2152,  406, 2150,  406, 2150,  404, 874,  432, 846,  426, 850,  428, 850,  400, 878,  398, 876,  404, 874,  404, 874,  400, 2152,  432, 2124,  428, 2128,  432, 846,  426, 852,  400, 2154,  404, 874,  426, 2128,  428, 2128,  404, 872,  430, 848,  426, 2128,  404, 872,  414, 2140,  432, 848,  400, 876,  426, 850,  404, 872,  402, 876,  400, 876,  430, 848,  404, 872,  404, 874,  402, 2154,  402, 876,  428, 2126,  406, 872,  426, 2128,  426, 852,  404, 872,  430, 2124,  404, 874,  430, 846,  426, 2128,  400};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x39};

# Turn on

Timestamp : 000038.077
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6418, 3192,  406, 872,  432, 846,  402, 2154,  430, 2124,  432, 846,  404, 2150,  406, 870,  408, 2148,  406, 2148,  428, 850,  402, 2152,  430, 848,  404, 2150,  428, 2126,  404, 2150,  406, 2148,  404, 876,  428, 846,  430, 848,  428, 848,  428, 852,  428, 848,  402, 876,  426, 2128,  432, 2124,  406, 870,  404, 874,  430, 2126,  432, 2124,  404, 2150,  406, 872,  406, 870,  428, 848,  402, 2154,  430, 2126,  428, 850,  426, 848,  432, 846,  428, 852,  426, 850,  430, 848,  404, 874,  404, 874,  404, 874,  404, 872,  426, 2126,  404, 2152,  404, 2152,  430, 846,  434, 846,  404, 870,  408, 872,  430, 848,  404, 870,  402, 874,  432, 844,  406, 2150,  406, 2150,  432, 2120,  402, 878,  428, 848,  430, 2122,  406, 870,  406, 2150,  406, 2150,  406, 870,  430, 848,  400, 2154,  406, 870,  406, 2148,  406, 872,  432, 846,  404, 872,  428, 848,  404, 874,  404, 872,  402, 874,  402, 2154,  426, 852,  402, 2152,  406, 876,  424, 2128,  428, 850,  402, 2152,  406, 874,  400, 878,  402, 2150,  404, 2152,  428, 850,  404, 2150,  406};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x39};

# Target temp +1 (11)
Timestamp : 000049.843
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5C039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 28C
uint16_t rawData[183] = {6416, 3192,  436, 846,  404, 874,  404, 2148,  406, 2150,  406, 872,  430, 2122,  432, 846,  432, 2124,  432, 2124,  428, 850,  426, 2128,  402, 876,  428, 2124,  402, 2152,  408, 2150,  406, 2148,  430, 848,  400, 874,  432, 846,  434, 846,  426, 850,  432, 846,  428, 2126,  404, 2150,  404, 2152,  432, 846,  406, 872,  428, 2124,  432, 2124,  432, 2122,  406, 874,  404, 872,  428, 848,  402, 2152,  430, 2126,  430, 848,  404, 872,  404, 874,  404, 872,  430, 848,  430, 844,  406, 874,  402, 876,  400, 878,  430, 846,  404, 2150,  406, 2150,  428, 2126,  402, 874,  404, 874,  428, 850,  424, 852,  402, 876,  404, 870,  432, 846,  404, 874,  400, 2152,  430, 2126,  430, 2124,  404, 872,  428, 848,  428, 2126,  432, 846,  426, 2130,  402, 2152,  406, 872,  426, 850,  402, 2152,  430, 848,  402, 2152,  430, 846,  404, 874,  430, 844,  402, 878,  424, 850,  430, 848,  404, 874,  428, 2124,  428, 850,  428, 2126,  406, 870,  406, 2150,  402, 876,  428, 2124,  432, 848,  404, 872,  426, 2126,  430, 2124,  430, 2124,  406, 2150,  432};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xC0, 0x39};

# Target temp +1 (12)
Timestamp : 000053.669
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5003A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 4C
uint16_t rawData[183] = {6418, 3194,  404, 874,  404, 874,  404, 2148,  432, 2122,  434, 844,  428, 2126,  402, 876,  426, 2130,  404, 2152,  404, 872,  426, 2128,  404, 872,  406, 2148,  406, 2152,  428, 2128,  402, 2152,  402, 876,  404, 874,  404, 870,  404, 874,  404, 872,  400, 878,  398, 878,  426, 850,  400, 874,  406, 2150,  426, 852,  430, 2124,  430, 2124,  434, 2124,  404, 872,  404, 874,  406, 872,  402, 2152,  404, 2150,  432, 846,  430, 844,  432, 846,  430, 844,  432, 848,  402, 874,  430, 848,  404, 874,  402, 874,  400, 876,  426, 2128,  428, 2128,  406, 2150,  426, 852,  402, 874,  400, 878,  428, 850,  404, 874,  404, 874,  428, 848,  428, 848,  400, 2154,  404, 2150,  432, 2124,  406, 2150,  406, 872,  402, 2152,  406, 872,  400, 2154,  404, 2148,  402, 874,  428, 850,  428, 2126,  432, 846,  406, 2148,  404, 874,  404, 874,  400, 878,  400, 878,  400, 878,  426, 850,  426, 852,  404, 2150,  430, 848,  404, 2150,  404, 874,  402, 2152,  402, 2152,  404, 2152,  404, 874,  400, 2154,  404, 2148,  432, 2124,  406, 872,  404, 874,  404};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x00, 0x3A};

# Target temp +1 (13)
Timestamp : 000056.058
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5403A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 12C
uint16_t rawData[183] = {6422, 3188,  404, 872,  406, 870,  408, 2150,  404, 2150,  404, 874,  402, 2152,  404, 876,  404, 2150,  406, 2150,  432, 844,  432, 2122,  434, 846,  400, 2154,  430, 2124,  404, 2152,  432, 2122,  404, 874,  432, 844,  402, 876,  406, 874,  400, 876,  404, 874,  404, 2150,  430, 850,  404, 870,  432, 2124,  404, 874,  430, 2124,  402, 2154,  404, 2150,  432, 844,  430, 846,  428, 850,  406, 2150,  404, 2150,  432, 846,  428, 850,  430, 848,  428, 848,  404, 874,  428, 850,  402, 876,  404, 870,  404, 874,  404, 874,  404, 2148,  436, 2120,  430, 2128,  430, 848,  432, 844,  430, 846,  406, 872,  430, 848,  402, 874,  432, 846,  402, 876,  430, 2124,  404, 2150,  404, 2148,  430, 2128,  404, 874,  430, 2124,  404, 872,  430, 2124,  406, 2150,  432, 846,  430, 850,  400, 2152,  432, 848,  400, 2154,  404, 874,  428, 850,  400, 876,  428, 848,  404, 874,  402, 876,  430, 844,  432, 2124,  432, 844,  404, 2150,  434, 844,  404, 2150,  406, 2148,  406, 2150,  402, 876,  428, 2126,  406, 2148,  430, 2126,  404, 2152,  406, 872,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x40, 0x3A};

# Target temp +1 (14)
Timestamp : 000059.394
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5803A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6398, 3214,  406, 872,  428, 850,  432, 2122,  432, 2124,  428, 850,  402, 2150,  416, 862,  432, 2120,  434, 2122,  406, 874,  400, 2154,  428, 850,  432, 2122,  430, 2126,  430, 2128,  402, 2154,  402, 876,  426, 850,  406, 872,  432, 846,  404, 872,  430, 850,  402, 874,  426, 2128,  400, 878,  400, 2154,  430, 848,  404, 2150,  400, 2156,  402, 2152,  402, 874,  406, 874,  404, 872,  402, 2152,  430, 2124,  400, 878,  404, 874,  406, 870,  406, 872,  402, 876,  428, 850,  426, 850,  428, 850,  430, 846,  426, 850,  430, 2124,  404, 2152,  406, 2150,  404, 874,  426, 850,  404, 872,  402, 874,  430, 846,  430, 850,  426, 850,  404, 874,  402, 2152,  404, 2150,  404, 2150,  428, 2126,  404, 872,  432, 2124,  430, 848,  402, 2152,  406, 2150,  430, 846,  402, 876,  404, 2152,  426, 852,  428, 2124,  404, 874,  400, 876,  432, 844,  400, 876,  430, 846,  428, 850,  406, 872,  428, 2124,  430, 848,  430, 2126,  404, 874,  402, 2150,  406, 2150,  432, 2122,  402, 878,  430, 2124,  400, 2152,  432, 2124,  432, 846,  428, 2126,  404};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x3A};

# Target temp +1 (15)
Timestamp : 000060.974
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5C03A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 28C
uint16_t rawData[183] = {6420, 3190,  432, 848,  402, 874,  402, 2152,  428, 2126,  400, 878,  400, 2154,  402, 876,  402, 2154,  426, 2128,  428, 850,  400, 2152,  404, 876,  404, 2150,  400, 2154,  426, 2130,  404, 2152,  404, 872,  404, 874,  426, 850,  430, 848,  402, 874,  400, 878,  428, 2124,  428, 2128,  404, 874,  402, 2152,  404, 874,  402, 2152,  404, 2150,  402, 2152,  406, 872,  428, 848,  402, 876,  406, 2150,  428, 2126,  406, 872,  402, 874,  426, 852,  402, 876,  404, 872,  402, 876,  402, 874,  428, 850,  426, 850,  430, 846,  406, 2150,  404, 2152,  430, 2126,  432, 846,  404, 874,  400, 878,  428, 848,  428, 850,  404, 874,  404, 874,  400, 876,  430, 2124,  402, 2154,  430, 2124,  428, 2126,  402, 876,  404, 2150,  426, 852,  400, 2154,  402, 2152,  400, 878,  402, 874,  428, 2126,  428, 850,  404, 2150,  404, 874,  402, 876,  428, 848,  402, 874,  398, 878,  400, 876,  400, 876,  404, 2150,  406, 872,  402, 2152,  402, 876,  428, 2126,  404, 2152,  402, 2152,  402, 876,  402, 2152,  402, 2152,  404, 2150,  402, 2152,  404, 2150,  430};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xC0, 0x3A};

# Target temp -1 (14)
Timestamp : 000063.237
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5803A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6418, 3192,  430, 848,  428, 848,  404, 2150,  404, 2150,  432, 846,  402, 2152,  430, 848,  426, 2128,  432, 2122,  406, 872,  402, 2152,  428, 850,  426, 2126,  406, 2150,  402, 2152,  430, 2126,  404, 872,  432, 848,  430, 848,  398, 878,  404, 874,  400, 878,  428, 848,  432, 2122,  428, 850,  428, 2126,  404, 874,  404, 2150,  404, 2152,  406, 2150,  404, 874,  426, 850,  400, 878,  424, 2128,  404, 2152,  432, 848,  428, 848,  400, 876,  402, 876,  404, 874,  404, 874,  402, 874,  428, 850,  404, 874,  402, 872,  432, 2122,  430, 2126,  406, 2150,  432, 846,  430, 844,  404, 874,  402, 876,  404, 872,  402, 876,  402, 874,  404, 874,  428, 2124,  434, 2122,  402, 2154,  406, 2150,  430, 850,  404, 2148,  406, 872,  428, 2126,  404, 2152,  430, 846,  406, 874,  430, 2124,  404, 874,  430, 2124,  430, 848,  402, 876,  426, 850,  432, 846,  400, 878,  404, 872,  404, 874,  402, 2154,  404, 872,  432, 2124,  402, 876,  398, 2154,  404, 2150,  406, 2148,  406, 872,  430, 2126,  426, 2130,  432, 2122,  400, 878,  404, 2150,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x3A};

# Target temp -1 (13)
Timestamp : 000064.715
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5403A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 12C
uint16_t rawData[183] = {6418, 3194,  404, 874,  432, 846,  430, 2122,  406, 2150,  406, 872,  430, 2124,  432, 844,  406, 2150,  432, 2124,  406, 870,  402, 2152,  434, 846,  404, 2150,  426, 2128,  430, 2124,  406, 2150,  428, 850,  404, 872,  404, 874,  402, 874,  402, 874,  432, 844,  402, 2150,  402, 876,  430, 846,  428, 2128,  400, 878,  404, 2150,  402, 2154,  404, 2150,  402, 876,  404, 874,  432, 846,  428, 2126,  404, 2150,  432, 846,  404, 874,  428, 848,  434, 846,  404, 872,  402, 876,  404, 874,  430, 848,  428, 848,  428, 848,  430, 2126,  406, 2148,  408, 2150,  402, 876,  402, 876,  402, 872,  432, 844,  432, 848,  430, 848,  404, 874,  400, 876,  402, 2150,  432, 2124,  404, 2152,  406, 2150,  426, 852,  404, 2150,  430, 846,  402, 2152,  404, 2152,  402, 876,  430, 846,  404, 2150,  402, 876,  430, 2124,  430, 848,  426, 850,  404, 872,  402, 874,  402, 874,  404, 874,  400, 876,  426, 2128,  426, 850,  428, 2126,  404, 874,  430, 2124,  404, 2150,  406, 2148,  404, 876,  402, 2152,  404, 2150,  404, 2152,  430, 2124,  404, 874,  404};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x40, 0x3A};

# Target temp -1 (12)
Timestamp : 000066.099
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5003A (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 4C
uint16_t rawData[183] = {6420, 3192,  428, 850,  402, 876,  426, 2128,  430, 2126,  426, 850,  404, 2150,  402, 874,  430, 2122,  406, 2150,  432, 846,  430, 2124,  430, 848,  430, 2126,  430, 2124,  404, 2150,  404, 2148,  434, 846,  428, 850,  400, 876,  404, 870,  406, 870,  428, 850,  404, 872,  426, 850,  430, 848,  402, 2150,  432, 848,  404, 2148,  430, 2126,  406, 2150,  400, 878,  404, 874,  400, 876,  402, 2152,  430, 2124,  404, 874,  426, 848,  402, 876,  400, 876,  400, 878,  404, 872,  404, 874,  400, 876,  426, 848,  434, 844,  400, 2152,  432, 2124,  430, 2126,  404, 872,  404, 874,  404, 872,  430, 846,  400, 876,  428, 852,  400, 878,  428, 850,  414, 2140,  430, 2124,  404, 2150,  428, 2126,  430, 848,  400, 2154,  432, 848,  432, 2122,  402, 2152,  404, 874,  428, 848,  404, 2152,  426, 850,  404, 2150,  402, 876,  404, 874,  402, 874,  430, 846,  432, 846,  400, 876,  426, 850,  400, 2154,  402, 876,  402, 2152,  402, 876,  404, 2150,  400, 2154,  428, 2128,  430, 848,  430, 2124,  428, 2126,  400, 2156,  402, 874,  428, 848,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x00, 0x3A};

# Target temp -1 (11)
Timestamp : 000067.518
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5C039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 28C
uint16_t rawData[183] = {6426, 3188,  404, 874,  404, 872,  404, 2150,  406, 2150,  400, 878,  430, 2124,  406, 872,  402, 2152,  430, 2124,  430, 850,  420, 2132,  432, 846,  428, 2128,  426, 2128,  402, 2154,  428, 2126,  426, 850,  430, 846,  400, 876,  404, 874,  400, 876,  430, 848,  400, 2152,  402, 2152,  434, 2120,  404, 874,  404, 874,  400, 2152,  402, 2152,  430, 2126,  430, 850,  432, 844,  404, 874,  426, 2126,  428, 2128,  404, 874,  404, 874,  402, 874,  404, 874,  404, 874,  402, 876,  430, 848,  404, 874,  402, 874,  402, 874,  404, 2152,  406, 2150,  402, 2152,  426, 852,  400, 878,  402, 874,  400, 878,  402, 874,  428, 850,  430, 844,  406, 872,  404, 2150,  402, 2154,  404, 2150,  406, 2150,  400, 878,  402, 2152,  404, 874,  402, 2152,  404, 2150,  404, 874,  406, 872,  400, 2156,  400, 876,  434, 2122,  434, 844,  406, 872,  426, 852,  402, 874,  404, 874,  430, 848,  428, 850,  402, 2150,  406, 872,  432, 2124,  404, 874,  402, 2154,  430, 846,  402, 2152,  404, 874,  400, 2154,  404, 2152,  430, 2126,  404, 2152,  404, 2152,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xC0, 0x39};

# Target temp -1 (10)
Timestamp : 000068.838
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6422, 3190,  404, 874,  404, 874,  426, 2128,  404, 2150,  402, 876,  404, 2150,  406, 874,  426, 2128,  430, 2126,  402, 876,  426, 2128,  404, 872,  430, 2126,  400, 2154,  402, 2152,  430, 2124,  432, 846,  404, 874,  404, 872,  430, 848,  430, 846,  402, 874,  426, 852,  402, 2152,  434, 2122,  400, 878,  404, 874,  428, 2126,  402, 2152,  402, 2152,  402, 876,  402, 874,  402, 874,  402, 2152,  428, 2128,  404, 874,  426, 850,  432, 846,  404, 874,  430, 848,  402, 874,  428, 848,  428, 848,  404, 874,  402, 876,  428, 2126,  428, 2126,  404, 2152,  432, 846,  430, 846,  402, 874,  404, 872,  432, 844,  426, 850,  402, 876,  404, 874,  428, 2126,  404, 2152,  432, 2124,  404, 2152,  404, 874,  426, 2128,  404, 874,  426, 2128,  402, 2152,  430, 846,  432, 846,  430, 2124,  402, 876,  402, 2152,  402, 876,  402, 874,  430, 846,  404, 874,  402, 874,  402, 874,  400, 878,  430, 2124,  406, 872,  404, 2152,  430, 850,  400, 2152,  404, 874,  402, 2150,  404, 874,  404, 2150,  404, 2150,  404, 2150,  428, 848,  428, 2128,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x39};

# iFeel off
Timestamp : 000073.476
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6420, 3190,  404, 876,  418, 858,  430, 2124,  432, 2124,  430, 848,  406, 2150,  414, 862,  430, 2126,  426, 2126,  406, 872,  400, 2154,  404, 872,  430, 2124,  402, 2152,  406, 2148,  408, 2150,  404, 872,  430, 850,  402, 876,  402, 874,  426, 850,  406, 872,  404, 874,  432, 2122,  402, 2152,  402, 874,  430, 848,  428, 2126,  430, 2124,  428, 2126,  400, 876,  430, 846,  432, 846,  402, 2152,  404, 2152,  400, 878,  400, 876,  404, 874,  400, 878,  402, 872,  406, 872,  432, 844,  426, 852,  404, 872,  428, 850,  406, 2150,  402, 2154,  430, 2124,  406, 870,  404, 876,  428, 848,  400, 878,  398, 878,  432, 844,  402, 876,  400, 878,  428, 2126,  430, 2126,  426, 2128,  400, 2154,  406, 874,  404, 2150,  400, 878,  402, 2152,  400, 2154,  402, 876,  402, 872,  406, 2150,  430, 848,  404, 2150,  404, 874,  430, 846,  430, 848,  404, 874,  426, 850,  404, 874,  398, 878,  402, 2150,  406, 872,  406, 872,  428, 848,  430, 2124,  428, 846,  430, 2126,  400, 876,  430, 2124,  432, 2124,  430, 2126,  430, 848,  424, 850,  428};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x39};

# iFeel on
Timestamp : 000075.086
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58039 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6420, 3188,  428, 850,  404, 874,  432, 2122,  432, 2124,  406, 872,  404, 2150,  404, 872,  432, 2124,  400, 2154,  406, 872,  428, 2126,  402, 876,  398, 2156,  400, 2154,  432, 2124,  400, 2156,  432, 846,  404, 872,  402, 876,  404, 872,  406, 874,  404, 874,  400, 876,  432, 2122,  428, 2128,  430, 846,  404, 872,  430, 2126,  400, 2154,  404, 2150,  430, 848,  404, 874,  400, 876,  404, 2148,  406, 2152,  404, 872,  402, 876,  430, 846,  404, 874,  400, 878,  404, 872,  426, 852,  430, 846,  402, 876,  430, 846,  430, 2124,  430, 2124,  404, 2150,  428, 848,  434, 844,  430, 848,  428, 850,  430, 844,  406, 872,  430, 846,  428, 850,  398, 2156,  404, 2150,  402, 2152,  404, 2150,  428, 850,  426, 2128,  402, 876,  426, 2128,  406, 2148,  402, 878,  400, 876,  402, 2150,  430, 848,  404, 2150,  428, 850,  428, 850,  404, 872,  426, 852,  402, 876,  430, 844,  406, 872,  434, 2120,  432, 848,  404, 2150,  406, 870,  404, 2152,  404, 872,  404, 2152,  430, 846,  430, 2126,  432, 2122,  404, 2152,  432, 846,  406, 2150,  404};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x39};


# Target temp +1 with iFeel off (11)
Timestamp : 001244.917
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5C0B9 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 28C
uint16_t rawData[183] = {6396, 3218,  402, 884,  396, 884,  414, 2134,  400, 2158,  394, 910,  368, 2184,  372, 906,  366, 2160,  424, 2136,  394, 908,  368, 2168,  392, 882,  394, 2158,  396, 2156,  398, 2156,  398, 2162,  398, 906,  370, 886,  392, 906,  398, 878,  394, 882,  372, 884,  422, 2126,  424, 2134,  422, 2132,  398, 882,  392, 908,  370, 2158,  396, 2162,  396, 2156,  396, 908,  374, 2156,  398, 906,  370, 2184,  372, 2184,  372, 906,  368, 910,  372, 884,  390, 882,  398, 906,  370, 908,  370, 906,  396, 882,  372, 880,  422, 856,  392, 2162,  394, 2162,  396, 2182,  372, 908,  368, 910,  370, 906,  370, 884,  394, 906,  370, 906,  368, 908,  372, 884,  392, 2158,  400, 2156,  426, 2128,  426, 878,  390, 886,  398, 880,  370, 2158,  398, 2158,  396, 884,  392, 2158,  398, 2158,  394, 884,  394, 2160,  396, 904,  374, 904,  368, 908,  372, 906,  368, 906,  374, 880,  394, 908,  372, 882,  394, 2154,  428, 878,  368, 908,  370, 906,  398, 2128,  426, 2128,  398, 2184,  372, 2154,  402, 2156,  396, 2158,  400, 2158,  396, 2160,  392, 2160,  426};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xC0, 0xB9};

# Target temp -1 with iFeel off (10)
Timestamp : 000989.683
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5C099 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 28C
uint16_t rawData[183] = {6422, 3188,  404, 880,  424, 852,  424, 2128,  404, 2152,  424, 854,  396, 2158,  400, 880,  424, 2128,  430, 2124,  400, 878,  402, 2154,  402, 878,  400, 2154,  402, 2154,  424, 2126,  428, 2128,  400, 884,  394, 880,  398, 880,  396, 878,  428, 848,  428, 854,  398, 2154,  402, 2154,  402, 2154,  402, 880,  398, 876,  426, 2128,  400, 2156,  400, 878,  402, 876,  396, 2158,  400, 878,  398, 2156,  400, 2154,  404, 880,  424, 846,  430, 852,  398, 878,  424, 854,  422, 856,  398, 878,  398, 882,  398, 878,  400, 878,  420, 2132,  400, 2154,  428, 2128,  428, 854,  392, 882,  400, 876,  428, 850,  424, 854,  402, 876,  396, 882,  398, 880,  398, 2154,  400, 2154,  402, 2152,  398, 878,  430, 850,  422, 2130,  424, 856,  400, 2152,  400, 878,  398, 2156,  426, 2128,  404, 876,  396, 2156,  426, 852,  426, 852,  424, 858,  396, 882,  418, 856,  398, 880,  398, 878,  398, 880,  396, 2154,  428, 850,  424, 854,  396, 884,  398, 2152,  428, 2128,  402, 2152,  402, 2152,  398, 2158,  402, 2152,  402, 2154,  402, 876,  396, 2158,  428};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xC0, 0x99};

# Heat mode with iFeel off 
Timestamp : 001086.192
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF58099 (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 20C
uint16_t rawData[183] = {6416, 3192,  402, 878,  402, 874,  400, 2154,  400, 2154,  430, 848,  402, 2152,  426, 854,  424, 2130,  402, 2152,  432, 848,  404, 2150,  400, 876,  404, 2150,  432, 2122,  432, 2124,  404, 2152,  430, 848,  428, 850,  424, 854,  398, 880,  398, 878,  400, 876,  402, 876,  402, 2152,  426, 2128,  428, 850,  400, 878,  400, 2152,  404, 2150,  402, 876,  428, 848,  428, 2126,  400, 880,  402, 2152,  426, 2126,  430, 848,  428, 850,  402, 874,  400, 878,  402, 876,  400, 876,  402, 876,  402, 876,  430, 846,  404, 872,  426, 2128,  404, 2154,  426, 2126,  432, 848,  400, 876,  404, 874,  428, 850,  400, 878,  400, 876,  428, 852,  402, 874,  424, 2130,  432, 2122,  404, 2150,  432, 2126,  426, 850,  402, 2152,  426, 854,  400, 2152,  428, 852,  400, 2150,  406, 2150,  432, 846,  428, 2126,  402, 876,  428, 846,  402, 878,  400, 878,  426, 848,  404, 874,  428, 850,  400, 880,  400, 2152,  402, 878,  400, 876,  400, 878,  408, 2142,  432, 2124,  428, 2128,  430, 2126,  400, 876,  428, 852,  398, 878,  430, 848,  428, 2122,  430};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x80, 0x99};

# Cool mode with iFeel off
Timestamp : 001089.476
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5AA4B (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 25C
uint16_t rawData[67] = {6420, 3190,  402, 876,  402, 876,  424, 2130,  400, 2154,  402, 876,  400, 2154,  404, 876,  402, 2152,  404, 2152,  404, 876,  400, 2154,  426, 852,  402, 2152,  400, 2156,  402, 2154,  404, 2152,  402, 876,  398, 2154,  404, 874,  402, 2154,  428, 848,  404, 2150,  402, 876,  428, 2126,  404, 2152,  400, 2156,  402, 878,  426, 2126,  428, 850,  398, 878,  400, 2154,  402, 876,  402};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xAA, 0x4B};

What brand/model IR demodulator are you using?

VS1838b, however the captures are consistent. Also tried another no brand IR receiver module and same issue persists.

Circuit diagram and hardware used (if applicable)

I tried this on 3 different builds, with 2 NodeMCUs and 1 pre-built (YTF) blaster with Tasmota on it.
The receiver hooks directly to D5, GND and 3V3.

I have followed the steps in the Troubleshooting Guide & read the FAQ

Yes

Has this library/code previously worked as expected for you?

No, tried versions down to 2.8.0

@mateuszdrab mateuszdrab changed the title Argo WREM2 v1 commands not recognized Argo WREM2 v1 commands not decoded correctly Aug 29, 2024
@mbronk
Copy link
Contributor

mbronk commented Aug 30, 2024

Disclaimer: I do not own a WREM2 device, so all the below is based on the captures in this thread and my past work on this protocol when adding a WREM3 AC protocol support (which has similarities but slightly different).

//quote from #1859
At a quick glance, there are 90bits in the raw message, and we are claiming there is only 32. I'm guessing the code that determines if it is a short "sensor" message is faulty. i.e. It incorrectly thinks it is a sensor message.

@crankyoldgit , @NiKiZe - These captures do indeed look like a 90-bit proto message, and they fail to get detected because of the logic expecting 96 bits, and falling back to the short/iFeel message for anything shorter.

The original state definition seems to have these stray 6 bits also defined as "nothingness":

uint32_t :6;

... so I figured to try to just cut the message size 96->90 and it seems to have improved the situation.
Take a look at #2136 for experimental ❗ changes that address it (maybe 😁 ).


@mateuszdrab - You may want to try to compile with the experimental changes from #2136 and see if it improves anything.
One thing I have noticed is the iFeel (room temperatures) decoded by the lib seem to be +1°C higher than what you report with the data. Could you double check (also in the iFeel reporting mode, when no button is pressed on the remote, but it periodically sends the room temp updates)?
Is the room temp reading you report coming from the remote itself, or a separate ambient sensor you're using?

@mateuszdrab
Copy link
Author

Damn, you're a star 😀

The result speak for themselves

Timestamp : 000023.491
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5809906E000FF1F000203 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: Off, Mode: 0 (Cool), Fan: 3 (Max), Temp: 10C, Sensor Temp: 24C, Max: Off, IFeel: Off, Night: Off
uint16_t rawData[183] = {6390, 3192,  430, 848,  424, 852,  432, 2124,  424, 2132,  426, 850,  422, 2134,  424, 852,  432, 2124,  424, 2132,  426, 852,  432, 2122,  424, 852,  432, 2124,  424, 2132,  426, 2130,  428, 2126,  432, 846,  426, 850,  422, 854,  430, 848,  426, 850,  432, 844,  428, 850,  424, 2130,  426, 2128,  430, 848,  426, 852,  432, 2122,  424, 2132,  426, 850,  422, 854,  430, 2126,  432, 844,  430, 2126,  432, 2124,  424, 852,  430, 848,  426, 850,  424, 854,  428, 848,  424, 852,  432, 844,  430, 848,  424, 852,  432, 846,  428, 2128,  430, 2124,  434, 2122,  424, 852,  432, 846,  428, 850,  424, 854,  430, 846,  426, 850,  422, 854,  430, 848,  426, 2130,  430, 2126,  430, 2124,  422, 2132,  426, 2130,  428, 2126,  430, 2124,  422, 2132,  426, 2128,  430, 2126,  432, 2124,  424, 2130,  426, 2128,  430, 848,  426, 852,  432, 844,  428, 848,  424, 852,  432, 846,  428, 850,  424, 854,  430, 846,  426, 850,  434, 844,  430, 848,  424, 2130,  428, 850,  424, 854,  430, 846,  426, 850,  422, 854,  430, 848,  426, 2128,  428, 2128,  430};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0x99, 0x06, 0xE0, 0x00, 0xFF, 0x1F, 0x00, 0x02, 0x03};


Timestamp : 000030.882
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5809906E000FF1F208203 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 3 (Max), Temp: 10C, Sensor Temp: 24C, Max: Off, IFeel: Off, Night: Off
uint16_t rawData[183] = {6420, 3164,  426, 850,  422, 854,  462, 2092,  432, 2122,  424, 852,  432, 2124,  422, 854,  462, 2092,  434, 2122,  458, 820,  454, 2102,  424, 854,  430, 2126,  454, 2100,  458, 2096,  428, 2126,  432, 846,  460, 816,  424, 854,  464, 814,  426, 852,  432, 844,  430, 848,  490, 2066,  426, 2128,  452, 826,  458, 818,  454, 2100,  458, 2098,  462, 816,  422, 854,  452, 2102,  456, 822,  462, 2092,  454, 2100,  458, 820,  454, 824,  460, 816,  456, 820,  452, 824,  460, 818,  422, 854,  462, 814,  458, 818,  454, 822,  428, 2126,  454, 2102,  456, 2098,  458, 818,  432, 844,  462, 816,  458, 820,  454, 824,  460, 816,  458, 820,  452, 824,  426, 2128,  462, 2092,  454, 2102,  456, 2098,  458, 2096,  462, 2092,  454, 2102,  456, 2098,  426, 2128,  464, 2092,  456, 2100,  456, 2098,  460, 2094,  452, 824,  460, 818,  456, 820,  462, 814,  458, 818,  454, 824,  460, 816,  456, 820,  452, 2102,  456, 822,  462, 816,  458, 820,  454, 2102,  424, 854,  452, 824,  460, 818,  456, 822,  462, 814,  458, 2098,  460, 2094,  454, 2102,  424};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0x99, 0x06, 0xE0, 0x00, 0xFF, 0x1F, 0x20, 0x82, 0x03};

Timestamp : 000052.403
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5809906E000FF1FA08201 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 3 (Max), Temp: 10C, Sensor Temp: 24C, Max: Off, IFeel: On, Night: Off
uint16_t rawData[183] = {6388, 3196,  428, 850,  424, 852,  430, 2124,  424, 2132,  426, 852,  432, 2124,  424, 854,  430, 2124,  422, 2132,  426, 852,  434, 2122,  424, 852,  432, 2124,  422, 2134,  424, 2130,  428, 2126,  432, 846,  428, 850,  422, 854,  430, 848,  426, 852,  432, 844,  428, 848,  424, 2130,  428, 2128,  430, 848,  424, 852,  432, 2124,  424, 2132,  426, 850,  422, 854,  430, 2126,  432, 846,  428, 2128,  430, 2124,  422, 854,  428, 848,  424, 852,  432, 846,  428, 850,  424, 854,  430, 846,  426, 850,  422, 854,  430, 848,  426, 2130,  428, 2128,  430, 2124,  422, 854,  484, 794,  424, 852,  432, 844,  428, 850,  424, 852,  430, 846,  426, 850,  422, 2132,  426, 2130,  428, 2126,  430, 2124,  422, 2132,  426, 2130,  428, 2126,  430, 2124,  434, 2122,  426, 2130,  428, 2126,  430, 2124,  434, 2122,  424, 852,  432, 844,  428, 850,  422, 854,  430, 846,  426, 852,  432, 844,  428, 848,  424, 2130,  428, 848,  424, 2132,  426, 852,  432, 2122,  424, 852,  432, 846,  428, 850,  424, 854,  430, 846,  426, 2128,  430, 2126,  432, 846,  428};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0x99, 0x06, 0xE0, 0x00, 0xFF, 0x1F, 0xA0, 0x82, 0x01};

Timestamp : 000283.833
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF5AA4B (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 25C
uint16_t rawData[67] = {6388, 3194,  430, 848,  426, 852,  432, 2122,  424, 2130,  428, 850,  424, 2132,  426, 850,  434, 2122,  424, 2130,  426, 850,  424, 2132,  426, 852,  422, 2132,  424, 2130,  428, 2128,  430, 2124,  422, 854,  430, 2126,  434, 844,  428, 2126,  432, 846,  426, 2128,  430, 846,  426, 2130,  428, 2126,  432, 2122,  424, 854,  432, 2124,  424, 854,  430, 846,  426, 2130,  428, 848,  424};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0xAA, 0x4B};

Regarding iFeel, the temp reported was initially 20 and that is what matched the screen on the remote.
Then, I was doing few more tests in another room where the temperature was different, perhaps I missed the current reading.
I've verified the readings now for iFeel and they all match what's on the screen of the remote.

I can compile Tasmota with that version of the lib and test a bit more if you like?

@mateuszdrab
Copy link
Author

Just built Tasmota and I can confirm it works fine there as well, codes are being decoded correctly and Home Assistant is aware of the updates from the remote (I'm using the Tasmota-IRHVAC component)

mbronk added a commit to mbronk/IRremoteESP8266 that referenced this issue Aug 31, 2024
From captures in issue crankyoldgit#2133 (confirmed valid by the OP)

Signed-off-by: Mateusz Bronk <[email protected]>
@mbronk
Copy link
Contributor

mbronk commented Aug 31, 2024

@mateuszdrab Glad it worked for you 🥳 , thank you for confirming!

  1. If you have a spare few minutes, would you be able to capture a few more snapshots, changing other knobs and report if everything is still A-OK?

  2. While the original issue was for decode-side only, can you confirm if the IR code transmit works as well and the HVAC reacts as expected?

@crankyoldgit
Copy link
Owner

I'm glad it appears to be working. I was a little worried as I never tested non-byte alligned sizes for the array based protocols.
Can someone please check if the sending of the 90 bits works as expected?

I'll try to find some time to review the code. (Sorry, I've been super busy with real-life stuff for the last couple of years)

@mbronk
Copy link
Contributor

mbronk commented Aug 31, 2024

Can someone please check if the sending of the 90 bits works as expected?

Note though that as far as I can tell, my changes do not affect the send path. I was mostly looking to confirm if I didn't accidentally miss anything, but AFAIK the internal state structure is still very much byte-aligned, so would send as full 12 bytes (=96 bit).

  • It would take a bigger refactor (ex. pair the structures with a counter w/ their true bitwise sizes and a new flavor of
    void IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace,
    const uint16_t onemark, const uint32_t onespace,
    const uint16_t zeromark, const uint32_t zerospace,
    const uint16_t footermark, const uint32_t gap,
    const uint8_t *dataptr, const uint16_t nbytes,
    const uint16_t frequency, const bool MSBfirst,
    const uint16_t repeat, const uint8_t dutycycle) {
    ) to send bit sequences having len > 64 && len % 8 != 0...
  • IMHO it's a valid change to complement the decode, but if(❓) sending longer codes works... I wonder if there's much value (other than semantical correctness) in making such a change for symmetry (if it ain't broke... 😉)

@mateuszdrab
Copy link
Author

@mateuszdrab Glad it worked for you 🥳 , thank you for confirming!

  1. If you have a spare few minutes, would you be able to capture a few more snapshots, changing other knobs and report if everything is still A-OK?

  2. While the original issue was for decode-side only, can you confirm if the IR code transmit works as well and the HVAC reacts as expected?

Sure, I can capture some more commands from the remote and feed it back to you or put them in the E2E tests.

As we speak about more captures, here are a few more (fan speeds this time).

None of the options for supported_fan_speeds in Tasmota-IRHVAC match the middle fan speed.

The IRrecvDumpV2 dump shows fan speed is correctly decoded as auto, min, med, max.

Timestamp : 000011.337
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF580F205E000BF00A06601 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 2 (Med), Temp: 14C, Sensor Temp: 19C, Max: Off, IFeel: On, Night: Off
uint16_t rawData[183] = {6388, 3196,  432, 844,  452, 824,  428, 2126,  424, 2130,  452, 824,  462, 2092,  458, 820,  456, 2100,  462, 2092,  458, 818,  424, 2132,  462, 814,  460, 2094,  456, 2098,  464, 2090,  460, 2096,  454, 822,  430, 846,  462, 816,  426, 850,  458, 820,  456, 822,  432, 846,  428, 2126,  424, 852,  456, 2100,  462, 816,  426, 850,  458, 2096,  454, 2100,  428, 2126,  424, 2132,  464, 2092,  458, 818,  424, 2130,  430, 846,  460, 816,  426, 852,  424, 852,  434, 844,  454, 824,  462, 814,  426, 850,  458, 820,  456, 822,  454, 2102,  428, 2128,  456, 2100,  430, 848,  428, 850,  424, 852,  456, 822,  432, 846,  462, 814,  428, 848,  460, 818,  458, 2098,  464, 2092,  458, 2096,  454, 2100,  428, 2126,  424, 2132,  464, 814,  462, 2092,  424, 852,  456, 822,  454, 824,  430, 848,  428, 850,  424, 852,  456, 822,  454, 824,  430, 848,  460, 818,  424, 852,  422, 854,  432, 846,  430, 2126,  424, 852,  456, 2098,  464, 814,  428, 2126,  424, 2132,  430, 846,  428, 848,  426, 2130,  432, 2124,  428, 848,  426, 2130,  454, 822,  452};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0xF2, 0x05, 0xE0, 0x00, 0xBF, 0x00, 0xA0, 0x66, 0x01};


Timestamp : 000016.748
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF580EA05E000BF00A04601 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 1 (Min), Temp: 14C, Sensor Temp: 19C, Max: Off, IFeel: On, Night: Off
uint16_t rawData[183] = {6388, 3194,  422, 854,  432, 844,  430, 2124,  426, 2130,  454, 822,  430, 2124,  426, 852,  424, 2130,  432, 2124,  426, 850,  424, 2132,  430, 846,  430, 2126,  426, 2130,  432, 2124,  428, 2128,  456, 822,  432, 844,  462, 814,  428, 848,  426, 852,  424, 854,  432, 844,  430, 2126,  426, 852,  424, 2132,  430, 846,  428, 2128,  422, 854,  454, 2102,  426, 2128,  424, 2132,  430, 2126,  426, 852,  424, 2132,  430, 848,  462, 816,  426, 852,  424, 854,  432, 846,  430, 848,  428, 850,  426, 852,  422, 854,  432, 846,  430, 2124,  426, 2130,  436, 2118,  428, 850,  426, 852,  456, 822,  432, 846,  430, 848,  428, 850,  424, 852,  422, 854,  432, 2124,  426, 2128,  424, 2132,  430, 2124,  426, 2130,  432, 2124,  428, 850,  424, 2130,  432, 846,  428, 848,  426, 850,  424, 852,  424, 854,  432, 846,  430, 848,  428, 850,  426, 852,  434, 844,  432, 846,  430, 848,  428, 850,  458, 2098,  452, 824,  428, 2126,  424, 852,  424, 2132,  462, 2092,  426, 852,  424, 854,  432, 846,  430, 2126,  426, 852,  424, 2132,  430, 848,  426};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0xEA, 0x05, 0xE0, 0x00, 0xBF, 0x00, 0xA0, 0x46, 0x01};


Timestamp : 000020.589
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF580E205E000BF00A02601 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 0 (Auto), Temp: 14C, Sensor Temp: 19C, Max: Off, IFeel: On, Night: Off
uint16_t rawData[183] = {6388, 3194,  456, 820,  432, 846,  430, 2126,  426, 2130,  454, 824,  430, 2126,  424, 852,  422, 2132,  430, 2124,  426, 852,  422, 2132,  430, 848,  426, 2128,  456, 2098,  430, 2126,  426, 2130,  432, 846,  430, 846,  428, 848,  426, 852,  424, 854,  454, 822,  430, 846,  428, 2128,  424, 854,  432, 2122,  428, 850,  426, 852,  424, 854,  454, 2102,  428, 2126,  424, 2132,  462, 2092,  426, 850,  424, 2130,  464, 814,  428, 850,  424, 852,  424, 852,  432, 844,  430, 848,  428, 850,  426, 852,  456, 822,  432, 844,  430, 2124,  426, 2130,  432, 2122,  428, 850,  426, 852,  456, 820,  432, 844,  462, 814,  428, 850,  426, 852,  424, 854,  432, 2122,  428, 2126,  424, 2132,  430, 2124,  426, 2130,  454, 2100,  428, 850,  426, 2130,  454, 824,  430, 848,  428, 850,  426, 852,  424, 852,  432, 844,  430, 846,  428, 848,  426, 852,  424, 852,  432, 844,  464, 814,  428, 850,  426, 2130,  454, 822,  430, 2126,  426, 852,  424, 2132,  430, 2126,  424, 852,  424, 852,  454, 2100,  428, 850,  424, 852,  424, 2130,  462, 814,  428};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0xE2, 0x05, 0xE0, 0x00, 0xBF, 0x00, 0xA0, 0x26, 0x01};


Timestamp : 000023.186
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF580FA05E000BF00A08601 (90 Bits)
Mesg Desc.: Model: 1 (WREM2), Power: On, Mode: 0 (Cool), Fan: 3 (Max), Temp: 14C, Sensor Temp: 19C, Max: Off, IFeel: On, Night: Off
uint16_t rawData[183] = {6388, 3194,  422, 854,  432, 846,  430, 2126,  424, 2130,  432, 846,  462, 2094,  424, 852,  434, 2122,  430, 2126,  424, 852,  434, 2120,  428, 848,  426, 2128,  434, 2122,  428, 2126,  424, 2130,  430, 846,  430, 848,  428, 850,  424, 852,  434, 844,  454, 824,  430, 848,  426, 2128,  434, 844,  454, 2102,  426, 850,  424, 2130,  430, 2124,  460, 2094,  434, 2120,  430, 2126,  424, 2130,  452, 824,  462, 2094,  424, 852,  434, 844,  430, 846,  428, 848,  426, 850,  424, 852,  456, 822,  432, 846,  430, 848,  428, 850,  424, 2130,  432, 2124,  426, 2128,  434, 844,  452, 824,  428, 848,  426, 850,  424, 852,  454, 822,  430, 846,  428, 848,  428, 2128,  454, 2100,  428, 2126,  426, 2130,  432, 2124,  426, 2128,  456, 822,  432, 2124,  428, 850,  424, 852,  434, 842,  432, 846,  430, 848,  460, 816,  424, 852,  434, 842,  454, 824,  430, 848,  426, 850,  424, 852,  434, 842,  432, 2124,  426, 850,  424, 2130,  452, 824,  430, 2126,  458, 2096,  432, 846,  430, 848,  428, 850,  424, 852,  456, 2100,  428, 2126,  424, 852,  434};  // ARGO
uint8_t state[12] = {0xAC, 0xF5, 0x80, 0xFA, 0x05, 0xE0, 0x00, 0xBF, 0x00, 0xA0, 0x86, 0x01};

Tasmota returns auto, min, med-high, and max with med-high being a problem as it does not match any possible choices for supported fan speeds in Tasmota-IRHVAC. I thought it was Tasmota's fault but the string comes from this library though.

Do you think it's a mapping issue or should med-high be supported in upstream code?

Another slight issue, sending IRHVAC {"Vendor":"ARGO","Model":"WREM2","Command":"IFeel Report","SensorTemp":21} from Tasmota turns off the unit. Sending as WREM3 works, but I am not sure if the unit acknowledges it since those are silent messages anyway. Considering my unit is temperamental even with its own remote, I can't 100% confirm anything but will know since without iFeel the compressor never runs continuously.

@mateuszdrab
Copy link
Author

Well, I added support for med-high in my local copy of Tasmota-IRHVAC and it works now...

Can polish it up later and build on top of hristo-atanasov/Tasmota-IRHVAC#154 to make it show as Low, Medium, High nicely in the UI with proper icons and translations.

@mbronk
Copy link
Contributor

mbronk commented Aug 31, 2024

Another slight issue, sending IRHVAC {"Vendor":"ARGO","Model":"WREM2","Command":"IFeel Report","SensorTemp":21} from Tasmota turns off the unit.

Looking at the code... it's quite possible (and would likely be a separate issue if confirmed).

  • See, if you're going through the generic A/C interface, you're likely hitting this code:

    IRremoteESP8266/src/IRac.cpp

    Lines 3091 to 3094 in 850a45f

    IRArgoAC ac(_pin, _inverted, _modulation);
    argo(&ac, send.power, send.mode, degC, sensorTempC, send.fanspeed,
    send.swingv, send.iFeel, send.turbo, send.sleep);
    OUTPUT_DECODE_RESULTS_FOR_UT(ac);

    which does not understand the "Command":"IFeel Report" part and probably sends out a canned control command using all-defaults.
  • I'm actually partially to blame for this one 😁 as when I was adding support for iFeel in WREM3, I was pretty adamanant on trying to not affect any legacy use case, so kept WREM2 mostly as-is. Looks like it might benefit from a variant of sth like this though:

    IRremoteESP8266/src/IRac.cpp

    Lines 3067 to 3071 in 850a45f

    IRArgoAC_WREM3 ac(_pin, _inverted, _modulation);
    switch (send.command) {
    case stdAc::ac_command_t::kSensorTempReport:
    argoWrem3_iFeelReport(&ac, sensorTempC);
    break;
  • Before we go any further I suggest to peel the onion 🧅 first and confirm if the sendSensorTemp() even works for ARGO/WREM2.
    • Since you use the llb through MQTT/Tasmota and the generic IRac interface, there are quite a few oher things that could have gone bad between the layers (my notes above are NOT result of any code analysis, rather an echo from the past). It would be ideal to repro using raw IRremoteESP8266 first...
    • For example, would you be able to run a low-level example code (ex. TurnOnArgoAc.ino), issuing only a single command ac.sendSensorTemp(...) and report if the unit seems to react to it?

Separately: Aside fan speed and iFeel temp,do other commands you send to the device seem to work?

@mateuszdrab
Copy link
Author

mateuszdrab commented Aug 31, 2024

I think that's the case
I remember the other day I was scanning through the code and saw something point me to think this is the path the code takes unless WREM3 is involved which is why I'm sending my temp reports as WREM3. Can't find that code now, I have terrible memory.

Whether they work, I don't know for sure but it looks like the unit is working despite removing the remote out of the room and feeding it a temperature from another thermometer.

P.S
There's a guy nearby on Facebook Market selling what seems to be Argo Utilisse 13 with a snapped liquid pie which is a WREM3 model that I'm thinking to pick up for cheap.
He says he lost the remote so this library might be a life saver but the unit also has WiFi I think.
Which unit/model do you have?

@mbronk
Copy link
Contributor

mbronk commented Aug 31, 2024

Whether they work, I don't know for sure but it looks like the unit is working despite removing the remote out of the room and feeding it a temperature from another thermometer.

WREM2 and WREM3 iFeel IR commands are quite different (differ even in length), so I doubt they'll just work™️, but perhaps the vendor did include some forward-compat in their control unit...

  • BTW. my unit has a 'feature' that if it doesn't receive a iFeel report for a while it silently falls back to built-in sensor/disabling iFeel. I'd suggest testing w/ iFeel temp being WAY different from actual ambient temp and see if the unit reacts.

Which unit/model do you have?

I have the Ulisse 13 Wifi model (note there are also flavors w/o wifi) - see at the top of #1912 for photos of the unit and the remote.

  • It is basically all-controlled through wifi (I've written an openHAB addon for it, I believe there's also a HA version), except iFeel which has to be sent via infrared (for which I use Tasmota-IR and this lib). Works quote stable, but the wifi part has its quirks to set up properly.
  • As much as I have tested, IRremoteESP8266 can do everything the original remote can, so wifi-less operation is certainly possible.

@mateuszdrab
Copy link
Author

mateuszdrab commented Aug 31, 2024

Whether they work, I don't know for sure but it looks like the unit is working despite removing the remote out of the room and feeding it a temperature from another thermometer.

WREM2 and WREM3 iFeel IR commands are quite different (differ even in length), so I doubt they'll just work™️, but perhaps the vendor did include some forward-compat in their control unit...

  • BTW. my unit has a 'feature' that if it doesn't receive a iFeel report for a while it silently falls back to built-in sensor/disabling iFeel. I'd suggest testing w/ iFeel temp being WAY different from actual ambient temp and see if the unit reacts.

Which unit/model do you have?

I have the Ulisse 13 Wifi model (note there are also flavors w/o wifi) - see at the top of #1912 for photos of the unit and the remote.

  • It is basically all-controlled through wifi (I've written an openHAB addon for it, I believe there's also a HA version), except iFeel which has to be sent via infrared (for which I use Tasmota-IR and this lib). Works quote stable, but the wifi part has its quirks to set up properly.
  • As much as I have tested, IRremoteESP8266 can do everything the original remote can, so wifi-less operation is certainly possible.

Yeah I think you're right. It's not working the same way as it was with the remote in the room.

Regarding fall back, I'm sure this is what happens, it does the same with iFeel off - runs compressor for a while and shuts off. That's probably because the temperature sensor is satisfied in the unit.

I'll compile the solution from above to send a fake iFeel message and see if it returns to operating as expected.

Unless I can recompile Tasmota with some quick fix/hardcode something to fix sending the WREM2 iFeel messages?

Edit: Might be able to add that in here?
https://github.com/arendst/Tasmota/blob/d1bd31b34166a35a6ed5940ff1587a6005e02f7d/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.cpp#L3062

@mbronk
Copy link
Contributor

mbronk commented Aug 31, 2024

Unless I can recompile Tasmota with some quick fix/hardcode something to fix sending the WREM2 iFeel messages?

Might be difficult. Tasmota uses IRac interface which you'd have to bypass/hard-wire completely to get to the code this way.
I'd still consider a one-off Arduino sketch the easiest. Your next best alternative would be just to hack/update the IRac.cpp itself to branch off send.command, probably sth similar to this:

IRArgoAC ac(_pin, _inverted, _modulation);  //line 3091
if (send.command == stdAc::ac_command_t::kSensorTempReport) {
  ac.sendSensorTemp(static_cast<uint8_t>(roundf(sensorTempC)));
} else {
  argo(&ac, send.power, send.mode, degC, sensorTempC, send.fanspeed,
  send.swingv, send.iFeel, send.turbo, send.sleep);
}

Then again, even if it works, it probably deserves its own issue (enhancement request), as it is quite distinct from the decode errors you've been seeing initially.

@mateuszdrab
Copy link
Author

mateuszdrab commented Aug 31, 2024

I did the below:

  • added argoWrem2_iFeelReport
void IRac::argoWrem2_iFeelReport(IRArgoAC *ac, const float sensorTemp)
{
  ac->begin();
  ac->setMessageType(argoIrMessageType_t::IFEEL_TEMP_REPORT);
  ac->setSensorTemp(static_cast<uint8_t>(roundf(sensorTemp)));
  ac->send();
}

Added a switch case for this inAC under sendARGO

  case ARGO:
  {
    if (send.model == argo_ac_remote_model_t::SAC_WREM3)
    {
      IRArgoAC_WREM3 ac(_pin, _inverted, _modulation);
      switch (send.command)
      {
      case stdAc::ac_command_t::kSensorTempReport:
        argoWrem3_iFeelReport(&ac, sensorTempC);
        break;
      case stdAc::ac_command_t::kConfigCommand:
        /// @warning: this is ABUSING current **common** parameters:
        ///           @c clock and @c sleep as config key and value
        ///           Hence, value pre-validation is performed (safe-mode)
        ///           to avoid accidental device misconfiguration
        argoWrem3_ConfigSet(&ac, send.clock, send.sleep, true);
        break;
      case stdAc::ac_command_t::kTimerCommand:
        argoWrem3_SetTimer(&ac, send.power, send.clock, send.sleep);
        break;
      case stdAc::ac_command_t::kControlCommand:
      default:
        argoWrem3_ACCommand(&ac, send.power, send.mode, degC, sensorTempC,
                            send.fanspeed, send.swingv, send.iFeel, send.quiet, send.econo,
                            send.turbo, send.filter, send.light);
        break;
      }
      OUTPUT_DECODE_RESULTS_FOR_UT(ac);
    }
    else
    {
      IRArgoAC ac(_pin, _inverted, _modulation);
      switch (send.command)
      {
      case stdAc::ac_command_t::kSensorTempReport:
        argoWrem2_iFeelReport(&ac, sensorTempC);
        break;
      case stdAc::ac_command_t::kControlCommand:
      default:
        argo(&ac, send.power, send.mode, degC, sensorTempC, send.fanspeed,
             send.swingv, send.iFeel, send.turbo, send.sleep);
        break;
      }
      OUTPUT_DECODE_RESULTS_FOR_UT(ac);
    }
  }

Seems to work, different message is sent; however, it is not decoded by my other receiver. Looks a bit too long.

# Transmitted
Timestamp : 000179.610
Library   : v2.8.6

Protocol  : UNKNOWN
Code      : 0xE8CF0C18 (33 Bits)
uint16_t rawData[65] = {6430, 3290,  446, 870,  460, 842,  452, 2158,  458, 2152,  450, 860,  448, 2160,  476, 832,  442, 2174,  452, 2154,  450, 858,  438, 2174,  450, 858,  448, 2162,  454, 2156,  460, 2150,  452, 2158,  468, 844,  452, 856,  450, 858,  460, 2158,  446, 864,  454, 852,  466, 850,  446, 2162,  452, 860,  502, 806,  456, 852,  444, 866,  462, 864,  444, 852,  444, 862,  444};  // UNKNOWN E8CF0C18

# Real remote
Timestamp : 000219.730
Library   : v2.8.6

Protocol  : ARGO
Code      : 0xACF59A3B (32 Bits)
Mesg Desc.: Model: 1 (WREM2), Sensor Temp: 23C
uint16_t rawData[67] = {6418, 3166,  426, 850,  456, 820,  432, 2122,  426, 2130,  452, 824,  460, 2096,  432, 846,  428, 2126,  434, 2122,  426, 850,  424, 2132,  462, 816,  426, 2130,  430, 2124,  456, 2098,  428, 2126,  454, 822,  452, 2102,  424, 854,  454, 2100,  458, 2098,  450, 826,  460, 818,  456, 2098,  428, 2128,  432, 2124,  458, 818,  422, 2132,  460, 2096,  432, 2124,  458, 820,  432, 844,  452};  // ARGO
uint8_t state[4] = {0xAC, 0xF5, 0x9A, 0x3B};

Will use the sketch now to see if it's the same.

Nevermind, it works and decodes now.
Let's test it and if it works perhaps I can PR the changes

@mateuszdrab
Copy link
Author

Quick update

I've ran the IRsend sketch with rawdata of the iFeel message for 24 hours and the AC has been running fine so I switched to Tasmota with my modified code to send the iFeel WREM2 reports and it's been working fine.

I did make an adjustment to the transmitter circuit so perhaps that's why, I suspect the previous setup might not have been transmitting strong enough.

Either way, once the fix is merged I'll PR my modification to allow sending WREM2 iFeel updates.

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

3 participants