Wie gehe ich mit der Sommerzeit in der Multi-Stack-App um?Python

Python-Programme
Anonymous
 Wie gehe ich mit der Sommerzeit in der Multi-Stack-App um?

Post by Anonymous »

Anwendungsworkflow:
  • Ein Python-Skript liest alle 5 Minuten einige Sensorwerte auf einem esp32 (dem gleichen Netzwerk) und sendet diese Werte unter Hinzufügung von „acktime“ (Daten und Zeit, wenn ich die Werte lese) an eine Laravel-API (gehostet) mit Post-Methode. Dadurch wird auch die Synchronisierungszeit (Daten und Zeit, wenn ich Werte in die Datenbank schreibe) hinzugefügt.
  • Laravel Cronjob erstellt mir einen täglichen Bericht mit maximalem und minimalem Durchschnittswert vom Sensor
In Zukunft liest Python immer alle 5 Minuten Werte, speichert die Werte jedoch in einer lokalen Datenbank und synchronisiert die Werte alle 30 Minuten. Auf diese Weise gehen keine Werte verloren, weil die Internetverbindung unterbrochen wird. Ich habe „Synchronisierungszeit“ hinzugefügt, nur um zu sehen, was und ob es passiert ist.
Problem des Cron-Jobs:
Mein Befehl gruppiert alle Zeilen in der Datenbank nach Tag:

Code: Select all

        $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');
});
Und es scheint zu funktionieren, aber beim Lesen des Protokolls bekomme ich dieses Problem:

Code: Select all

{"acktime":"2021-10-30T22:56:45.000000Z",
NEXT DAY
{"acktime":"2021-10-30T23:01:47.000000Z",
Für ihn endet der Tag während der gesetzlichen Zeit eine Stunde früher, und das ist nicht das einzige Problem.
Wenn ich Zeilen nach Stunden statt nach Tag gruppiere:

Code: Select all

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
Es gruppiert mich zwischen 14:00 und 15:00 Uhr, als ob wir diese Zeit nur einmal erlebt hätten, aber in Wirklichkeit haben wir 14:00 bis 3:00 Uhr zweimal geschafft.also habe ich Folgendes erwartet:

Code: Select all

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)
Meine app.php ist so eingestellt, wie sie sein sollte:

Code: Select all

    'timezone' => 'Europe/London',
Meine Modellklasse:

Code: Select all

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;
}
Hinweis: Ich habe erst gestern die Bestätigungszeit und die Synchronisierungszeit als geschützte $dates hinzugefügt
Python-Skript:
Das Python-Skript sendet nach dem Lesen des Sensorwerts die Werte direkt an meine API, aber vielleicht liegt das Problem darin, wie ich die Datenzeit darauf erhalte:

Code: Select all

from datetime import datetime

def writeData(data):
data['acktime'] = datetime.now()
http post
MySql-Konfiguration
acktime und synctime sind Datenzeittypen und die UTC ist +1
wird ausgeführt. SHOW GLOBAL VARIABLES LIKE 'time_zone'; ich bekomme SYSTEM
Ich weiß nicht, wie ich die Zeitzone in Datenzeitzeilen speichern kann
Wie kann ich dieses Problem in Zukunft vermeiden??
Wie kann ich die bereits gespeicherten Datenzeitwerte wiederherstellen??

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post