OH3.1 Generac MobileLink Binding

Any news on this?
I’m now on OH 4.3.1, as is the binding, same thing happens.
I’ve completely removed both the binding and the generator thing, but that didn’t help, I’m still getting the “Session Expired” error.
Also see here:

Thanks!

Hi everyone. I noticed since the last update from Mobile link 2 weeks ago i cannot get my Generac to connect.

I have 2 Generac’s attached to my account and was working perfectly for months.

2025-07-23 12:13:10.986 [ERROR] [enhab.core.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 10000 ms elapsed
2025-07-23 13:22:39.501 [WARN ] [nternal.connection.ConnectionManager] - Unexpected response bodyType -96
2025-07-23 13:24:24.543 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - childHandlerInitialized generacmobilelink:generator:7a03906fa7:1108208
2025-07-23 13:24:24.543 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - childHandlerInitialized generacmobilelink:generator:7a03906fa7:1072867
2025-07-23 13:24:24.543 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - No device for id 1108208
2025-07-23 13:24:24.543 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - No device for id 1072867
2025-07-23 13:24:25.538 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Attempting login
2025-07-23 13:24:26.103 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not load login page
2025-07-23 13:24:26.103 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - parseSettings: {"remoteResource":"https://gpsprodpltazureb2c.blob.core.windows.net/mobile-link/SignIn.html","retryLimit":3,"trimSpacesInPassword":true,"api":"CombinedSigninAndSignup","csrf":"OUFSRGtHOUVhZ2d4QXhuK2xUc21vbDJUQTduT2wzMFVRc0tCRmtHZGlWYWJlR0Qra0d6TUh5K0hQc2s1NENzT1pldko2VjQrRXhBTXY4a1ZtVDJ5b0E9PTsyMDI1LTA3LTIzVDE3OjI0OjI3LjA0MDY5NTNaO05vK2MrWFlRditOMUFYZU54clhhWEE9PTt7Ik9yY2hlc3RyYXRpb25TdGVwIjoxfQ==","transId":"StateProperties=eyJUSUQiOiJmY2Q2ZGI0My0wYzc1LTRiYjMtYjQ5Ny1kOTU0OWM0YjM4YjEifQ","pageViewId":"1930743f-6900-4a9e-a755-aa29727120d0","suppressElementCss":false,"isPageViewIdSentWithHeader":false,"allowAutoFocusOnPasswordField":true,"pageMode":1,"config":{"showSignupLink":"False","sendHintOnSignup":"False","includePasswordRequirements":"true","enableRememberMe":"True","forgotPasswordLinkLocation":"none","operatingMode":"Email","announceVerCompleteMsg":"True"},"hosts":{"tenant":"/generacconnectivity.onmicrosoft.com/B2C_1A_MobileLink_SignIn","policy":"B2C_1A_MobileLink_SignIn","static":"https://generacconnectivity.b2clogin.com/static/"},"locale":{"lang":"en"},"xhrSettings":{"retryEnabled":true,"retryMaxAttempts":3,"retryDelay":200,"retryExponent":2,"retryOn":["error","timeout"]}}
2025-07-23 13:24:26.729 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - selfAssertedRequest response 200
2025-07-23 13:24:27.163 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not load login page
2025-07-23 13:24:27.163 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not update devices
java.io.IOException: Error parsing HTML submit form
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.login(GeneracMobileLinkAccountHandler.java:326) ~[?:?]
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.poll(GeneracMobileLinkAccountHandler.java:161) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]`Preformatted text`

I’ve given up on Generac Mobile Link, especially as very little information is actually available through the binding and the app.
I disconnected the modem and connected a Raspberry Pi with a $60 hat running Genmon (Github).
Works perfectly, transmits a ton of information on the generator via MQTT and EMail. Couldn’t be happier.

Thank you for sharing.. ordered it today! so much more detail then the app.

With “ordered” you mean the HAT from Pintsize.me?
Yes, that’s an easy all-in-one solution and works great.

The funny thing is that whenever the power goes out and the generator kicks in, the emails announcing the outage come in delayed. I was wondering why that was because the Pi is connected to the generator battery and so shouldn’t lose power, I realized it’s the Wifi AP losing power and thus the Pi’s connection to the network is gone until the generator is up and the AP has rebooted…

@digitaldan
Hi Dan ,
I know you are busy with other binding work but if you get a chance can you take a peek at the Generac Binding?
It started failing on login a few weeks back after Generac did a site update. Some error related to password login.


