Skip to content

OnCue being discontinued by Kohler #125813

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

Open
bschatzow opened this issue Sep 12, 2024 · 50 comments · May be fixed by #143602
Open

OnCue being discontinued by Kohler #125813

bschatzow opened this issue Sep 12, 2024 · 50 comments · May be fixed by #143602
Assignees

Comments

@bschatzow
Copy link

The problem

The app by Kohler is getting replaced by Kohler Energy Management. This will cause this integration to no longer function. First look at this new app to me is a downgrade as all the Favorite parameters (sensors) are missing.

What version of Home Assistant Core has the issue?

core-2024.9.1

What was the last working version of Home Assistant Core?

core-2024.9.1

What type of installation are you running?

Home Assistant OS

Integration causing the issue

Oncue by Kohler

Link to integration documentation on our website

https://www.home-assistant.io/integrations/oncue/

Diagnostics information

None

Example YAML snippet

None

Anything in the logs that might be useful for us?

No response

Additional information

I have an email to Kohler to see if there is anything that can be done to still get the missing sensors. So far, no answers. They are not answering there support line after an hour on hold.

@home-assistant
Copy link

Hey there @bdraco, @PeteRager, mind taking a look at this issue as it has been labeled with an integration (oncue) you are listed as a code owner for? Thanks!

Code owner commands

Code owners of oncue can trigger bot actions by commenting:

  • @home-assistant close Closes the issue.
  • @home-assistant rename Awesome new title Renames the issue.
  • @home-assistant reopen Reopen the issue.
  • @home-assistant unassign oncue Removes the current integration label and assignees on the issue, add the integration domain after the command.
  • @home-assistant add-label needs-more-information Add a label (needs-more-information, problem in dependency, problem in custom component) to the issue.
  • @home-assistant remove-label needs-more-information Remove a label (needs-more-information, problem in dependency, problem in custom component) on the issue.

(message by CodeOwnersMention)


oncue documentation
oncue source
(message by IssueLinks)

@PeteRager
Copy link
Contributor

Replacing their app does not mean they are replacing the API that the app uses. It sounds like you are using the new app and the integration is still working?

@bschatzow
Copy link
Author

bschatzow commented Sep 12, 2024

They are discontinuing the old app by next week. From the email received last week from Kohler, I believe the API will no longer work as well. Sign in and password changes as well.

OnCue Plus

The existing OnCue Plus application is still available for generator monitoring. The app will be discontinued in the next few weeks, however during the transition period to the new application, the OnCue Plus app remains available to all users.

If you have additional questions or encounter any issues with the application. Please reach out to:

Kohler Home Energy Customer Care Center
1-800-544-2444
Monday – Friday 7:30am – 5:00pm (CT)
Generator.feedback@kohler.com

Sent an email to this address and called the 800 number an no useful response yet.

@PeteRager
Copy link
Contributor

It does look like you create a new login. So it does look like that indeed be the case. I'll start looking at it when the iOS app is released.

@bschatzow
Copy link
Author

There is a dealer version maybe that version will have the sensors. I do not have access to it yet. The new version is useless. Basically saying the generator ran, is running, an issue. No sensors.

@bschatzow
Copy link
Author

bschatzow commented Sep 13, 2024

I have tried a number times to contacted Kohler. Never have I gotten through to support. Email is answered with check FAQ. Not good! There is a support email on Google play store that I have now contacted.

@bschatzow
Copy link
Author

Just got an email from Kohler support.
"Apologies. We are in the process of adding these parameters back immediately. What mobile device are you using."

I asked if they will have a way that HA can communicate with the new app (API). I'll post any updates.

@bschatzow
Copy link
Author

@PeteRager @bdraco you may want to reach out to Paul O’Dell PAUL.O'DELL@kohler.com. He is the manager of software development at Kohler. Maybe he can help you figure out what changes can be done so we can still see the Kohler product in HA.

@PeteRager
Copy link
Contributor

