170 похожих чатов

Всем привет. Подскажите пожалуйста, я сделал 2 датакласса. @dataclass class DS18B20:

timestamp: int
sensor_id: str
temperature: float


@dataclass
class Sensors:
temperatures: list[DS18B20]

У меня есть цикл, который собирает информацию с датчиков температур, ну и соответственно добавляет объекты датчиков в список temperatures. Вопрос в том, как можно реализовать правильно обновление уже существующих объектов датчиков на основании поля sensor_id? Я что-то не могу допереть.

14 ответов

10 просмотров

а зачем тебе вообще обновлять существующие объекты?

Как вариант Temperstures: Dict(ID:DSlalala)

Andreas-D. Автор вопроса

Информация о температурах, собирается каждую секунду. И для понимания когда было последнее обновление служит поле timestamp. Соответственно я хочу каждую секунду обновлять информацию в этом списке. Но что бы каждый раз не пересоздавать список, объекты и т.д. лучше я думаю обновлять объекты в списке

Andreas-D. Автор вопроса
Den P
Как вариант Temperstures: Dict(ID:DSlalala)

так было изначально, но я пришел к такой схеме как описал выше т.к. нужно знать время последнего обновления каждого датчика, а датчиков 6

Andreas D.
Информация о температурах, собирается каждую секун...

Выглядит как будто тебе нужен словарь, а не список, если тебе нужно часто искать что-то по id. Но что ты делаешь с этими датаклассами потом?

Andreas-D. Автор вопроса
Fᴏʀᴅᴇɴ
ты переизобретаешь prometheus?

не, простая raspberry pi, 6 датчиков температур ну и другого барахла

Andreas D.
так было изначально, но я пришел к такой схеме как...

Тебе нужна история обновления? Или объект DSlalala всегда один на один датчик?

Andreas-D. Автор вопроса
Den P
Тебе нужна история обновления? Или объект 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.

Andreas D.
На каждый датчик = один объект, у каждого датчика ...

Так сложи в словарь объекты, а не просто температуру. Будет у тебя и время обновления, и всё что нужно.

Andreas D.
На каждый датчик = один объект, у каждого датчика ...

Только вот ты что-то очень странное сотворил с датаклассами. Где экземеляр Sensors и почему в коде обновления он с большой буквы?

Andreas-D. Автор вопроса
evle
Только вот ты что-то очень странное сотворил с дат...

экземпляр создан чуть выше, я здесь чуть ужал код для компактности Sensors = Sensors()

Andreas D.
На каждый датчик = один объект, у каждого датчика ...

while True: available_sensors = W1ThermSensor().get_available_sensors() for x in available_sensors: Sensors.temperature[x.id] = Dslala(x.get_temperature(), now) Замени последнюю строку

Andreas D.
экземпляр создан чуть выше, я здесь чуть ужал код ...

Ой. Ты затенил класс экземпляром. Экземпляры принято называть с маленькой буквы. Путаешь других и себя в будущем.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта