import pygeohash import toml import os import hnd_scraping import hydris_data import db_model as db def config_laden(configfile): with open(configfile) as file: return toml.loads(file.read()) PFAD = os.path.abspath(os.path.dirname(__file__)) CONFIG = config_laden(os.path.join(PFAD, "cfg_grenz.toml")) def daten_sammeln(): daten = [] for messstelle in CONFIG["hnd"]: lat = CONFIG["hnd"][messstelle]["lat"] lon = CONFIG["hnd"][messstelle]["lon"] bezeichnung = CONFIG["hnd"][messstelle]["text"] geohash = pygeohash.geohash.encode(lat, lon) durchfluss = max(hnd_scraping.scrap_messwerte_hnd(CONFIG["hnd"][messstelle]["url_q"])) pegelstand = max(hnd_scraping.scrap_messwerte_hnd(CONFIG["hnd"][messstelle]["url_h"])) daten.append({"ts": durchfluss[0], "messstelle": bezeichnung, "geohash": geohash, "durchfluss": durchfluss[1], "pegelstand": pegelstand[1]}) hydris_daten = hydris_data.get_hydris_data("https://www.salzburg.gv.at/wasser/hydro/grafiken/data.json") hydris_daten_gefiltert = [hydris_data.get_station(hydris_daten, station_id=str(number)) for number in CONFIG["hydris"]["station_id"]] for station in hydris_daten_gefiltert: geohash = pygeohash.geohash.encode(station.location.lat, station.location.lon) daten.append({"ts": station.flow["15m.Cmd.RunOff"].timestamp, "messstelle": station.name, "geohash": geohash, "durchfluss": station.flow["15m.Cmd.RunOff"].value, "pegelstand": station.water_level["15m.Cmd.WiskiWeb"].value}) return daten def send_with_ssh() -> None: db_adapter = CONFIG["db"] port = CONFIG[db_adapter]["port"] from sshtunnel import SSHTunnelForwarder config = config_laden(CONFIG["pfad_ssh_auth"]) with SSHTunnelForwarder( (config["ip_server"], config["ssh_port"]), ssh_username=config["user"], ssh_password=config["pw"], remote_bind_address=("127.0.0.1", port), ) as server: CONFIG[db_adapter]["port"] = server.local_bind_port init() def init() -> None: db_adapter = CONFIG["db"]["db"] db_ = db.init_db(CONFIG["db"][db_adapter]["database"], db_adapter, CONFIG["db"].get(db_adapter)) db.DB_PROXY.initialize(db_) db.create_tables() daten = daten_sammeln() db.insert_many(daten) def main() -> None: if CONFIG["db"]["ssh_tunnel"]: send_with_ssh() else: init() if __name__ == "__main__": main()