Google-Nest Offical Device Access Console Finally Released!

I did the same thing and had the topic name in the subscriber_id section instead of the subscription name. This helped me get my thermostat finally home assistantized, thanks!

I have the exact same problem. I have two thermostats (same model) plus some cameras. badnest was doing just fine with all of them, but then a few days back HA stopped seeing one of them. I refreshed my cookie information but no luck.

I then shifted to native Nest integration, see all Nest devices including the offending thermostat in ā€˜Step 2ā€™ and give the permissions, but HA just doesnā€™t see this particular thermostat. All other Nest devices show up but not this one thermostat.

Did you make any progress in fixing the issue you are having?

If you manually send calls to the API following the instructions are they returned?
https://developers.google.com/nest/device-access/use-the-api#list_structures_and_devices

I would like to understand if this is an API issue or a bug in the python library, so knowing what the API returns would help me. Thanks!

Hi I am almost there but think something is set wrong.
When using my phone to connect as external client as asked in step 28 I get a
No URL available when trying to add nest integration
I step 14 I entered http://xxx.ddns.net:8123

If trying to add nest integration locally using 192.168ā€¦:8123 I get a
Canā€™t link to Nest Home
Contact Nest Home if the issue persists

I got a feeling my step 14 is wrong
please help me correct.
When I do should I need to re do all the steps?

In step 14 the URL should also contain auth/external/callback. Also saw some people have success removing port number off, so it would be http://xxx.ddns.net/auth/external/callback

Maarten wrote an incredible step by step guide with screenshots for every step. I think everyone will find this very helpful:

4 Likes

thanks for your help did the changes as mentioned
http://xxx.ddns.net/auth/external/callback

and still getting
No URL available when trying to add nest integration on my phone with wifi off so I can access using
http://xxx.ddns.net:8123 through HA companion app and tried also chrome on my phone

Did make the necessary changes to
Client-ID, Client Secret as these did change when changed URL address.

what am I doing wrong?

In homeassistant make sure you have internal and external URL configured.
in the UI go to configuration -> general -> scroll down until you see internal and external URLs. -> update to correct values.
image

getting closer :slight_smile:
now after I log in with http://xxx.ddns.net:8123
when adding nest integration asks for gmail account so choose the one I set up which is the same as Nest account
And getting
Canā€™t link to Nest Home
Contact Nest Home if the issue persists

In HA external tried both
http://xxx.ddns.net
and
http://xxx.ddns.net:8123
rebooted after every change

my configuration file is

nest:
  client_id:  xxxxxx-xxxxxxxxxx.apps.googleusercontent.com 
  client_secret:  xxxxxxxxxxxxxxx
  project_id: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  subscriber_id:  projects/nest-home-xxxxxx/subscriptions/Nest

have you tried the same procedure in incognito mode?

yes same results :frowning:

just checking that you are attempting this from outside your network?

1 Like

If your external URL is http://xxx.ddns.net:8123 then your OAuth URI should be http://xxx.ddns.net:8123/auth/external/callback,
Also verify you can access HA via companion app using http://xxx.ddns.net:8123 with wi-fi off.

Sounds like you might have missed page 4 where you take the nest pub/sub topic and create a subscription for it in google cloud console? That or, your accounts for google cloud and nest are different but you say they are the same?

Thank you!!! Iā€™ve tried for several hours to set up the Nest integration without success. Then I found your helpful instructions and got it up and running in no time.

Which thermostat card are you using or have you shared it? I am using the HACS Climate thermostat card for my two Nest thermostats. It is close but I was wondering if something else was even better. Thanks

Ok thanks for the feedback. Very strange on my side. I have a fixed image that refreshes every 5 seconds, even set to auto. Can you please send me your card code to display the stream on lovelace?

Thanks.

Iā€™d like to see this too but it looks like this new API doesnā€™t allow control of hot water yet.

1 Like

Iā€™m still working on things but my panet has two cards currently.
1, The native HA Climate card that Iā€™ve been modifying with vertical and horizontal stacksā€¦

