Samsung MIM-H03 Create new device type to show correct data?

What happens when you try to integrate the device?
Do you receive an error or is it unresponsive?

Hi, sorry for the late response. When I itegreate with smartthings, I don’t get any error per say, but the deivce doesn’t register as an aircon and I can’t control it.

When looking in home assistant, I get the attributes:

sensor.air_conditioner_air_quality
sensor.air_conditioner_dust_level
sensor.air_conditioner_fine_dust_level
sensor.air_conditioner_odor_sensor

All of these attributes come back with null values. The important entities (to control the on/off state, mode, temperature) aren’t part of the itegration with makes it unusable.

Like with the other poster, when I look in the smartthings console, I can see that the DTH is “placeholder”. Manually setting it to something else doesn’t help either.

The app on my phone can control everything and the integration wtih IFTTT can control most attributes so there must be an API that it can work with.

Is there an IDE or API somehwere where I can see all the data comming in and out of the device?

Yes also Apologies it has been quite a while since I had time to sit down and do things with automation. Covid had the opposite affect on my work.

@Mikhail_D_Souza I believe the local control I was receiving via curl will not assist with the “Smart things” integration itself unless a local control is written with home assistant.

I can also confirm all that I receive is the sensors mentioned above.

I will have some spare time later on today I will try play around with the states and what Smart Things Pushes over.

Would anyone know if there is any smart things documentation about the previously mentioned “Legacy Platform” so I can go through the Home Assistants Code and see if its going of DTH and not Capabilities.

Many thanks again all!

Have a good day

I would actually be quite happy with this local control, I have my home assistant instance running locally. Unfortunately, I’m unable to get the access code out of the device. I think the most recent firmware might have remove what would seem like a vulnerability (unless I was doing something wrong). The ancient version of SSL the communcation uses also makes that step complicated.

I currently have my home assistant talking to IFTTT, which then talks to Smart things and I can turn the aircon on and off. I can’t change the mode or temperature set point. This integration is slow AF.

Unfortunately any device in IDE with Placholder as the device type should not be changed. Placeholders are for the new schema and will not work with the old groovy device handlers that will eventually be phased out.

I see. Is there a new platform to develop DTHes? I feel like samsung may have given up on these devices but I’d be happy to look into it.

There is a platform, called edge, for developing the equivalent of new DTHs for zigbee devices, Z wave devices, and some LAN devices. Here’s the FAQ on that.

FAQ: I have no idea what Edge is. Is that a new developer tool? (2022)

However, unfortunately it’s not going to help with this specific device, which is called a “OCF “device. As discussed upthread, those work with a different type of integration and there’s not much you can do with those.

@nayelyz can say more.

1 Like