2025-07-25 00:53:17.373 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - parseSettings: {"remoteResource":"https://gpsprodpltazureb2c.blob.core.windows.net/mobile-link/SignIn.html","retryLimit":3,"trimSpacesInPassword":true,"api":"CombinedSigninAndSignup","csrf":"******CcWRHMmZ1WnpUbkFzeCtKZUEzVXh5M05tanhySEVpUHVSaFFHS2gyRGxEU3FsQ0x3ejVMeFNDT1o4bE5najdubkdiMXlEaGhLdFBoN0lMQXc9PTsyMDI1LTA3LTI1VDA0OjUzOjE3Ljg5MTc2NzNaOzNqNHVXanpmbVRncVowcURBVnRvY0E9PTt7Ik9yY2hlc3RyYXRpb25TdGVwIjoxfQ==","transId":"StateProperties=********TY2YTUwNS05MThiLTQyNTItOWJmOC03Mjc1YzVhMTcxMjYifQ","pageViewId":"d53fb63d-e57e-4df3-83f9-7327991636b2","suppressElementCss":false,"isPageViewIdSentWithHeader":false,"allowAutoFocusOnPasswordField":true,"pageMode":1,"config":{"showSignupLink":"False","sendHintOnSignup":"False","includePasswordRequirements":"true","enableRememberMe":"True","forgotPasswordLinkLocation":"none","operatingMode":"Email","announceVerCompleteMsg":"True"},"hosts":{"tenant":"/generacconnectivity.onmicrosoft.com/B2C_1A_MobileLink_SignIn","policy":"B2C_1A_MobileLink_SignIn","static":"https://generacconnectivity.b2clogin.com/static/"},"locale":{"lang":"en"},"xhrSettings":{"retryEnabled":true,"retryMaxAttempts":3,"retryDelay":200,"retryExponent":2,"retryOn":["error","timeout"]}}
2025-07-25 00:53:17.960 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - selfAssertedRequest response 200
2025-07-25 00:53:18.318 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not load login page
2025-07-25 00:53:18.319 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not update devices
java.io.IOException: Error parsing HTML submit form
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.login(GeneracMobileLinkAccountHandler.java:326) ~[?:?]
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.poll(GeneracMobileLinkAccountHandler.java:161) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-07-25 00:54:18.323 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Attempting login
2025-07-25 00:54:18.672 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not load login page
2025-07-25 00:54:18.673 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - parseSettings: {"remoteResource":"https://gpsprodpltazureb2c.blob.core.windows.net/mobile-link/SignIn.html","retryLimit":3,"trimSpacesInPassword":true,"api":"CombinedSigninAndSignup","csrf":"*********HdDN0FSZ0FhamFMejZsUU01KzVGem1KSkUzWFFDbWRqZm1aT2R1ckxDb0dKcTZLS1V6VGZsaHdDL2hoTzV0WkFuK3lVbTNZOGthMEE9PTsyMDI1LTA3LTI1VDA0OjU0OjE5LjI1NzIyNDFaO2J3bVhTQzA3QitQYVJqZ2s3eHRuZGc9PTt7Ik9yY2hlc3RyYXRpb25TdGVwIjoxfQ==","transId":"StateProperties=*******iOiJiOTY2YTUwNS05MThiLTQyNTItOWJmOC03Mjc1YzVhMTcxMjYifQ","pageViewId":"ee0c40b6-35f2-4b5b-a4b9-0fd6d1663c7b","suppressElementCss":false,"isPageViewIdSentWithHeader":false,"allowAutoFocusOnPasswordField":true,"pageMode":1,"config":{"showSignupLink":"False","sendHintOnSignup":"False","includePasswordRequirements":"true","enableRememberMe":"True","forgotPasswordLinkLocation":"none","operatingMode":"Email","announceVerCompleteMsg":"True"},"hosts":{"tenant":"/generacconnectivity.onmicrosoft.com/B2C_1A_MobileLink_SignIn","policy":"B2C_1A_MobileLink_SignIn","static":"https://generacconnectivity.b2clogin.com/static/"},"locale":{"lang":"en"},"xhrSettings":{"retryEnabled":true,"retryMaxAttempts":3,"retryDelay":200,"retryExponent":2,"retryOn":["error","timeout"]}}
2025-07-25 00:54:18.972 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - selfAssertedRequest response 200
2025-07-25 00:54:19.312 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not load login page
2025-07-25 00:54:19.313 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Could not update devices
java.io.IOException: Error parsing HTML submit form
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.login(GeneracMobileLinkAccountHandler.java:326) ~[?:?]
	at org.openhab.binding.generacmobilelink.internal.handler.GeneracMobileLinkAccountHandler.poll(GeneracMobileLinkAccountHandler.java:161) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
