GithubHelp home page GithubHelp logo

yracine / device-type.myecobee Goto Github PK

View Code? Open in Web Editor NEW
141.0 67.0 272.0 4.33 MB

SmartThings-ecobee integration

License: Other

Groovy 100.00%
ecobee smartthings ecobee-thermostat smartapp ecobee-device smarthome smartthings-ecobee

device-type.myecobee's People

Contributors

yracine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

device-type.myecobee's Issues

refresh_tokens failure

I wanted to let you know that I installed an ecobee with this custom device type yesterday. (Thanks!) It was working fine. Now I'm getting errors from refresh_tokens, with a log message "need to re-login to ecobee".

The last successful operation I've got is:

2015-12-02 7:20:24.177 AM UTC poll>done for thermostatId =3...

Next log entry:

2015-12-02 7:20:25.569 AM UTC refresh_tokens>exception groo...

Ecobee Thermostat verbose trace is refresh_tokens>exception groovyx.net.http.HttpResponseException: Unauthorized at https://api.ecobee.com/token?grant_type=refresh_token&code=****&client_id=****

(That failure would be 01:20 in my local timezone. I wasn't doing anything on the system at that time.)

There has not been a successful operation since this failure started.

I'll re-auth the device to clear this. But I wanted to share this report in case there might be an issue. Let me know if there is any info I can gather for you.

Init times out

The new update looks great! I am excited to try it out as I've been having random authorization errors with the old pin-style of authorizing.

The issue I face is that I have 3 thermostats and when I choose the 3 of them, the Init app times out. The logs show this:

11‎:‎09‎:‎50‎ ‎AM: error java.util.concurrent.TimeoutException: Execution time exceeded 20 app execution seconds @ line 328
‎11‎:‎09‎:‎40‎ ‎AM: debug pollHandler>Looping thru thermostats, found id 1bd4dfb7-6b14-4519-837a-90d9877e27c3.Kitchen.280512826354, about to poll
‎11‎:‎09‎:‎31‎ ‎AM: debug pollHandler>Looping thru thermostats, found id 1bd4dfb7-6b14-4519-837a-90d9877e27c3.Bedroom.281490952916, about to poll

... If I only select 2 of the thermostats, the initializing works fine. However, if I select all 3 then it times out. For now I just set it up with 2 of my thermostats. I'm thinking a work-around may be to create a 2nd ecobee Init smartapp and install just the 3rd thermostat with that one -- but I haven't tried that yet.

Ecobee API Update: expires_in should be seconds, not minutes

Today ecobee updated their API and their documentation. Of particular note is that the token expires_in time that is returned by the API is now documented as seconds, not minutes. Thus, you will need to update both MyEcobeeInit and MyEcobeeDevice to NOT multiply the returned value by 60 when calculating the expiry time.

Documentation says the token has to be refreshed once every hour, and it should not require a re-login more frequently than once per year...

I'm not sure if this has always been seconds (you know better than I), but if so, it could be the root cause of the token auth timeout issues...

Method to Update

Hi yracine,

I have purchased and installed "My Ecobee Bundle for SmartThings" and also paid and extra $25 for support. Hoping you can help me with a couple questions.

Is there any indication of the Furnace Fan Running other that from modes: (Fan Only, or Heat, or Cool)? I use your smartapps as part of WebCoRE to start ceiling fans and it appears that when the furnace fan continues to run after a heat mode event, there is no indication that the furnace fan is still running and my ceiling fans stop?

Also, is there an easy way to get updates from you on the Smartapps and Device Handlers that I use (DH's = "My Ecobee Device", My Ecobee Switch"; SA = "ecobeeStatetriggerHA", MyEcobeeInit). Possibly by use of GitHub? Could you provide some information for this?

Device Handler Error

When following the provided instructions to create the ST device handler from the code provided in MyEcobeeDevice.txt I receive the following error:

Org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: script_dth_metadata_7d75c11f_f985_4dd1_a10f_bb32bbba35c5: 1: Invalid variable name. Must start with a letter but was:  . At [1:1] @ line 1, column 1. /*** ^ 1 error

After dropping $20 on the code, I'd like to get it working as soon as possible. Any suggestions?

Going back to schedule

The app currently seems to put the thermostat into 'hold'. Which then won't allow for it to go back to schedule at the next scheduled change.

We found this out when in the AM the system didn't pre-heat (Smart Recovery Heat) our house and it was still 17 celcius when we woke up this morning.

Is there a way to make this smartapp only adjust the home/away/sleep settings until the next schedule? or for the next 'X' hrs, or something like that? Ideally it wouldn't actually put a 'hold' on the system and would instead act the same way as the ecobee does when it detects, or doesn't detect motion. (Smart Home/Smart Away instead of 'Away and Hold'.)

I'm not sure if the Ecobee API allows you to access any of those settings. But thought I'd ask.

Update ecobeeChangeMode

I have updated ecobeeChangeMode to support multiple contact sensors, so it can go into an open, or "off", mode when doors are left open for a period of time. Also added multiple switch support, more notification options, notification restrictions to limit when to send notifications, and support for Echo Speaks devices. The UI is streamlined some, hiding extraneous options when not needed.

I will be making a PR against this issue shortly.

I am unable to delete both MyEcobeeInit and EcobeeRemoteSensorInit apps from SmartThings

I am trying to remove the MyEcobeeInit and EcobeeRemoteSensorInit apps from SmartThings so that I can test out the built-in integration and compare it since I've seen some issues with the custom device handlers (e.g. 0% battery on all my remote sensors). Unfortunately, no matter how many times I select these app in SmartThings and use the Delete option nothing happens. The apps cannot be removed. Please fix this.

I tried deleting the apps both from here:
image

And from here:
image

But neither option worked.

if you're going to charge, you need to respond to people who pay you

I'm 100% in support of you wanting to be compensated for your work, and you deserve every penny.

I am not in support of you charging for your work, but then not providing people the code they paid for, nor responding when they write to inquire about it.

It has been 5 days since I paid, and 3 days since I wrote you asking how I get the code I paid for, and no response.

I don't like resorting to posting an issue on your github page, but I'm left with no other choice at this point. This is not an acceptable way to run a project where you ask for peoples' money.

Please provide the community an update on how you will handle payments go forward.

java error messages when installing ecobee3RemoteSensor

My ecobee3 is communicating with the v2 ST hub, but when I execute the ecobee3RemoteSensorsInit, I get to the Which Thermostat panel and select mine, and then when I tap Next I see a white panel with a chaser for a second or two, then blank white, with Done at the top. If I tap Done, I get a red "Error - bad state. Unable to complete page configuration." I've waited a while to see if it ever gets the devices, but no luck.
I see both motion detector and temperature settings published under My Device Types, I've cleared the app cache on the Sony phone (latest Lollipop). I've removed ecobee3RemoteSensorinit from the ST app and reinstalled it.
Live logging shows these errors:


f061d4a9-2c05-4ea7-a2d7-41b44b0d531a 6:26:03 PM: error java.lang.ArrayIndexOutOfBoundsException: 1 @ line 95
f061d4a9-2c05-4ea7-a2d7-41b44b0d531a 6:26:03 PM: debug selectMotionSensors>ecobeeSensors= [null]
0961175e-038d-4c40-bc11-4f602e87798c 6:26:03 PM: error java.lang.NumberFormatException: For input string: "unknown" @ line 3020


Help!
Rick Zehr
[email protected]

Frequent "too many exceptions/errors" messages

Need to re-authenticate frequently. The message "ecobee3RemoteSensorInit>too many exceptions/errors or unauthorized exception, doRequest>exception groovy.net.http.HttpResponseException: Internal Server Error for null (10 errors), need to re-authenticate at ecobee..." This happens almost daily after authenticating and then repeatedly when polling.
img_4323

blank screen

when I start the app it comes up with the correct screen asking me to pick my themostat and I do then when I click next it just comes up with a blank screen. on my log I get

"c479fb25-52e3-487b-86e6-0aae813ae095 9:39:01 PM: debug selectEcobeeSensors>exception java.lang.IllegalArgumentException: Command 'generateRemoteSensorEvents' is not supported by device 7b66613b-7b51-4ca0-a05b-fadb87a45a9c of type 'Ecobee Thermostat'. Supported commands: [refresh, setHeatingSetpoint, setCoolingSetpoint, off, heat, emergencyHeat, cool, setThermostatMode, fanOn, fanAuto, fanCirculate, setThermostatFanMode, auto, setSchedule, ping, generateEvent, raiseSetpoint, lowerSetpoint, resumeProgram, switchMode, switchFanMode] when getting list of Remote Sensors, exiting..."

I have cleared cache nothing changes

SmartThings built in Sync with Repo

Hello,

First of all, I've been using your Ecobee device and smartapps for a couple of weeks and am so impressed with your work. Thank you very much for developing and sharing this. And also thanks for being very active to keep it up to date.

I'm new to GitHub and SmartThings, so perhaps I'm missing something, but I'm trying to find a way to keep things updated. (Sorry if this isn't the right place to ask about this. I couldn't find a way to PM on GitHub)

What I'm wondering is if it's possible to re-organize the files for this repository so that it fits SmartThings' file structure. The reason for that is because SmartThings has a way to quickly download from a GitHub repository within the graph.api.smartthings.com site. However I'm not able to sync your repository with my SmartThings account because apparently the file structure doesn't match what SmartThings is wanting to see. Seems odd, but that's what I was told on the SmartThings Community site. https://community.smartthings.com/t/github-integration-update-from-repo-error/31118/8

I see you have a SmartThingsPublic repository, and I can sync with that, but the ecobee devices and smartaps aren't on there.

Sorry if this is a dumb question and I should be able to do this on my end somehow, but like I said, I'm new to all of this.

Thanks, I appreciate any help.

And I also understand that re-organizing all the files may not be worth your time and I appreciate and understand if that's your reply.

Issue trying to Authenticate in Step 4) Connect Smartthings to the Ecobee portal

Here is the error I am given;

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.reflect.UndeclaredThrowableException physicalgraph.oauth2.RemoteTokenStoreService$$EnhancerBySpringCGLIB$$e8461b89.loadAuthentication() org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager.authenticate(OAuth2AuthenticationManager.java:83) org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:137) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:65) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:69) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)

root cause

java.util.concurrent.ExecutionException: grails.validation.ValidationException: Validation failed: - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'username': rejected value []; codes [physicalgraph.auth.LazyCreateUserCommand.username.blank.error.physicalgraph.auth.LazyCreateUserCommand.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.error.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.username.blank.error,lazyCreateUserCommand.username.blank.error.physicalgraph.auth.LazyCreateUserCommand.username,lazyCreateUserCommand.username.blank.error.username,lazyCreateUserCommand.username.blank.error.java.lang.String,lazyCreateUserCommand.username.blank.error,physicalgraph.auth.LazyCreateUserCommand.username.blank.physicalgraph.auth.LazyCreateUserCommand.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.username.blank,lazyCreateUserCommand.username.blank.physicalgraph.auth.LazyCreateUserCommand.username,lazyCreateUserCommand.username.blank.username,lazyCreateUserCommand.username.blank.java.lang.String,lazyCreateUserCommand.username.blank,blank.physicalgraph.auth.LazyCreateUserCommand.username,blank.username,blank.java.lang.String,blank]; arguments [username,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be blank] - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'fullName': rejected value [null]; codes [physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.physicalgraph.auth.LazyCreateUserCommand.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error,lazyCreateUserCommand.fullName.nullable.error.physicalgraph.auth.LazyCreateUserCommand.fullName,lazyCreateUserCommand.fullName.nullable.error.fullName,lazyCreateUserCommand.fullName.nullable.error.java.lang.String,lazyCreateUserCommand.fullName.nullable.error,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable,lazyCreateUserCommand.fullName.nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,lazyCreateUserCommand.fullName.nullable.fullName,lazyCreateUserCommand.fullName.nullable.java.lang.String,lazyCreateUserCommand.fullName.nullable,nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,nullable.fullName,nullable.java.lang.String,nullable]; arguments [fullName,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be null] - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'email': rejected value [null]; codes [physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.physicalgraph.auth.LazyCreateUserCommand.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error,lazyCreateUserCommand.email.nullable.error.physicalgraph.auth.LazyCreateUserCommand.email,lazyCreateUserCommand.email.nullable.error.email,lazyCreateUserCommand.email.nullable.error.java.lang.String,lazyCreateUserCommand.email.nullable.error,physicalgraph.auth.LazyCreateUserCommand.email.nullable.physicalgraph.auth.LazyCreateUserCommand.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.email.nullable,lazyCreateUserCommand.email.nullable.physicalgraph.auth.LazyCreateUserCommand.email,lazyCreateUserCommand.email.nullable.email,lazyCreateUserCommand.email.nullable.java.lang.String,lazyCreateUserCommand.email.nullable,nullable.physicalgraph.auth.LazyCreateUserCommand.email,nullable.email,nullable.java.lang.String,nullable]; arguments [email,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be null] com.ning.http.client.providers.netty.future.NettyResponseFuture.done(NettyResponseFuture.java:220) com.ning.http.client.providers.netty.handler.HttpProtocol.finishUpdate(HttpProtocol.java:194) com.ning.http.client.providers.netty.handler.HttpProtocol.handleChunk(HttpProtocol.java:451) com.ning.http.client.providers.netty.handler.HttpProtocol.handle(HttpProtocol.java:474) com.ning.http.client.providers.netty.handler.Processor.messageReceived(Processor.java:88) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.handler.stream.ChunkedWriteHandler.handleUpstream(ChunkedWriteHandler.java:142) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.handler.codec.http.HttpContentDecoder.messageReceived(HttpContentDecoder.java:135) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:459) org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536) org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.handler.codec.http.HttpClientCodec.handleUpstream(HttpClientCodec.java:92) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:745)

root cause

grails.validation.ValidationException: Validation failed: - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'username': rejected value []; codes [physicalgraph.auth.LazyCreateUserCommand.username.blank.error.physicalgraph.auth.LazyCreateUserCommand.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.error.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.username.blank.error,lazyCreateUserCommand.username.blank.error.physicalgraph.auth.LazyCreateUserCommand.username,lazyCreateUserCommand.username.blank.error.username,lazyCreateUserCommand.username.blank.error.java.lang.String,lazyCreateUserCommand.username.blank.error,physicalgraph.auth.LazyCreateUserCommand.username.blank.physicalgraph.auth.LazyCreateUserCommand.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.username,physicalgraph.auth.LazyCreateUserCommand.username.blank.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.username.blank,lazyCreateUserCommand.username.blank.physicalgraph.auth.LazyCreateUserCommand.username,lazyCreateUserCommand.username.blank.username,lazyCreateUserCommand.username.blank.java.lang.String,lazyCreateUserCommand.username.blank,blank.physicalgraph.auth.LazyCreateUserCommand.username,blank.username,blank.java.lang.String,blank]; arguments [username,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be blank] - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'fullName': rejected value [null]; codes [physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.physicalgraph.auth.LazyCreateUserCommand.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.error,lazyCreateUserCommand.fullName.nullable.error.physicalgraph.auth.LazyCreateUserCommand.fullName,lazyCreateUserCommand.fullName.nullable.error.fullName,lazyCreateUserCommand.fullName.nullable.error.java.lang.String,lazyCreateUserCommand.fullName.nullable.error,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.fullName,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.fullName.nullable,lazyCreateUserCommand.fullName.nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,lazyCreateUserCommand.fullName.nullable.fullName,lazyCreateUserCommand.fullName.nullable.java.lang.String,lazyCreateUserCommand.fullName.nullable,nullable.physicalgraph.auth.LazyCreateUserCommand.fullName,nullable.fullName,nullable.java.lang.String,nullable]; arguments [fullName,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be null] - Field error in object 'physicalgraph.auth.LazyCreateUserCommand' on field 'email': rejected value [null]; codes [physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.physicalgraph.auth.LazyCreateUserCommand.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.email.nullable.error,lazyCreateUserCommand.email.nullable.error.physicalgraph.auth.LazyCreateUserCommand.email,lazyCreateUserCommand.email.nullable.error.email,lazyCreateUserCommand.email.nullable.error.java.lang.String,lazyCreateUserCommand.email.nullable.error,physicalgraph.auth.LazyCreateUserCommand.email.nullable.physicalgraph.auth.LazyCreateUserCommand.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.email,physicalgraph.auth.LazyCreateUserCommand.email.nullable.java.lang.String,physicalgraph.auth.LazyCreateUserCommand.email.nullable,lazyCreateUserCommand.email.nullable.physicalgraph.auth.LazyCreateUserCommand.email,lazyCreateUserCommand.email.nullable.email,lazyCreateUserCommand.email.nullable.java.lang.String,lazyCreateUserCommand.email.nullable,nullable.physicalgraph.auth.LazyCreateUserCommand.email,nullable.email,nullable.java.lang.String,nullable]; arguments [email,class physicalgraph.auth.LazyCreateUserCommand]; default message [{0} cannot be null] physicalgraph.auth.UserService.createUserFromGlobal(UserService.groovy:209) physicalgraph.auth.UserService.lazyGetOrCreateFromGlobalOAuth(UserService.groovy:153) physicalgraph.logging.TimerLoggingInterceptor.invoke(TimerLoggingInterceptor.groovy:54) physicalgraph.oauth2.RemoteTokenStoreService$Requests$2.onCompleted(RemoteTokenStoreService.groovy:376) com.ning.http.client.providers.netty.future.NettyResponseFuture.getContent(NettyResponseFuture.java:177) com.ning.http.client.providers.netty.future.NettyResponseFuture.done(NettyResponseFuture.java:214) com.ning.http.client.providers.netty.handler.HttpProtocol.finishUpdate(HttpProtocol.java:194) com.ning.http.client.providers.netty.handler.HttpProtocol.handleChunk(HttpProtocol.java:451) com.ning.http.client.providers.netty.handler.HttpProtocol.handle(HttpProtocol.java:474) com.ning.http.client.providers.netty.handler.Processor.messageReceived(Processor.java:88) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.handler.stream.ChunkedWriteHandler.handleUpstream(ChunkedWriteHandler.java:142) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.handler.codec.http.HttpContentDecoder.messageReceived(HttpContentDecoder.java:135) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:459) org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536) org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.handler.codec.http.HttpClientCodec.handleUpstream(HttpClientCodec.java:92) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 (Ubuntu) logs.

Apache Tomcat/7.0.52 (Ubuntu)

Getting an error

I'm getting the following error:

No signature of method: script14466153264571659291141.metadata() is applicable for argument types: (script14466153264571659291141$_run_closure2) values: [script14466153264571659291141$_run_closure2@22fe8d94] Possible solutions: getMetadata(), getState(), setState(java.lang.Object), metaClass(groovy.lang.Closure)

Having issues once installed.

I was able to get everything installed and my iphone shows the new ecobee device. I opened it and hit refresh and it did update to what my thermostat was currently doing. The problem was when I tried to use any of the buttons in the new smart things device. When I hit the "heat" button it turns to "off" and my thermostat did turn off. If I hit it again when it says off, the button then says "heat" but on my thermostat it actually puts the system into cool mode.

Most the other buttons don't do anything when pressed. I would assume the little home button should give you an option to set it to "away" but it doesn't.

Also the arrows that seem like they should adjust the temperature up or down, do nothing when pressed.

I did just buy my ecobee3 and smart things hub so I'm not sure if that is part of the problem.

unexpected error occurred

Getting this error during the instalation in my phone, specifically on the screen of setting modes. App: remote sensors init. BTW: nice work here!

setThisTstatClimate() issues

  1. Calling myEcobeeDevice.home() will do nothing if the currently SCHEDULED climate is "Home", ditto for the other modes - it doesn't change if the requested climateName is the same as the currently scheduled Climate. This, if the Tstat is in "Home" and you call myEcobeeDevice.away() it will change the attribute "setClimate" (and thermostat) to Away, while "climateName" will remain "Home". Then when you try to set it back to Home, the check in setThisTstatClimate() will find that the requested climateName == currentValue('climateName') and return without doing anything.

  2. in the above case, a simple call to resumeProgram("") will get the thermostat to "Home" instead of overloading another Hold event. An optimization is to call resumeProgram("") BEFORE checking the provided climateName == currentValue('climateName'), thereby skipping the overhead of calling setClimate() - side benefit is that the thermostat actually returns to the desired program, instead of getting a hold. You might choose to look at the hold preference == nextTransition and use resumeProgram(), else do the setClimate() to set the Hold.

  3. Your check for exceptionCheck.contains('done') might get a false positive, since several other routines are called that each update verboseTrace with strings that include 'done'. Just to be sure, I've changed the check to be specifically for the complete string "setClimate>done"

  4. You use the reserved word "sleep" as a command. I don't believe it is possible to overload the system's "sleep()" - at least, I get errors if I try to call myEcobeeThermostat.sleep(). I changed mine to "night()", you might choose another term (asleep, or maby you can get away with "Sleep()".

My fixes to #1, #2 & #3 are:

void setThisTstatClimate(climateName) {
    def thermostatId= determine_tstat_id("")        
    def currentProgram = device.currentValue("climateName") 
    def currentProgramType = device.currentValue("programType").trim().toUpperCase()
    if (currentProgramType == 'VACATION') {
        if (settings.trace) {
            log.debug "setThisTstatClimate>thermostatId = ${settings.thermostatId},cannot do the prog switch due to vacation settings"
            sendEvent name: "verboseTrace", value:
                    "setThisTstatClimate>thermostatId = ${settings.thermostatId},cannot do the prog switch due to vacation settings"
        }
        return
    }
    else if (currentProgramType == 'HOLD') {
        resumeProgram("")                       // let's get back to normal first
        currentProgram = device.currentValue("climateName")     // get what it is NOW
        log.trace "Resuming scheduled climate: ${currentProgram}"
    }

    // If the requested climate is different from current one, then change it to the given climate
    if (currentProgram.toUpperCase() != climateName.trim().toUpperCase()) {
//      resumeProgram("")

        setClimate(thermostatId, climateName)
        def exceptionCheck=device.currentValue("verboseTrace")
        if (exceptionCheck.contains("setClimate>done")) {
            log.trace "setClimate ${climateName} done"
            sendEvent(name: 'programScheduleName', value: climateName)
            sendEvent(name: 'programNameForUI', value: climateName)
// No presence in my version (BAB)
//          if (climateName.toUpperCase().contains('AWAY')) { 
//              sendEvent(name: "presence", value: "non present")
//          } else {        
//              sendEvent(name: "presence", value: "present")
//          }
        } else {
            log.trace "setClimate ${climateName} failed: ${exceptionCheck}"
        }

//      log.trace "setThisTstatClimate> poll()"
        poll() // to refresh the values in the UI
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.