you may want to reach out to Paul O’Dell

Do you know him? How did we get his contact?

@bschatzow
Copy link
Author

His name was list in the google play store as the contact for the app. When he replied it had his contact information:
Paul O’Dell
Manager - Software Development
Kohler Co. | Kohler Energy
Paul O’Dell PAUL.O'DELL@kohler.com
M: 631-512-3845

@mplantepragma
Copy link

mplantepragma commented Sep 18, 2024

Hi,
Yes, same problem here...the OnCue integration has stopped working for me as well. My Kohler model is 30 RCLA. Was working like a charm. Maybe you know this already but the new Kohler Energy Management apps, both for iOS + Android, have now been released and you can find them here. https://homeenergy.kohlerenergy.com/en/kohler-energy-management-app
EDIT: the integration still works for now, it seems I had a temporary glitch which prevented HA to retrieve the data.
Let me know if I can help.

@bschatzow
Copy link
Author

The new app does not have any sensors (yet). I was told by Kohler a fix would be released soon. My onCue still works in HA, I just need to refresh the credentials.

@PeteRager
Copy link
Contributor

PeteRager commented Sep 19, 2024

I did contact the Kohler manager and got a reply. it sounded like the sensors are not exposed in the new API. We may get some help later, but for now it sounded like they are under pressure to get the sensors back in even though they were initially told they were not necessary.

It's fairly easy on iOS to do protocol research by configuring a burp proxy and then running the app.

@bdraco
Copy link
Member

bdraco commented Sep 19, 2024

@PeteRager would you please loop me into the email chain? I’ll take a look when I get back from holiday next week.

nick@home-assistant.io

thanks

@Ares4570
Copy link

The apps have been updated now to include all of the missing sensor data. Hopefully they're willing to provide an easy to access API for this data as well.

@bschatzow
Copy link
Author

Don't like how the put the sensors in multiple tabs.

@mplantepragma
Copy link

mplantepragma commented Sep 20, 2024

The only 2 parameters, out of 23, that I can't find in the new updated app (iOS) are the Latest Firmware and the Remote Reset Counter. And now that I look at it in (old) OnCue the Latest Firmware is 2.0.6 and the Current Firmware is 3.3.2. So even in OnCue the Latest Firmware doesn't seem to have been updated in a while. And I don't know what Remote Reset Counter is used for.

@dferg
Copy link

dferg commented Nov 9, 2024

Maintainers, how can we help? I just installed a 26RCA and was surprised about the OnCue change. Do we need to do snoops of the new iOS app? What info do you need?

@PeteRager
Copy link
Contributor

I've migrated to the new app and the integration still works. Are you saying that the integration no longer works for you?

@bschatzow
Copy link
Author

Once they turn off the old API the integration will stop working. So far, they have not.

@eklundjon
Copy link

Maybe it’s just a problem on my end, but the OnCue integration doesn’t accept my Koher Energy Management credentials. Perhaps it’s still working for folks who were originally set up with OnCue?

@PeteRager
Copy link
Contributor

Maybe it’s just a problem on my end, but the OnCue integration doesn’t accept my Koher Energy Management credentials. Perhaps it’s still working for folks who were originally set up with OnCue?

That is likely true. We'll need to find the new endpoints. To get started we'd want to capture a BURP proxy log or equivalent.

@dferg
Copy link

dferg commented Nov 11, 2024

Update from me: As a new owner, I started off with the Kohler Energy Management app. OnCue doesn't accept those credentials, but I was still able to create an OnCue account. So both apps work, but with their separate credentials. I have HA OnCue integration set up now with my OnCue credentials.

@PeteRager
Copy link
Contributor

The app uses Oauth2 for authentication. After that it's not clear how it gets the data. There is nothing in the burp proxy.

@turboc1208
Copy link

Any updates?

@turboc1208
Copy link

Again, Any updates?

@PeteRager
Copy link
Contributor

We need someone to dive in with wireshark and research the new protocol the app is using

