Я делаю веб-приложение, которое состоит из извлечения данных из нескольких rpis.Они работают как точка доступа Wi-Fi, которая отправляет через curl POST data.json (MAC-адреса и уровень сигнала каждого подключенного устройства).
bottle.py сохраняет эту информацию в базе данных sqlite3, вставляя или заменяя ее в зависимости от того, является ли устройство новым или изменило уровень сигнала.По сути, bottle.py работает как сервер, и все rpi являются клиентами (rp1, rpi2, ...), которые отправляют информацию через curl каждые 10 секунд.В базе данных есть разные таблицы (table1, table2 ...), в которых хранятся устройства каждого rpi.
Если устройство отключается от rpi1 и подключается к rpi2, то rpi1 не отправляет информацию об этом устройстве, а тот, кто это делает, в то время как это устройство больше не находится в таблице1, и оно будет вТаблица 2.Итак, как я могу иметь действующую базу данных, которая печатает эту информацию как можно более актуальной?Константа вставляет и удаляет?
bottle.py
@route('/', method='POST')
def index():
body = request.body.read().decode('utf8') # read directly HTTP input
get_dict = json.loads(body) # decode json and get native python dict
maclist = get_dict.get('maclist')
signallist = get_dict.get('signallist')
data_list = list(zip(maclist, signallist))
conn = sqlite3.connect('db/users.db')
c = conn.cursor()
try:
c.executemany("INSERT INTO users (MAC,SIGNAL) VALUES(?,?)", data_list)
except Exception as exc:
c.executemany("REPLACE INTO users (MAC,SIGNAL) VALUES(?,?)", data_list)
conn.commit()
return "Items added."
@route('/data', method='GET')
def index():
conn = sqlite3.connect('db/users.db')
c = conn.cursor()
c.execute('SELECT * FROM users')
return template('simple.tpl', rows = c.fetchall())
data.json
{
"maclist": [
"b6:a2:23:39:b5:27",
"b1:a2:0b:37:4c:22"
],
"signallist": [
"-50",
"-10"
]
}
users.db
MAC SIGNAL
b6:a2:23:39:b5:27 -50
b1:a2:0b:37:4c:22 -10