HIVE*.XML: налаштування вулика
Конфігурація вулика зберігається у /setting/<hive>.xml. Базове ім'я <hive> задається атрибутом hive1, hive2 тощо в mset.xml; розширення .xml додається автоматично.
Апаратно залежні значення
Не копіюйте секцію scales з іншого пристрою. Контакти плати й калібрувальні значення залежать від апаратної версії та конкретного комплекту датчиків ваги. Помилкові значення можуть спотворити вимірювання або зробити їх недоступними.
Дивіться правила безпечного редагування.
Автоматичне переписування
Після читання файла пристрій може зберегти його заново:
- відсутній або пошкоджений файл створюється з доступного поточного стану;
- відсутні
hive,thermometerабоscheduleвмикають нормалізацію; - відсутній атрибут у наявній секції
scalesабоthermometerзамінюється резервним значенням і вмикає нормалізацію; scales,boosterіrange_alarmerяк цілі секції необов'язкові;- під час нормалізації записуються також секції
booster,range_alarmer,thermometerіschedule, навіть якщо частини з них не було у вихідному файлі.
hive
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
hive_name |
Внутрішня назва вулика | Необов'язкове | Рядок; для сумісності рекомендовано до 8 ASCII-символів | Ім'я з mset.xml, наприклад hive1 |
hive_<індекс>; файл позначається для переписування |
ADVANCED |
bus_number |
Номер вулика у внутрішній шині | Необов'язкове | Ціле число; межі не перевіряються | Індекс екземпляра, для першого 0 |
Індекс екземпляра; файл позначається для переписування | SERVICE |
main_device |
Ознака головного пристрою з локальними апаратними датчиками | Необов'язкове | true, false |
true у новоствореному файлі |
Екземпляр не стає головним; сам пропуск не вмикає переписування | SERVICE |
Підтримка підлеглих пристроїв є застарілою. Значення main_device="false" приймається під час завантаження, але після збереження атрибут стає main_device="true". Не використовуйте false як стабільну конфігурацію.
scales
Якщо секції немає повністю, об'єкт ваг не створюється і вимірювання ваги вимкнене. Якщо секція є, кожне пропущене або некоректне поле замінюється резервним значенням, після чого весь файл може бути переписаний.
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
pin_hc711_data |
GPIO даних HX711 | Обов'язкове в наявній секції | GPIO конкретної плати | Секція автоматично не створюється; апаратно залежне | Контакт конкретної плати; файл переписується | SERVICE |
pin_hc711_clk |
GPIO тактування HX711 | Обов'язкове в наявній секції | GPIO конкретної плати | Секція автоматично не створюється; апаратно залежне | Контакт конкретної плати; файл переписується | SERVICE |
gain |
Режим підсилення HX711 | Обов'язкове в наявній секції | Значення режиму підсилення HX711 | Канал A, підсилення 128 | Канал A, підсилення 128; файл переписується | SERVICE |
zero_calibrate_measurement |
Сире значення АЦП для нульового навантаження | Обов'язкове в наявній секції | Знакове 32-бітне ціле | Апаратно залежне | Резервне значення -486050; файл переписується |
SERVICE |
weight_calibrate_measurement |
Сире значення АЦП з еталонною вагою | Обов'язкове в наявній секції | Знакове 32-бітне ціле | Апаратно залежне | Резервне значення -498030; файл переписується |
SERVICE |
calibrate_weight |
Маса еталона калібрування | Обов'язкове в наявній секції | Грами; додатне ціле, автоматичної перевірки меж немає | Апаратно залежне | 500 г; файл переписується |
USER |
start_weight |
Тара, яку віднімають із результату | Обов'язкове в наявній секції | Грами; рекомендовано від -100000 до 100000, автоматичної перевірки меж немає |
Апаратно залежне | 0 г; файл переписується |
USER |
source_weight |
Фільтр, результат якого використовується як основна вага | Обов'язкове в наявній секції | 1 — immediate; 2 — stable; 3 — calibration |
Секція автоматично не створюється | 1; файл переписується. Інші значення під час виконання трактуються як 1 |
SERVICE |
normal_pecision |
Параметр точності швидкого фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 0.5; файл переписується |
SERVICE |
normal_desired_deviation |
Бажане відхилення швидкого фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 10; файл переписується |
SERVICE |
stable_pecision |
Параметр точності стабільного фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 0.35; файл переписується |
SERVICE |
stable_desired_deviation |
Бажане відхилення стабільного фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 5; файл переписується |
SERVICE |
calibrate_pecision |
Параметр точності калібрувального фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 0.25; файл переписується |
SERVICE |
calibrate_desired_deviation |
Бажане відхилення калібрувального фільтра | Обов'язкове в наявній секції | Число з рухомою комою; межі не перевіряються | Секція автоматично не створюється | 3; файл переписується |
SERVICE |
median_window |
Розмір вікна медіанного фільтра | Обов'язкове в наявній секції | 3–100; поза межами замінюється |
Секція автоматично не створюється | 100; файл переписується |
SERVICE |
Ідентифікатори normal_pecision, stable_pecision і calibrate_pecision містять історичну помилку pecision, яку не можна виправляти в XML.
gain завантажується з файла, але під час збереження завжди встановлюється режим каналу A з підсиленням 128. Не змінюйте його вручну без даних саме для вашого пристрою.
thermometer
Відсутня секція вмикає нормалізацію файла. Значення sensors_count="0" вимикає опитування DS18B20.
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
pin_onewire |
GPIO шини 1-Wire | Необов'язкове | GPIO конкретної плати | 4 |
4; файл переписується |
SERVICE |
sensors_count |
Кількість датчиків DS18B20 | Необов'язкове | 0 вимикає датчики; додатне ціле, верхня межа не перевіряється |
2 |
2; файл переписується |
ADVANCED |
schedule
Атрибути TimeSlot0–TimeSlot23 визначають дію для відповідної години. Після 30-ї хвилини вибирається дія наступної години; після 23-ї — TimeSlot0.
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
TimeSlot0…TimeSlot23 |
Тип запланованої дії для години 0–23 |
Усі атрибути необов'язкові, але потрібен щонайменше один слот 2 |
Ціле число від 0 до 5, див. нижче |
5 для годин 0–20; 1 для 21 і 22; 2 для 23 |
Відсутній слот стає 0. Якщо після читання немає жодного 2, весь розклад скидається до початкового |
ADVANCED |
| Значення | Дія | Рекомендація |
|---|---|---|
0 |
Немає запланованої дії | Можна використовувати для порожнього слота |
1 |
Вимірювання | Підтримується |
2 |
Передавання через основний канал | Потрібне щонайменше в одному слоті |
3 |
Зарезервовано для передавання через Wi-Fi | Не використовувати |
4 |
Зарезервовано для передавання через BLE | Не використовувати |
5 |
Щогодинне пробудження для синхронізації | Використовується початковим розкладом |
Інші цілі числа не відхиляються, але не мають визначеної поведінки. Використовуйте лише значення з таблиці.
Початковий розклад
<schedule
TimeSlot0="5" TimeSlot1="5" TimeSlot2="5" TimeSlot3="5"
TimeSlot4="5" TimeSlot5="5" TimeSlot6="5" TimeSlot7="5"
TimeSlot8="5" TimeSlot9="5" TimeSlot10="5" TimeSlot11="5"
TimeSlot12="5" TimeSlot13="5" TimeSlot14="5" TimeSlot15="5"
TimeSlot16="5" TimeSlot17="5" TimeSlot18="5" TimeSlot19="5"
TimeSlot20="5" TimeSlot21="1" TimeSlot22="1" TimeSlot23="2" />
booster
Секція задає інтервал додаткових пробуджень для перевірки критичних параметрів. Якщо секції немає, під час виконання використовується годинний інтервал; сама відсутність не запускає переписування.
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
booster_time_sec |
Інтервал додаткової перевірки | Необов'язкове | 180, 240, 300, 360, 600, 720, 900, 1200, 1800 або 3600 с |
3600 с |
3600 с |
ADVANCED |
Значення менше 180 с стає 180, більше 3600 с — 3600. Інші значення в межах діапазону округлюються до найближчого підтримуваного інтервалу зі списку в таблиці.
range_alarmer
Секція необов'язкова. Якщо її немає, пороговий аларм не ініціалізується. Якщо alarm="false" або атрибут alarm відсутній, межі не читаються й фонове завдання алармів не запускається.
| Поле | Призначення | Обов'язковість | Допустимі значення / межі | Початкове значення | Якщо не задано | Рівень |
|---|---|---|---|---|---|---|
alarm |
Увімкнення порогових алармів | Необов'язкове | true, false |
false |
false |
USER |
T1_min |
Нижня межа T1 | Необов'язкове | Число з рухомою комою, °C; автоматичної перевірки фізичних меж і порядку min/max немає | -500 °C у новоствореному файлі |
За alarm="true" обмеження знизу відсутнє |
ADVANCED |
T1_max |
Верхня межа T1 | Необов'язкове | Число з рухомою комою, °C; автоматичної перевірки фізичних меж і порядку min/max немає | 500 °C у новоствореному файлі |
За alarm="true" обмеження зверху відсутнє |
ADVANCED |
T2_min |
Нижня межа T2 | Необов'язкове | Число з рухомою комою, °C; автоматичної перевірки фізичних меж і порядку min/max немає | -500 °C у новоствореному файлі |
За alarm="true" обмеження знизу відсутнє |
ADVANCED |
T2_max |
Верхня межа T2 | Необов'язкове | Число з рухомою комою, °C; автоматичної перевірки фізичних меж і порядку min/max немає | 500 °C у новоствореному файлі |
За alarm="true" обмеження зверху відсутнє |
ADVANCED |
Humidity_min |
Нижня межа вологості | Необов'язкове | Число з рухомою комою, %; автоматичної перевірки фізичних меж і порядку min/max немає | -20 % у новоствореному файлі |
За alarm="true" обмеження знизу відсутнє |
ADVANCED |
Humidity_max |
Верхня межа вологості | Необов'язкове | Число з рухомою комою, %; автоматичної перевірки фізичних меж і порядку min/max немає | 200 % у новоствореному файлі |
За alarm="true" обмеження зверху відсутнє |
ADVANCED |
Для кожного джерела T1, T2 або вологості достатньо задати одну межу. Якщо не задано жодної межі конкретного джерела, воно не додається до перевірки. Порядок _min і _max автоматично не перевіряється.
Приклад односторонніх алармів
У цьому прикладі T1 контролюється лише зверху, T2 — лише знизу, а вологість не контролюється:
<range_alarmer alarm="true" T1_max="45.0" T2_min="-10.0" />
Загальну частоту SMS і підтвердження PIR-алармів задають alarm_sms_sec_interval, alarm_by_changes_count та alarm_by_long_state у mset.xml.
Структурний приклад без ваг
Такий файл використовує початковий розклад, два датчики температури та вимкнені порогові аларми. Секції scales немає, тому ваги не створюються.
<settings>
<hive hive_name="hive1" bus_number="0" main_device="true" />
<booster booster_time_sec="3600" />
<range_alarmer alarm="false"
T1_max="500" T1_min="-500"
T2_max="500" T2_min="-500"
Humidity_max="200" Humidity_min="-20" />
<thermometer pin_onewire="4" sensors_count="2" />
<schedule
TimeSlot0="5" TimeSlot1="5" TimeSlot2="5" TimeSlot3="5"
TimeSlot4="5" TimeSlot5="5" TimeSlot6="5" TimeSlot7="5"
TimeSlot8="5" TimeSlot9="5" TimeSlot10="5" TimeSlot11="5"
TimeSlot12="5" TimeSlot13="5" TimeSlot14="5" TimeSlot15="5"
TimeSlot16="5" TimeSlot17="5" TimeSlot18="5" TimeSlot19="5"
TimeSlot20="5" TimeSlot21="1" TimeSlot22="1" TimeSlot23="2" />
</settings>
Повна секція ваг
Нижче наведено структурний приклад із резервними значеннями лише для архівної довідки. Не встановлюйте його на пристрій: калібрувальні значення й контакти мають бути взяті з резервної копії саме цього пристрою або створені штатним калібруванням.
<scales pin_hc711_data="27" pin_hc711_clk="26" gain="0"
zero_calibrate_measurement="-486050"
weight_calibrate_measurement="-498030"
calibrate_weight="500" start_weight="0" source_weight="1"
normal_pecision="0.5" normal_desired_deviation="10"
stable_pecision="0.35" stable_desired_deviation="5"
calibrate_pecision="0.25" calibrate_desired_deviation="3"
median_window="100" />
GPIO 27 і 26 є лише прикладом для одного пристрою та не є універсальними. Використовуйте значення з резервної копії саме вашого пристрою.