@arw00d
Copy link

arw00d commented Mar 13, 2025

I did the tiniest amount of this already while exploring another solution.

From what I can tell, they are still talking to the old server using the same name and address.

I'm very new to all of this, so don't know that anything I have found is helpful. But I'm happy to explore more if I can be of service.

@PeteRager
Copy link
Contributor

That's a cool link - thank you. That is the protocol the generator uses to talk to the kohler cloud. It's different than the protocol the App uses to talk to the cloud. I had looked the stream several years back to see what they were sending. It's possible to intercept this stream which is what they are doing in that link. I was able to use my pfsense router to capture the traffic.

Anyways we need to do a similar thing with the app.

@arw00d
Copy link

arw00d commented Mar 13, 2025

That makes sense. I can try to give this a go, if needed. I've got a list of things I want to poke around on with respect to this topic (as you can see in that thread), so I'm happy to add this to it. Hopefully, I can do some of this later this week.

@arw00d
Copy link

arw00d commented Apr 4, 2025

I took a shot at monitoring the app comms, but I can't seem to find the specific communications we need. I did see what I'm pretty sure was my old OnCue app talking to the server, but I couldn't find anything I could attribute to the new app.

I did all this by having my laptop host a hotspot, connecting my phone to that hotspot, and using Wireshark on the laptop to monitor the phone's comms. I then just opened the app and tried to spot anything of use in Wireshark.

If there is something else I should try, please let me know.

@PeteRager
Copy link
Contributor

PeteRager commented Apr 4, 2025

@arw00d thats an interesting approach. I suspect the app may be caching alot of stuff. Try deleting the app and app data , reinstall, then connect to the laptop hotspot and login when wireshark is running.

@bschatzow
Copy link
Author

Just got this message from Kohler today.


Dear Valued OnCue User, The legacy OnCue Plus application will be decommissioned by the end of April.As a result, you will lose access to the app at some point during April, with access being fully discontinued by month’s end.

I would think this will also stop Oncue from working in HA?

@bdraco
Copy link
Member

bdraco commented Apr 12, 2025

It will likely stop working. We will remove this integration when it does.

@PeteRager
Copy link
Contributor

If someone has time, it could be helpful to contact Kohler and see if they have API docs or interest in supporting their customers. Happy to participate if we can get a contact.

@arw00d
Copy link

arw00d commented Apr 12, 2025

I did manage to get another reading in Wireshark where I can see more of what is going on. I can see the Okta verification process (with kohler-homeenergy.okta.com) followed by a lot of chatter with 20.253.63.244 - which seems to be an Azure container. Again, I don't really know what to make of any of that though.

@bschatzow
Copy link
Author

If someone has time, it could be helpful to contact Kohler and see if they have API docs or interest in supporting their customers. Happy to participate if we can get a contact.

When the app was first coming out, I contacted
Paul O’Dell
Manager - Software Development
Kohler Co. | Kohler Energy
Paul O’Dell PAUL.O'DELL@kohler.com
M: 631-512-3845

He replied to my questions. Maybe he can help?

@PeteRager
Copy link
Contributor

PeteRager commented Apr 12, 2025

Thanks, now I remember.. we contacted him, and he was not helpful. I'll email him again and cold call him on Monday.

Regarding okta, this should be a standard outh2 flow. I know HA has built in support to execute the flow. This is an area I've never looked at. Guidance would,be helpful.

https://developer.okta.com/docs/concepts/oauth-openid/

On the wireshark to that azure host. What port is it connecting to? How is wireshark reporting the data. Maybe post a sample.

Finding the apk for the android app would also be helpful.

@PeteRager
Copy link
Contributor

While both my generators are still connect to HA. The data has not changed since yesterday. Anyone else see that?

@apetryk2
Copy link

My generator was going online/offline overnight and then this morning I received the "Your generator has been offline for at least 30 minutes" email from Kohler. It shows as offline in both the old and the new app.