2025-07-25 00:54:59.596 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - childHandlerInitialized generacmobilelink:generator:483b1d6aae:826415
2025-07-25 00:54:59.597 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - No device for id 82*****
2025-07-25 00:55:00.590 [DEBUG] [dler.GeneracMobileLinkAccountHandler] - Attempting login
2025-07-25 00:55:01.141 [TRACE] [dler.GeneracMobileLinkAccountHandler] - response data: <!DOCTYPE html>
<!-- Build: 1.1.473.0 -->
<!-- StateVersion: 2.1.1 -->
<!-- DeploymentMode: Production -->
<!-- CorrelationId: db33e849-a15c-43a2-ab25-fc0f490e2aae -->
<!-- DataCenter: CHI -->
<!-- Slice: 001-000 -->
<html lang="en"><head><link rel="icon" href="data:;base64,i*****0KGgo="><script data-container="true" nonce="Z2xVTt+8Naj/EGfpET+QWQ==">var CP = {"list":[{"id":"PasswordResetExchange","description":"RESET PASSWORD"}]};
var SA_FIELDS = {"AttributeFields":[{"UX_INPUT_TYPE":"TextBox","USER_INPUT_TYPE":"TextBox","IS_TEXT":true,"IS_EMAIL":false,"IS_PASSWORD":false,"IS_DATE":false,"IS_RADIO":false,"IS_DROP":false,"IS_TEXT_IN_PARAGRAPH":false,"IS_CHECK_MULTI":false,"IS_LINK":false,"VERIFY":false,"DN":"email","ID":"signInName","U_HELP":"Email address to use for signing in.","PRE":"c****t","DAY_PRE":"0","MONTH_PRE":"0","YEAR_PRE":"0","PAT":"^[+a-zA-Z0-9.!#$%&amp;&#39;^_`{}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]{2,})+$","PAT_DESC":"Please enter a valid email","IS_REQ":true,"IS_RDO":false,"OPTIONS":[]},{"UX_INPUT_TYPE":"Password","USER_INPUT_TYPE":"Password","IS_TEXT":false,"IS_EMAIL":false,"IS_PASSWORD":true,"IS_DATE":false,"IS_RADIO":false,"IS_DROP":false,"IS_TEXT_IN_PARAGRAPH":false,"IS_CHECK_MULTI":false,"IS_LINK":false,"VERIFY":false,"DN":"password","ID":"password","U_HELP":"Enter password","DAY_PRE":"0","MONTH_PRE":"0","YEAR_PRE":"0","IS_REQ":true,"IS_RDO":false,"OPTIONS":[]}]};

Logging onto site is fine using same creds so I know it is not that.
Also tested on various version of OH and all have same error, and all worked fine previous to the update they did. If any of that info helps.
This log snippet was off a OH version 4.2.2 btw.

Yeah, i saw that too, just have not had time to find a solution. I think they are using cloudflare on the login page to verify you are a human. Thats a problem for sure. I’m not sure we can bypass that without having a real browser to try and login…so i may need to come up with some hybrid login solution.

It is still working for me but I haven’t restarted my OH since June 12th. Guess I’m going to avoid upgrading for a bit :slight_smile:

I went with the USB adapter from GenMon and the splitter to keep Mobile Link.. ordered a 15 ft USB cable and ran it into the house with the Pi W2 inside to avoid heat and wifi signal issues.

I used the Api call to scrape the Json data

http://192.168.1.171:8000/cmd/status_json

Then i used the http binding to create the channels

That’s one way to do it.

Since I use MQTT to distribute data around the house anyway (from zigbee sensors and back out to a ESP32 display) I chose that route.

I didn’t have a good way to route a cable into the house, but the nearest AP isn’t that far away so the Pi inside the generator housing still has good reception. And, because it’s connected to the generator battery, an UPS built in.

I didn’t keep the Mobile Link since it’s useless to me anyway, so I just unplugged it and used that serial port on the generator for the Genmon.

I started out with a Pi Zero W2, but had a lot of issues with it, not sure, why. It would drop Wifi connection and/or crash (hard to say when it’s headless), so I first tried an external Wifi dongle, but that didn’t fix the issue, either. So I replaced it with a Pi2 I had laying around and it’s been rock stable since. Just in case you run into issues with the Zero W2.

Thanks for the insight.. ill keep an eye on it. This is my first Pi zero w2. So fingers crossed. Im trying to see how long i can last without MQTT.. I’ve been lucky so far to find work arounds.

It would be cool to see if this binding could support both and allow for cloud or local monitoring over Genmon.

Time to get another one for my father’s Generac.

Well, you could always expose the web interface to the outside, although I wouldn’t without a VPN.

MQTT is just great. Low bandwidth, fast transfer and a lot of stuff supports it. Admittedly mostly open source stuff.

You just set up a mosquitto instance on your machine, define a MQTT thing in OH and add channels depending on the MQTT topics.