type: 'custom:vertical-stack-in-card'
cards:
  - type: thermostat
    entity: climate.living_room
    style: |
      ha-card {
        color: white;
        box-shadow: none;
        background:
        {% if is_state_attr('climate.living_room', 'hvac_action', 'heating') %}
          #EB6D00
        {% endif %} ;
        background: 
        {% if is_state_attr('climate.living_room', 'hvac_action', 'cooling') %}
          blue 
        {% endif %} ;
        background:
        {% if is_state_attr('climate.living_room', 'hvac_action', 'off') %}
          #373F48
        {% endif %} ;
      }
    theme: iOS Dark Mode
  - type: entities
    entities:
      - entity: sensor.living_room_humidity
        name: Inside Humidity
        icon: 'hass:none'
      - entity: sensor.openweathermap_temperature
        name: Outside Temp.
        icon: 'hass:none'
    style: |
      ha-card {
        color: white;
        box-shadow: none;
        background:
        {% if is_state_attr('climate.living_room', 'hvac_action', 'heating') %}
          #EB6D00
        {% endif %} ;
        background: 
        {% if is_state_attr('climate.living_room', 'hvac_action', 'cooling') %}
          blue 
        {% endif %} ;
        background:
        {% if is_state_attr('climate.living_room', 'hvac_action', 'off') %}
          #373F48
        {% endif %} ;
      }
  - type: horizontal-stack
    cards:
      - type: 'custom:button-card'
        style: |
          ha-card { 
            font-size: 0.8rem
            }
        entity: input_select.hvac_mode
        name: MODE
        show_name: true
        tap_action:
          action: call-service
          service: input_select.select_next
          service_data:
            entity_id: input_select.living_room_hvac_mode
        color_type: icon
        state:
          - operator: template
            value: |
              [[[ return states['climate.living_room'].state === 'off' ]]]
            icon: 'mdi:power'
            color: white
          - operator: template
            value: |
              [[[ return states['climate.living_room'].state === 'heat' ]]]
            icon: 'mdi:fire'
            color: 'rgb(239, 140, 0)'
          - operator: template
            value: |
              [[[ return states['climate.living_room'].state === 'cool' ]]]
            color: blue
            icon: 'mdi:snowflake'
        styles:
          card:
            - background-color: |
                [[[
                  if (states['climate.living_room'].attributes.hvac_action == 'heating') 
                    return '#EB6D00';
                  if (states['climate.living_room'].attributes.hvac_action == 'cooling')
                    return 'blue';
                  else return '#373F48';
                ]]]
            - color: white
        show_state: false
      - type: 'custom:button-card'
        style: |
          ha-card { 
            font-size: 0.8rem
            }
        entity: input_select.preset_mode
        name: ECO
        label: ECO
        tap_action:
          action: call-service
          service: input_select.select_next
          service_data:
            entity_id: input_select.living_room_preset_mode
        color_type: icon
        color: white
        icon: 'mdi:leaf-off'
        state:
          - operator: template
            value: >
              [[[ return states['climate.living_room'].attributes.preset_mode ==
              'eco' ]]]
            icon: 'mdi:leaf'
            color: green
        show_state: false
        show_name: true
        styles:
          card:
            - background-color: |
                [[[
                  if (states['climate.living_room'].attributes.hvac_action == 'heating') 
                    return '#EB6D00';
                  if (states['climate.living_room'].attributes.hvac_action == 'cooling')
                    return 'blue';
                  else return '#373F48';
                ]]]
            - color: white
      - type: 'custom:button-card'
        style: |
          ha-card { 
            font-size: 0.8rem
            }
        entity: climate.living_room
        name: SCHEDULE
        action: url
        navigation_path: 'https://home.nest.com'
        color_type: card
        icon: 'mdi:calendar-clock'
        show_state: false
        show_name: true
        styles:
          card:
            - background-color: |
                [[[
                  if (states['climate.living_room'].attributes.hvac_action == 'heating') 
                    return '#EB6D00';
                  if (states['climate.living_room'].attributes.hvac_action == 'cooling')
                    return 'blue';
                  else return '#373F48';
                ]]]
            - color: white
      - type: 'custom:button-card'
        style: |
          ha-card { 
            font-size: 0.8rem
            }
        entity: climate.living_room
        name: HISTORY
        action: url
        navigation_path: 'https://home.nest.com'
        color_type: card
        icon: 'mdi:progress-clock'
        show_state: false
        show_name: true
        styles:
          card:
            - background-color: |
                [[[                  if (states['climate.living_room'].attributes.hvac_action == 'heating') 
                    return '#EB6D00';
                  if (states['climate.living_room'].attributes.hvac_action == 'cooling')
                    return 'blue';
                  else return '#373F48';
                ]]]
            - color: white

SCHEDULE and HISTORY are just URL links to Nest.

  1. This custom:thermostat_card. Orange and blue dials work as does temp up/down but no Mode control or Eco Leaf display as his code currently tests for off/away not none/eco. I am going to replace it into my first card when I get a moment or two!:
type: 'custom:thermostat-card'
entity: climate.living_room
chevron_size: 100
hvac:
  states:
    'off': 'off'
    cooling: cool
    heating: heat
  attribute: hvac_action
away:
  sensor:
    sensor: sensor.living_room_eco_mode

Iā€™ve been trying to decipher the python code but I am a beginner at python.

On the first card,
My Mode and Eco controls are using these helpers:


I created them from yaml in an effort to try to automate creating them but no success yet.
You can use the UI to create them like this (changing the naming of course):

and the input_select.living_room_preset_mode Options would be none and eco and icon mdi:leaf
Plus two automations to trigger off of the input_selects:

alias: Living Room - HVAC Mode
description: ''
trigger:
  - platform: state
    entity_id: input_select.living_room_hvac_mode
condition: []
action:
  - service: climate.set_hvac_mode
    data:
      hvac_mode: '{{ states.input_select.living_room_hvac_mode.state | lower }}'
    entity_id: climate.living_room
mode: single
alias: Living Room Preset Mode
description: ''
trigger:
  - platform: state
    entity_id: input_select.living_room_preset_mode
condition: []
action:
  - service: climate.set_preset_mode
    data:
      preset_mode: '{{ states.input_select.living_room_preset_mode.state | lower }}'
    entity_id: climate.living_room
mode: single

Iā€™ve integrated the custom:thermostat-card:

.Still more fixes to doā€¦

3 Likes

Apologies, couldnā€™t test it out earlier. Gave it another shot today - removed integration from HA, manually removed all ā€˜badnestā€™ devices, removed the truant thermostat from my Google account, did a factory reset of the thermostat, added it back to my account, and then added the native integration again. And this time it worked!!

Do not know what part of the above process fixed it for me. Maybe the combination of removing from my account, factory reset and adding it back again did the trick.

Thank you for the help folks, especially Jamesā€™ step by step guide.

Interesting, i havenā€™t run into that. Is this heplful?

Is this happening due to C to F conversions?