Skip to content

aioble: Not all characteristics are shown #912

Open
@ukena

Description

@ukena

I have a problem with aioble on my pico w. I have created two services, but at most seven characteristics are displayed. For example, for the truncated code section below, only the seven characteristics up to the # TODO comment are displayed. I have already tried lowering the mtu size and creating a third service and registering the characteristics there. Changing the order doesn't solve the problem, i.e. if I move self.wind above self.colors, the wind characteristics are advertised, but there are still only seven characteristics in total. If I clear all characteristics values there are still only seven characteristics advertised so I don't think that it is due to size limitations.

import gc
import aioble
import asyncio
import ujson
import micropython_ota
from bluetooth import UUID

from helpers import load_json, json_has_keys


class BLE:
    def __init__(self, config):
        aioble.config(mtu=512)
        
        self.config = config
        
        self.service_meta = aioble.Service(UUID("ba7f1568-b2ea-4fda-8d5b-9e5f5fe6925f"))

        self.sku = aioble.Characteristic(self.service_meta, UUID("374ce939-0e41-4ca3-8023-450a5d7cc868"), read=True, capture=True)
        self.id = aioble.Characteristic(self.service_meta, UUID("3b85c350-d60d-4213-ac83-12f4b33de750"), read=True, capture=True)
        self.version = aioble.Characteristic(self.service_meta, UUID("89b9c4ce-afc8-446b-908f-6ab44b95bc3d"), read=True, write=True, capture=True)

        self.service_settings = aioble.Service(UUID("771cf459-392a-4100-9d8c-b3c7e32883bc"))
        
        self.wifi_init_scan = aioble.Characteristic(self.service_settings, UUID("bc004c3e-48de-4496-9465-c8ea1c4ae8cf"), write=True)
        self.wifi_available_networks = aioble.Characteristic(self.service_settings, UUID("d7a96f45-c135-4cee-a053-cf50b621bfa5"), read=True, notify=True)
        self.wifi = aioble.Characteristic(self.service_settings, UUID("16a5d9f1-ab50-476e-a9fc-1a20230beedf"), read=True, write=True, capture=True)
        
        self.colors = aioble.Characteristic(self.service_settings, UUID("038e91b7-eb88-4ecd-acfd-811797ce6c00"), read=True, write=True, capture=True)

        # TODO: Not all characteristics are shown
        self.wind = aioble.Characteristic(self.service_settings, UUID("e03f403e-0e21-41b9-91d4-2075608c7bc9"), read=True, write=True, capture=True)

        self.times = aioble.Characteristic(self.service_settings, UUID("a5342786-ad90-404b-bc51-cfcf6d465051"), read=True, write=True, capture=True)
        
        self.ota = aioble.Characteristic(self.service_settings, UUID("ae8d0e7f-ff36-4da7-a720-93ed8cf9f5f5"), read=True, write=True, capture=True)
        
        self.brightness = aioble.Characteristic(self.service_settings, UUID("c011b876-5414-4f5e-aad9-1050fa77e88e"), read=True, write=True, capture=True)
        
        aioble.register_services(
            self.service_meta,
            self.service_settings
        )
                
        gc.collect()

    async def advertise(self):
        while True:
            gc.collect()
            
            async with await aioble.advertise(
                250_000,
                name=f"{self.config.get('sku')}_{self.config.get('id')}",
                services=[UUID("ba7f1568-b2ea-4fda-8d5b-9e5f5fe6925f")]
            ) as connection:
                await connection.exchange_mtu(512)
                print("Connection from", connection.device)

                self.init()
                self.update()
                
                asyncio.create_task(self.watch_brightness())
                asyncio.create_task(self.watch_colors())
                asyncio.create_task(self.watch_wifi_init_scan())
                asyncio.create_task(self.watch_wifi())
                asyncio.create_task(self.watch_times())
                asyncio.create_task(self.watch_ota())
                gc.collect()
                
                await connection.disconnected(timeout_ms=None)

I stumbled across this issue and even though its for ESP32 and Arduino the issue is the same. I already looked into the definitions of aioble but I did not found anything related to this.

Do you have any suggestions?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions