Skip to content

Conversation

@yunusdemir
Copy link

@yunusdemir yunusdemir commented Feb 26, 2025

Closes #20

I've been able to confirm the CO2-sensor data in HA, but the temperature and humidity aren't shown for me. I think we'd need to use a different API route for that. It seems there is a v1.1 API available, but I currently don't have the time to refactor and implement that.

Quick screenshot from the data that is available for me:
image

Full disclosure: this PR was quickly made with https://claude.ai

@samuolis
Copy link
Owner

Hi,

Thanks for contributing!!!

I do not have a CO2 sensor. Maybe you could enable debug logs and share Response result: in JSON? I want to validate whether this code is correct.

We are using mobile app API as this one on the web is very unclear; if someone could find out how to work with that API, I would help implement it as it has many more fields.

I wrote to Brink for the documentation 2 years ago, but they said they cant share that information.

@yunusdemir
Copy link
Author

Makes sense that you would like to validate! I have an older debug statement, I think below is what you need.

Regarding the web api, I'm down to put in some work to get the v1.1 API to work, but that might take a bit of a longer time as I'm quite busy at the moment!

Logs (I've formatted the json to be more readable):

2025-02-26 14:27:31.237 DEBUG (MainThread) [custom_components.brink_ventilation.core.brink_home_cloud] Response result:

{
  "menuItems": [
    {
      "guiId": 32000,
      "pages": [
        {
          "name": "Home",
          "imageName": "ic_home",
          "pageType": 1,
          "parameterDescriptors": [
            {
              "uiId": "Status Filtermeldung",
              "valueId": 741417,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24006,
              "readWrite": 1,
              "noDataPoint": false,
              "name": "Status Filtermeldung",
              "controlType": 0,
              "value": "0",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [
                {
                  "value": "0",
                  "displayText": "Not dirty",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "1",
                  "displayText": "Dirty",
                  "isSelectable": true,
                  "highlightIfSelected": false
                }
              ]
            },
            {
              "uiId": "Lüftungsstufe",
              "valueId": 741421,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24011,
              "readWrite": 3,
              "noDataPoint": false,
              "name": "Lüftungsstufe",
              "controlType": 0,
              "value": "3",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [
                {
                  "value": "0",
                  "displayText": "Stufe 0",
                  "imageName": "Icon_Lueftungsstufe_0.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "1",
                  "displayText": "Stufe 1",
                  "imageName": "Icon_Lueftungsstufe_1.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "2",
                  "displayText": "Stufe 2",
                  "imageName": "Icon_Lueftungsstufe_2.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "3",
                  "displayText": "Stufe 3",
                  "imageName": "Icon_Lueftungsstufe_3.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                }
              ]
            },
            {
              "uiId": "Betriebsart",
              "valueId": 741422,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24012,
              "readWrite": 3,
              "noDataPoint": false,
              "name": "Betriebsart",
              "controlType": 0,
              "value": "0",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [
                {
                  "value": "0",
                  "displayText": "Automatikbetrieb",
                  "imageName": "ic_automatic.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "1",
                  "displayText": "Handbetrieb",
                  "imageName": "ic_hand.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "2",
                  "displayText": "Urlaubbetrieb",
                  "imageName": "ic_vacation.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "3",
                  "displayText": "Partybetrieb",
                  "imageName": "ic_party.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "4",
                  "displayText": "Nachtlüftungsbetrieb",
                  "imageName": "ic_night.png",
                  "isSelectable": true,
                  "highlightIfSelected": false
                }
              ]
            },
            {
              "uiId": "Restlaufzeit Betriebsartfunktion",
              "valueId": 741423,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24013,
              "readWrite": 1,
              "noDataPoint": false,
              "name": "Restlaufzeit Betriebsartfunktion",
              "controlType": 6,
              "value": "0",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [],
              "minValue": 0,
              "maxValue": 480,
              "stepWidth": 1,
              "decimals": 0
            }
          ]
        },
        {
          "name": "Info",
          "imageName": "ic_info",
          "pageType": 0,
          "parameterDescriptors": [
            {
              "valueId": 741440,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24024,
              "readWrite": 1,
              "noDataPoint": false,
              "name": "Status Bypassklappe",
              "controlType": 0,
              "value": "4",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [
                {
                  "value": "0",
                  "displayText": "Initialisierung",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "1",
                  "displayText": "Öffnet",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "2",
                  "displayText": "Schließt",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "3",
                  "displayText": "Geöffnet",
                  "isSelectable": true,
                  "highlightIfSelected": false
                },
                {
                  "value": "4",
                  "displayText": "Geschlossen",
                  "isSelectable": true,
                  "highlightIfSelected": false
                }
              ]
            },
            {
              "valueId": 741443,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24027,
              "readWrite": 1,
              "noDataPoint": false,
              "name": "PPM eBus CO2-sensor 1",
              "controlType": 6,
              "value": "577",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [],
              "decimals": 0
            },
            {
              "valueId": 741444,
              "sortId": 0,
              "subBundleId": 0,
              "parameterId": 24028,
              "readWrite": 1,
              "noDataPoint": false,
              "name": "PPM eBus CO2-sensor 2",
              "controlType": 6,
              "value": "632",
              "valueState": 1,
              "hasDependentParameter": false,
              "listItems": [],
              "decimals": 0
            }
          ]
        }
      ]
    }
  ]
}

@yunusdemir
Copy link
Author

It took me quite a bit longer to work on this, apologies for that! I think I have updated the PR with all the comments you had :)

@raffidil
Copy link

raffidil commented Jan 3, 2026

Thanks for the effort @yunusdemir. Any update on this?

claude and others added 3 commits January 7, 2026 14:59
- Move SENSOR_TYPES from sensor.py to const.py to break circular import
- Change absolute imports to relative imports in all platform files
- Fix .pattern attribute access on dict (should be ["pattern"])

The circular import chain was:
config_flow.py -> brink_home_cloud.py -> sensor.py -> __init__.py
This prevented the config flow handler from being registered, causing
"Invalid handler specified" error in Home Assistant.
…iolqD

Claude/fix config flow handler iolq d
@samuolis
Copy link
Owner

samuolis commented Jan 8, 2026

Have you already tested the integration on your Home Assistant instance?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CO2 Sensors support

4 participants