Blink Binding

I’m getting the same issue
COMMUNICATION_ERROR
Blink API Call unsuccessful <Status 403>

I can access the http://openhabian:8080/settings/things/blink:account:3797dc92ee to enter a pin, but blink is not sending me the pin.

Would anyone have some advice? Thanks

I still have the same problem… No chance to connect

@digitalgeek.me did you find a solution?

Unfortunately not :cry:

Had another go, still can’t get blink to send me the code, so stuck. Does anyone have any ideas what to try next?

If I try curl I get the response {“message”:“An app update is required”}

curl -X POST "https://rest-u008.immedia-semi.com/api/v4/account/login" \
-H "Content-Type: application/json" \
-H "User-Agent: Blink/6.5.0 (iPhone; iOS 16.3; Scale/2.00)" \
-d '{"email": "johnsmith@gmail.com"}'

If I just enter a random code on the /blink/myBlinkAccount page I get the following error

java.lang.IllegalArgumentException: Trying to do 2FA without a login
        at org.openhab.binding.blink.internal.service.AccountService.verifyPin(AccountService.java:83) ~[?:?]
        at org.openhab.binding.blink.internal.servlet.AccountVerificationServlet.doPost(AccountVerificationServlet.java:122) ~[?:?]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[bundleFile:4.0.4]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[bundleFile:4.0.4]
        at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) ~[?:?]
        at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) ~[?:?]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[?:?]
        at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[?:?]
        at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:113) ~[?:?]
        at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:334) ~[?:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[?:?]
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[?:?]
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.54.v20240208]
        at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) ~[?:?]
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) ~[bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.54.v20240208]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.54.v20240208]
        at java.lang.Thread.run(Thread.java:840) [?:?]

I recently updated to version 4.3.4 in the hope that I could finally get the Blink binding to work, but it still won’t send me the 2FA PIN.

I have tried adding the account both via the UI and using a things file with the following configuration:

Bridge blink:account:myBlinkAccount "Blink Account" [
    email="MYEMAIL",
    password="MYPASSWORD",
    pollingInterval=120 // Check Blink status every 120 seconds
] { }

The username and password are the same ones I use in the Blink app.

Has anyone managed to get this working recently? If so, could you outline the steps? I must be missing something, or perhaps no one is using this binding anymore!

It’s been incredibly frustrating how long I’ve been trying to get this to work.

Here are the most recent logs:

14:07:56.518 INFO openhab.event.ThingStatusInfoChangedEvent Thing 'blink:account:myBlinkAccount' changed from UNINITIALIZED to UNINITIALIZED (HANDLER_MISSING_ERROR)
14:07:59.227 INFO org.openhab.core.model.core.internal.ModelRepositoryImpl Loading model 'blink.things'
14:07:59.245 INFO openhab.event.ThingStatusInfoChangedEvent Thing 'blink:account:myBlinkAccount' changed from UNINITIALIZED to INITIALIZING
14:07:59.252 INFO openhab.event.ThingStatusInfoChangedEvent Thing 'blink:account:myBlinkAccount' changed from INITIALIZING to OFFLINE (CONFIGURATION_PENDING): Wait for login
14:07:59.252 DEBUG org.openhab.binding.blink.internal.handler.AccountHandler Registering 2FA servlet
14:07:59.265 DEBUG org.openhab.binding.blink.internal.handler.AccountHandler Generating new Client ID, starting new 2FA process
14:07:59.267 DEBUG org.openhab.binding.blink.internal.handler.AccountHandler Logging in to Blink servers with generated client id BlinkCamera_8166-26-55-30-953532
14:07:59.476 ERROR org.openhab.binding.blink.internal.handler.AccountHandler Error connecting to Blink servers with given credentials

Hi, yes im using it :slight_smile:
Just checking that you have not got the binding from the addon store installed? It needs to be the manually added jar file.

I still can‘t use it as well.
Installed manually, not via store and can’t get the PIN

THANK YOU !

I’m pleased to say it’s now working. I did have both the jar and the addon store version installed. But I guess it was using the addon store version as that was a later version.

I removed both versions that added the jar, then I got the text message from blink to complete the 2fa pin.

Here are my files that are working, in case they may be of use to others. I can’t get my doorbell camera working, but the other 2 are fine and I can now alarm the system from openhab!

