Cannot share matter nest thermostat from google home app

When trying to go through the share flow from the Google home app I get an (error code 1)
In the matter server logs I see

2025-08-24 14:10:45.499 (Dummy-2) INFO [chip.ChipDeviceCtrl] Established secure session with Device
2025-08-24 14:10:45.747 (Dummy-2) CHIP_ERROR [chip.native.-] Unable to find PAA, err: src/credentials/attestation_verifier/FileAttestationTrustStore.cpp:177: CHIP Error 0x0000004A: CA certificate not found, PAI's AKID: 84:6F:40:C3:B2:01:E3:DE:C4:CF:07:0C:21:A6:1D:D3:15:D2:8B:8F
2025-08-24 14:10:45.748 (Dummy-2) CHIP_ERROR [chip.native.CTL] Error on commissioning step 'AttestationVerification': 'src/controller/CHIPDeviceController.cpp:1291: CHIP Error 0x00000020: Failed Device Attestation'
2025-08-24 14:10:45.748 (Dummy-2) CHIP_ERROR [chip.native.CTL] Failed verifying attestation information. Now checking DAC chain revoked status.
2025-08-24 14:10:45.748 (Dummy-2) CHIP_ERROR [chip.native.CTL] Failed in verifying 'Attestation Information' command received from the device: err 101 (PAA not found in DCL and/or local PAA trust store)
2025-08-24 14:10:45.748 (Dummy-2) CHIP_ERROR [chip.native.CTL] Error on commissioning step 'AttestationRevocationCheck': 'src/controller/CHIPDeviceController.cpp:1338: CHIP Error 0x00000020: Failed Device Attestation'
2025-08-24 14:10:45.771 (Dummy-2) CHIP_ERROR [chip.native.EM] Failed to send Solitary ack for MessageCounter:241160112 on exchange 40469i with Node: <0000000000000000, 0>:src/messaging/ExchangeContext.cpp:99: CHIP Error 0x00000002: Connection aborted
2025-08-24 14:10:45.771 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to commission: src/controller/CHIPDeviceController.cpp:1338: CHIP Error 0x00000020: Failed Device Attestation
2025-08-24 14:10:45.772 (MainThread) ERROR [matter_server.server.client_handler] [139630734008464] Error while handling: commission_with_code: Commission with code failed for node 1.
2025-08-24 14:10:47.085 (MainThread) INFO [matter_server.server.device_controller] Starting Matter commissioning with code using Node ID 2.
2025-08-24 14:11:17.089 (Dummy-2) CHIP_ERROR [chip.native.CTL] Discovery timed out
2025-08-24 14:11:17.089 (Dummy-2) CHIP_ERROR [chip.native.ZCL] Secure Pairing Failed
2025-08-24 14:11:17.089 (Dummy-2) WARNING [chip.ChipDeviceCtrl] Failed to establish secure session to device: src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp:96: CHIP Error 0x00000003: Incorrect state
2025-08-24 14:11:17.090 (MainThread) ERROR [matter_server.server.client_handler] [139630734008464] Error while handling: commission_with_code: Commission with code failed for node 2.

Sharing an Sonoff matter MINIR4M works just fine

Well, there is not a communication problem as Matter Server was able to establish a secure session with the device, but the Matter Server essentially says that the device is not a valid Matter device because Matter Server could not find a certificate/chain to “attest” to the device being a valid Matter device.

I really don’t know why Google Home would allow the device to be commissioned on its Matter fabric unless Google Home keeps its own stash of certificates for Nest devices and hasn’t releases these certificates to Matter.

Interessting thought. Recently I heard that the IKEA matter bridge doesn’t share/forward matter devices that are from other brands than IKEA themselves…

Walled gardens protect their walled gardens :flower_playing_cards:

I ended up getting around this by using Guide: Bypass matter attestation verifier to get the matter server to skip verifying the certificate. That isn’t ideal but worked for me

This seems more complicated than jailbreaking your phone :wink:
But at least something exist and working (at the moment) to don’t be forced cloud connecting your matter device before being able to use is it :bulb:

In anyway if you prefer ownership and weird things like right to repair or extend you probably skip all matter devices… :man_shrugging:

I ran into the same issue with the certificate not being found. After much tinkering (with help from Gemini) I was able to link it via the Advanced SSH & Web Terminal and executing this script.
Given that this works by forcing the download of the certificates, I’m curious to know why they are not already being downloaded?

Sharing script to assist others:

# 1. Update with your FRESH 11-digit code from Google Home
# Pull a code from the Home app in thermostat settings > device information > Linked Matter apps > Link app > Use pairing

CODE="30573044457"

echo "--- Phase 1: Injecting Missing Google Roots ---"

# We use Python to download the missing Dev & Prod roots directly into the server
docker exec addon_core_matter_server python3 -c "
import urllib.request, os

# Ensure the credentials directory exists
os.makedirs('/data/credentials', exist_ok=True)
os.chdir('/data/credentials')

# These URLs match the AKID 84:6F... seen in your error logs
urls = [
    'https://raw.githubusercontent.com/project-chip/connectedhomeip/master/credentials/development/paa-root-certs/paa-root-cert-test-goog.der',
    'https://pki.goog/matter/Google_Matter_Root_CA_2023.crt'
]

print('Downloading certificates...')
for url in urls:
    try:
        filename = url.split('/')[-1]
        urllib.request.urlretrieve(url, filename)
        print(f'Successfully saved: {filename}')
    except Exception as e:
        print(f'Error downloading {url}: {e}')

print('Verifying /data/credentials content:')
print(os.listdir('.'))
"

echo "--- Phase 2: Restarting Server to Load Certificates ---"
echo "This is required for the SDK to index the new files."
docker restart addon_core_matter_server
echo "Waiting 45 seconds for Matter Server to boot..."
sleep 45

echo "--- Phase 3: Executing Force-Pairing ---"

docker exec -it addon_core_matter_server python3 -c "
import asyncio, aiohttp, sys
from matter_server.client import MatterClient

async def main():
    setup_code = '$CODE'
    url = 'ws://core-matter-server:5580/ws'
    
    print(f'Connecting to Matter Server at {url}...')
    try:
        async with aiohttp.ClientSession() as session:
            async with MatterClient(url, session) as client:
                await client.connect()
                print('Connected.')
                
                print(f'Sending commission command for {setup_code}...')
                print('Flags: network_only=True, allow_attestation_failure=True')
                
                # With the certificate in place, this should now succeed
                res = await client.send_command(
                    'commission_with_code', 
                    code=setup_code,
                    network_only=True,
                )
                print(f'\n--- SUCCESS! ---')
                print(f'Result: {res}')
                print('Your Nest Thermostat should now appear in Home Assistant.')
                
    except Exception as e:
        print(f'\nCommissioning Failed: {e}')
        if 'Connection refused' in str(e):
            print('The server is still starting up. Wait 10 seconds and try running this python block again.')

asyncio.run(main())
"

If you don’t mind if I ask,

  • what was the original error log
  • what device is it?