Еще один вопрос о переходе на летнее время в многостековом приложении.Python

Программы на Python
Ответить
Anonymous
 Еще один вопрос о переходе на летнее время в многостековом приложении.

Сообщение Anonymous »

Мне нужна помощь, чтобы решить проблему с летним временем.
Рабочий процесс приложения:
  • Сценарий Python считывает некоторые значения датчиков каждые 5 минут в esp32 (той же сети) и отправляет эти значения, добавляя «acktime» (данные и время, когда я читаю значения) в API laravel (размещенный) с помощью метода post, это добавит время синхронизации olso. (данные и время, когда я записываю значения в БД)
  • Laravel cronjob создает мне ежедневный отчет с максимальным и минимальным средним значением от датчика.
В будущем Python всегда будет считывать значения каждые 5 минут, но будет сохранять значения в локальной базе данных и синхронизировать значения каждые 30 минут, таким образом я не потеряю значения из-за потери подключения к Интернету, я добавил «synctime» просто для того, чтобы посмотреть, что и если это так случилось
Проблема задания cron:
Моя команда группирует все строки в базе данных по дням:

Код: Выделить всё

        $weatherdata = rawData::all()
->groupBy(function (RawData $item) {
return $item->acktime->format('Y-m-d');
})
->each(function (Collection $day) {
foreach ($day as $value){
Log::info($value);
}
Log::info('NEXT DAY');
});
Кажется, это работает, но прочитав журнал, у меня возникла проблема:

Код: Выделить всё

{"acktime":"2021-10-30T22:56:45.000000Z",
NEXT DAY
{"acktime":"2021-10-30T23:01:47.000000Z",
Для него в установленное законом время день заканчивается на час раньше, и это не единственная проблема.
Если я группирую строки по часам вместо дня:

Код: Выделить всё

NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur..."}
..other 23 values when hour is 2 (not ok,total is 24 values)
NEXT HOUR
{"acktime":"2021-10-31T03:03:58.000000Z","temperatur..."}
..other 11 values (it's ok,total should be maximum 12)
NEXT HOUR
Это группирует меня в 2:00–3:00, как будто мы прожили это время только один раз, но на самом деле мы заработали 2:00–3:00 два раза..так я и ожидал:

Код: Выделить всё

NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur..."}
..other 11 value (it's ok,total 12)
NEXT HOUR
{"acktime":"2021-10-31T03:03:58.000000Z","temperatur..."}
..other 11 value (it's ok,total 12)
NEXT HOUR
{"acktime":"2021-10-31T02:02:54.000000Z","temperatur.."}
..other 11 value (it's ok,total 12)
Мой app.php установлен так, как должно быть:

Код: Выделить всё

    'timezone' => 'Europe/London',
Мой класс модели:

Код: Выделить всё

class rawData extends Model
{
use HasFactory;

protected $fillable = [
'acktime',
'temperature',
'humidity',
..other data..
'synctime'
];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['acktime','synctime'];
public $timestamps = false;
}
примечание: только вчера я добавил время подтверждения и время синхронизации как защищенные $dates.
Скрипт Python:
Скрипт Python после считывания значения датчика отправляет значения непосредственно в мой API, но, возможно, проблема в том, как я получаю данные о времени:

Код: Выделить всё

from datetime import datetime

def writeData(data):
data['acktime'] = datetime.now()
http post
Конфигурация MySql
acktime и synctime — это тип времени данных, а UTC равен +1
работает ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ, КАК 'time_zone'; я получаю СИСТЕМУ
Я не знаю, как получить часовой пояс, хранящийся в строках времени данных
Последний вопрос
Как избежать этой проблемы в будущем??
Как восстановить уже сохраненные значения времени данных??

Подробнее здесь: https://stackoverflow.com/questions/699 ... -stack-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»