New OH3 Binding - Midea Air Conditioning (LAN)

Same problem here, two devices, obtaining key and token from MSSmartHome. One has firmware v1.0.0 and the other one v.3.0.8. Both claim latest firmware is installed.

Yeah I can confirm that when manually getting the Token and Key, I get a different result compared to when letting the binding getting the Key and Token by itself. Im my case, it is grabbed from the MSmartHome enviroment. The app does give a notification that the account is in use by another platform (even though it is closed
) when entering the credentials into the binding.
The manually grabbed Key & Token work while the binding Key & Token don’t seem to work.

Also started noticing some errors coming through lately. I have two systems connected which seem to work flawelessly. However when going into thing configuration I see the AC generating quite some COMMS errors.
every few minutes it’ll go offline due to a broken pipe error. The weird thing is that it is only for one of the two AC’s. It does still respond to the commands though.

2022-10-01 23:48:28.434 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed) to ONLINE
2022-10-01 23:50:35.569 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Device not responding with its status.
2022-10-01 23:50:55.571 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Device not responding with its status. to UNKNOWN
2022-10-01 23:50:55.827 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from UNKNOWN to OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed)
2022-10-01 23:51:05.828 [INFO ] [ler.MideaACHandler$ConnectionManager] - Connected to mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b at 192.168.1.116
2022-10-01 23:51:05.831 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed) to ONLINE
2022-10-01 23:53:13.188 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Device not responding with its status.
2022-10-01 23:53:33.191 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Device not responding with its status. to UNKNOWN
2022-10-01 23:53:33.443 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from UNKNOWN to OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed)
2022-10-01 23:53:43.444 [INFO ] [ler.MideaACHandler$ConnectionManager] - Connected to mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b at 192.168.1.116
2022-10-01 23:53:43.447 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed) to ONLINE
2022-10-01 23:55:50.858 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Device not responding with its status.
2022-10-01 23:56:10.860 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Device not responding with its status. to UNKNOWN
2022-10-01 23:56:11.112 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from UNKNOWN to OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed)
2022-10-01 23:56:21.114 [INFO ] [ler.MideaACHandler$ConnectionManager] - Connected to mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b at 192.168.1.116
2022-10-01 23:56:21.116 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘mideaac:ac:mideaac__192_168_1_116__14293651226835__net_ac_398b’ changed from OFFLINE (COMMUNICATION_ERROR): Broken pipe (Write failed) to ONLINE

For folks that have multiple units regardless of V2 or V3 or the installed firmware revision could you try staggering the polling time (default is 10 seconds) as well as the Timeout setting (default is 4 seconds) I was able to repo the broken pipe error randomly on 2 different things sporadically and after I increased the timeout from 4 seconds to 6 seconds on one thing and on the other from thing from 4 seconds to 7 seconds I have not seen the broken pipe error since changing it several weeks ago.
FYI
I have 3 devices in my environment 2 A/C’s that have version 2 USB dongles and 1 A/C that is has a version 3 USB dongle and all seem to remain functional even with the errors but obviously did not update item values or return changes when it is in connection timeout otherwise, they all play nicely. Now since making that tweak even my noise in the logs has also subsided.
Best Regards,

Hi Oldman, I am trying to summerize my situation. I had 2 major problem with the current version.

(sorry for my English, i hope it will be clear)

  1. I had never been able to connect to more then one device at the same time. I built my own devel envirionment to start debuging this issue and found a serious problem in the code. There is a function - getEncKey - in the (static )Security class which when called always overwritten its own (static) SecretKeySpec variable. So once another devices was initialized this key got a new value and the previosly initialized device was no longer able to use this variable. I re wrote the code without these static variables and classes. This finally helped.
  2. My second problem was that it seemed my devices sent a wrong response in every hour. This resulted false values fom temperature sensors. Since the code always expected for a 25 bytes length value, I decided to throw an error if it was not.

I have 7 (!) v3 devices with 3 different firmware. All work fine. No longer disconnections, no false data.

Regards, Zoltan

This widget made based on a Daikin widget and optimized for v3