Locally I can ping the generator and I can see it is establishing a connection with an Azure server out in the cloud so network connectivity seems to be fine.

@arw00d
Copy link

arw00d commented Apr 13, 2025

All me sensors in both HA and the new Kohler app appear to have stagnated. It says they are connected, but the data hasn't changed since sometime yesterday.

@PeteRager
Copy link
Contributor

It's also stale in the new app ... so they must have an internal problem.

The good news is I understand how the new API works and have put together a postman collection. This part looks simple.

I also have an overview of the Oauth2 flow and have started trying to hack this into working shape in HA. But could certainly use some guidance.

@owen2
Copy link
Contributor

owen2 commented Apr 13, 2025

If they are using oauth, we'd need to have app credentials for home assistant to access user data on thier behalf. Kohler would have to make that available to us with something like a personal access token or a client registration.

@PeteRager
Copy link
Contributor

PeteRager commented Apr 14, 2025

Yes, after a long night - I think I actually have it!!

It would be good if someone could test this to see if they can repeat the outcome.

Yes, we can't use the OAuth2 flow since the HA redirect URL isn't allowed by okta. But we can get a token through a simple authentication exchange. This CURL returns an access token, refresh token and id token. The access token is the bearer token.

Okta has good documentation here:
https://developer.okta.com/docs/concepts/oauth-openid/
https://developer.okta.com/docs/guides/implement-grant-type/clientcreds/main/

curl --location 'https://kohler-homeenergy.okta.com/oauth2/default/v1/token' \
--header 'accept: application/json' \
--header 'authorization: Basic MG9hMXFpY3BkYWdLaXdFekYxZDg6d3Raa1FwNlY1T09vMW9PcjhlSFJHTnFBWEY3azZJaXhtWGhINHZjcnU2TWwxSnRLUE5obXdsMEN1MGlnQkVIRg==' \
--header 'content-type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=pete.rage@rage.com' \
--data-urlencode 'password=password' \
--data-urlencode 'scope=openid profile offline_access email'

One authenticated and in possession of the bearer token, these are the API endpoints.

curl --location 'https://az-amer-prod-hems-capp.jollyglacier-72224ec0.eastus.azurecontainerapps.io/kem/api/v3/homeowner/homes' \
--header 'apikey: pgH7QzFHJx4w46fI~5Uzi4RvtTwlEXp' \
--header 'authorization: bearer theToken'

This returns this data, the important part is the "id" which is the generator id needed for the next call.

[
    {
        "id": 29999,
        "name": "Rage1",
        "weatherCondition": "ClearSky",
        "weatherTempF": 35.924000000000014,
        "weatherTimePeriod": "Day",
        "address": {
            "lat": 43.6891,
            "long": -73.4553334,
            "address1": "Somewhere",
            "address2": null,
            "city": "Downtown",
            "state": "NY",
            "postalCode": "12222",
            "country": "US"
        },
        "devices": [
            {
                "id": 29999,
                "serialNumber": "33redactad",
                "displayName": "Rage1",
                "deviceHost": "Oncue",
                "hasAcceptedPrivacyPolicy": true,
                "address": {
                    "lat": 44.658891,
                    "long": -71.3303334,
                    "address1": "Route Rage",
                    "address2": null,
                    "city": "Downtown",
                    "state": "NY",
                    "postalCode": "122222",
                    "country": "US"
                },
                "product": "Rdc2v4",
                "productDisplayName": "RDC 2.4",
                "controllerType": "RDC2 (Blue Board)",
                "firmwareVersion": "3.4.5",
                "currentFirmware": "RDC2.4 3.4.5",
                "isConnected": true,
                "lastConnectedTimestamp": "2025-04-14T09:30:17+00:00",
                "deviceIpAddress": "71.181.49.175:2402",
                "macAddress": "9B:E8:23:6F:14:00",
                "status": "ReadyToRun",
                "statusUpdateTimestamp": "2025-04-14T09:29:01+00:00",
                "dealerOrgs": [
                    {
                        "id": 5555,
                        "businessPartnerNo": "3588925555",
                        "name": "InSTALLED",
                        "e164PhoneNumber": "+15133337",
                        "displayPhoneNumber": "(518) 33333",
                        "wizardStep": "OnboardingComplete",
                        "wizardComplete": true,
                        "address": {
                            "lat": null,
                            "long": null,
                            "address1": "",
                            "address2": null,
                            "city": "",
                            "state": "NY",
                            "postalCode": "122222",
                            "country": null
                        },
                        "userCount": 4,
                        "technicianCount": 3,
                        "deviceCount": 71,
                        "adminEmails": [
                            "SOMEONE@somewhere.com"
                        ]
                    }
                ],
                "alertCount": 0,
                "model": "Model20KW",
                "modelDisplayName": "20 KW",
                "lastMaintenanceTimestamp": "2025-04-10T09:12:59",
                "nextMaintenanceTimestamp": "2026-04-10T09:12:59",
                "maintenancePeriodDays": 365,
                "hasServiceAgreement": null,
                "totalRuntimeHours": 120.2
            }
        ]
    }
]

