86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
from itertools import chain
|
|
from psycopg2.extras import execute_values
|
|
from connect import *
|
|
import json
|
|
|
|
file_psycopd = 'psycopd_con.json'
|
|
file_local = 'local_device.json'
|
|
file_tuya = 'tuya_con.json'
|
|
|
|
|
|
class DeviceError(Exception):
|
|
pass
|
|
|
|
|
|
def update_base():
|
|
conn = connect_base()
|
|
cursor = conn.cursor()
|
|
count = 0
|
|
try:
|
|
with open(file_tuya, 'r', encoding='utf-8') as f:
|
|
tuya_devices = json.load(f)
|
|
if tuya_devices['error']:
|
|
raise DeviceError(tuya_devices['error'])
|
|
except Exception as e:
|
|
print(f'Ошибка update_base: {e}')
|
|
with open(file_local, 'r', encoding='utf-8') as f:
|
|
local_devices = json.load(f)
|
|
for device in tuya_devices:
|
|
if device['result']['id'] == [v for v in local_devices.values()][count]['gwId']:
|
|
cursor.execute("UPDATE upanel_device SET local_key = %s, name = %s "
|
|
"WHERE device_id= %s",
|
|
(device['result']['local_key'],
|
|
device['result']['name'],
|
|
device['result']['id']))
|
|
conn.commit()
|
|
count += 1
|
|
cursor.close()
|
|
|
|
|
|
def add_base():
|
|
conn = connect_base()
|
|
cursor = conn.cursor()
|
|
try:
|
|
with open(file_local, 'r', encoding='utf-8') as f:
|
|
local_devices_dict = json.load(f)
|
|
local_devices = {i + 1: v for i, v in enumerate(local_devices_dict.values())}
|
|
cursor.execute("SELECT * FROM upanel_device")
|
|
devices = list(chain.from_iterable(cursor.fetchall()))
|
|
execute_values(cursor, "INSERT INTO upanel_device "
|
|
"(device_ip, device_id,device_version) "
|
|
"VALUES %s",
|
|
[(local_devices_dict[local_devices[device]['ip']]['ip'],
|
|
local_devices_dict[local_devices[device]['ip']]['gwId'],
|
|
local_devices_dict[local_devices[device]['ip']]['version'],)
|
|
for device in local_devices if local_devices[device]['ip'] not in devices])
|
|
conn.commit()
|
|
cursor.close()
|
|
except Exception as e:
|
|
print(f'ошибка add_base: {e}')
|
|
with open('error_add.json', 'w', encoding='utf-8') as f:
|
|
json.dump({'Error_add':e}, f)
|
|
|
|
def delete_base():
|
|
conn = connect_base()
|
|
cursor = conn.cursor()
|
|
try:
|
|
with open(file_local, 'r', encoding='utf-8') as f:
|
|
local_devices_dict = json.load(f)
|
|
ip_file=sorted([v for k,v in enumerate(local_devices_dict)])
|
|
cursor.execute('SELECT * FROM upanel_device')
|
|
cursor.executemany("DELETE FROM upanel_device WHERE device_ip=%s",
|
|
[tuple(str(item) for item in ip[2].split())
|
|
for ip in cursor.fetchall()
|
|
if ip[2] not in ip_file])
|
|
conn.commit()
|
|
|
|
except Exception as e:
|
|
print(f'Ошибка delete_base: {e}')
|
|
with open('error_delete.json', 'w', encoding='utf-8') as f:
|
|
json.dump({'Error_delete':e}, f)
|
|
|
|
if __name__ == '__main__':
|
|
add_base()
|
|
update_base()
|
|
delete_base()
|