APISCALE
APISCALE

Заказать весы Войти

Подключить свои весы

Сервис принимает данные от любого устройства, которое умеет отправлять HTTP-запрос

Сервис не спрашивает, кто сделал вашу платформу. Устройству достаточно уметь отправлять обычный 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

Обязательные параметры

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 и пароль вводятся с телефона, дальше всё сама.