uid: midea2
tags: []
props:
  parameters:
    - description: Location (room) or device name
      label: Title
      name: title
      required: false
      type: TEXT
    - context: item
      description: Item for power channel
      label: Power
      name: itemPower
      required: false
      type: TEXT
    - context: item
      description: Item for analyze button
      label: Analyze
      name: itemAnalyze
      required: false
      type: TEXT
      multiple: true
    - context: item
      description: Item for indoor temperature channel
      label: Indoor temperature
      name: itemIndoorTemp
      required: false
      type: TEXT
    - context: item
      description: Item for outdoor temperature channel
      label: Outdoor temperature
      name: itemOutdoorTemp
      required: false
      type: TEXT
    - context: item
      description: Item for target temperature channel
      label: Target temperature
      name: itemTargetTemp
      required: false
      type: TEXT
    - description: Set minimum target temperature (default = 0)
      label: Minimum Temperature
      name: MinimumTemperature
      required: false
      type: INTEGER
    - description: Set maximum target temperature (default = 100)
      label: Maximum Temperature
      name: MaximumTemperature
      required: false
      type: INTEGER
    - description: Set Target Temperature Stepsize (default = 1)
      label: Target Temperature Stepsize
      name: TemperatureStepsize
      required: false
      type: DECIMAL
    - context: item
      description: Item for operation mode channel
      label: Operation mode
      name: itemMode
      required: false
      type: TEXT
    - context: item
      description: Item for fan speed channel
      label: Fan speed
      name: itemFanSpeed
      required: false
      type: TEXT
    - context: item
      description: Item for swing channel
      label: Swing mode
      name: itemSwing
      required: false
      type: TEXT
    - description: Hide timer button and options
      label: Hide Timer Function
      name: hideTimerFunction
      required: false
      type: BOOLEAN
    - description: Hide chart button
      label: Hide chart Function
      name: hideChartFunction
      required: false
      type: BOOLEAN
    - context: item
      description: Switch item for timer
      label: Switch Timer ON/OFF
      name: itemTimerSwitch
      required: false
      type: TEXT
      advanced: true
    - context: item
      description: Item for timer duration
      label: Timer Duration
      name: itemTimerDuration
      required: false
      type: TEXT
      advanced: true
    - description: Timer minimum duration
      label: Timer minimum
      name: TimerMinimum
      required: false
      type: DECIMAL
      advanced: true
    - description: Timer maximum duration
      label: Timer maximum
      name: TimerMaximum
      required: false
      type: DECIMAL
      advanced: true
    - description: Timer step
      label: Timer step
      name: TimerStep
      required: false
      type: DECIMAL
      advanced: true
    - description: Timer scale steps
      label: Timer scale steps
      name: TimerScaleSteps
      required: false
      type: DECIMAL
      advanced: true
    - description: Timer scale sub steps
      label: Timer scale sub steps
      name: TimerScaleSubSteps
      required: false
      type: DECIMAL
      advanced: true
    - description: Hide solarplant power
      label: Hide Solarplant AC power measurement
      name: hideSolarplant
      required: false
      type: BOOLEAN
    - context: item
      description: AC Power item for solarplant
      label: Solarplant AC Power
      name: itemSolarplantACPower
      required: false
      type: TEXT
      advanced: true
  parameterGroups: []
timestamp: Sep 27, 2022, 5:45:49 PM
component: f7-card
config:
  class:
    - no-padding
  outline: true
  title: =props.title