Then to get the device data where 29999 is the device id:

curl --location 'https://az-amer-prod-hems-capp.jollyglacier-72224ec0.eastus.azurecontainerapps.io/kem/api/v3/devices/29999' \
--header 'apikey: pgH7QzFHJx4w46fI~5Uzi4RvtTwlEXp' \
--header 'authorization: bearer theToken'
{
    "device": {
        "id": 29999,
        "serialNumber": "4444",
        "displayName": "Rage1",
        "deviceHost": "Oncue",
        "hasAcceptedPrivacyPolicy": true,
        "address": {
            "lat": 4,
            "long": -7,
            "address1": "7",
            "address2": null,
            "city": "Downtown",
            "state": "NY",
            "postalCode": "12222",
            "country": "US"
        },
        "product": "Rdc2v4",
        "productDisplayName": "RDC 2.4",
        "controllerType": "RDC2 (Blue Board)",
        "firmwareVersion": "3.4.5",
        "currentFirmware": "RDC2.4 3.4.5",
        "isConnected": true,
        "lastConnectedTimestamp": "2025-04-14T09:30:17+00:00",
        "deviceIpAddress": "22.222.49.175:2402",
        "macAddress": "9B:E8:333:6F:14:00",
        "status": "ReadyToRun",
        "statusUpdateTimestamp": "2025-04-14T09:29:01+00:00",
        "dealerOrgs": [
            {
                "id": 715,
                "businessPartnerNo": "3333333",
                "name": "",
                "e164PhoneNumber": "",
                "displayPhoneNumber": "",
                "wizardStep": "OnboardingComplete",
                "wizardComplete": true,
                "address": {
                    "lat": null,
                    "long": null,
                    "address1": "",
                    "address2": null,
                    "city": "",
                    "state": "NY",
                    "postalCode": "",
                    "country": null
                },
                "userCount": 4,
                "technicianCount": 3,
                "deviceCount": 71,
                "adminEmails": [
                    ""
                ]
            }
        ],
        "alertCount": 0,
        "model": "Model20KW",
        "modelDisplayName": "20 KW",
        "lastMaintenanceTimestamp": "2025-04-10T09:12:59",
        "nextMaintenanceTimestamp": "2026-04-10T09:12:59",
        "maintenancePeriodDays": 365,
        "hasServiceAgreement": null,
        "totalRuntimeHours": 120.2
    },
    "powerSource": "Utility",
    "switchState": "Auto",
    "coolingType": "Air",
    "connectionType": "Unknown",
    "serverIpAddress": "40.117.195.28",
    "serviceAgreement": {
        "hasServiceAgreement": null,
        "beginTimestamp": null,
        "term": null,
        "termMonths": null,
        "termDays": null
    },
    "exercise": {
        "frequency": "Weekly",
        "nextStartTimestamp": "2025-04-19T10:00:00",
        "mode": "Unloaded",
        "runningMode": null,
        "durationMinutes": 20,
        "lastStartTimestamp": "2025-04-12T14:00:00+00:00",
        "lastEndTimestamp": "2025-04-12T14:19:59+00:00"
    },
    "lastRanTimestamp": "2025-04-12T14:00:00+00:00",
    "totalRuntimeHours": 120.2,
    "totalOperationHours": 33909.2,
    "runtimeSinceLastMaintenanceHours": 0.3,
    "remoteResetCounterSeconds": 0,
    "addedBy": null,
    "associatedUsers": [
        "pete.sage@icloud.com"
    ],
    "controllerClockTimestamp": "2025-04-14T07:58:59",
    "fuelType": "LiquidPropane",
    "batteryVoltageV": 14,
    "engineCoolantTempF": null,
    "engineFrequencyHz": 0,
    "engineSpeedRpm": 0,
    "lubeOilTempF": 37.4,
    "controllerTempF": 62.6,
    "engineCompartmentTempF": null,
    "engineOilPressurePsi": null,
    "engineOilPressureOk": true,
    "generatorLoadW": 0,
    "generatorLoadPercent": 0,
    "generatorVoltageAvgV": 0,
    "setOutputVoltageV": 240,
    "utilityVoltageV": 259.7,
    "engineState": "Standby",
    "engineStateDisplayNameEn": "Standby",
    "loadShed": {
        "isConnected": true,
        "parameters": [
            {
                "definitionId": 1,
                "displayName": "HVAC A",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 2,
                "displayName": "HVAC B",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 3,
                "displayName": "Load A",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 4,
                "displayName": "Load B",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 5,
                "displayName": "Load C",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 6,
                "displayName": "Load D",
                "value": false,
                "isReadOnly": false
            }
        ]
    },
    "pim": {
        "isConnected": false,
        "parameters": [
            {
                "definitionId": 7,
                "displayName": "Digital Output B1 Value",
                "value": false,
                "isReadOnly": true
            },
            {
                "definitionId": 8,
                "displayName": "Digital Output B2 Value",
                "value": false,
                "isReadOnly": true
            },
            {
                "definitionId": 9,
                "displayName": "Digital Output B3 Value",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 10,
                "displayName": "Digital Output B4 Value",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 11,
                "displayName": "Digital Output B5 Value",
                "value": false,
                "isReadOnly": false
            },
            {
                "definitionId": 12,
                "displayName": "Digital Output B6 Value",
                "value": false,
                "isReadOnly": false
            }
        ]
    }
}

