ich habe eine Frage an die Spezialisten unter euch. Mir ist Python nicht unbekannt, aber sehr lange her als ich das letzte mal damit was zutun hatte. Meine Skills in PHP und SQL sind hervorrangend. Ich habe eine Wetterstation bei mir im Garten stehen, die täglich Satellitenbilder von den Wettersatelliten NOAA, Meteor und Elektro aufnimmt und eine Webcam, die tägliche Zeitraffer Video anfertigt. Soweit funktioniert alles wunderbar. Nun möchte ich die empfangenden Bilder vom Orbit gerne auf meine Webseite veröffentlichen. Dies funktioniert bisher auch wunderbar.
Die Original Bilder werden im Format: NOAA-15-20250112-110801-sea.jpg gespeichert. Da ich für meine Seite ein anderes Format zwecks des Dateinamen benötige, habe ich ein PHP Script im Einsatz, das von der Datenbank (SQLite) die passenen Daten wie: Evelation, Datum, zeit, Dauer des Überflugs und und und abfragt. Diese Daten fange ich von der Datenbank ab und lege die Daten in einem Dateinamen, zB. so:
d_m_Y_H_i_noaa-15_s_40_140_E_mcir_137.9125000.jpg
Das realisiere ich mit einem PHP Script. Nun möchte ich das gerne auf Python3 realisieren. Habe auch schon angefangen und etliche Funktionen bzw. Strukturen sind in Python und PHP ziemlich ähnlich. Hier ist mein Grundgerüst (Funktionsfähig):
Code: Alles auswählen
import sqlite3
import os
import glob
from datetime import datetime
# wxmeaa_passes :
# + sat_name
# + pass_start
# + pass_end
# + max_elev
# + is_active
# + pass_start_azimuth
# + direction
# + azimuth_at_max
# + at_job_id
# wxmeaa_decoded :
# + pass_start
# + file_path
# + daylight_pass
# + is_noaa
# + sat_type
# + img_count
# + has_spectrogram
# + has_pristine
# + gain
# + has_polar_az_el
# + has_polar_direction
# + has_histogram
# d_m_Y_H_i_noaa-15_s_40_140_E_mcir_137.9125000.jpg
# Database
SQLiteDB = "~/db/panel.db"
# Connect to database
SQLite = sqlite3.connect(SQLiteDB)
SQLRow = SQLite.cursor()
# Sat frequencies
sat_freq = {}
sat_freq["meteor-m25"] = "137.900000"
sat_freq["meteor-m24"] = "137.900000"
sat_freq["meteor-m23"] = "137.900000"
sat_freq["noaa-19"] = "137.620000"
sat_freq["noaa-18"] = "137.912500"
sat_freq["noaa-15"] = "137.100000"
# Show detected passes from database
SQLRow.execute("""SELECT
decoded_passes.id,
predict_passes.pass_start,
file_path,
daylight_pass,
sat_type,
gain,
predict_passes.sat_name,
predict_passes.max_elev,
predict_passes.pass_start_azimuth,
predict_passes.direction,
predict_passes.azimuth_at_max
FROM
decoded_passes
INNER JOIN
predict_passes
ON
predict_passes.pass_start = decoded_passes.pass_start
ORDER BY
decoded_passes.pass_start
DESC""")
# SQL execute
Row = SQLRow.fetchall()
# Datenbank Schema: (935, 1736696460, 'NOAA-15-20250112-154100', 0, 1, 49.6, 'NOAA 15', 17, 109, 'Northbound', 49)
for Rows in Row:
# sat_date = int(Rows[1])
# sat_date = datetime.utcfromtimestamp(sat_date).strftime('%Y%m%d')
for sat_files in glob.glob(f"/srv/images/" + Rows[2] + "*.jpg"):
sat_name = Rows[6]
sat_name = sat_name.replace("meteor-m2-3", "meteor-m23")
sat_name = sat_name.replace("meteor-m2-4", "meteor-m24")
sat_name = sat_name.replace("meteor-m2-5", "meteor-m25")
sat_name = sat_name.replace(" ", "-")
sat_name = sat_name.lower()
# Extract satname
sat_filepath = sat_files
sat_filepath = sat_filepath.replace(Rows[2] + "-", "")
sat_filepath = sat_filepath.replace("_", "-")
sat_filepath = os.path.basename(sat_filepath)
# Enchenments
sat_ench = sat_filepath.strip('.jpg')
# Enchenments replace names
sat_ench = sat_ench.replace("composite", "comp")
sat_ench = sat_ench.replace("msa_corrected", "msa-corrected")
sat_ench = sat_ench.replace("msa_projected", "msa-projected")
sat_ench = sat_ench.replace("mcir_corrected", "mcir-corrected")
sat_ench = sat_ench.replace("mcir_projected", "mcir-projected")
sat_ench = sat_ench.replace("321_corrected", "corrected-321")
sat_ench = sat_ench.replace("321_projected", "projected-321")
sat_ench = sat_ench.replace("221_corrected", "corrected-221")
sat_ench = sat_ench.replace("221_projected", "projected-221")
sat_ench = sat_ench.replace("thermal_channel_corrected", "therm-ch-corrected")
sat_ench = sat_ench.replace("equidistant_67", "eq-67")
sat_ench = sat_ench.replace("equidistant_rain", "eq-rain")
sat_ench = sat_ench.replace("equidistant_rain_67", "eq-rain-67")
sat_ench = sat_ench.replace("equidistant_67_thermal_comp", "eq-67-therm-comp")
sat_ench = sat_ench.replace("equidistant_67_rain_composite", "eq-67-rain-comp")
sat_ench = sat_ench.replace("equidistant_67_comp", "eq-67-comp")
sat_ench = sat_ench.replace("equidistant_67_composite", "eq-67-comp-2")
sat_ench = sat_ench.replace("equidistant_68", "eq-68")
sat_ench = sat_ench.replace("equidistant_221", "eq-221")
sat_ench = sat_ench.replace("equidistant_rain_221", "eq-rain-221")
sat_ench = sat_ench.replace("equidistant_221_com", "eq-221-com")
sat_ench = sat_ench.replace("equidistant_221_composite", "eq-221-comp")
sat_ench = sat_ench.replace("equidistant_224", "eq-224")
sat_ench = sat_ench.replace("equidistant_rain_224", "eq-rain-224")
sat_ench = sat_ench.replace("equidistant_224_comp", "eq-224-comp")
sat_ench = sat_ench.replace("equidistant_224_composite", "eq-224-comp")
sat_ench = sat_ench.replace("equidistant_321", "eq-321")
sat_ench = sat_ench.replace("equidistant_654", "eq-654")
sat_ench = sat_ench.replace("equidistant_thermal", "eq-therm")
sat_ench = sat_ench.replace("mercator_67", "mercator-67")
sat_ench = sat_ench.replace("mercator_rain_67", "mercator-rain-67")
sat_ench = sat_ench.replace("mercator_68", "mercator-68")
sat_ench = sat_ench.replace("mercator_221", "mercator-221")
sat_ench = sat_ench.replace("mercator_rain_221", "mercator-rain-221")
sat_ench = sat_ench.replace("mercator_224", "mercator-224")
sat_ench = sat_ench.replace("mercator_rain_224", "mercator-rain-224")
sat_ench = sat_ench.replace("mercator_321", "mercator-321")
sat_ench = sat_ench.replace("mercator_654", "mercator-654")
sat_ench = sat_ench.replace("mercator_thermal", "mercator-therm")
sat_ench = sat_ench.replace("spread_67", "spread-67")
sat_ench = sat_ench.replace("spread_rain_67", "spread-rain-67")
sat_ench = sat_ench.replace("spread_68", "spread-68")
sat_ench = sat_ench.replace("spread_123", "spread-123")
sat_ench = sat_ench.replace("spread_221", "spread-221")
sat_ench = sat_ench.replace("spread_rain_221", "spread-rain-221")
sat_ench = sat_ench.replace("spread_224", "spread-224")
sat_ench = sat_ench.replace("spread_rain_224", "spread-rain-224")
sat_ench = sat_ench.replace("spread_321", "spread-321")
sat_ench = sat_ench.replace("spread_654", "spread-654")
sat_ench = sat_ench.replace("spread_rain", "spread-rain")
sat_ench = sat_ench.replace("spread_thermal", "spread-therm")
# Sat date to time
# sat_date = int((Rows[1] - 7200))
sat_date = int(Rows[1])
sat_date = datetime.utcfromtimestamp(sat_date).strftime('%d_%m_%Y_%H_%M')
# Calculate direction
if (Rows[8] >= 0 and Rows[8] <= 180):
sat_direction = "e"
else:
sat_direction = "w"
# New sat and filename
sat_ex = sat_date + "_" + sat_name + "_" + Rows[9][0:1] + "_" + str(Rows[7]) + "_" + str(Rows[8]) + "_" + sat_direction + "_" + sat_ench + "_" + sat_freq[sat_name] + ".jpg"
sat_ex = sat_ex.lower()
sat_filetime = os.stat(sat_files)
sat_filetime = int(sat_filetime.st_mtime)
sat_filebase = os.path.basename(sat_files)
Console = sat_filebase + "\033[0;36m >>> \033[0m" + sat_ex
if os.path.exists(sat_files + ".locked"):
print("\033[0;36mBereits verschoben:\033[0m " + Console)
elif ((sat_filetime + 300) > time.time()):
print("\033[0;36mWarte noch:\033[0m " + Console)
else:
print("\033[0;91mVerschiebe:\033[0m " + Console)
# Close database connection
SQLite.close()
In diesem Snippet soll noch eine Upload Funktion implementiert werden, das kommt allerdings etwas später. Was ich noch bräuchte, wäre eine Möglichkeit 2 Verzeichnisse abzuarbeiten in der "for/glob" Anweisung. In PHP ginge das mit "{Verzeichnis1, Verzeichnis2}" was hier in Python nicht funktioniert. Wenn es da eine Lösung für gibt, wäre ich für jeden Hinweis dankbar.
Bitte nicht zu hart mit mir sein, ich lerne noch und Frage euch deshalb, ob jemand einige Anpassungen vornehmen kann (Bitte auch mit Begründung und Erklärung, damit ich das auch verstehe).
Vielen dank an alle!