slots:
  default:
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom
      slots:
        default:
          - component: f7-col
            config:
              large: "33"
              width: "50"
            slots:
              default:
                - component: f7-segmented
                  config:
                    class:
                      - segmented-strong
                    style:
                      --f7-button-border-radius: 4px
                      --f7-button-fill-hover-bg-color: var(--f7-theme-color)
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-segmented-strong-between-buttons: 5px
                      --f7-segmented-strong-bg-color: transparent
                      --f7-segmented-strong-button-font-weight: 300
                      --f7-segmented-strong-button-hover-bg-color: rgba(var(--f7-theme-color-rgb), 0.07)
                      --f7-segmented-strong-padding: 0px
                  slots:
                    default:
                      - component: oh-button
                        config:
                          action: toggle
                          actionCommand: ON
                          actionCommandAlt: OFF
                          actionItem: =props.itemPower
                          class:
                            - padding-top-half
                            - display-flex
                            - flex-direction-column
                          fill: "=(items[props.itemPower].state === 'ON') ? true : false"
                          icon-f7: power
                          iconSize: 15
                          outline: true
                          style:
                            --f7-button-border-color: var(--f7-card-outline-border-color)
                            --f7-button-border-width: 1px
                            font-size: 8px
                            height: auto
                          text: BE/KI
                      - component: oh-button
                        config:
                          action: toggle
                          actionCommand: ON
                          actionCommandAlt: OFF
                          actionItem: =props.itemTimerSwitch
                          class:
                            - display-flex
                            - flex-direction-column
                            - padding-top-half
                          fill: "=(items.ac_timer_on_off.state === 'ON') ? true : false"
                          iconF7: timer
                          iconSize: 15px
                          outline: false
                          style:
                            --f7-button-border-color: var(--f7-card-outline-border-color)
                            --f7-button-border-width: 1px
                            font-size: 8px
                            height: auto
                          text: TIMER
                          visible: =!props.hideTimerFunction
                      - component: oh-button
                        config:
                          action: analyzer
                          actionAnalyzerItems: =props.itemAnalyze
                          class:
                            - display-flex
                            - flex-direction-column
                            - padding-top-half
                          iconF7: chart_bar_alt_fill
                          iconSize: 15px
                          outline: false
                          style:
                            --f7-button-border-color: var(--f7-card-outline-border-color)
                            --f7-button-border-width: 1px
                            font-size: 8px
                            height: auto
                          text: GRAF
                          visible: =!props.hideChartFunction
          - component: f7-col
            config:
              width: "33"
            slots:
              default:
                - component: f7-row
                  config:
                    class:
                      - padding-right-half
                  slots:
                    default:
                      - component: f7-col
                        config:
                          width: "25"
                        slots:
                          default:
                            - component: f7-icon
                              config:
                                class:
                                  - float-right
                                color: var(--f7-theme-color)
                                f7: house
                                size: 15
                      - component: f7-col
                        config:
                          width: "75"
                        slots:
                          default:
                            - component: Label
                              config:
                                class:
                                  - float-right
                                style:
                                  font-size: 12px
                                  overflow: hidden
                                  text-overflow: elipsis
                                  white-space: nowrap
                                text: =items[props.itemIndoorTemp].state
                - component: f7-row
                  config:
                    class:
                      - padding-right-half
                  slots:
                    default:
                      - component: f7-col
                        config:
                          width: "25"
                        slots:
                          default:
                            - component: f7-icon
                              config:
                                class:
                                  - float-right
                                color: var(--f7-theme-color)
                                f7: tree
                                size: 15
                      - component: f7-col
                        config:
                          width: "75"
                        slots:
                          default:
                            - component: Label
                              config:
                                class:
                                  - float-right
                                style:
                                  font-size: 12px
                                  overflow: hidden
                                  text-overflow: elipsis
                                  white-space: nowrap
                                text: =items[props.itemOutdoorTemp].state
                - component: f7-row
                  config:
                    class:
                      - padding-right-half
                    visible: =!props.hideSolarplant
                  slots:
                    default:
                      - component: f7-col
                        config:
                          width: "25"
                        slots:
                          default:
                            - component: f7-icon
                              config:
                                class:
                                  - float-right
                                color: var(--f7-theme-color)
                                f7: sun_max
                                size: 15
                      - component: f7-col
                        config:
                          width: "75"
                        slots:
                          default:
                            - component: Label
                              config:
                                class:
                                  - float-right
                                style:
                                  font-size: 12px
                                  overflow: hidden
                                  text-overflow: elipsis
                                  white-space: nowrap
                                text: =items[props.itemSolarplantACPower].state
    - component: f7-row
      config:
        class:
          - justify-content-center
      slots:
        default:
          - component: oh-knob
            config:
              item: =props.itemTargetTemp
              max: =props.MaximumTemperature
              min: =props.MinimumTemperature
              primaryColor: "=(items[props.itemPower].state === 'ON') ? '#e64a19' : 'grey'"
              responsive: false
              secondaryColor: var(--f7-card-outline-border-color)
              size: 150
              stepSize: =props.TemperatureStepsize
              strokeWidth: "12"
    - component: f7-segmented
      config:
        class:
          - margin-left-half
          - margin-right-half
          - margin-top
          - margin-bottom-half
        style:
          --f7-button-border-radius: 4px
          --f7-button-font-size: 8px
          --f7-button-font-weight: 300
          --f7-button-outline-border-width: 1px
          --f7-button-padding-horizontal: 0px
          --f7-button-padding-vertical: 0px
          --f7-button-text-color: "=themeOptions.dark === 'light' ? 'black' : 'white'"
        visible: true
      slots:
        default:
          - component: oh-repeater
            config:
              for: modeRow
              fragment: true
              in:
                - command: AUTO
                  icon: arrow_2_squarepath
                  text: AUTO
                - command: COOL
                  icon: thermometer_snowflake
                  text: HưTÉS
                - command: HEAT
                  icon: thermometer_sun
                  text: FưTÉS
                - command: DRY
                  icon: drop_fill
                  text: SZÁRÍT
                - command: FAN_ONLY
                  icon: wind
                  text: VENTI
              sourceType: array
            slots:
              default:
                - component: oh-button
                  config:
                    action: command
                    actionCommand: =loop.modeRow.command
                    actionItem: =props.itemMode
                    class:
                      - display-flex
                      - flex-direction-column
                      - padding-top-half
                    fill: "=(items[props.itemMode].state === loop.modeRow.command) ? true : false"
                    iconF7: =loop.modeRow.icon
                    iconSize: 15px
                    outline: true
                    style:
                      --f7-button-border-color: var(--f7-card-outline-border-color)
                      height: auto
                    text: =loop.modeRow.text
          - component: oh-button
            config:
              action: variable
              actionVariable: options
              actionVariableValue: "=vars.options || vars.options === undefined ? false : true"
              class:
                - display-flex
                - flex-direction-column
              fill: "=vars.options || vars.options === undefined ? false : true"
              iconF7: ellipsis_vertical
              iconSize: 15px
              outline: true
              style:
                --f7-button-border-color: var(--f7-card-outline-border-color)
                height: auto
                width: 50%
    - component: f7-segmented
      config:
        class:
          - margin-left-half
          - margin-right-half
          - margin-top
          - margin-bottom-half
        style:
          --f7-button-border-radius: 4px
          --f7-button-font-size: 8px
          --f7-button-font-weight: 300
          --f7-button-outline-border-width: 1px
          --f7-button-padding-horizontal: 0px
          --f7-button-padding-vertical: 0px
          --f7-button-text-color: "=themeOptions.dark === 'light' ? 'black' : 'white'"
        visible: =vars.options === false
      slots:
        default:
          - component: oh-repeater
            config:
              for: optionsRow
              fragment: true
              in:
                - icon: wind ellipsis_vertical
                  option: fanspeed
                - icon: move ellipsis_vertical
                  option: swing
              sourceType: array
            slots:
              default:
                - component: oh-button
                  config:
                    action: variable
                    actionVariable: =loop.optionsRow.option
                    actionVariableValue: "=vars[loop.optionsRow.option] || vars[loop.optionsRow.option] === undefined ? false : true"
                    class:
                      - display-flex
                      - flex-direction-column
                    fill: "=vars[loop.optionsRow.option] || vars[loop.optionsRow.option] === undefined ? false : true"
                    iconF7: =loop.optionsRow.icon
                    iconSize: 15px
                    outline: true
                    style:
                      --f7-button-border-color: var(--f7-card-outline-border-color)
                      height: auto
          - component: oh-button
            config:
              action: variable
              actionVariable: timer_menu
              actionVariableValue: "=vars.timer_menu || vars.timer_menu === undefined ? false : true"
              fill: "=vars.timer_menu || vars.timer_menu === undefined ? false : true"
              iconF7: timer ellipsis_vertical
              iconSize: 15px
              outline: true
              style:
                --f7-button-border-color: var(--f7-card-outline-border-color)
              visible: =!props.hideTimerFunction
    - component: f7-segmented
      config:
        class:
          - margin-left-half
          - margin-right-half
          - margin-top
          - margin-bottom-half
        style:
          --f7-button-border-radius: 4px
          --f7-button-font-weight: 300
          --f7-button-outline-border-width: 1px
          --f7-button-padding-horizontal: 0px
          --f7-button-padding-vertical: 0px
          --f7-button-text-color: "=themeOptions.dark === 'light' ? 'black' : 'white'"
        visible: "=vars.fanspeed === false && vars.options === false ? true : false"
      slots:
        default:
          - component: oh-repeater
            config:
              for: fanspeedRow
              fragment: true
              in:
                - command: AUTO
                  icon: arrow_2_squarepath
                - command: LOW
                  text: Halk
                - command: MEDIUM
                  text: Közepes
                - command: HIGH
                  text: Max
              sourceType: array
            slots:
              default:
                - component: oh-button
                  config:
                    action: command
                    actionCommand: =loop.fanspeedRow.command
                    actionItem: =props.itemFanSpeed
                    class:
                      - display-flex
                      - flex-direction-column
                    fill: "=(items[props.itemFanSpeed].state === loop.fanspeedRow.command) ? true : false"
                    iconF7: =loop.fanspeedRow.icon
                    iconSize: 15px
                    outline: true
                    style:
                      --f7-button-border-color: var(--f7-card-outline-border-color)
                      height: auto
                    text: =loop.fanspeedRow.text
    - component: f7-segmented
      config:
        class:
          - margin-left-half
          - margin-right-half
          - margin-top
          - margin-bottom-half
        style:
          --f7-button-border-radius: 4px
          --f7-button-font-weight: 300
          --f7-button-outline-border-width: 1px
          --f7-button-padding-horizontal: 0px
          --f7-button-padding-vertical: 0px
          --f7-button-text-color: "=themeOptions.dark === 'light' ? 'black' : 'white'"
        visible: "=vars.swing === false && vars.options === false ? true : false"
      slots:
        default:
          - component: oh-repeater
            config:
              for: swingRow
              fragment: true
              in:
                - command: OFF
                  text: OFF
                - command: VERTICAL
                  icon: resize_v
                - command: HORIZONTAL
                  icon: resize_h
                - command: BOTH
                  icon: view_3d
              sourceType: array
            slots:
              default:
                - component: oh-button
                  config:
                    action: command
                    actionCommand: =loop.swingRow.command
                    actionItem: =props.itemSwing
                    class:
                      - display-flex
                      - flex-direction-column
                    fill: "=(items[props.itemSwing].state === loop.swingRow.command) ? true : false"
                    iconF7: =loop.swingRow.icon
                    iconSize: 15px
                    outline: true
                    style:
                      --f7-button-border-color: var(--f7-card-outline-border-color)
                      height: auto
                    text: =loop.swingRow.text
    - component: f7-row
      config:
        class:
          - margin-left-half
          - margin-right-half
          - margin-bottom-half
        visible: "=vars.timer_menu === false && vars.options === false && !props.hideTimerFunction === true ? true : false"
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-slider-card
                  config:
                    item: =props.itemTimerDuration
                    label: true
                    max: =props.TimerMaximum
                    min: =props.TimerMinimum
                    outline: true
                    scale: true
                    scaleSteps: =props.TimerScaleSteps
                    scaleSubSteps: =props.TimerScaleSubSteps
                    step: =props.TimerStep
                    unit: min

