import psycopg2 from loguru import logger import os srcPgHost = os.environ["SRC_PGHOST"] srcPgUser = os.environ["SRC_PGUSER"] srcPgPassword = os.environ["SRC_PGPASSWORD"] srcPgDatabase = os.environ["SRC_PGDATABASE"] destPgHost = os.environ["DEST_PGHOST"] destPgUser = os.environ["DEST_PGUSER"] destPgPassword = os.environ["DEST_PGPASSWORD"] destPgDatabase = os.environ["DEST_PGDATABASE"] try: srcConn = psycopg2.connect( host=srcPgHost, dbname=srcPgDatabase, user=srcPgUser, password=srcPgPassword, sslmode='require' ) srcConn.autocommit = False destConn = psycopg2.connect( host=destPgHost, dbname=destPgDatabase, user=destPgUser, password=destPgPassword, sslmode='require' ) destConn.autocommit = False with srcConn.cursor() as srcCur, destConn.cursor() as destCur: srcCur.execute("select time, location, status, temperature, category from room_climate_measurement_t where category = 'heating' and time > '2023-12-19 05:20:00' order by time") for srcObj in srcCur: timestamp = srcObj[0] location = srcObj[1] status = srcObj[2] temperature = srcObj[3] category = srcObj[4] logger.info(f"{timestamp=}, {location=}, {status=}, {temperature=}, {category=}") destTime = timestamp match category: case 'heating': destApplication = 'Temperature Heating' case 'Outdoor': destApplication = 'Temperature Wago' case 'Device': destApplication = 'Temperature Wago' case 'Indoor': destApplication = 'Temperature Multisensor' if location != 'Anna-Koeln-2' else 'Temperature Shelly Plus HT' case 'Special': destApplication = 'Temperature Multisensor' destDevice = location destAttributes = '{"ApplicationId":"temperature-imported", "Status":"' + status + '","Location":"' + location + '","Category":"' + category + '","Hint": "Migrated"}' destValues = '{"Value": {"unit": "°C", "label": "", "value": "' + str(temperature) + '", "variable": ""}}' logger.info(f"{destTime=}, {destApplication=}, {destDevice=}, {destAttributes=}, {destValues=}") try: destCur.execute("insert into measurements (time, application, device, attributes, values) values(%s, %s, %s, %s, %s)", (destTime, destApplication, destDevice, destAttributes, destValues)) destConn.commit() except Exception as e: destConn.rollback() logger.error(f"Error {e} when inserted time {destTime}") finally: if srcConn: srcConn.close() if destConn: destConn.close()