You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
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"]
|
|
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], "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")
|
|
numbers = [204180, 204032, 203323, 204198, 203570, 203539]
|
|
hydris_daten_gefiltert = [hydris_data.get_station(hydris_daten, station_id=str(number))
|
|
for number in numbers]
|
|
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, "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()
|