1 Like

Hi Zoltan,
Thank You for the explanation (it was very clear).
Yes, I can see the first condition you describe as a problem. I can also see why I never encountered it during my testing (as I only have 1 V3 version device all the rest are V2 devices) and @JacekDob would never have seen it either (he has no V3 devices all of his are V2 devices).
Perhaps you and @JacekDob could sync and created a merged version.
As for the second issue yes, I have also seen a few cases where it returned an unexpected length not as frequent as your seeing but I do see them occurring at random intervals. (Seems even original python code had same issue based on GitHub comments by the dev that wrote the solution in Python). His solution was to retain previous values and silently handle the error and then wait for next polling event to occur. I am sure there may be other ways retry logic perhaps.
Regards,
Justan Oldman

Has anyone communicated with the heat pump using this plug (Rotenso Aquami multisplit, but it’s identical to Midea)? When I search for devices using Autoscan, I find my device and I can add it, I download KEY and Token from NetHome Plus provider. Instance goes Online but immediately switches to Offline and reports “COMMUNICATION_ERROR. Device not responding with its status.”
Appliance type “C3” version 3. Communication via NetHome Plus works properly. My air conditioning communicates via this plug without problems. I use OH v3.3.0 and MideaAC LAN v3.3.0.202205311943.

Hi @zulus,
The current version of this binding is based on python script which sets a limitation of only supporting device that return a type of ac if your device is returning C3 as the type it will not work with this current version of the code base. You may be able to crack open the jar and add the correct byte value for C3 as a valid type to return but no one that has worked in this code had a heat pump to test the code with that kind of device.