We can also get the event history though this URL.

https://az-amer-prod-hems-capp.jollyglacier-72224ec0.eastus.azurecontainerapps.io/kem/api/v3/devices/29999/events

@owen2
Copy link
Contributor

owen2 commented Apr 14, 2025

It looks like you are using Kohler's Phone App's Client Credentials to get a token. So I guess in a way they made it available to us 😆

@arw00d
Copy link

arw00d commented Apr 14, 2025

I can confirm that this process works for me as well. Getting the latest data through these requests.

@PeteRager
Copy link
Contributor

I had an email exchange with Kohler's engineering manager. They see value in having a connector in HA and want it to continue. He mentioned they are going to create some new APIs and will get back to us. We will continue moving forward in parallel.

We have decided to create a new integration. I'll try to get a custom component version of it put together so we can do some beta testing in a quick iteration.

@turboc1208
Copy link

turboc1208 commented Apr 14, 2025 via email

@bschatzow
Copy link
Author

Amazing the amount of work done in a short time. Let me know what I can do to help test.

@PeteRager
Copy link
Contributor

We have an initial version of the new API with a sample.py program

https://github.com/kohlerlibs/aiokem

Next step is an integration.

@PeteRager PeteRager linked a pull request Apr 24, 2025 that will close this issue
19 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.