Oh yikes. That’s a bummer. That that mean those devices will stop working completely? Is there an way to get my hands on the access codes (Samsung AC - #111 by Milebe - Feature Requests - Home Assistant Community didn’t work for me :slightly_frowning_face: ) so that I can control over LAN?

I got the Device Access token a year ago when I started this thread. I have to say its probably like playing a game of roulette. Very hard to get. I have a guide I was typing up on a .txt file on my PC i’ll post when I get home.

@JDRoberts Probably my fault this device does not attach itself as an “OCF” device. That was a DTH I tried changing to see if it would change in home assistant which it did. (Hence this is why I think it is something to do with the DTH) even though on the home assistant integration it specifically mentions “Capabilities” and not DTH’s.

out of topic:
@Mikhail_D_Souza I had a local control working for a while then home assistant changed to async2 which broke my integration I should be able to whip something up over the next week in python for local control which I still find slow its not very “Snappy” a bit faster than the smart things app but non the less faster.

Hi, everyone. This post might be a little long but I want to clarify some points to avoid confusion. Please, let me know if you have any questions regarding the points below:

  1. Yes, “placeholder” means it is not using a DTH and it must not be changed because it will affect the device’s functionality.
  2. Old integrations like Home Assistant work with the Groovy integration (DTH - Device Type Handlers). There, a list of capabilities was defined as part of the device’s metadata.

Note: I don’t know why HA limits you to devices that work with Groovy, because the other integrations also have a set of capabilities defined in their Device Profile and making requests to the ST API, you can get their values.

  1. You need to reinstall the device and without changing anything, check the capabilities and status that you can see through the SmartThings REST API. There are two ways to do that:

Using the SmartThings CLI and it’s commands. The authentication is automatic and it’s more for personal use to get the info you need.


Using this way, you can create a server that makes REST requests to the ST API endpoints (see the official API reference)

  • A Personal Access Token (PAT). For simplicity purposes, generate one with all the permissions on this page (you have to log in). Copy it and save it securely, next time you enter this page, it will be hidden for your safety.
  • A REST API client or the ability to use cURL (or your own server). For example, to get the list of devices and see the capabilities that belong to it, you need to make a request to https://api.smartthings.com/v1/devices and use the PAT as authorization. In this sample, I’m using Postman:
  1. Once you get all that info, you can see the capabilities’ current value (device status) and which commands you can send to the device.
  2. That would be controlling them over the Cloud, to be a LAN integration, the device should have enabled an IP that you could reach to send commands or be able to integrate it with Edge for example but I don’t know if that’s possible.

@JDRoberts is right about OCF devices, that’s why I wanted your help to check the result in the API without modifying the device type. This will let us know what you can actually do with the device and which information you can get (not from third-parties but from ST directly).

1 Like

Hi @nayelyz

Thanks for the detailed write up.
Here is the output of from postman

GET: https://api.smartthings.com/v1/devices/

 "items": [
        {
            "deviceId": "REDACTED",
            "name": "Wifi-kit 2",
            "label": "Front Aircon",
            "manufacturerName": "Samsung Electronics",
            "presentationId": "DA-AC-SAC-100001",
            "deviceManufacturerCode": "Samsung Electronics",
            "locationId": "REDACTED",
            "ownerId": "REDACTED",
            "roomId": "REDACTED",
            "deviceTypeName": "Samsung OCF Air Conditioner",
            "components": [
                {
                    "id": "main",
                    "label": "main",
                    "capabilities": [
                        {
                            "id": "ocf",
                            "version": 1
                        },
                        {
                            "id": "switch",
                            "version": 1
                        },
                        {
                            "id": "airConditionerMode",
                            "version": 1
                        },
                        {
                            "id": "airConditionerFanMode",
                            "version": 1
                        },
                        {
                            "id": "temperatureMeasurement",
                            "version": 1
                        },
                        {
                            "id": "thermostatCoolingSetpoint",
                            "version": 1
                        },
                        {
                            "id": "airQualitySensor",
                            "version": 1
                        },
                        {
                            "id": "dustSensor",
                            "version": 1
                        },
                        {
                            "id": "odorSensor",
                            "version": 1
                        },
                        {
                            "id": "refresh",
                            "version": 1
                        },
                        {
                            "id": "execute",
                            "version": 1
                        },
                        {
                            "id": "custom.disabledCapabilities",
                            "version": 1
                        },
                        {
                            "id": "samsungce.driverVersion",
                            "version": 1
                        }
                    ],
                    "categories": [
                        {
                            "name": "AirConditioner",
                            "categoryType": "manufacturer"
                        }
                    ]
                }
            ],
            "createTime": "2021-12-30T06:31:02.617Z",
            "profile": {
                "id": "REDACTED"
            },
            "ocf": {
                "ocfDeviceType": "oic.d.airconditioner",
                "name": "Wifi-kit 2",
                "specVersion": "core.1.1.0",
                "verticalDomainSpecVersion": "res.1.1.0,sh.1.1.0",
                "manufacturerName": "Samsung Electronics",
                "modelNumber": "MIM-H03N",
                "vendorId": "DA-AC-SAC-100001",
                "lastSignupTime": "2021-12-30T06:31:01.085944Z"
            },
            "type": "OCF",
            "restrictionTier": 0,
            "allowed": []
        },

I am playing around with it now :slight_smile:
and will post more findings shortly

Edit 1:

here is the output of the device status when the unit is running:
GET: https://api.smartthings.com/v1/devices/{DeviceId}/status

{
    "components": {
        "main": {
            "refresh": {},
            "airConditionerMode": {
                "supportedAcModes": {
                    "value": null
                },
                "airConditionerMode": {
                    "value": null
                }
            },
            "execute": {
                "data": {
                    "value": null
                }
            },
            "airQualitySensor": {
                "airQuality": {
                    "value": null
                }
            },
            "switch": {
                "switch": {
                    "value": "on",
                    "timestamp": "2022-04-27T11:53:24.313Z"
                }
            },
            "ocf": {
                "st": {
                    "value": null
                },
                "mndt": {
                    "value": null
                },
                "mnfv": {
                    "value": null
                },
                "mnhw": {
                    "value": null
                },
                "di": {
                    "value": "REDACTED",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "mnsl": {
                    "value": null
                },
                "dmv": {
                    "value": "res.1.1.0,sh.1.1.0",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "n": {
                    "value": "Wifi-kit 2",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "mnmo": {
                    "value": "MIM-H03N",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "vid": {
                    "value": "DA-AC-SAC-100001",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "mnmn": {
                    "value": "Samsung Electronics",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "mnml": {
                    "value": null
                },
                "mnpv": {
                    "value": null
                },
                "mnos": {
                    "value": null
                },
                "pi": {
                    "value": "shp",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                },
                "icv": {
                    "value": "core.1.1.0",
                    "timestamp": "2021-12-30T06:31:03.363Z"
                }
            },
            "odorSensor": {
                "odorLevel": {
                    "value": null
                }
            },
            "airConditionerFanMode": {
                "fanMode": {
                    "value": null
                },
                "supportedAcFanModes": {
                    "value": null
                }
            },
            "custom.disabledCapabilities": {
                "disabledCapabilities": {
                    "value": [
                        "airConditionerMode",
                        "airConditionerFanMode",
                        "temperatureMeasurement",
                        "thermostatCoolingSetpoint",
                        "airQualitySensor",
                        "dustSensor",
                        "odorSensor"
                    ],
                    "timestamp": "2021-12-30T06:31:03.701Z"
                }
            },
            "samsungce.driverVersion": {
                "versionNumber": {
                    "value": 21041401,
                    "timestamp": "2021-12-30T06:31:03.701Z"
                }
            },
            "temperatureMeasurement": {
                "temperature": {
                    "value": null
                }
            },
            "dustSensor": {
                "dustLevel": {
                    "value": null
                },
                "fineDustLevel": {
                    "value": null
                }
            },
            "thermostatCoolingSetpoint": {
                "coolingSetpoint": {
                    "value": null
                }
            }
        }
    }
}

So Some further playing around I have found that the capability of “switch” is the air conditioners “on” or “off” state and setting these values I can turn the airconditioner on and off through the rest API.

However any other capability with value: null will not respond to commands even though smart things responds with accepted

I’ve been googling around and found some old information nayelyz has been linking but the links are expired and just redirect to the developers home page. I have some questions just to make sure everyone is on the same page

  1. When I added this to smart things I had no idea of its capabilities. I then started playing with all of the DTH handlers. I then removed these devices from my smart things account and re-added. They are now place holder and I haven’t changed them. Does this affect the capabilities stating Null? or is this now permanently broken?

  2. Just for my own understanding how does the phone app actually communicate with the device? Does it send a curl requests when I use the app to change the temperature?

  3. To move on from here would custom capabilities help in this regard? I see a capability of custom.disabledCapabilities in the device status could these be enabled and perhaps I could start pulling data

"custom.disabledCapabilities": {
                "disabledCapabilities": {
                    "value": [
                        "airConditionerMode",
                        "airConditionerFanMode",
                        "temperatureMeasurement",
                        "thermostatCoolingSetpoint",
                        "airQualitySensor",
                        "dustSensor",
                        "odorSensor"
                    ],
                    "timestamp": "2021-12-30T06:31:03.701Z"
                }
            },
  1. As this mentions its a OCF device is there any control that can created using groovy, etc or is it pretty much locked to the smart things app?

  2. I notice all the time stamps on these devices are from 2021 when I orignally added them to my smart things app. These are still the same dates even though I had deleted them from the app and re-added them.

Note: Things previously posted in this thread are all making sense now sorry for the delay in understanding. I had a crash course on rest, etc with a module we just created at work so playing around with it here makes sense.

No, that’s what’s interesting about OCF devices. Basically, when a manufacturer defines the handler of the device, they set the capabilities that will be exposed in the ST API.
In the case of OCF devices (Ovens, AC, etc.), the behavior is a little different. To attempt to shed some light on why some capabilities might show up in the ST app but not on the API side, the team shared these details:

  • The phone client (ST app) uses OCF’s COAP protocol, which allows the physical device to define its resources (such as the temperature values).
  • So, these values can be written there by the device and as a result, they can be displayed by the app.
  • The APIs do not work via OCF, but, the profile is the manifest of what values are available to be accessed from there.

I don’t know if that would bring a positive result but, you can see which commands can be used for each capability by querying its definition. In the CLI, the command is:

smartthings capabilities custom.disabledCapabilities [-j or -y]

You can use the -j or -y flags to get the info in JSON or YAML formats respectively. For example, the capability custom.disabledCapabilities doesn’t have commands so it’s read-only.

As Groovy-based things (DTH, Groovy SmartApps, etc.) are par of the Legacy platform, I wouldn’t suggest that. Also, only the manufacturer has access to the controller used by those devices.

It could be because the Device ID doesn’t change for this kind of device, did you check it before adding it and after? That’s curious but the info with that date is mostly the ocf properties which refer to the model, vid, etc.

This can happen because there’s no handler on the device controller for that specific command and this is only controlled through the app.

A bit late to the party but I have similar findings to @Derf . I removed and readded my device back and this is what I got

My device

./smartthings devices xxxx -y
deviceId: xxxx
ownerId: xxxx
name: Wifi-kit
label: Air Conditioner
deviceManufacturerCode: Samsung Electronics
manufacturerName: Samsung Electronics
presentationId: DA-AC-SAC-100001
locationId: xxxx
roomId: xxxx
sharedLocations: []
components:
  - id: main
    label: main
    capabilities:
      - id: ocf
        version: 1
      - id: switch
        version: 1
      - id: airConditionerMode
        version: 1
      - id: airConditionerFanMode
        version: 1
      - id: temperatureMeasurement
        version: 1
      - id: thermostatCoolingSetpoint
        version: 1
      - id: airQualitySensor
        version: 1
      - id: dustSensor
        version: 1
      - id: odorSensor
        version: 1
      - id: refresh
        version: 1
      - id: execute
        version: 1
      - id: custom.disabledCapabilities
        version: 1
      - id: samsungce.driverVersion
        version: 1
    categories:
      - name: AirConditioner
        categoryType: manufacturer
createTime: '2022-04-28T02:02:30.395Z'
profile:
  id: xxxx
ocf:
  ocfDeviceType: oic.d.airconditioner
  name: Wifi-kit
  specVersion: core.1.1.0
  verticalDomainSpecVersion: res.1.1.0,sh.1.1.0
  manufacturerName: Samsung Electronics
  modelNumber: MIM-H03
  vendorId: DA-AC-SAC-100001
  lastSignupTime: '2022-04-28T02:02:28.702732Z'
type: OCF
vid: DA-AC-SAC-100001
mnmn: Samsung Electronics
ocfDeviceType: oic.d.airconditioner
restrictionTier: 0
allowed: []

And for the status

./smartthings devices:status xxx -y
components:
  main:
    refresh: {}
    airConditionerMode:
      supportedAcModes:
        value: null
      airConditionerMode:
        value: null
    execute:
      data:
        value: null
    airQualitySensor:
      airQuality:
        value: null
    switch:
      switch:
        value: 'off'
        timestamp: '2022-04-28T02:02:31.514Z'
    ocf:
      st:
        value: null
      mndt:
        value: null
      mnfv:
        value: null
      mnhw:
        value: null
      di:
        value: xxx
        timestamp: '2022-04-28T02:02:31.140Z'
      mnsl:
        value: null
      dmv:
        value: res.1.1.0,sh.1.1.0
        timestamp: '2022-04-28T02:02:31.140Z'
      'n':
        value: Wifi-kit
        timestamp: '2022-04-28T02:02:31.140Z'
      mnmo:
        value: MIM-H03
        timestamp: '2022-04-28T02:02:31.140Z'
      vid:
        value: DA-AC-SAC-100001
        timestamp: '2022-04-28T02:02:31.140Z'
      mnmn:
        value: Samsung Electronics
        timestamp: '2022-04-28T02:02:31.140Z'
      mnml:
        value: null
      mnpv:
        value: null
      mnos:
        value: null
      pi:
        value: shp
        timestamp: '2022-04-28T02:02:31.140Z'
      icv:
        value: core.1.1.0
        timestamp: '2022-04-28T02:02:31.140Z'
    odorSensor:
      odorLevel:
        value: null
    airConditionerFanMode:
      fanMode:
        value: null
      supportedAcFanModes:
        value: null
    custom.disabledCapabilities:
      disabledCapabilities:
        value:
          - airConditionerMode
          - airConditionerFanMode
          - temperatureMeasurement
          - thermostatCoolingSetpoint
          - airQualitySensor
          - dustSensor
          - odorSensor
        timestamp: '2022-04-28T02:02:31.514Z'
    samsungce.driverVersion:
      versionNumber:
        value: 21041401
        timestamp: '2022-04-28T02:02:31.514Z'
    temperatureMeasurement:
      temperature:
        value: null
    dustSensor:
      dustLevel:
        value: null
      fineDustLevel:
        value: null
    thermostatCoolingSetpoint:
      coolingSetpoint:
        value: null

Lots of nulls, just like you described.

I got the Device Access token a year ago when I started this thread. I have to say its probably like playing a game of roulette. Very hard to get. I have a guide I was typing up on a .txt file on my PC i’ll post when I get home.

@Derf How did you go with finding that .txt file?

I have edited this post as I now have created local control of this device and integrated it into home assistant.

Thanks for everyone’s Help I will be create a indepth guide on local control and post it in the coming days.

2 Likes

Hi,
Follow last post’s in

to get token from MIM-H03N

It is not necessary to switch the device on / off with a fuse.

it worked for me

run server.py
in the new terminal, run actest.py
MIM-S03N will enter Requesting a token mode (power LED is on, Wi-Fi Connect LED is OFF, Wi-Fi Configure blinks)
press the AP button and the token should appear in server.py

sad that MIM-S03N control by the smartthing cloud does not work

1 Like

@StefanSiarzewski you magnificent person!

press the AP button and the token should appear in server.py

I had no idea I had to do this step! My wifi module sits in my ceiling cavity (I got lazy with the wiring) so I never noticed that the LEDs changed and I had to press a button. Thanks for letting me know about that. I managed to get my token now and I can integrate it with my Home assistant. Smartthings might be able to control but my home assistant instance that I can reach from anywhere in the world can. That’s good enough for me.

1 Like

There is very little information on the network about downloading a token from Wifi-kit
most of them refer to the split unit where you just do OFF / ON and the token shows up.

In my case, MIM-S03N in Smartthings is detected as a “placeholder” - I can control but only from the smartthing application
In case of integration with openhab (or home assistant), have to connect via LAN

Hi All,

I’ve completed the home assistant integration for this aircon here GitHub - mikdsouza/samsungrac: Home Assistant Climate Device for controlling (not only) Samsung AC

I’ve submitted a PR to the parent repo with the fixes too but in the mean time, if you have the device token and device id, you can now control it from home assistant.

1 Like

Hello,

i want to integrate my samsung airco into homeassistant.
I then need a device token. In post 36 (and on other places in other fora) it is told how to do so.

I tried on my mac computer, installing python3.

when I start server.py I got a list of warnings:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Warning (from warnings module):
File “/Users/home/Downloads/server.py”, line 44
server.socket = ssl.wrap_socket(server.socket, certfile=‘cert.pem’, server_side=True)
DeprecationWarning: ssl.wrap_socket() is deprecated, use SSLContext.wrap_socket()
Traceback (most recent call last):
File “/Users/home/Downloads/server.py”, line 48, in
main()
File “/Users/home/Downloads/server.py”, line 44, in main
server.socket = ssl.wrap_socket(server.socket, certfile=‘cert.pem’, server_side=True)
File “/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/ssl.py”, line 1443, in wrap_socket
context.load_cert_chain(certfile, keyfile)
ssl.SSLError: [SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:3874)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

They are warnings, but could not be ignored, the run stops.

Running the actest.py (set the right ip-adres and right path to cert) I got an error

I am on the same network as the AC and the AC is off when I run actest.

How is that to fix??

The error:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

SyntaxError: unterminated string literal (detected at line 4)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<