Hi,
With the NetHome Plus and only one V3 device, it is not possible to get the right Token

I’ll always receive
Authentication reponse unexpected data length (13 instead of 72)!
Invalid Token. Correct Token in configuration
regards,
Walter

Is anyone also having problem with the outdoor temperature? Its always showing -25 C or 102.5 C?

@zdanhauser
I got the same issues running 2 V3 devices.
I would be verry happy, if you could explain to me, what exactly I have to change on my running binding.
Thanks in advance.

It is not uncommon at all that I receive this kind of messages in the log after sending some item changes:

13:06:25.304 [WARN ] [dler.MideaACHandler$ConnectionManager] - Error processing response: null
13:06:35.310 [WARN ] [ng.mideaac.internal.security.Security] - Not an 8370 message
13:07:37.707 [WARN ] [ng.mideaac.internal.security.Security] - Sign does not match

What do that mean?

Circumstances:

  • Mac OS X 10.13.6, Java 11.0.16, Karaf 4.3.7
  • 4 pieces os version 3 Midea Air Conditioners (Firmware: 150029092122 x 3 and 150029082115 x 1)
  • All four things are online.
  • Using @zdanhauser 's widget (Thanks a lot)

Issue:
Most of the times the Air Conditioner does not turn on or turn off, but the UI changes (“preticted to become” ?). Same with all the other channels. For example the indoorTemperature sometimes updated, but not stable at all. (Sometimes OH receives the old value back from the AC and chanhes back to UI. Sometimes not. Sometimes Indoortemperature of one of the ACs begins to send temperature data.

Possible other/related reason:
UI throws java.util.concurrent.TimeoutException every few seconds with a bunch of [org.eclipse.jetty.util.Scanner ] - scan accepted debug lines. Again and again.
See: Does this debug log entry look correct? (appears every few seconds) - #2 by borazslo

Hi there! Some months ago I looked through the code and found a lot of variables defined in the wrong place. Then I compiled my own plugin and sent the modified source and all my suggessions to Jacek. Mine works fine since then.

Is there a link to the PR for these modifications?

I’ve published @zdanhauser 's new code on github. (I know that it should be PR sometime.) (Tested on OH 3.4.0, with 4 pieces of MideaAC v3, firmware 150029092122 )

@SmartHomeFriend , @liko : Please try that out.

@Vanja_Vrsic: I have the some problem. It can be related to the frequent changing of data.length of the response.

Hi,

For me it always resets itself to default value (unkown mode, 16° target temp, etc) the original and zdanhauser version as well.
I use a Fisher AC, which is the same as Midea Oasis Plus, it is working with msmarthome app.

With JacekDob version:
2023-01-16 21:16:22.256 [WARN ] [ler.MideaACHandler$ConnectionManager] - Error processing response: null
2023-01-16 21:16:22.257 [WARN ] [ler.MideaACHandler$ConnectionManager] - Error processing response: null
2023-01-16 21:16:32.258 [WARN ] [g.mideaac.internal.security.Security] - Not an 8370 message
2023-01-16 21:16:32.286 [WARN ] [g.mideaac.internal.security.Security] - Not an 8370 message

With zdanhauser version:
2023-01-16 21:27:32.271 [ERROR] [ler.MideaACHandler$ConnectionManager] - Response data is 26 long instead of 25!
2023-01-16 21:27:42.412 [ERROR] [ler.MideaACHandler$ConnectionManager] - Response data is 26 long instead of 25!
2023-01-16 21:27:52.552 [ERROR] [ler.MideaACHandler$ConnectionManager] - Response data is 26 long instead of 25!

For humidifier I use midea-beautiful-air, I will try to use that with my AC. At least I can set target temp with that.

(btw lof of hungarian guys here :slight_smile:)

I’ve experinced this issue. With zdanhauser’s version usually it resets to default value after switching on / off, but not always. And I can change the tartget temp, etc. after these resets. It is the problem of the data processor script. That script demands data of length 25, but it is very common to receive other lengths. :frowning: zdanhauser’s version tries to process the too long/short messages as well (after the error message), but makes mistakes.

Please check (and show us) the detailed log with: log:set TRACE org.openhab.binding.mideaac

Sorry, I removed the binding, because I started to work with the same items but values come from python script.

It seems ok with midea-beautiful-air, just slow, because of this.

Thanks, it works for me bro! Did try the new version, the reported logs are changed.

Got the new version installed, and it can see and talk to the unit. But I can’t reliably control it. Pulling the logs shows “Response data is 26 long instead of 25!” Related log entries: 2023-02-05 11:36:52.390 [TRACE] [ler.MideaACHandler$ConnectionManager] - Perform - Pastebin.com