{"repo": "aspinozaxxx-lab/growerhub", "files": {"backend/src/main/resources/application.yml": {"d555179123ebb8fedd5f7d8bab335b8f33e60b79": {"t": 1785745244.0585225, "n": 8619, "h": "e0d90649e8e86b7a", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n mqtt:\n # Publichnoe MQTTS podkljuchenie seriynyh ustrojstv.\n publicHost: \"growerhub.ru\"\n publicPort: 8883\n tls: true\n # Rol' ustrojstva v Mosquitto Dynamic Security.\n brokerRole: \"native-device\"\n # Tehnicheskaja zashchita ot chastogo perevypuska credentials.\n credentialCooldownSeconds: 30\n claim:\n # Kolichestvo oshibok do pervoj blokirovki.\n initialFailureLimit: 10\n # Dlitel'nost' pervoj blokirovki (sek).\n blockSeconds: 3600\n # Skol'zjashchee okno ogranichennogo rezhima (sek).\n restrictedWindowSeconds: 3600\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n # Timeout podtverzhdenija OTA ustrojstvom (sek).\n updateTimeoutSeconds: 300\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nuser:\n # Chasovoj pojas novogo polzovatelja.\n defaultTimezone: \"Europe/Moscow\"\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Maksimal'noe kolichestvo perehodov diskretnogo svojstva.\n maxDiscretePoints: 5000\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "f5d7e06c067ad4170131eed9bb5f43ab1705760e": {"t": 1785749164.6990378, "n": 8619, "h": "e0d90649e8e86b7a", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n mqtt:\n # Publichnoe MQTTS podkljuchenie seriynyh ustrojstv.\n publicHost: \"growerhub.ru\"\n publicPort: 8883\n tls: true\n # Rol' ustrojstva v Mosquitto Dynamic Security.\n brokerRole: \"native-device\"\n # Tehnicheskaja zashchita ot chastogo perevypuska credentials.\n credentialCooldownSeconds: 30\n claim:\n # Kolichestvo oshibok do pervoj blokirovki.\n initialFailureLimit: 10\n # Dlitel'nost' pervoj blokirovki (sek).\n blockSeconds: 3600\n # Skol'zjashchee okno ogranichennogo rezhima (sek).\n restrictedWindowSeconds: 3600\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n # Timeout podtverzhdenija OTA ustrojstvom (sek).\n updateTimeoutSeconds: 300\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nuser:\n # Chasovoj pojas novogo polzovatelja.\n defaultTimezone: \"Europe/Moscow\"\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Maksimal'noe kolichestvo perehodov diskretnogo svojstva.\n maxDiscretePoints: 5000\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "db53ce56767a56098729e78b738e75d17aa3493c": {"t": 1785749167.960735, "n": 8540, "h": "16a7c9c0a4d95cd3", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n mqtt:\n # Publichnoe MQTTS podkljuchenie seriynyh ustrojstv.\n publicHost: \"growerhub.ru\"\n publicPort: 8883\n tls: true\n # Rol' ustrojstva v Mosquitto Dynamic Security.\n brokerRole: \"native-device\"\n # Tehnicheskaja zashchita ot chastogo perevypuska credentials.\n credentialCooldownSeconds: 30\n claim:\n # Kolichestvo oshibok do pervoj blokirovki.\n initialFailureLimit: 10\n # Dlitel'nost' pervoj blokirovki (sek).\n blockSeconds: 3600\n # Skol'zjashchee okno ogranichennogo rezhima (sek).\n restrictedWindowSeconds: 3600\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nuser:\n # Chasovoj pojas novogo polzovatelja.\n defaultTimezone: \"Europe/Moscow\"\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Maksimal'noe kolichestvo perehodov diskretnogo svojstva.\n maxDiscretePoints: 5000\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "3f02ae97b8cc50f54f28c27356574e93b556141a": {"t": 1785749169.0384402, "n": 7982, "h": "ffef66f1361cfc6e", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nuser:\n # Chasovoj pojas novogo polzovatelja.\n defaultTimezone: \"Europe/Moscow\"\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Maksimal'noe kolichestvo perehodov diskretnogo svojstva.\n maxDiscretePoints: 5000\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "e76fe55a4809e2e07b5e557d5415496c0192e878": {"t": 1785749170.2781317, "n": 7900, "h": "847f363e4d8d79a9", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Maksimal'noe kolichestvo perehodov diskretnogo svojstva.\n maxDiscretePoints: 5000\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "156ff9d6ee758dc3a22965d8d5442aed3a2db2f3": {"t": 1785749171.3409688, "n": 7809, "h": "c04b31a7f40b2a19", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n # Bazovyj interval zapisi chislovyh svojstv (sek).\n numericIntervalSeconds: 300\n # Minimal'nyj interval mezhdu zapisyami pri rezkom izmenenii (sek).\n numericChangeMinIntervalSeconds: 60\n # Bazovoe znachimoe izmenenie chislovogo svojstva.\n numericChangeThreshold: 0.5\n # Individual'nye intervaly redko menjajushchihsja i diagnosticheskih svojstv.\n numericIntervals:\n battery: 3600\n voltage: 3600\n linkquality: 900\n # Porogi nemedlennoj zapisi pri znachimom izmenenii.\n numericChangeThresholds:\n temperature: 0.3\n soil_temperature: 0.3\n humidity: 2.0\n soil_moisture: 2.0\n battery: 1.0\n voltage: 2.0\n linkquality: 10.0\n power: 5.0\n current: 0.05\n energy: 0.05\n # Sobytiya, gde povtor odinakovogo znachenija imeet smysl.\n eventProperties: [action, click, event]\n # Konfiguracionnye svojstva ostajutsja tol'ko v tekushchem snapshot.\n ignoredProperties:\n - child_lock\n - countdown\n - humidity_calibration\n - indicator_mode\n - power_outage_memory\n - soil_moisture_calibration\n - soil_moisture_sampling\n - soil_calibration\n - soil_sampling\n - soil_temperature_calibration\n - soil_temperature_sampling\n - soil_warning\n - switch_type\n - switch_type_button\n - temperature_calibration\n - temperature_sampling\n - temperature_unit\n\nhistory:\n retention:\n # Ezhednevnoe prorezhivanie istorii vklyucheno.\n enabled: ${HISTORY_RETENTION_ENABLED:true}\n # Kolichestvo polnyh sutok syroj istorii.\n rawDays: 30\n # Maksimal'noe kolichestvo dnei v odnom catch-up zapuske.\n maxDaysPerRun: 365\n # Raspisanie ezhednevnogo zapuska.\n cron: \"0 0 3 * * *\"\n # Chasovoj pojas raspisanija.\n timezone: \"Europe/Istanbul\"\n # Zaderzhka pervogo catch-up posle starta prilozhenija (ms).\n startupDelayMs: 60000\n # Period povtornoj proverki backlog posle starta (ms).\n catchUpPeriodMs: 86400000\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "da33221f5bcbd92af0e9db501023954dc0859f61": {"t": 1785749172.7878335, "n": 5821, "h": "f621db19b58193bb", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"${ADVISOR_DEEPSEEK_API_KEY:}\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n provisioning:\n # Provisioning klient imeet tol'ko prava Dynamic Security control.\n enabled: ${MQTT_PROVISIONING_ENABLED:false}\n host: ${MQTT_PROVISIONING_HOST:localhost}\n port: ${MQTT_PROVISIONING_PORT:8883}\n tls: ${MQTT_PROVISIONING_TLS:true}\n username: ${MQTT_PROVISIONING_USERNAME:}\n password: ${MQTT_PROVISIONING_PASSWORD:}\n responseTimeoutSeconds: 10\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Ogranichennye topiki backend vmesto global'noj podpiski '#'.\n listen: \"${MQTT_LISTEN_TOPIC:}\"\n listenTopics:\n - \"gh/dev/#\"\n - \"zigbee2growerhub/#\"\n - \"gh/z2m/#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Bazovyj topic pol'zovatel'skih Zigbee2MQTT namespace.\n zigbeeUserPrefix: \"gh/z2m\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n self-service:\n # Publichnyj self-service vklyuchaetsja tol'ko posle smoke-proverki.\n enabled: ${SELF_SERVICE_ENABLED:false}\n # Publichnoe MQTT podkljuchenie Zigbee2MQTT.\n mqttServer: \"mqtts://growerhub.ru:8883\"\n # Rol' klienta v Mosquitto Dynamic Security.\n brokerRole: \"z2m-coordinator\"\n # Kolichestvo sluchajnyh bytes parolja koordinatore.\n passwordBytes: 32\n # Tehnicheskaja zashchita ot chastoj vydachi broker credentials.\n credentialCooldownSeconds: 30\n # Bezopasnye writable capabilities dlya pervogo reliza.\n writableProperties: [state, brightness, color_temp]\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "7ef947ab3810ed4fea0d094e5e6d175b18f4e3b0": {"t": 1785749174.877998, "n": 4629, "h": "5a8ef0570b2e89b9", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Porog statusa net svjazi dlya plitok datchikov (min).\n sensorOfflineMinutes: 20\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "3b9f5634fe60cdbe4b90f3489639455cc1c1fd2b": {"t": 1785749175.9640749, "n": 4544, "h": "384ac6e7aa55c4b2", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n # Defoltnaja dlitel'nost' poliva po vremeni (sek).\n defaultTimedDurationS: 300\n # Defoltnyj limit aktivnogo poliva do protechki (sek).\n defaultUntilLeakMaxActiveDurationS: 1800\n # Defoltnaja dlitel'nost' impul'sa poliva (sek).\n defaultPulseRunS: 180\n # Defoltnaja pauza mezhdu impul'sami (sek).\n defaultPulsePauseS: 300\n # Maksimal'naja dlitel'nost' aktivnogo poliva (sek).\n maxActiveDurationS: 86400\n # Maksimal'nyj razmer stranicy zhurnala sessij.\n sessionPageMax: 100\n # Timeout podtverzhdenija ostanovki nasosa (sek).\n stoppingTimeoutS: 15\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "92f7be8c84d9a92c771e32be92bacb25a250bf7f": {"t": 1785749177.0413733, "n": 3957, "h": "d0550604af8d0095", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Period aktivnyh sessij poliva (ms).\n wateringWorkerPeriodMs: 1000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Porog statusa net svjazi dlya resursov (min).\n resourceOfflineMinutes: 5\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "17c34c253d1f7b9f8976728111656f07db042bb3": {"t": 1785749178.097451, "n": 3808, "h": "4d5843020f4d59e7", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n history:\n # Maksimal'noe kolichestvo tochek sostoyaniya nasosa.\n maxPoints: 200\n # Chasy istorii nasosa po umolchaniju.\n defaultHours: 24\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n history:\n # Maksimal'noe kolichestvo tochek Zigbee-svojstva.\n maxPoints: 200\n # Chasy istorii Zigbee po umolchaniju.\n defaultHours: 24\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "01900b26eaa08526513c1e9aff5e72fc25e1f992": {"t": 1785749179.7625802, "n": 3507, "h": "b6780537d89758bf", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n\nautomation:\n # Period worker avtomatizacii (ms).\n workerPeriodMs: 30000\n # Maksimal'nyj vozrast dannyh sensora dlya scenariev (min).\n staleSensorMinutes: 15\n # Pauza posle ruchnogo vmeshatel'stva (min).\n manualOverrideMinutes: 15\n # Chasovoj poyas raspisanij.\n timezone: \"Europe/Istanbul\"\n"}, "7e1ab60e35a92226fdb6d6fe6edf62f4ae4c0ca1": {"t": 1785749180.8569896, "n": 3209, "h": "59646edf4a6c9cc3", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Bazovyj topic Zigbee2MQTT.\n zigbeeBase: \"zigbee2growerhub\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n\nzigbee:\n # Vremja otkrytogo soprjazhenija po umolchaniju (sek).\n permitJoinDefaultSeconds: 254\n"}, "412a3d9f4026f191a8cd26166fbf27cfc7e121b9": {"t": 1785749181.9285977, "n": 3043, "h": "ccaeab371f5add42", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n"}, "eec40378e6764b9cb3f738d16c5726ee1bad4911": {"t": 1785749183.0156612, "n": 3050, "h": "3a93121874345913", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya diagnosticheskoj podpiski.\n listen: \"#\"\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n"}, "4444ebde6fbd22499994e41cd921fd174b4ecfa8": {"t": 1785749184.0878448, "n": 2990, "h": "1966edd49f45d4f7", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n # Maksimal'noe kolichestvo poslednih MQTT soobshchenij v pamjati.\n recentMessagesLimit: 200\n # Maksimal'naja dlina payload v poslednih MQTT soobshchenijah.\n recentPayloadChars: 4096\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n"}, "665e55cacfd4aa03b0dfa3fed218ab0f1be30f11": {"t": 1785749185.2265067, "n": 2803, "h": "dae6d8173028235c", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Topic dlya service events.\n events: \"gh/dev/+/events\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n # Suffiks dlya service events.\n eventsSuffix: \"/events\"\n\napp:\n debug:\n plantsTiming: false\n"}, "efa76a4a0b9b6f46afda1c7bcfb3eca3d30431ec": {"t": 1785749186.3394232, "n": 2677, "h": "04c2fea94c95b4ea", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n\napp:\n debug:\n plantsTiming: false\n"}, "f92c27db56955e35ef294f7638b2d3e486a737c1": {"t": 1785749190.500355, "n": 2676, "h": "9868965b7de82498", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n\napp:\n debug:\n plantsTiming: true\n"}, "c43c9254efe861aba4b85882574777cfddb3e9d0": {"t": 1785749191.5914798, "n": 2638, "h": "36d2e647d25938c6", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f_4234234\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n"}, "ff413bb0a8df0d186b6c9a2758a59decb04dffc5": {"t": 1785749193.6866834, "n": 2629, "h": "57033f6984bac165", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: true\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n"}, "8c0592a57c41628bdb6df5c53c11b7acddc02b34": {"t": 1785749194.9944975, "n": 2630, "h": "d5dee573d1e1fe45", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"sk-0a2867b7fe554a9fb41757ce3b0f144f\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n"}, "ec604af93dd7261ec48a26863cf1231576cb6595": {"t": 1785749196.0719764, "n": 2595, "h": "57092079850a95cc", "c": "ack:\n # TTL dlya ack (sek).\n ttlSeconds: 180\n # Period ochistki ack (sek).\n cleanupPeriodSeconds: 60\n\ndevice:\n # Porog online statusa (sek).\n onlineThresholdS: 60\n defaults:\n # Cel' vlazhnosti (procent).\n targetMoisture: 40.0\n # Dlitel'nost' poliva (sek).\n wateringDurationSeconds: 30\n # Timeout poliva (sek).\n wateringTimeoutSeconds: 300\n # Chas vklyuchenija sveta.\n lightOnHour: 6\n # Chas vyklyuchenija sveta.\n lightOffHour: 22\n # Dlitel'nost' sveta (chasy).\n lightDurationHours: 16\n # Tekushchaja versija firmware.\n currentVersion: \"1.0.0\"\n # Poslednjaja versija firmware.\n latestVersion: \"1.0.0\"\n # Priznak dostupnosti update.\n updateAvailable: false\n firmware:\n # Versija po umolchaniju.\n defaultVersion: \"old\"\n\nauth:\n sso:\n # Spisok podderzhivaemyh providerov.\n supportedProviders: [\"google\", \"yandex\"]\n # Timeout soedinenija (sek).\n connectTimeoutSeconds: 10\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 10\n # Vremja zhizni state-tokena (min).\n stateTtlMinutes: 10\n\nsecurity:\n password:\n pbkdf2:\n # Kolichestvo iteracij.\n rounds: 29000\n # Razmer soli (bytes).\n saltBytes: 16\n # Razmer hesha (bytes).\n hashBytes: 32\n\nfirmware:\n # Katalog binarnikov firmware.\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n # Public base URL.\n publicBaseUrl: \"https://growerhub.ru\"\n\nadvisor:\n # Priznak vklyucheniya advisor.\n enabled: false\n watering:\n # TTL rekomendacii poliva.\n ttl: \"24h\"\n llm:\n deepseek:\n # Base URL dlya LLM.\n baseUrl: \"https://api.deepseek.com/v1/chat/completions\"\n # API key dlya LLM.\n apiKey: \"\"\n # Model LLM.\n model: \"deepseek-chat\"\n # Timeout zaprosa (sek).\n requestTimeoutSeconds: 15\n\nplant:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\nsensor:\n history:\n # Maksimal'noe kolichestvo tochek.\n maxPoints: 200\n # Chasy istorii po umolchaniju.\n defaultHours: 24\n\npump:\n watering:\n # Defoltnyi rashod (ml/ch).\n defaultRateMlPerHour: 2000\n ack:\n wait:\n # Timeout ozhidanija ACK po umolchaniju (sek).\n defaultTimeoutSeconds: 5\n # Maksimal'nyi timeout ACK (sek).\n maxTimeoutSeconds: 15\n # Interval polling (ms).\n pollIntervalMs: 500\n\nmqtt:\n topics:\n # Topic dlya state.\n state: \"gh/dev/+/state\"\n # Topic dlya ack.\n ack: \"gh/dev/+/state/ack\"\n # Suffiks dlya state.\n stateSuffix: \"/state\"\n # Suffiks dlya ack.\n ackSuffix: \"/state/ack\"\n"}, "5248f2990f4a04a8aae1edde2297dab87ea4af82": {"t": 1785749217.4147725, "n": 185, "h": "52ec22ca47b0f574", "c": "ack:\n ttlSeconds: 180\n cleanupPeriodSeconds: 60\n\ndevice:\n onlineThresholdS: 60\n\nfirmware:\n binariesDir: \"server/firmware_binaries\"\n\nserver:\n publicBaseUrl: \"https://growerhub.ru\"\n"}}, "ansible/roles/java_backend/defaults/main.yml": {"d555179123ebb8fedd5f7d8bab335b8f33e60b79": {"t": 1785745249.4004807, "n": 4596, "h": "2569f33d3a6d759a", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_deploy_user: \"{{ java_backend_user }}\"\njava_backend_release_mode: false\njava_backend_releases_dir: \"/opt/growerhub/releases/backend\"\njava_backend_current_link: \"/opt/growerhub/current/backend\"\njava_backend_firmware_dir: \"{{ java_backend_deploy_dir }}/firmware_binaries\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_java_opts: []\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_enforce_bind_ip: false\njava_backend_host_port: 18080\njava_backend_after_units:\n - network-online.target\n - mosquitto.service\njava_backend_systemd_extra_directives: []\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_dir_mode: \"0755\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\njava_backend_manage_deploy_sudoers: true\njava_backend_remove_legacy_docker: true\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1884\njava_backend_mqtt_username: \"gh_backend\"\njava_backend_mqtt_password: \"{{ lookup('env', 'GH_MQTT_BACKEND_PASSWORD') }}\"\njava_backend_mqtt_tls: false\njava_backend_mqtt_provisioning_enabled: false\njava_backend_mqtt_provisioning_host: \"127.0.0.1\"\njava_backend_mqtt_provisioning_port: 1884\njava_backend_mqtt_provisioning_tls: false\njava_backend_mqtt_provisioning_username: \"gh_provisioning\"\njava_backend_mqtt_provisioning_password: \"{{ lookup('env', 'GH_MQTT_PROVISIONING_PASSWORD') }}\"\n\n# Self-service vklyuchaetsja tol'ko posle polnogo smoke-testa i proverki pravovyh tekstov.\njava_backend_self_service_enabled: false\njava_backend_self_service_legacy_owner_email: \"{{ lookup('env', 'SELF_SERVICE_LEGACY_OWNER_EMAIL') }}\"\njava_backend_advisor_deepseek_api_key: \"{{ lookup('env', 'ADVISOR_DEEPSEEK_API_KEY') }}\"\njava_backend_public_base_url: \"https://growerhub.ru\"\njava_backend_env_extra: {}\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n MQTT_PROVISIONING_ENABLED: \"{{ java_backend_mqtt_provisioning_enabled | bool | lower }}\"\n MQTT_PROVISIONING_HOST: \"{{ java_backend_mqtt_provisioning_host | default('') }}\"\n MQTT_PROVISIONING_PORT: \"{{ java_backend_mqtt_provisioning_port | default('') }}\"\n MQTT_PROVISIONING_TLS: \"{{ java_backend_mqtt_provisioning_tls | bool | lower }}\"\n MQTT_PROVISIONING_USERNAME: \"{{ java_backend_mqtt_provisioning_username | default('') }}\"\n MQTT_PROVISIONING_PASSWORD: \"{{ java_backend_mqtt_provisioning_password | default('') }}\"\n SELF_SERVICE_ENABLED: \"{{ java_backend_self_service_enabled | bool | lower }}\"\n SELF_SERVICE_LEGACY_OWNER_EMAIL: \"{{ java_backend_self_service_legacy_owner_email | default('') }}\"\n ADVISOR_DEEPSEEK_API_KEY: \"{{ java_backend_advisor_deepseek_api_key | default('') }}\"\n SERVER_PUBLIC_BASE_URL: \"{{ java_backend_public_base_url }}\"\n FIRMWARE_BINARIES_DIR: \"{{ java_backend_firmware_dir }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n REFRESH_TOKEN_COOKIE_SECURE: \"true\"\n REFRESH_TOKEN_COOKIE_SAMESITE: \"lax\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: >-\n {{\n java_backend_env_required\n | combine(java_backend_env_optional)\n | combine(java_backend_env_extra)\n }}\n"}, "df1858df1e5088da0d474f4b2a9bf69bac7a85d6": {"t": 1785749165.3333008, "n": 4596, "h": "2569f33d3a6d759a", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_deploy_user: \"{{ java_backend_user }}\"\njava_backend_release_mode: false\njava_backend_releases_dir: \"/opt/growerhub/releases/backend\"\njava_backend_current_link: \"/opt/growerhub/current/backend\"\njava_backend_firmware_dir: \"{{ java_backend_deploy_dir }}/firmware_binaries\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_java_opts: []\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_enforce_bind_ip: false\njava_backend_host_port: 18080\njava_backend_after_units:\n - network-online.target\n - mosquitto.service\njava_backend_systemd_extra_directives: []\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_dir_mode: \"0755\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\njava_backend_manage_deploy_sudoers: true\njava_backend_remove_legacy_docker: true\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1884\njava_backend_mqtt_username: \"gh_backend\"\njava_backend_mqtt_password: \"{{ lookup('env', 'GH_MQTT_BACKEND_PASSWORD') }}\"\njava_backend_mqtt_tls: false\njava_backend_mqtt_provisioning_enabled: false\njava_backend_mqtt_provisioning_host: \"127.0.0.1\"\njava_backend_mqtt_provisioning_port: 1884\njava_backend_mqtt_provisioning_tls: false\njava_backend_mqtt_provisioning_username: \"gh_provisioning\"\njava_backend_mqtt_provisioning_password: \"{{ lookup('env', 'GH_MQTT_PROVISIONING_PASSWORD') }}\"\n\n# Self-service vklyuchaetsja tol'ko posle polnogo smoke-testa i proverki pravovyh tekstov.\njava_backend_self_service_enabled: false\njava_backend_self_service_legacy_owner_email: \"{{ lookup('env', 'SELF_SERVICE_LEGACY_OWNER_EMAIL') }}\"\njava_backend_advisor_deepseek_api_key: \"{{ lookup('env', 'ADVISOR_DEEPSEEK_API_KEY') }}\"\njava_backend_public_base_url: \"https://growerhub.ru\"\njava_backend_env_extra: {}\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n MQTT_PROVISIONING_ENABLED: \"{{ java_backend_mqtt_provisioning_enabled | bool | lower }}\"\n MQTT_PROVISIONING_HOST: \"{{ java_backend_mqtt_provisioning_host | default('') }}\"\n MQTT_PROVISIONING_PORT: \"{{ java_backend_mqtt_provisioning_port | default('') }}\"\n MQTT_PROVISIONING_TLS: \"{{ java_backend_mqtt_provisioning_tls | bool | lower }}\"\n MQTT_PROVISIONING_USERNAME: \"{{ java_backend_mqtt_provisioning_username | default('') }}\"\n MQTT_PROVISIONING_PASSWORD: \"{{ java_backend_mqtt_provisioning_password | default('') }}\"\n SELF_SERVICE_ENABLED: \"{{ java_backend_self_service_enabled | bool | lower }}\"\n SELF_SERVICE_LEGACY_OWNER_EMAIL: \"{{ java_backend_self_service_legacy_owner_email | default('') }}\"\n ADVISOR_DEEPSEEK_API_KEY: \"{{ java_backend_advisor_deepseek_api_key | default('') }}\"\n SERVER_PUBLIC_BASE_URL: \"{{ java_backend_public_base_url }}\"\n FIRMWARE_BINARIES_DIR: \"{{ java_backend_firmware_dir }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n REFRESH_TOKEN_COOKIE_SECURE: \"true\"\n REFRESH_TOKEN_COOKIE_SAMESITE: \"lax\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: >-\n {{\n java_backend_env_required\n | combine(java_backend_env_optional)\n | combine(java_backend_env_extra)\n }}\n"}, "da33221f5bcbd92af0e9db501023954dc0859f61": {"t": 1785749168.4862363, "n": 3766, "h": "2870c79f33f4a7ff", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1884\njava_backend_mqtt_username: \"gh_backend\"\njava_backend_mqtt_password: \"{{ lookup('env', 'GH_MQTT_BACKEND_PASSWORD') }}\"\njava_backend_mqtt_tls: false\njava_backend_mqtt_provisioning_enabled: false\njava_backend_mqtt_provisioning_host: \"127.0.0.1\"\njava_backend_mqtt_provisioning_port: 1884\njava_backend_mqtt_provisioning_tls: false\njava_backend_mqtt_provisioning_username: \"gh_provisioning\"\njava_backend_mqtt_provisioning_password: \"{{ lookup('env', 'GH_MQTT_PROVISIONING_PASSWORD') }}\"\n\n# Self-service vklyuchaetsja tol'ko posle polnogo smoke-testa i proverki pravovyh tekstov.\njava_backend_self_service_enabled: false\njava_backend_self_service_legacy_owner_email: \"{{ lookup('env', 'SELF_SERVICE_LEGACY_OWNER_EMAIL') }}\"\njava_backend_advisor_deepseek_api_key: \"{{ lookup('env', 'ADVISOR_DEEPSEEK_API_KEY') }}\"\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n MQTT_PROVISIONING_ENABLED: \"{{ java_backend_mqtt_provisioning_enabled | bool | lower }}\"\n MQTT_PROVISIONING_HOST: \"{{ java_backend_mqtt_provisioning_host | default('') }}\"\n MQTT_PROVISIONING_PORT: \"{{ java_backend_mqtt_provisioning_port | default('') }}\"\n MQTT_PROVISIONING_TLS: \"{{ java_backend_mqtt_provisioning_tls | bool | lower }}\"\n MQTT_PROVISIONING_USERNAME: \"{{ java_backend_mqtt_provisioning_username | default('') }}\"\n MQTT_PROVISIONING_PASSWORD: \"{{ java_backend_mqtt_provisioning_password | default('') }}\"\n SELF_SERVICE_ENABLED: \"{{ java_backend_self_service_enabled | bool | lower }}\"\n SELF_SERVICE_LEGACY_OWNER_EMAIL: \"{{ java_backend_self_service_legacy_owner_email | default('') }}\"\n ADVISOR_DEEPSEEK_API_KEY: \"{{ java_backend_advisor_deepseek_api_key | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n REFRESH_TOKEN_COOKIE_SECURE: \"true\"\n REFRESH_TOKEN_COOKIE_SAMESITE: \"lax\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n"}, "ea09d474ba589e44c54592a1d99988070e14ed7d": {"t": 1785749170.0017273, "n": 2085, "h": "0e13a3c8118bae82", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1883\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n"}, "35d5d5e816d2cfde50ee25eaf8487c535f5276b8": {"t": 1785749171.115804, "n": 2881, "h": "3753d5e95165b7d9", "c": "---\n# Default deployment settings for GrowerHub Java backend (Docker).\n\n# Local path (on Ansible controller) to the repo `backend/` directory.\njava_backend_local_src_dir: \"{{ playbook_dir }}/../../backend\"\n\n# Target host directory where sources are synced for remote docker build.\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_deploy_owner: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_group: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_mode: \"0755\"\n\n# Docker image/tag to build on the target host.\njava_backend_image_name: \"growerhub-backend\"\njava_backend_image_tag: \"local\"\njava_backend_image: \"{{ java_backend_image_name }}:{{ java_backend_image_tag }}\"\n\n# Container settings.\njava_backend_container_name: \"growerhub-java-backend\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\njava_backend_container_port: 8080\n\n# Env file path (sozdaetsya ansible rolyu)\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\n# Deploy sudoers\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults (docker0 IP for container -> host access).\n# Override in vault/vars if needed (e.g. LAN IP 192.168.0.11).\njava_backend_mqtt_host: \"172.17.0.1\"\njava_backend_mqtt_port: 1883\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n\n# Force docker build every run (otherwise builds only when sources changed).\njava_backend_force_build: false\n\n# rsync exclusions for synchronize.\njava_backend_rsync_opts:\n - \"--exclude=.gradle/\"\n - \"--exclude=build/\"\n - \"--exclude=.idea/\"\n - \"--exclude=out/\"\n"}, "a8dbba168c16b8b01665358df0a56f9d83028aec": {"t": 1785749172.3663676, "n": 2692, "h": "ae6dffd055dbb1d8", "c": "---\n# Default deployment settings for GrowerHub Java backend (Docker).\n\n# Local path (on Ansible controller) to the repo `backend/` directory.\njava_backend_local_src_dir: \"{{ playbook_dir }}/../../backend\"\n\n# Target host directory where sources are synced for remote docker build.\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_deploy_owner: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_group: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_mode: \"0755\"\n\n# Docker image/tag to build on the target host.\njava_backend_image_name: \"growerhub-backend\"\njava_backend_image_tag: \"local\"\njava_backend_image: \"{{ java_backend_image_name }}:{{ java_backend_image_tag }}\"\n\n# Container settings.\njava_backend_container_name: \"growerhub-java-backend\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\njava_backend_container_port: 8080\n\n# Env file path (sozdaetsya ansible rolyu)\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\n# Deploy sudoers\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n\n# Force docker build every run (otherwise builds only when sources changed).\njava_backend_force_build: false\n\n# rsync exclusions for synchronize.\njava_backend_rsync_opts:\n - \"--exclude=.gradle/\"\n - \"--exclude=build/\"\n - \"--exclude=.idea/\"\n - \"--exclude=out/\"\n"}, "b4d1d925ba72948d6675aaf5dd55b5355c73cb98": {"t": 1785749173.5974584, "n": 2567, "h": "bb02197b48bcb079", "c": "---\n# Default deployment settings for GrowerHub Java backend (Docker).\n\n# Local path (on Ansible controller) to the repo `backend/` directory.\njava_backend_local_src_dir: \"{{ playbook_dir }}/../../backend\"\n\n# Target host directory where sources are synced for remote docker build.\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_deploy_owner: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_group: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_mode: \"0755\"\n\n# Docker image/tag to build on the target host.\njava_backend_image_name: \"growerhub-backend\"\njava_backend_image_tag: \"local\"\njava_backend_image: \"{{ java_backend_image_name }}:{{ java_backend_image_tag }}\"\n\n# Container settings.\njava_backend_container_name: \"growerhub-java-backend\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\njava_backend_container_port: 8080\n\n# Env file path (sozdaetsya ansible rolyu)\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n\n# Force docker build every run (otherwise builds only when sources changed).\njava_backend_force_build: false\n\n# rsync exclusions for synchronize.\njava_backend_rsync_opts:\n - \"--exclude=.gradle/\"\n - \"--exclude=build/\"\n - \"--exclude=.idea/\"\n - \"--exclude=out/\"\n"}, "bc225ef3afc6bbf2c6a64bba3212e30bb088337e": {"t": 1785749176.0953116, "n": 2512, "h": "76b5e76dbe09c686", "c": "---\n# Default deployment settings for GrowerHub Java backend (Docker).\n\n# Local path (on Ansible controller) to the repo `backend/` directory.\njava_backend_local_src_dir: \"{{ playbook_dir }}/../../backend\"\n\n# Target host directory where sources are synced for remote docker build.\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_deploy_owner: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_group: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_mode: \"0755\"\n\n# Docker image/tag to build on the target host.\njava_backend_image_name: \"growerhub-backend\"\njava_backend_image_tag: \"local\"\njava_backend_image: \"{{ java_backend_image_name }}:{{ java_backend_image_tag }}\"\n\n# Container settings.\njava_backend_container_name: \"growerhub-java-backend\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\njava_backend_container_port: 8080\n\n# Env file path (sozdaetsya ansible rolyu)\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_file: \"{{ java_backend_env_dir }}/growerhub-java-backend.env\"\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: \"{{ java_backend_env_required | combine(java_backend_env_optional) }}\"\n\n# Force docker build every run (otherwise builds only when sources changed).\njava_backend_force_build: false\n\n# rsync exclusions for synchronize.\njava_backend_rsync_opts:\n - \"--exclude=.gradle/\"\n - \"--exclude=build/\"\n - \"--exclude=.idea/\"\n - \"--exclude=out/\"\n"}, "82a42621c4023689f674f5f6f5c0c191eb58f118": {"t": 1785749178.6058762, "n": 1148, "h": "0138d15e641a7311", "c": "---\n# Default deployment settings for GrowerHub Java backend (Docker).\n\n# Local path (on Ansible controller) to the repo `backend/` directory.\njava_backend_local_src_dir: \"{{ playbook_dir }}/../../backend\"\n\n# Target host directory where sources are synced for remote docker build.\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_deploy_owner: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_group: \"{{ ansible_user | default('root') }}\"\njava_backend_deploy_mode: \"0755\"\n\n# Docker image/tag to build on the target host.\njava_backend_image_name: \"growerhub-backend\"\njava_backend_image_tag: \"local\"\njava_backend_image: \"{{ java_backend_image_name }}:{{ java_backend_image_tag }}\"\n\n# Container settings.\njava_backend_container_name: \"growerhub-java-backend\"\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_host_port: 18080\njava_backend_container_port: 8080\n\n# Force docker build every run (otherwise builds only when sources changed).\njava_backend_force_build: false\n\n# rsync exclusions for synchronize.\njava_backend_rsync_opts:\n - \"--exclude=.gradle/\"\n - \"--exclude=build/\"\n - \"--exclude=.idea/\"\n - \"--exclude=out/\"\n\n"}, "ac7060c01e3271e702c30b8f825164a1d500f72d": {"t": 1786067321.635779, "n": 4596, "h": "2569f33d3a6d759a", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_deploy_user: \"{{ java_backend_user }}\"\njava_backend_release_mode: false\njava_backend_releases_dir: \"/opt/growerhub/releases/backend\"\njava_backend_current_link: \"/opt/growerhub/current/backend\"\njava_backend_firmware_dir: \"{{ java_backend_deploy_dir }}/firmware_binaries\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_java_opts: []\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_enforce_bind_ip: false\njava_backend_host_port: 18080\njava_backend_after_units:\n - network-online.target\n - mosquitto.service\njava_backend_systemd_extra_directives: []\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_dir_mode: \"0755\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\njava_backend_manage_deploy_sudoers: true\njava_backend_remove_legacy_docker: true\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1884\njava_backend_mqtt_username: \"gh_backend\"\njava_backend_mqtt_password: \"{{ lookup('env', 'GH_MQTT_BACKEND_PASSWORD') }}\"\njava_backend_mqtt_tls: false\njava_backend_mqtt_provisioning_enabled: false\njava_backend_mqtt_provisioning_host: \"127.0.0.1\"\njava_backend_mqtt_provisioning_port: 1884\njava_backend_mqtt_provisioning_tls: false\njava_backend_mqtt_provisioning_username: \"gh_provisioning\"\njava_backend_mqtt_provisioning_password: \"{{ lookup('env', 'GH_MQTT_PROVISIONING_PASSWORD') }}\"\n\n# Self-service vklyuchaetsja tol'ko posle polnogo smoke-testa i proverki pravovyh tekstov.\njava_backend_self_service_enabled: false\njava_backend_self_service_legacy_owner_email: \"{{ lookup('env', 'SELF_SERVICE_LEGACY_OWNER_EMAIL') }}\"\njava_backend_advisor_deepseek_api_key: \"{{ lookup('env', 'ADVISOR_DEEPSEEK_API_KEY') }}\"\njava_backend_public_base_url: \"https://growerhub.ru\"\njava_backend_env_extra: {}\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n MQTT_PROVISIONING_ENABLED: \"{{ java_backend_mqtt_provisioning_enabled | bool | lower }}\"\n MQTT_PROVISIONING_HOST: \"{{ java_backend_mqtt_provisioning_host | default('') }}\"\n MQTT_PROVISIONING_PORT: \"{{ java_backend_mqtt_provisioning_port | default('') }}\"\n MQTT_PROVISIONING_TLS: \"{{ java_backend_mqtt_provisioning_tls | bool | lower }}\"\n MQTT_PROVISIONING_USERNAME: \"{{ java_backend_mqtt_provisioning_username | default('') }}\"\n MQTT_PROVISIONING_PASSWORD: \"{{ java_backend_mqtt_provisioning_password | default('') }}\"\n SELF_SERVICE_ENABLED: \"{{ java_backend_self_service_enabled | bool | lower }}\"\n SELF_SERVICE_LEGACY_OWNER_EMAIL: \"{{ java_backend_self_service_legacy_owner_email | default('') }}\"\n ADVISOR_DEEPSEEK_API_KEY: \"{{ java_backend_advisor_deepseek_api_key | default('') }}\"\n SERVER_PUBLIC_BASE_URL: \"{{ java_backend_public_base_url }}\"\n FIRMWARE_BINARIES_DIR: \"{{ java_backend_firmware_dir }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n REFRESH_TOKEN_COOKIE_SECURE: \"true\"\n REFRESH_TOKEN_COOKIE_SAMESITE: \"lax\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: >-\n {{\n java_backend_env_required\n | combine(java_backend_env_optional)\n | combine(java_backend_env_extra)\n }}\n"}, "f348e5ef928bf09ed800b14cce2977998a169ffe": {"t": 1786068222.4745662, "n": 4596, "h": "2569f33d3a6d759a", "c": "---\n# Default deployment settings for GrowerHub Java backend.\n\njava_backend_deploy_dir: \"/opt/growerhub/java-backend\"\njava_backend_jar_src: \"{{ playbook_dir }}/../../backend/build/libs/app.jar\"\njava_backend_user: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_group: \"{{ ansible_user | default('watering-admin') }}\"\njava_backend_deploy_user: \"{{ java_backend_user }}\"\njava_backend_release_mode: false\njava_backend_releases_dir: \"/opt/growerhub/releases/backend\"\njava_backend_current_link: \"/opt/growerhub/current/backend\"\njava_backend_firmware_dir: \"{{ java_backend_deploy_dir }}/firmware_binaries\"\n\njava_backend_service_name: \"growerhub-java-backend.service\"\njava_backend_java_bin: \"/usr/bin/java\"\njava_backend_java_opts: []\njava_backend_bind_ip: \"127.0.0.1\"\njava_backend_enforce_bind_ip: false\njava_backend_host_port: 18080\njava_backend_after_units:\n - network-online.target\n - mosquitto.service\njava_backend_systemd_extra_directives: []\n\njava_backend_env_dir: \"/opt/growerhub/env\"\njava_backend_env_dir_mode: \"0755\"\njava_backend_env_file_path: \"/opt/growerhub/env/growerhub-java-backend.env\"\njava_backend_env_file: \"{{ java_backend_env_file_path }}\"\n\njava_backend_sudo_user: \"watering-admin\"\njava_backend_sudoers_file: \"/etc/sudoers.d/growerhub-java-deploy\"\njava_backend_manage_deploy_sudoers: true\njava_backend_remove_legacy_docker: true\n\n# Required env values (dolzhny byt' zadany v vars/vault)\njava_backend_secret_key: \"\"\njava_backend_db_url: \"\"\njava_backend_db_username: \"\"\njava_backend_db_password: \"\"\n\n# MQTT defaults dlya backend na hoste.\njava_backend_mqtt_host: \"127.0.0.1\"\njava_backend_mqtt_port: 1884\njava_backend_mqtt_username: \"gh_backend\"\njava_backend_mqtt_password: \"{{ lookup('env', 'GH_MQTT_BACKEND_PASSWORD') }}\"\njava_backend_mqtt_tls: false\njava_backend_mqtt_provisioning_enabled: false\njava_backend_mqtt_provisioning_host: \"127.0.0.1\"\njava_backend_mqtt_provisioning_port: 1884\njava_backend_mqtt_provisioning_tls: false\njava_backend_mqtt_provisioning_username: \"gh_provisioning\"\njava_backend_mqtt_provisioning_password: \"{{ lookup('env', 'GH_MQTT_PROVISIONING_PASSWORD') }}\"\n\n# Self-service vklyuchaetsja tol'ko posle polnogo smoke-testa i proverki pravovyh tekstov.\njava_backend_self_service_enabled: false\njava_backend_self_service_legacy_owner_email: \"{{ lookup('env', 'SELF_SERVICE_LEGACY_OWNER_EMAIL') }}\"\njava_backend_advisor_deepseek_api_key: \"{{ lookup('env', 'ADVISOR_DEEPSEEK_API_KEY') }}\"\njava_backend_public_base_url: \"https://growerhub.ru\"\njava_backend_env_extra: {}\n\njava_backend_env_required:\n SECRET_KEY: \"{{ java_backend_secret_key }}\"\n SPRING_DATASOURCE_URL: \"{{ java_backend_db_url }}\"\n SPRING_DATASOURCE_USERNAME: \"{{ java_backend_db_username }}\"\n SPRING_DATASOURCE_PASSWORD: \"{{ java_backend_db_password }}\"\n\njava_backend_env_optional:\n MQTT_HOST: \"{{ java_backend_mqtt_host | default('') }}\"\n MQTT_PORT: \"{{ java_backend_mqtt_port | default('') }}\"\n MQTT_USERNAME: \"{{ java_backend_mqtt_username | default('') }}\"\n MQTT_PASSWORD: \"{{ java_backend_mqtt_password | default('') }}\"\n MQTT_TLS: \"{{ java_backend_mqtt_tls | default('') }}\"\n MQTT_PROVISIONING_ENABLED: \"{{ java_backend_mqtt_provisioning_enabled | bool | lower }}\"\n MQTT_PROVISIONING_HOST: \"{{ java_backend_mqtt_provisioning_host | default('') }}\"\n MQTT_PROVISIONING_PORT: \"{{ java_backend_mqtt_provisioning_port | default('') }}\"\n MQTT_PROVISIONING_TLS: \"{{ java_backend_mqtt_provisioning_tls | bool | lower }}\"\n MQTT_PROVISIONING_USERNAME: \"{{ java_backend_mqtt_provisioning_username | default('') }}\"\n MQTT_PROVISIONING_PASSWORD: \"{{ java_backend_mqtt_provisioning_password | default('') }}\"\n SELF_SERVICE_ENABLED: \"{{ java_backend_self_service_enabled | bool | lower }}\"\n SELF_SERVICE_LEGACY_OWNER_EMAIL: \"{{ java_backend_self_service_legacy_owner_email | default('') }}\"\n ADVISOR_DEEPSEEK_API_KEY: \"{{ java_backend_advisor_deepseek_api_key | default('') }}\"\n SERVER_PUBLIC_BASE_URL: \"{{ java_backend_public_base_url }}\"\n FIRMWARE_BINARIES_DIR: \"{{ java_backend_firmware_dir }}\"\n AUTH_SSO_REDIRECT_BASE: \"{{ java_backend_auth_sso_redirect_base | default('') }}\"\n REFRESH_TOKEN_COOKIE_SECURE: \"true\"\n REFRESH_TOKEN_COOKIE_SAMESITE: \"lax\"\n AUTH_GOOGLE_CLIENT_ID: \"{{ google_client_id | default('') }}\"\n AUTH_GOOGLE_CLIENT_SECRET: \"{{ google_client_secret | default('') }}\"\n AUTH_YANDEX_CLIENT_ID: \"{{ yandex_client_id | default('') }}\"\n AUTH_YANDEX_CLIENT_SECRET: \"{{ yandex_client_secret | default('') }}\"\n\njava_backend_env: >-\n {{\n java_backend_env_required\n | combine(java_backend_env_optional)\n | combine(java_backend_env_extra)\n }}\n"}}}}