Автоматизация предоставляет интерфейс для управления обновлениями пакетов через Telegram с использованием интерактивных кнопок и команд. Основные функции:
{
"actions": [
{
"command": "#!/bin/sh\nTRIGGER_NAME=\"{{triggerName}}\"\nECHO_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\ncase ${TRIGGER_NAME:3:1} in\n \"1\") ACTION_TYPE=\"update\" ;;\n \"2\") ACTION_TYPE=\"list\" ;;\n \"4\") ACTION_TYPE=\"upgrade\" ;;\n \"5\") ACTION_TYPE=\"reinstall\" ;;\n *) ACTION_TYPE=\"unknown\" ;;\nesac\ncase ${TRIGGER_NAME:5:2} in\n \"01\") PKG=\"homed-automation\" ;;\n \"11\") PKG=\"homed-qt\" ;;\n \"21\") PKG=\"homed-common\" ;;\n \"31\") PKG=\"homed-web\" ;;\n \"41\") PKG=\"homed-recorder\" ;;\n \"51\") PKG=\"homed-cloud\" ;;\n \"61\") PKG=\"homed-zigbee\" ;;\n \"71\") PKG=\"homed-custom\" ;;\n \"81\") PKG=\"homed-modbus\" ;;\n \"91\") PKG=\"homed-custom-midea\" ;;\n *) PKG=\"\" ;;\nesac\ncase ${TRIGGER_NAME} in\n \"1114991\") PKG=\"all\"; ACTION_TYPE=\"upgrade\" ;;\n \"1114911\") PKG=\"all-homed\"; ACTION_TYPE=\"upgrade\" ;;\n \"1115991\") PKG=\"all\"; ACTION_TYPE=\"reinstall\" ;;\n \"1115911\") PKG=\"all-homed\"; ACTION_TYPE=\"reinstall\" ;;\nesac\n{\n case \"$ACTION_TYPE\" in\n \"update\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка обновить список пакетов.\" ;;\n \"list\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка сформировать кнопки.\" ;;\n \"upgrade\")\n case \"$PKG\" in\n \"all\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка обновить все пакеты OpenWRT.\" ;;\n \"all-homed\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка обновить все пакеты HOMEd.\" ;;\n *) echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка обновить $PKG.\" ;;\n esac ;;\n \"reinstall\")\n case \"$PKG\" in\n \"all\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка переустановить все пакеты OpenWRT.\" ;;\n \"all-homed\") echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка переустановить все пакеты HOMEd.\" ;;\n *) echo \"{{ timestamp | dd.MM.yy hh:mm }} Попытка переустановить $PKG.\" ;;\n esac ;;\n *) echo \"{{ timestamp | dd.MM.yy hh:mm }} Неизвестная операция.\" ;;\n esac > \"$ECHO_FILE\"\n}\ncase \"$PKG\" in\n \"all\") printf \"all OpenWRT\" ;;\n \"all-homed\") printf \"all HOMEd\" ;;\n *) printf \"%s\" \"$PKG\" ;;\nesac",
"timeout": 30,
"type": "shell",
"uuid": "5b4a0d3155924dc1966928639a1e2552"
},
{
"name": "Last UFT",
"type": "state",
"uuid": "fe1bb2fb071f45b9affd14581bdea39a",
"value": "{{ shellOutput }}"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "opkg update > /tmp/opkgupdate.txt",
"timeout": 600,
"type": "shell",
"uuid": "8e4fa2bd36b54a39819b313c48c1cb78"
},
{
"command": "#!/bin/sh\n{\n opkg list-upgradable | awk '\n BEGIN {\n printf \"Пакеты HOMEd:\\n\"\n homed_found = 0\n other_found = 0\n }\n /^homed-/ {\n homed_pkgs = homed_pkgs $1 \"\\n\"\n homed_found = 1\n next\n }\n {\n other_pkgs = other_pkgs $1 \"\\n\"\n other_found = 1\n }\n END {\n if (homed_found) {\n printf \"%s\", homed_pkgs\n } else {\n print \"Нет доступных обновлений. Возможно нужно обновить список пакетов.\"\n }\n print \"Остальные пакеты OpenWRT:\\n\"\n if (other_found) {\n printf \"%s\", other_pkgs\n } else {\n printf \"Нет доступных обновлений.\"\n }\n if (homed_found || other_found) {\n print \"Обновить пакеты или переустановить?\" > \"/tmp/title2tg.txt\"\n print \"Обновление пакетов: upgrade packages\" > \"/dev/stderr\"\n printf \"Принудительная переустановка пакетов: reinstall packages\" > \"/dev/stderr\"\n } else {\n print \"Не удалось найти обновления пакетов. Вы можете переустановить нужный пакет HOMEd отдельно, либо группой.\" > \"/tmp/title2tg.txt\"\n printf \"Принудительная переустановка пакетов: reinstall packages\" > \"/dev/stderr\"\n }\n }\n '\n} > /tmp/echo2tg.txt",
"timeout": 120,
"type": "shell",
"uuid": "fb0e87491d5c4e7e9a7a2ef40861fd83"
}
],
"triggerName": "1111111",
"type": "condition",
"uuid": "20fa072c92f64d87a11029112acb3569"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "printf \" Тест пройден \" | tee /tmp/echo2tg.txt >> /tmp/title2tg.txt",
"timeout": 20,
"type": "shell",
"uuid": "68a0b723870441d8857b18caa8a64003"
}
],
"triggerName": "1112011",
"type": "condition",
"uuid": "b06e1f000d9b4f2499154a5af6e36d11"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "printf \"Что обновить?\" > /tmp/title2tg.txt",
"timeout": 30,
"type": "shell",
"uuid": "83bcb72df85e4050a639ce09bec963d7"
},
{
"command": "#!/bin/sh\nopkg list-upgradable | awk '\n $1 ~ /^homed-/ {\n sub(/^homed-/, \"\", $1)\n sub(/-[0-9.-]+$/, \"\", $1)\n n = split($1, parts, \"-\")\n name = parts[n]\n if (name ~ /^[a-zA-Z]+$/) {\n print length(name), name\n }\n }\n' | sort -n | cut -d' ' -f2- | awk '\n BEGIN {\n current_line = \"\"\n current_length = 0\n }\n {\n needed_length = length($0) + (current_line ? 2 : 0)\n if (current_length + needed_length > 36) {\n print_with_suffix(current_line)\n current_line = $0\n current_length = length($0)\n } else {\n if (current_line) {\n current_line = current_line \", \" $0\n current_length += needed_length\n } else {\n current_line = $0\n current_length = length($0)\n }\n }\n }\n END {\n if (current_line) {\n print_with_suffix(current_line)\n }\n printf \"все пакеты HOMEd: all HOMEd upgrade, все пакеты OpenWRT: all OWRT upgrade\"\n }\n function print_with_suffix(line) {\n split(line, packages, \", \")\n for (i = 1; i <= length(packages); i++) {\n if (i > 1) printf \", \"\n printf \"%s: %s upgrade\", packages[i], packages[i]\n }\n print \"\"\n }\n'",
"timeout": 120,
"type": "shell",
"uuid": "073124bd45a345c8800062a47ed59b72"
}
],
"triggerName": "1112041",
"type": "condition",
"uuid": "d4710fee342749ea8e1cd2acfff1be31"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "printf \"Что принудительно переустановить?\" > /tmp/title2tg.txt",
"timeout": 30,
"type": "shell",
"uuid": "bd229d9e5a5e4df7ab0efa06589ce89c"
},
{
"command": "#!/bin/sh\nopkg list-installed | awk '\n $1 ~ /^homed-/ {\n sub(/^homed-/, \"\", $1)\n sub(/-[0-9.-]+$/, \"\", $1)\n n = split($1, parts, \"-\")\n name = parts[n]\n if (name ~ /^[a-zA-Z]+$/) {\n print length(name), name\n }\n }\n' | sort -n | cut -d' ' -f2- | awk '\n BEGIN {\n current_line = \"\"\n current_length = 0\n }\n {\n needed_length = length($0) + (current_line ? 2 : 0)\n if (current_length + needed_length > 36) {\n print_with_suffix(current_line)\n current_line = $0\n current_length = length($0)\n } else {\n if (current_line) {\n current_line = current_line \", \" $0\n current_length += needed_length\n } else {\n current_line = $0\n current_length = length($0)\n }\n }\n }\n END {\n if (current_line) {\n print_with_suffix(current_line)\n }\n printf \"все пакеты HOMEd кроме automation: all homed reinstall\"\n }\n function print_with_suffix(line) {\n split(line, packages, \", \")\n for (i = 1; i <= length(packages); i++) {\n if (i > 1) printf \", \"\n printf \"%s: %s reinstall\", packages[i], packages[i]\n }\n print \"\"\n }\n'",
"timeout": 120,
"type": "shell",
"uuid": "3f99486efe3742e2a69008de867b15ec"
}
],
"triggerName": "1112051",
"type": "condition",
"uuid": "11ea76e79fdb48dda26a2a5f917d7325"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "#!/bin/sh\nLOG_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\n{\n echo \"=== Обновление пакетов HOMEd ===\"\n echo \"{{ timestamp | dd.MM.yy hh:mm }}\"\n PACKAGES=$(opkg list-upgradable | awk '/^homed-/ && $1 !~ /homed-automation/ {print $1}' | tr '\n' ' ')\n if [ -z \"$PACKAGES\" ]; then\n echo \"Нет доступных обновлений\"\n else\n echo \"Обновляем: $PACKAGES\"\n START_TIME=$(date +%s)\n if opkg upgrade $PACKAGES; then\n echo \"Статус: успешно (за $(($(date +%s) - START_TIME )) сек)\"\n else\n echo \"ОШИБКА: Не удалось установить обновления\"\n fi\n fi\n echo \"=== Завершено ===\"\n} > \"$LOG_FILE\" 2>&1\nawk '\n BEGIN {status=\"\"; time=\"\"; pkgs=\"\"}\n {\n if ($0 ~ /Обновляем:/) pkgs = substr($0, index($0, \":\")+2)\n if ($0 ~ /Статус:/) status = substr($0, index($0, \":\")+2)\n if ($0 ~ /сек\\)/) time = $NF\n }\n END {\n print \"Результат обновления:\"\n if (pkgs) print \"• Пакеты: \" pkgs\n if (status) print \"• \" status\n if (time) print \"• Время: \" time\n printf \"{{ timestamp | dd.MM.yy hh:mm }}\"\n }\n' \"$LOG_FILE\" > \"$TG_FILE\"",
"timeout": 600,
"type": "shell",
"uuid": "4a9ef58dd8f44c68bcee104fd9031ed5"
},
{
"conditions": [
{
"equals": null,
"pattern": "{{ shellOutput }}",
"type": "pattern"
}
],
"else": [],
"then": [
{
"file": "/tmp/echo2tg.txt",
"type": "telegram",
"uuid": "a2f7ccc7f39d442fa07413e69b62e58d"
}
],
"type": "condition",
"uuid": "93c9d360b88f4609ba8087a7b1bd653c"
},
{
"name": "Last UFT",
"type": "state",
"uuid": "f5bdbfbea8fa4d41ad3c7d0e5af5291d",
"value": "homed-automation"
}
],
"triggerName": "1114911",
"type": "condition",
"uuid": "5f51a98d3c4d4cbab1e03020cb8a4da9"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "#!/bin/sh\nLOG_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\n{\n echo \"=== Проверка обновлений пакетов OpenWRT ===\"\n echo \"{{ timestamp | dd.MM.yy hh:mm }}\"\n PACKAGES=$(opkg list-upgradable | awk '!/^homed-automation($| )/ {print $1}' | tr '\n' ' ')\n if [ -z \"$PACKAGES\" ]; then\n echo \"Нет доступных обновлений\"\n echo \"----------------------------------------\"\n echo \"Возможно нужно обновить список пакетов\"\n else\n echo \"Найдены обновления для: $PACKAGES\"\n echo \"----------------------------------------\"\n START_TIME=$(date +%s)\n if opkg upgrade $PACKAGES; then\n echo \"Статус: успешно (за $(($(date +%s) - START_TIME )) сек)\"\n else\n echo \"ОШИБКА: Не удалось установить обновления\"\n fi\n fi\n echo \"=== Проверка завершена ===\"\n echo \"{{ timestamp | dd.MM.yy hh:mm }}\"\n} > \"$LOG_FILE\" 2>&1\nawk '\n BEGIN {\n status = \"Нет доступных обновлений\";\n time = \"\";\n pkgs = \"\";\n recommendation = \"\";\n }\n {\n if ($0 ~ /Найдены обновления для:/) pkgs = substr($0, index($0, \":\")+2)\n if ($0 ~ /Статус:/) status = substr($0, index($0, \":\")+2)\n if ($0 ~ /сек\\)/) time = $NF\n if ($0 ~ /Возможно нужно обновить список пакетов/) recommendation = $0\n }\n END {\n print \"Результат проверки обновлений:\"\n if (pkgs != \"\") {\n print \"• Доступные обновления: \" pkgs\n print \"• \" status\n if (time != \"\") print \"• Время выполнения: \" time\n } else {\n print \"• \" status\n if (recommendation != \"\") print \"• \" recommendation\n }\n printf \"• Время проверки: {{ timestamp | dd.MM.yy hh:mm }}\"\n }\n' \"$LOG_FILE\" > \"$TG_FILE\"",
"timeout": 1200,
"type": "shell",
"uuid": "a87cc026bc34401caaed907890e17de1"
},
{
"conditions": [
{
"equals": null,
"pattern": "{{ shellOutput }}",
"type": "pattern"
}
],
"else": [],
"then": [
{
"file": "/tmp/echo2tg.txt",
"type": "telegram",
"uuid": "1421b51ff62243f98957875484a0ff89"
}
],
"type": "condition",
"uuid": "a3cc4f008557471c9b62b87ed3ada585"
},
{
"name": "Last UFT",
"type": "state",
"uuid": "c860e0b7ac704fc5bfb7ebf2c9671d35",
"value": "homed-automation"
}
],
"triggerName": "1114991",
"type": "condition",
"uuid": "dda865b92686411ea71ebd9a9c15a368"
},
{
"conditions": [
{
"conditions": [
{
"between": [
1114001,
1114899
],
"pattern": "{{ triggerName }}",
"type": "pattern"
},
{
"conditions": [
{
"equals": "homed-automation",
"name": "Last UFT",
"type": "state"
},
{
"conditions": [
{
"equals": 1114911,
"pattern": "{{ triggerName }}",
"type": "pattern"
},
{
"equals": 1114991,
"pattern": "{{ triggerName }}",
"type": "pattern"
}
],
"type": "OR"
}
],
"type": "AND"
}
],
"type": "OR"
}
],
"else": [],
"then": [
{
"command": "#!/bin/sh\nPACKAGE=\"{{ state | Last UFT }}\"\nLOG_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\n{\n echo \"{{ timestamp | dd.MM.yy hh:mm }} Проверка обновлений $PACKAGE\"\n if opkg list-upgradable | awk -v pkg=\"$PACKAGE\" '$1 == pkg {found=1; exit} END{exit !found}'; then\n echo \"Найдено обновление\"\n START=$(date +%s)\n if opkg upgrade \"$PACKAGE\"; then\n echo \"Статус: успешно (за $(($(date +%s) - START)) сек)\"\n else\n echo \"Статус: ошибка обновления!\" >&2\n fi\n else\n echo \"Обновлений $PACKAGE не найдено\"\n echo \"Возможно нужно обновить список пакетов\"\n fi\n echo \"{{ timestamp | dd.MM.yy hh:mm }} Завершено\"\n} >> \"$LOG_FILE\" 2>&1\nawk '{\n gsub(/[][*_`#]/, \"\\\\\\\\&\")\n sub(/^\\[[0-9:]*\\] /, \"\")\n print\n}' \"$LOG_FILE\" >> \"$TG_FILE\"",
"timeout": 120,
"type": "shell",
"uuid": "26b7e9a0a04f488b877d672832f22005"
}
],
"type": "condition",
"uuid": "620b33e197184025817e60884bbd6e4b"
},
{
"conditions": [
{
"between": [
1115001,
1115899
],
"pattern": "{{ triggerName }}",
"type": "pattern"
}
],
"else": [],
"then": [
{
"delay": "30",
"triggerName": "1115101",
"type": "delay",
"uuid": "0e7f5c1cd337422e983543c7d79eb07e"
},
{
"command": "#!/bin/sh\nPACKAGE=\"{{ state | Last UFT }}\"\nLOG_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\n{\n echo \"{{ timestamp | dd.MM.yy hh:mm }} Начало переустановки $PACKAGE\"\n if ! opkg list-installed | grep -q \"^$PACKAGE \"; then\n echo \"Ошибка: пакет не установлен\"\n exit 1\n fi\n echo \"Текущая версия:\"\n opkg list-installed | grep \"^$PACKAGE \"\n START=$(date +%s)\n if opkg install --force-reinstall \"$PACKAGE\" 2>&1 | grep -v 'Not deleting modified conffile'; then\n echo \"Новая версия:\"\n opkg list-installed | grep \"^$PACKAGE \"\n echo \"Статус: успешно (за $(($(date +%s) - START)) сек)\"\n else\n echo \"ОШИБКА переустановки!\"\n fi\n printf \"{{ timestamp | dd.MM.yy hh:mm }} Завершено\"\n} > \"$LOG_FILE\" 2>&1\nawk '{\n gsub(/[][*_`#]/, \"\\\\\\\\&\")\n sub(/^\\[[0-9:]*\\] /, \"\")\n print\n}' \"$LOG_FILE\" > \"$TG_FILE\"",
"timeout": 120,
"type": "shell",
"uuid": "5fbe102c0be54ecf88588ab43fdd5deb"
}
],
"type": "condition",
"uuid": "5dba60cb603545908369d2ae33441256"
},
{
"conditions": [],
"else": [],
"then": [
{
"command": "#!/bin/sh\nLOG_FILE=\"/tmp/echo2tg.txt\"\nTG_FILE=\"/tmp/title2tg.txt\"\n{\n echo \"{{ timestamp | dd.MM.yy hh:mm }} Переустановка пакетов HOMEd\"\n PKGS=$(opkg list-installed | awk '/^homed-/ && !/homed-automation/ {print $1}' | tr '\n' ' ')\n if [ -z \"$PKGS\" ]; then\n echo \"Нет пакетов для переустановки\"\n exit 0\n fi\n echo \"Пакеты: $PKGS\"\n START=$(date +%s)\n if opkg install --force-reinstall $PKGS 2>&1 | grep -v 'Not deleting modified conffile'; then\n echo \"Статус: успешно (за $(($(date +%s) - START)) сек)\"\n else\n echo \"ОШИБКА переустановки!\"\n fi\n echo \"{{ timestamp | dd.MM.yy hh:mm }} Завершено\"\n} > \"$LOG_FILE\" 2>&1\nawk '{\n gsub(/[][*_`#]/, \"\\\\\\\\&\")\n sub(/^\\[[0-9:]*\\] /, \"\")\n print\n}' \"$LOG_FILE\" > \"$TG_FILE\"",
"timeout": 600,
"type": "shell",
"uuid": "a000effcc2ea4371b8adbff968f98779"
},
{
"conditions": [
{
"equals": null,
"pattern": "{{ shellOutput }}",
"type": "pattern"
}
],
"else": [],
"then": [
{
"file": "/tmp/echo2tg.txt",
"type": "telegram",
"uuid": "7e5ed059c11742efbb4b03bb5c6dac8f"
}
],
"type": "condition",
"uuid": "ab733a32e8ea41e09b4b092b3b2be710"
}
],
"triggerName": "1115911",
"type": "condition",
"uuid": "6ae4cc8d730846698a2173fe37559e77"
},
{
"conditions": [
{
"equals": null,
"pattern": "{{ shellOutput }}",
"type": "pattern"
}
],
"else": [],
"then": [
{
"command": "printf \"обновление: upgrade packages,тест: button test, переустановка: reinstall packages\"",
"timeout": 30,
"type": "shell",
"uuid": "cd1e8b1ee95b4a818f2c37bcfec710f6"
}
],
"type": "condition",
"uuid": "4579734194de426d9ad158608834116f"
},
{
"message": "Команда принята\n{{ file | /tmp/echo2tg.txt }}",
"remove": true,
"type": "telegram",
"uuid": "83587e1eb9de4246bc559afbc77ca603"
},
{
"delay": "1",
"type": "delay",
"uuid": "7559eb7ff7114adf9af40e8d15076730"
},
{
"keyboard": "{{ shellOutput }}\n🔁 Обновить список пакетов: /opkgupdate",
"message": "{{ file | /tmp/title2tg.txt }}",
"remove": true,
"type": "telegram",
"uuid": "2272ecdc986344229ace89300508aedc"
}
],
"note": "Обновление пакетов через Telegram",
"restart": false,
"triggers": [
{
"message": "/opkgupdate",
"name": "1111111",
"type": "telegram"
},
{
"message": "button test",
"name": "1112011",
"type": "telegram"
},
{
"message": "upgrade packages",
"name": "1112041",
"type": "telegram"
},
{
"message": "reinstall packages",
"name": "1112051",
"type": "telegram"
},
{
"message": "all OWRT upgrade",
"name": "1114991",
"type": "telegram"
},
{
"message": "automation upgrade",
"name": "1114101",
"type": "telegram"
},
{
"message": "qt upgrade",
"name": "1114111",
"type": "telegram"
},
{
"message": "common upgrade",
"name": "1114121",
"type": "telegram"
},
{
"message": "web upgrade",
"name": "1114131",
"type": "telegram"
},
{
"message": "recorder upgrade",
"name": "1114141",
"type": "telegram"
},
{
"message": "cloud upgrade",
"name": "1114151",
"type": "telegram"
},
{
"message": "zigbee upgrade",
"name": "1114161",
"type": "telegram"
},
{
"message": "custom upgrade",
"name": "1114171",
"type": "telegram"
},
{
"message": "modbus upgrade",
"name": "1114181",
"type": "telegram"
},
{
"message": "midea upgrade",
"name": "1114191",
"type": "telegram"
},
{
"message": "all HOMEd upgrade",
"name": "1114911",
"type": "telegram"
},
{
"message": "automation reinstall",
"name": "1115101",
"type": "telegram"
},
{
"message": "qt reinstall",
"name": "1115111",
"type": "telegram"
},
{
"message": "common reinstall",
"name": "1115121",
"type": "telegram"
},
{
"message": "web reinstall",
"name": "1115131",
"type": "telegram"
},
{
"message": "recorder reinstall",
"name": "1115141",
"type": "telegram"
},
{
"message": "cloud reinstall",
"name": "1115151",
"type": "telegram"
},
{
"message": "zigbee reinstall",
"name": "1115161",
"type": "telegram"
},
{
"message": "custom reinstall",
"name": "1115171",
"type": "telegram"
},
{
"message": "modbus reinstall",
"name": "1115181",
"type": "telegram"
},
{
"message": "midea reinstall",
"name": "1115191",
"type": "telegram"
},
{
"message": "all HOMEd reinstall",
"name": "1115911",
"type": "telegram"
}
]
}