timestamp: int
sensor_id: str
temperature: float
@dataclass
class Sensors:
temperatures: list[DS18B20]
У меня есть цикл, который собирает информацию с датчиков температур, ну и соответственно добавляет объекты датчиков в список temperatures. Вопрос в том, как можно реализовать правильно обновление уже существующих объектов датчиков на основании поля sensor_id? Я что-то не могу допереть.
а зачем тебе вообще обновлять существующие объекты?
Как вариант Temperstures: Dict(ID:DSlalala)
Информация о температурах, собирается каждую секунду. И для понимания когда было последнее обновление служит поле timestamp. Соответственно я хочу каждую секунду обновлять информацию в этом списке. Но что бы каждый раз не пересоздавать список, объекты и т.д. лучше я думаю обновлять объекты в списке
ты переизобретаешь prometheus?
так было изначально, но я пришел к такой схеме как описал выше т.к. нужно знать время последнего обновления каждого датчика, а датчиков 6
Выглядит как будто тебе нужен словарь, а не список, если тебе нужно часто искать что-то по id. Но что ты делаешь с этими датаклассами потом?
не, простая raspberry pi, 6 датчиков температур ну и другого барахла
Тебе нужна история обновления? Или объект DSlalala всегда один на один датчик?
На каждый датчик = один объект, у каждого датчика есть температура, и его ID ( постоянный). Изначально была схема: @dataclass class Sensors: temperature: dict[str, float] = field(default_factory=dict) while True: available_sensors = W1ThermSensor().get_available_sensors() for x in available_sensors: Sensors.temperature[x.id] = x.get_temperature() Но я почему-то решил что лучше бы знать время последнего обновления каждого датчика, timestamp.
Так сложи в словарь объекты, а не просто температуру. Будет у тебя и время обновления, и всё что нужно.
Только вот ты что-то очень странное сотворил с датаклассами. Где экземеляр Sensors и почему в коде обновления он с большой буквы?
экземпляр создан чуть выше, я здесь чуть ужал код для компактности Sensors = Sensors()
while True: available_sensors = W1ThermSensor().get_available_sensors() for x in available_sensors: Sensors.temperature[x.id] = Dslala(x.get_temperature(), now) Замени последнюю строку
Ой. Ты затенил класс экземпляром. Экземпляры принято называть с маленькой буквы. Путаешь других и себя в будущем.
Обсуждают сегодня