blink.things

Bridge blink:account:myBlinkAccount "Blink Account" [
    email="EMAIL",
    password="PASSWORD",
    pollingInterval=240 // Check Blink status was 120 seconds
] {
    
    Thing network homeNetwork "Home" [
        networkId="ID**"
    ]

    Thing camera backGardenCamera "Back Garden Camera" [
        networkId="ID**",
        cameraId="ID**",
        cameraType="CAMERA"
    ]

    Thing camera sideCamera "Side Camera" [
        networkId="ID**",
        cameraId="ID**",
        cameraType="CAMERA"
    ]

}

** Got the id from discovering via UI.
blink.items

// === NETWORK (Arm / Disarm) ===
Switch BlinkHomeArmed "Home Armed" <lock> { channel="blink:network:myBlinkAccount:homeNetwork:armed" }

// === BACK GARDEN CAMERA ===
Switch             BlinkBackGardenMotion           "Motion Detection"                           <motion>      { channel="blink:camera:myBlinkAccount:backGardenCamera:motiondetection" }
Switch             BlinkBackGardenMotionDetected   "Motion Dectected [%s]"                      <motion>      { channel="blink:camera:myBlinkAccount:backGardenCamera:motionTriggered" }
Switch             BlinkBackGardenLowBattery       "Low Battery [%s]"                           <battery>     { channel="blink:camera:myBlinkAccount:backGardenCamera:battery" }
Number:Temperature BlinkBackGardenTemperature      "Temperature [%.1f °C]"                      <temperature> { channel="blink:camera:myBlinkAccount:backGardenCamera:temperature" }
Switch             BlinkBackGardenUpdateThumb      "Update Image"                               <returnpipe>  { channel="blink:camera:myBlinkAccount:backGardenCamera:setThumbnail" }
DateTime           BlinkBackGardenThumbLastUpdated "Last Event [%1$td/%1$tm/%1$ty %1$tH:%1$tM]" <time>        { channel="blink:camera:myBlinkAccount:backGardenCamera:getThumbnail" [profile="timestamp-update"] }
Image              BlinkBackGardenThumbnail        "Last Thumbnail"                             <image>       { channel="blink:camera:myBlinkAccount:backGardenCamera:getThumbnail" }

// === SIDE CAMERA ===
Switch             BlinkSideLowBattery       "Low Battery [%s]"                           <battery>     { channel="blink:camera:myBlinkAccount:sideCamera:battery" }
Number:Temperature BlinkSideTemperature      "Temperature [%.1f °C]"                      <temperature> { channel="blink:camera:myBlinkAccount:sideCamera:temperature" }
Switch             BlinkSideUpdateThumb      "Update Image"                               <returnpipe>  { channel="blink:camera:myBlinkAccount:sideCamera:setThumbnail" }
DateTime           BlinkSideThumbLastUpdated "Last Event [%1$td/%1$tm/%1$ty %1$tH:%1$tM]" <time>        { channel="blink:camera:myBlinkAccount:sideCamera:getThumbnail" [profile="timestamp-update"] }
Image              BlinkSideThumbnail        "Last Thumbnail"                             <image>       { channel="blink:camera:myBlinkAccount:sideCamera:getThumbnail" }

blink.sitemap

		// Cameras
		Text item=BlinkHomeArmed  label="Cameras [%s]" icon="camera" {
			Frame label="System" {
				Switch item=BlinkHomeArmed label="Cameras Armed"
			}
			Frame label="Back Garden Camera" {
				//Switch item=BlinkBackGardenMotion 
				//Text   item=BlinkBackGardenLowBattery
				Text   item=BlinkBackGardenTemperature
				Switch item=BlinkBackGardenUpdateThumb mappings=[ON=Update]
				Text   item=BlinkBackGardenThumbLastUpdated
				//Text   item=BlinkBackGardenMotionDetected	
				Image  item=BlinkBackGardenThumbnail			
			}
			Frame label="Side Camera" {
				Text   item=BlinkSideTemperature
				Switch item=BlinkSideUpdateThumb mappings=[ON=Update]
				Text   item=BlinkSideThumbLastUpdated
				Image  item=BlinkSideThumbnail				
			}
		}