#python #postgresql
#python #postgresql
Вопрос:
У меня есть поле в таблице, содержащее упакованные данные, отправленные с устройства lora. Устройство упаковывает его следующим образом:
# LoRa payload format
# (2 Bytes for device ID, 8 float numbers: temp humid ph1 ph2 ph3 volt1 volt2 volt3)
LORA_PKG_FORMAT = "!Hffffffff"
msg = struct.pack(LORA_PKG_FORMAT, config.DEVICE_ID, temp_read, humid_read, ph1_read, ph2_read, ph3_read, volt1_read, volt2_read, volt3_read)
Приложение python на принимающей стороне может декодировать и распаковывать его следующим образом:
dev_msg = base64.b64decode(rx_pkt["data"])
focus_data = struct.unpack(config.LORA_PKG_FORMAT, dev_msg)
Упакованные данные в таблице postgres выглядят следующим образом:
x000141a4000042a0e3884147fd0f41477c3b4147a5303e0895213e0895213e089521
в то время как значения, распакованные из приложения python, являются:
logging.info('Decoded payload: ' str(focus_data))
Декодированная полезная нагрузка: (1, 20.5, 80.44439697265625, 12.499281883239746,
12.467829704284668, 12.477828979492188, 0.13338138163089752, 0.13338138163089752, 0.13338138163089752)
Как я могу добиться того же результата, что и функция struct.unpack, но с помощью запроса postgres? Мне нужно извлечь каждый элемент, чтобы создать панель на grafana.
Комментарии:
1. Как насчет функции базы данных PL / Python?
2. @LaurenzAlbe насколько я понимаю, plpy позволит мне выполнять запросы из скрипта python, верно? Мне нужны данные, декодированные с помощью запроса postgres, потому что это то, что нужно графане
Ответ №1:
Напишите функцию базы данных на PL / Python и вызовите ее в SQL-запросе.
Функции базы данных выполняются внутри базы данных и могут использоваться в SQL.