Jump to content

Andrew Voronkov

Forum Members
  • Posts

    344
  • Joined

  • Last visited

Everything posted by Andrew Voronkov

  1. А без setport, со стороны именно роутера нельзя сделать галку, чтобы не монтировался cd rom и sd карта? Просто чтобы роутер этого даже не пытался делать? Или смысла в этом ноль?
  2. Конечно, AT^SETPORT поможет, но если бы это можно было делать силами роутера - было бы отлично.
  3. Приветствую. Хотелось бы иметь возможность отключить в роутере необходимость каждый раз при передергивании пингчеком 4g модема монтировать диск, встроенный в этот модем. Речь про поддерживаемый Huawei E3276 - там есть слот для sd карты. Кроме того, он определяется как CD. И вот теперь постоянно в логах куча ненужных операций:
  4. Приветствую. Заметил такую проблему на ios 11.1. Полагаю, на более ранних прошивках проблема идентичная. При обычном сворачивании приложения и последующем его открывании - далеко не всегда восстанавливается связь с роутером. Я бы даже сказал практически никогда. То есть данные на экране старые, новые не подгружаются. Ждать можно бесконечно. Если принудительно выгрузить приложение, потом запустить его и нажать на роутер с глобусом - коннект всегда происходит. Суть предложения в следующем. При сворачивании приложения завершать сессию связи с роутером. И при последующем открывании приложения каждый раз инициировать новую сессию через меню Все устройства. То есть при каждом открывании приложения принудительно должно появляться меню Все устройства, а оттуда пользователь уже начинает новую сессию, выбрав свое устройство. В противном случае сейчас приходится постоянно выгружать приложение, чтобы при следующей загрузке оно соединилось с роутером. Спасибо!
  5. Имеется в виду с точки зрения конкретной ситуации, а не новых норм языка. Это вполне употребимая практика:
  6. можно и без has been - в логах вполне допустимо Internet connection lost Internet connection established
  7. Стандартное выражение. Можно internet connection is down, чтобы не так пугало )
  8. Нене это тоже неправильно. Проще и универсальнее всего: is up is down
  9. Я в курсе. Но больше одного сайта все равно кроме как в варианте по умолчанию не попингуешь. К тому же только по ip, а мой дурной провайдер пропускает такие запросы, даже когда интернет заблокирован. Нужны запросы по имени. Как в варианте по умолчанию. Но 50 секунд это очень до фига.
  10. То есть таймаут в этом случае при падении перед переключением на резерв составляет чуть больше 50 секунд? А можно со временем сделать 4й вариант пинга - собственный набор сайтов по желанию пользователя с кастомными таймаутами и кол-вом неудачных пингов для фэйловера? Я бы с удовольствием поставил яндекс и фб, но с 5х3 = 15 секунд. А зачем ему её постоянно искать каждые 5-7 секунд, если они уже соединились и дружат в режиме резерва? То, что он её ищет постоянно, когда она выключена - это я согласен. Тут вопросов нет. Но и то хотя бы в логе это всё группировать надо. А вот когда уже они подружились и wisp в горячем резерве - почему постоянно ассоциация-дисассоциация происходит? Так же не должно быть по логике. И зачем он её ищет по всему диапазону, если стоит определённый канал? У меня никто не отваливается, кстати. Спасибо за ответы!
  11. Ну хотя бы через месяц? Через полгода? Через год? ))
  12. То есть он 100% в нынешней реализации не может быть триггером ни для каких событий со стороны роутера? Например, переключения на резерв. Странно, что он появляется где-то раз в 2-3 дня и всегда именно с секундной разницей между пропаданием и появлением. Он вообще 100% допилен? И чтобы дважды не вставать. В пингчеке если вариант "по умолчанию" - где-то описаны эти настройки? Помню, что он пингует 3 сайта. А есть информация какие и с какой задержкой? Есть ли среди них заграничные, чтобы не оказаться в ситуации как у меня на днях, что по вине проблем на стороне провайдера Россия идёт, а все заграничные ресурсы недоступны, а роутер считает, что всё ок. И сколько времени уходит на такую проверку - то есть через сколько перейдёт на резерв? Стандартные 3х5 или больше? И чтобы трижды не вставать, в режиме wisp вот такое идёт безостановочно. Я про associated-disassosiated. Создал отдельную тему, но там никто из разработчиков не отвечает. А когда роутер с wisp недоступен - то в логах ежесекундные строчки с попытками найти роутер. Это тоже нормально и должно засорять 99% лога или они должны группироваться как-то (kernel: Wi-Fi client: probe request: SSID=INTERNET_AV_REZERV, BSSID=00:00:00:00:00:00 - и так каждые 6-7 секунд)? Nov 07 13:00:48wmondWifiMaster0/AccessPoint0: (MT76x2) STA(b8:53:ac:13:64:61) had associated successfully. Nov 07 13:00:48wmondWifiMaster0/AccessPoint0: (MT76x2) STA(b8:53:ac:13:64:61) set key done in WPA2/WPA2PSK. Nov 07 13:01:38ndhcpsDHCPREQUEST received (STATE_INIT) for 192.168.1.197 from f0:db:e2:90:45:83. Nov 07 13:01:39ndhcpssending ACK of 192.168.1.197 to f0:db:e2:90:45:83. Nov 07 13:05:39ndhcpsDHCPREQUEST received (STATE_INIT) for 192.168.1.103 from 80:56:f2:e5:60:99. Nov 07 13:05:39ndhcpssending ACK of 192.168.1.103 to 80:56:f2:e5:60:99. Nov 07 13:06:13wmondWifiMaster0/AccessPoint0: (MT76x2) STA(b8:53:ac:13:64:61) had been aged-out and disassociated. Nov 07 13:07:54wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) had associated successfully. Nov 07 13:07:54wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) set key done in WPA2/WPA2PSK. Nov 07 13:17:07ndhcpsDHCPREQUEST received (STATE_INIT) for 192.168.1.245 from b8:53:ac:13:64:61. Nov 07 13:17:07ndhcpssending ACK of 192.168.1.245 to b8:53:ac:13:64:61. Nov 07 13:21:46wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) had associated successfully. Nov 07 13:21:46wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) set key done in WPA2/WPA2PSK. Nov 07 13:27:46wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) had been aged-out and disassociated. Nov 07 13:29:25ndhcpsDHCPREQUEST received (STATE_RENEWING) for 192.168.1.23 from ec:1a:59:78:43:bd. Nov 07 13:29:25ndhcpssending ACK of 192.168.1.23 to ec:1a:59:78:43:bd. Nov 07 13:29:58wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) had associated successfully. Nov 07 13:29:58wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) set key done in WPA2/WPA2PSK. Nov 07 13:37:16wmondWifiMaster0/AccessPoint0: (MT76x2) STA(f0:db:e2:90:45:83) had been aged-out and disassociated. Nov 07 13:42:09ndhcpsDHCPREQUEST received (STATE_RENEWING) for 192.168.1.32 from f0:b4:29:b6:50:5c. Спасибо!
  13. Так он мне нужен для переключения на резерв в случае реального пропадания интернета. Тут варианта два. Либо пингчек как-то странно отрабатывает какое-то провайдерсое событие и интернет обрубает, не переключая при этом на резерв, хотя в логах интернета нет всего секунду. Либо это какой-то глюк пингчека - но пропадания интернета с ним в реальности не связаны.
  14. Приветствую. Иногда в логе проскакивают такие строки Internet access is disappeared Internet access is appeared с разницей всегда в одну секунду. Родители, у которых стоит роутер, говорят, что примерно в это время интернет пропадает на несколько минут. Пока 100% связи не отследил, возможно, совпадение. Вопросы. 1. Почему всегда эти сообщения идут парами с разницей всегда в 1 секунду? Если бы проблема была у провайдера - то время между записями было бы разное. 2. Что является причиной этих сообщений? Роутер не уходит на резерв при этом. 3. Как это исправить? На другом роутере такого не было. Спасибо!
  15. А есть какие-нибудь ооооочень приблизительные сроки реализации уведомлений в приложении по событиям на роутере?
  16. С чего ему так и быть, если я нахожусь в своей домашней сети 192.168.1.1, более того, тот же keenetic выдает ip смартфону, но при этом приложение идёт через облако, хотя подключение локальное. Все остальные розетки, датчики, термостаты и прочие гаджеты видят подключение локальным, а приложение keenetic видит его облачным.
  17. Приветствую. заметил одну досадную недоработку. Приложение считает, что я подключен к роутеру дистанционно и работает через облако (значек глобус) даже когда я нахожусь в домашней сети роутера, но подключен к точке доступа, которая соединена с роутером проводом. Даже при том, что у роутера и точки одинаковый ssid. Все остальные гаджеты, поддерживающие локальное управление, спокойно работают в рамках всей сети. Когда я подключен именно к роутеру, приложение работает напрямую. Хотелось бы иметь прямое подключение все время, пока я нахожусь в домашней сети, независимо от того, подключен я к роутеру напрямую или через точку доступа, подключенную к роутеру. спасибо!
  18. Приветствую. начал разбираться с keendns через облако - очень удобная функция. Не хватает: 1. Возможности добавить более сложный пароль для доступа к роутеру через интернет (сейчас используется пароль от веб интерфейса). 2. Возможности добавить пароль для доступа к любому клиенту в сети. Сейчас они открываются вообще без пароля через keendns. В локалке они тоже открываются без пароля (да есть пара устройств с веб интерфейсом и без пароля), но в локалке чужих людей нет. Или они не откроются через keendns без ввода пароля от веб-интерфейса роутера? 3. В списке локальных устройств нет, например, роутера, через который я выхожу в интернет как резерв по wifi. Keenetic у меня 192.168.1.1, а wifi роутер 192.168.2.1. Так вот в любом состоянии (резерв или основной канал) 192.168.2.1 у меня открывается в локалке. Логично, что его в списке нет, ведь он в другой подсети. Но хотелось бы иметь к нему доступ и через keendns. Спасибо!
  19. то есть по вашему мнению функции отправки почты (которая на моем прошлом роутере решалась несколькими строчками кода) в кинетике нет вообще? Вот скрипт, если что: #!/bin/sh #bof # dev options, uncomment when so desired #set -x #set -v # Author: thelonelycoder # http://www.snbforums.com/members/thelonelycoder.25480/ # Script version: 1.7 # Release date June 28 2017 ### About this script ### # This scipt sends a notification email with the currently used WAN type # and IP address whenever the WAN comes up. The Syslog is notified of this event as well. # This works with a standard single as well as dual-WAN setup. # For the second WAN type, USB, Android and all LAN-ports are supported. ### How to use this script ### # 1. Change credentials and settings in the User settings part below # 2. Place this script in /jffs/scripts and name it wan_connect_notification # You should now have this script at this location: # /jffs/scripts/wan_connect_notification # 3. Set script executable (0755) # Enter this in terminal, without the leading #: # chmod a+rx /jffs/scripts/* # 4. Place a file link in /jffs/scripts/wan-start to run it whenever the WAN state changes # Open wan-start and place the following line in the file at the bottom, without the leading # # but leave the comment part in (# WAN ...): # /jffs/scripts/wan_connect_notification # WAN change notification email ### User settings, must be set correctly to work ### # Email settings (mail envelope) # FROM_ADDRESS="you@gmail.com" TO_NAME="Your Name" TO_ADDRESS="you@gmail.com" # Email credentials # USERNAME="you@gmail.com" PASSWORD="gmail-password" # Server settings # SMTP="smtp.gmail.com" PORT="465" # Set encryption type: SSL = smtps (default), TLS = smtp SMTP_ENCRYPT=smtps # FROM Name in email (router model is auto-added after 'Router') FROM_NAME="Router" # NTP timeout # Seconds to wait until native ntp client has synchronised time after booting. # Don's set this too low. Default is 15 NTP_TIMEOUT=15 # Maximum number of cycles to run to detect WAN new type # default is 60, which is about 60 seconds WAN_WAIT_CYCLES=60 # Wait time for WAN IP assignment # # set this higher if it takes longer for the IP assignment after WAN type change # default is PING_TIMEOUT=2 and PING_COUNT=50 # Wait time is PING_TIMEOUT * PING_COUNT: 2 * 50 = 100 seconds PING_TIMEOUT=2 PING_COUNT=50 # Ping IP, default is Google's DNS: 8.8.8.8 # reliable alternative: Level 3 DNS: 209.244.0.3 PING_IP=8.8.8.8 # Wait time until lock file is removed # This prevents to send duplicate emails when wan-start is ran multiple times. # Do not set this too high, recommended is 5-20 seconds, default is 10 LOCK_FILE_REMOVE_WAIT=10 # Auto-reboot feature # This reboots the router once if the WAN does not restore fully for some reason. # The reboot is issued when all the timeout's above are reached, with this formula: # NTP_TIMEOUT + WAN_WAIT_CYCLES + (PING_TIMEOUT * PING_COUNT) # Default setting is off (no rebooting), to activate, set to on REBOOT_ROUTER_WHEN_NO_WAN=off ########################### ### DO NOT CHANGE BELOW ### # Set environment PATH to system binaries export PATH=/sbin:/bin:/usr/sbin:/usr/bin$PATH # This script's name SCRIPT_NAME=wan_connect_notification # Prevent more than one instance of this script LOCK_FILE=/tmp/$SCRIPT_NAME.lock # Function write lockfile(s), remove it if older than setting check_lockfile(){ if [ -f "$1" ];then if [ "$3" == "wanlock" ] && [ -d "/proc/$(cat $LOCK_FILE)" ];then logger "$SCRIPT_NAME: Prevented second instance of this script, lockfile exists. via $0" exit 1 fi FILE_TIMESTAMP=$(date +%s -r $1) FILE_TIMESTAMP_WAIT=$((FILE_TIMESTAMP + $2)) # compare timestamp of file to (date + wait time) if [ "$FILE_TIMESTAMP_WAIT" -le "$(date +"%s")" ];then # lockfile is expired, overwrite it echo "$$" >$1 else # lock file not expired, exit script if [ "$3" == "rebootlock" ];then logger "$SCRIPT_NAME: Not rebooting router again, lockfile of previous reboot exists. via $0" else logger "$SCRIPT_NAME: Prevented second instance of this script, lockfile exists. via $0" fi exit 1 fi else # write lockfile if not foud echo "$$" >$1 fi } # Run lockfile function for this files lock check_lockfile $LOCK_FILE $LOCK_FILE_REMOVE_WAIT wanlock # NTP cycles start count NTP_UP_CYCLES=0 # Wait until NTP is set while [ "$(nvram get ntp_ready)" != "1" ] && [ "$NTP_UP_CYCLES" -le "$NTP_TIMEOUT" ];do NTP_UP_CYCLES=$((NTP_UP_CYCLES+1)) sleep 1 done # Report if timeout is reached if [ "$NTP_UP_CYCLES" == "$((NTP_TIMEOUT+1))" ];then NTP_TIMEOUT_REACHED="(Timeout is $NTP_TIMEOUT, NTP is not set)" logger "$SCRIPT_NAME: NTP was not set. Timeout of $NTP_TIMEOUT reached. via $0" else NTP_TIMEOUT_REACHED= fi # Function detect WAN type in use detect_wan_type(){ # Set to empty first WAN_IP=0 WAN_OK=0 if [ "$(nvram get link_wan)" == 1 ];then # WAN is up WAN_TYPE="Primary WAN" WAN_IP=$(nvram get wan0_ipaddr) WAN_OK=1 elif [ $(nvram get link_wan1) == 1 ];then # WAN1 is up WAN_TYPE="Secondary WAN" WAN_IP=$(nvram get wan1_ipaddr) WAN_OK=1 fi } # Count wait cycles start count WAIT_CYCLES=0 # Run detect WAN type function detect_wan_type # Rerun detect WAN type function if none is registered while [ "$WAN_OK" == "0" ] && [ "$WAN_IP" == "0" ];do sleep 1 detect_wan_type WAIT_CYCLES=$(($WAIT_CYCLES + 1)) echo -e "\nWaiting for WAN type and IP registering, cycle $WAIT_CYCLES" if [ "$WAIT_CYCLES" -eq "$WAN_WAIT_CYCLES" ];then logger "$SCRIPT_NAME: Wait cycles reached after $WAIT_CYCLES attempt(s) via $0" echo -e "\n$SCRIPT_NAME: Wait cycles reached after $WAIT_CYCLES attempt(s) via $0\n" if [ "$REBOOT_ROUTER_WHEN_NO_WAN" == "off" ];then exit 1 fi fi done # Preserve ping variables for output before while loop runs WAIT_TIME=$(($PING_TIMEOUT * $PING_COUNT)) TIMEOUT=$PING_TIMEOUT COUNT=$PING_COUNT # Print to teminal if run from it (test feature) echo -e "\nPinging IP $PING_IP $PING_COUNT times for a total of $WAIT_TIME seconds...\n" # Ping cycles counter start count PING_CYCLES=0 # Ping until success (WAN is connected) using wait time settings # then only continue if succeeded while [ $PING_COUNT -ne 0 ];do ping -c 1 -W $PING_TIMEOUT $PING_IP rc=$? if [ $rc -eq 0 ];then PING_COUNT=1 else sleep $PING_TIMEOUT fi PING_COUNT=$(($PING_COUNT - 1)) PING_CYCLES=$(($PING_CYCLES + 1)) done # Reboot lock file (used if enabled) REBOOT_LOCK_FILE=/jffs/scripts/wan_connect_notification-reboot.lock # Ping messages to syslog and email if [ $rc -eq 0 ] ; then MESSAGE1="$SCRIPT_NAME script stats:" MESSAGE2="Ping cycles = $PING_CYCLES, actual wait time until WAN up = $(($PING_CYCLES * $PING_TIMEOUT)) seconds." logger "$SCRIPT_NAME: WAN connection restored. Ping cycles = $PING_CYCLES, Actual time = $(($PING_CYCLES * $PING_TIMEOUT)), via $0" echo -e "\n$MESSAGE1\n$MESSAGE2\n" else echo -e "\n$SCRIPT_NAME script error message:" echo -e "WAN up wait time timeout:\n Increase PING_TIMEOUT and/or PING_COUNT.\n" logger "$SCRIPT_NAME: WAN up wait time timeout: Increase PING_TIMEOUT and/or PING_COUNT, via $0" # reboot when no WAN if enabled if [ "$REBOOT_ROUTER_WHEN_NO_WAN" == "on" ];then # Run lockfile function for this file's lock check_lockfile $REBOOT_LOCK_FILE 400 rebootlock # if check_lockfile allows it, continue logger "$SCRIPT_NAME: No WAN type registered, rebooting router, via $0" echo "$SCRIPT_NAME: No WAN type registered, rebooting router" # rebooting router now sleep 5 reboot exit 1 else rm -rf $REBOOT_LOCK_FILE exit 1 fi fi # Get the router uptime in human readable format ROUTER_UPTIME=$(awk '{printf("%d days %02d hours %02d minutes %02d seconds\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime) # Check if WebUI login IP address is stored in NVRAM if [ "$(nvram get login_ip_str)" == "" ];then LOGIN_IP="none recorded" else LOGIN_IP=$(nvram get login_ip_str) fi # Get ODM PID if found, else use productid as router model if [[ -z "$(nvram get odmpid)" ]];then ROUTER_MODEL=$(nvram get productid) else ROUTER_MODEL=$(nvram get odmpid) fi # Assemble the message echo "From: \"$FROM_NAME $ROUTER_MODEL\" <$FROM_ADDRESS>" >/tmp/wanmail.txt echo "To: \"$TO_NAME\" <$TO_ADDRESS>" >>/tmp/wanmail.txt echo "Subject: $ROUTER_MODEL is now on $WAN_TYPE" >>/tmp/wanmail.txt echo "Date: $(date -R)" >>/tmp/wanmail.txt echo "" >>/tmp/wanmail.txt echo " There's been a WAN type change on the router on $(date -R)." >>/tmp/wanmail.txt echo "" >>/tmp/wanmail.txt echo " Router $ROUTER_MODEL is now connected through $WAN_TYPE" >>/tmp/wanmail.txt echo " The WAN IP is: $WAN_IP" >>/tmp/wanmail.txt # If reboot router is yes, add message to mail after reboot, remove the REBOOT_LOCK_FILE if [ -f "$REBOOT_LOCK_FILE" ];then echo "" >>/tmp/wanmail.txt echo " Router has been rebooted once to restore WAN connection." >>/tmp/wanmail.txt logger "$SCRIPT_NAME: Router has been rebooted once to restore WAN connection, via $0" rm -rf $REBOOT_LOCK_FILE fi echo "" >>/tmp/wanmail.txt echo " Router uptime: $ROUTER_UPTIME" >>/tmp/wanmail.txt echo " The LAN IP is: $(nvram get lan_ipaddr)" >>/tmp/wanmail.txt echo " Last WebUI login IP address: $LOGIN_IP" >>/tmp/wanmail.txt echo "" >>/tmp/wanmail.txt echo " $MESSAGE1" >>/tmp/wanmail.txt echo " Seconds until NTP updated: $NTP_UP_CYCLES $NTP_TIMEOUT_REACHED" >>/tmp/wanmail.txt echo " $MESSAGE2" >>/tmp/wanmail.txt echo " WAN IP register wait cycles: $WAIT_CYCLES" >>/tmp/wanmail.txt echo "" >>/tmp/wanmail.txt echo " --- " >>/tmp/wanmail.txt echo " Your friendly router." >>/tmp/wanmail.txt # Send with curl curl --url $SMTP_ENCRYPT://$SMTP:$PORT \ --mail-from "$FROM_ADDRESS" --mail-rcpt "$TO_ADDRESS" \ --upload-file /tmp/wanmail.txt \ --ssl-reqd \ --user "$USERNAME:$PASSWORD" --insecure # Remove temp file rm -rf /tmp/wanmail.txt # Notify Syslog of the event logger "$SCRIPT_NAME: WAN type change detected, notification sent to $TO_ADDRESS via $0" # Remove the $SCRIPT_NAME.lock sleep $LOCK_FILE_REMOVE_WAIT rm -rf $LOCK_FILE #eof
  20. Это как-то очень сложно, при наличии собственного адреса на gmail, через который можно спокойно слать письма. У меня так уже год работало на асусе.
  21. Ну пусть так, главное, чтобы помогли с расширением.. Тем более второй слот usb свободен пока что. Хотя думаю 4G модем другого оператора воткнуть еще одним резервом. Тогда хаб поставлю.
  22. На асусе у меня было через wan-start вот таким образом Неужели на keenetic аналогично нельзя сделать?
  23. Приветствую! Приобрёл UltraII - сказать, что я в восторге - это ничего не сказать. Резервирование интернета выполнено так, как я и мечтать не мог. В итоге у меня: 1. Основная линия от провайдера, 2. Wifi от соседа. 3. 4G модем. К сожалению, провайдерская линия не самая надёжная, поэтому нередки переключения на резервные каналы. В такие моменты хотелось бы иметь уведомления, чтобы не попасть на деньги за трафик на резервных лимитных каналах. Поэтому очень нужен скрипт, который бы отправлял на почту сообщения о переключении на резерв и обратно, с указанием текущего канала в заголовке письма. Я в свою очередь через гейт email-push делаю форвард такого письма себе на смартфон и вижу в заголовке пуш сообщения, на какой канал переключился роутер. Знаний и умений у меня хвалило бы только на внесение собственных данных в готовый скрипт по инструкции. В связи с этим прошу помощи в создании подобного решения. Уверен, оно пригодится многим. В идеале, чтобы для него не нужна была отдельная флешка, а хранилось бы оно в памяти роутера. Такое решение было у меня на асусе, и работало неплохо. Если нужно как база - готов предоставить исходник. Основные задачи: 1. При переключении на резервный канал присылается email сообщение с заголовком "Роутер "routername" перешел на "название канала". В тексте письма - новый ip адрес роутера. 2. При переключении на основной канал присылается email сообщение с заголовком "Роутер "routername" перешел на "название канала". В тексте письма - новый ip адрес роутера. 3. При перезагрузке роутера приходило сообщение о выходе онлайн с учётом таймаута получения точного времени (чтобы скрипт не уходил в цикл, был уже такой опыт). Если кто-то готов помочь с подобным скриптом и инструкцией по его установке и настройке для чайников - я был бы очень благодарен. Заранее понимаю, что 90% этого форума отправят меня изучать мануалы, похожие кейсы (про смс уведомления видел) и т.д., поэтому если нет желания помочь - просто спасибо, что прочитали сообщение.
×
×
  • Create New...