Сервис не спрашивает, кто сделал вашу платформу. Устройству достаточно уметь отправлять обычный HTTP-запрос — дальше данные попадают в кабинет наравне с данными серийных весов: графики, погода по координатам пасеки, расчёт массы пчёл и кормов, уведомления о роении, разряде батареи и пропаже связи.
Подойдёт любое железо: ESP32 и ESP8266, Arduino с модулем связи, готовые весы другого производителя, у которых можно задать адрес сервера, и даже скрипт на компьютере, если данные снимаются вручную.
Шаг 1. Получите ID весов и пароль
Идентификатор платформы и пароль к ней выдаются в кабинете, в разделе «Оплата и счета». Это не пароль аккаунта: он живёт в прошивке устройства и нужен, чтобы чужое устройство не писало данные в ваш улей.
Войти или зарегистрироватьсяРегистрация в один клик — через Telegram, Яндекс ID или VK ID, пароль придумывать не нужно.
Шаг 2. Отправьте запрос
Адрес приёмника — http://apiscale.ru/get_data/pure_get.php. Годятся и GET, и POST:
сервер читает параметры одинаково. Обязательных всего три, остальное — по наличию
датчиков.
http://apiscale.ru/get_data/pure_get.php?id=Hive101&pass=11223344&weight=27.74&tds=34.2&bat=1024&rssi=-58&sleeptime=60&version=diy1
http://, не https://. Весь сайт переводит запросы на защищённый протокол, но каталог приёма данных из этого правила исключён: GSM-модули не умеют TLS, а HTTP-клиент на ESP не идёт за редиректом — ответ «301» означал бы молча потерянные показания.Обязательные параметры
id |
Идентификатор весов из кабинета. Латиница и цифры, 6–8 символов |
|---|---|
pass |
Пароль этих весов. Сверяется на сервере, при несовпадении данные не принимаются |
weight |
Масса в килограммах, разделитель — точка |
Остальное — по наличию датчиков
rssi |
Уровень сигнала WiFi, dBm. Отличает WiFi-устройство от GSM: если параметра нет, сервис считает канал мобильным |
|---|---|
q |
Качество сигнала GSM. Шлётся вместо rssi мобильными устройствами |
bat |
Сырое значение АЦП батареи. Процент заряда сервис считает сам по типу аккумуляторов из настроек улья |
tds |
Температура датчика DS18B20 (обычно — внутри улья) |
tbmp |
Температура BMP/BME280 |
hum |
Влажность, % |
prs |
Атмосферное давление, мм рт. ст. |
tcl |
Температура в блоке электроники (по часам DS3231) |
sleeptime |
Период отправки в минутах, который сейчас стоит в устройстве. По нему сервис понимает, что данные пропали, и может прислать новое значение |
version |
Версия прошивки. Для своих устройств поставьте любую метку — она попадёт в лог и поможет разбирать сбои |
reset |
Признак перезагрузки устройства. Помогает отличить сбой питания от обрыва связи |
Шаг 3. Готовый скетч для ESP32
Минимальный рабочий пример: подключение к WiFi и отправка одного замера. Чтение массы с HX711, сон между замерами и питание — на вашей стороне; схема и прошивка наших весов есть в разделе сборки.
#include <WiFi.h>
#include <HTTPClient.h>
const char* WIFI_SSID = "имя-вашей-сети";
const char* WIFI_PASS = "пароль-сети";
// Выдаются в кабинете: «Оплата и счета» → ID весовых платформ
const char* SCALE_ID = "Hive101";
const char* SCALE_PASS = "11223344";
// Именно http: каталог приёма намеренно не редиректит на https,
// потому что GSM-модули не умеют TLS, а ESP не идёт за редиректом.
const char* API_URL = "http://apiscale.ru/get_data/pure_get.php";
void sendMeasurement(float weightKg, float tempC, int batteryRaw) {
if (WiFi.status() != WL_CONNECTED) {
return;
}
String url = String(API_URL)
+ "?id=" + SCALE_ID
+ "&pass=" + SCALE_PASS
+ "&weight=" + String(weightKg, 2)
+ "&tds=" + String(tempC, 1)
+ "&bat=" + String(batteryRaw)
+ "&rssi=" + String(WiFi.RSSI()) // без rssi устройство считается GSM
+ "&sleeptime=" + String(60)
+ "&version=diy1";
HTTPClient http;
http.begin(url);
http.setTimeout(15000); // не ждать вечно: сеть на пасеке капризна
int code = http.GET();
Serial.printf("HTTP %d: %s\n", code, http.getString().c_str());
http.end();
}
Шаг 4. Создайте улей и привяжите к нему ID
Данные принимаются не «в аккаунт», а в конкретный улей: он хранит настройки
уведомлений, конструкцию и цвет на графике. Пока улья нет, сервер отвечает
"no beehive" и показания не сохраняются.
Создайте пасеку и улей в кабинете, в поле «ID весов» выберите свой идентификатор — и первый замер появится на графике. Перейти в кабинет.
Что отвечает сервер
| Ответ | Что значит |
|---|---|
"Successful!" |
Данные приняты и записаны |
"auth error" |
ID не найден или пароль не совпал |
"no beehive" |
ID есть, но к нему не привязан улей — создайте улей в кабинете |
"no id platform" |
В запросе нет параметра id |
"time_already_exist" |
Запись с таким временем уже есть — повторная отправка того же замера |
setnewsleeptime=60 |
Сервис просит изменить период отправки на указанное число минут |
"need_update" |
Для серийных весов — команда обновить прошивку. Самодельному устройству её можно игнорировать |
Ответы приходят JSON-строкой в кавычках — кроме команды смены периода, она печатается сырой строкой. Логировать ответ полезно: по нему видно, принят ли замер, ещё до того, как вы откроете сайт.
Если данные не идут
auth error
Пароль в устройстве не совпал с паролем в кабинете либо ID написан с другой раскладкой регистра. ID начинается с заглавной буквы — сервис приводит первую букву к верхнему регистру при создании.
no beehive
ID выдан, но ни один улей на него не ссылается. Откройте настройки улья и выберите этот идентификатор в поле «ID весов».
time_already_exist
Замер с таким временем уже записан. Обычно это повторная отправка после неудачного ответа — ошибкой не является, данные не задваиваются.
Тишина в ответ
Проверьте, что запрос уходит на http, а не на https,
и что у клиента выставлен таймаут. По умолчанию во многих библиотеках
его нет вовсе — устройство может ждать ответа бесконечно.
Не хочется возиться с железом?
Серийные весы приходят настроенными: ID и пароль вводятся с телефона, дальше всё сама.