@echo off
SET portname=COM12
:loop
set /p x="~U" <nul >\\.\%portname%
ping -n 2 127.0.0.1 > nul
goto loop
#!/bin/bash
PORT=/dev/ttyACM0
while true
do
echo -n "~U" > $PORT
sleep 1
done
@echo off
SET hostname=ya.ru
SET portname=COM12
:loop
ping -n 1 -l 4 -w 1000 %hostname% >nul
if %errorlevel%==0 set /p x="~U" <nul >\\.\%portname%
ping -n 2 127.0.0.1 > nul
goto loop
#!/usr/bin/env bash
HOST="ya.ru"
PORT=/dev/ttyACM0
while true
do
if ping -c 1 $HOST; then
echo -n "~U" > $PORT
fi
sleep 3
done
#!/usr/bin/env bash
PORT=/dev/ttyACM0
PROCESS=crond
if [ ! -z "$1" ];then
PROCESS="$1"
echo "Monitor $PROCESS"
fi
while true; do
if pgrep "$PROCESS" > /dev/null; then
echo -n "~U" > $PORT
fi
sleep 3
done
#!/usr/bin/env bash
PORT=/dev/ttyACM0
URL=ya.ru
PROCESS=crond
while getopts ":ha:p:" opt; do
case ${opt} in
a)
URL=$OPTARG
;;
p)
PROCESS=$OPTARG
;;
h)
echo "Usage: $0 -a <url> -p <process>" 1>&2
exit 1
;;
\?)
echo "Invalid option: -$OPTARG" 1>&2
exit 1
;;
esac
done
echo "Ping $URL"
echo "Monitor $PROCESS"
while true; do
ping -n -c 1 -w 1 "$URL" 2>/dev/null 1>&2 && pgrep "$PROCESS" 2>/dev/null 1>&2 && echo -n "~U" > $PORT
sleep 3
done
#!/bin/bash
# Путь к последовательному порту (измените при необходимости)
SERIAL_PORT="/dev/ttyACM0"
BAUD_RATE="9600"
# Время ожидания ответа в секундах, после которого будет выполнено "действие"
N=30
# Команды для отправки и ожидаемого ответа
COMMAND="~U"
EXPECTED_RESPONSE="~A"
# ----------------------------
# Обработка сигналов для корректного завершения
# ----------------------------
cleanup() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - Завершение работы скрипта."
exec 3<&-
exit 0
}
# Установка ловушек на сигналы
trap cleanup SIGINT SIGTERM EXIT
# ----------------------------
# Функция инициализации последовательного порта
# ----------------------------
init_serial_port() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - Настройка последовательного порта $SERIAL_PORT с скоростью $BAUD_RATE."
stty -F "$SERIAL_PORT" "$BAUD_RATE" cs8 -cstopb -parenb -ixon -ixoff -icanon -echo
if [[ $? -ne 0 ]]; then
echo "$(date +"%Y-%m-%d %H:%M:%S") - Не удалось настроить последовательный порт $SERIAL_PORT."
exit 1
fi
# Открытие последовательного порта на FD 3
exec 3< "$SERIAL_PORT"
}
# ----------------------------
# Функция действия при отсутствии ответа
# ----------------------------
action() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - Ответ не получен в течение $N секунд. Выполнение действия."
# Здесь можно определить необходимое действие.
# sudo shutdown -h now
}
# ----------------------------
# Функция основной логики
# ----------------------------
main() {
# Инициализация времени последнего успешного ответа
last_response_time=$(date +%s)
while true; do
# Отправка команды в последовательный порт
echo -ne "$COMMAND" > "$SERIAL_PORT"
echo "$(date +"%Y-%m-%d %H:%M:%S") - Отправлена команда: $COMMAND"
# Переменная для хранения полученного ответа
RESPONSE=""
# Запуск таймера для ожидания ответа до 1 секунды
RESPONSE_START_TIME=$(date +%s%N) # Текущее время в наносекундах
while true; do
# Текущее время
CURRENT_TIME_NS=$(date +%s%N)
ELAPSED_NS=$(( CURRENT_TIME_NS - RESPONSE_START_TIME ))
# Проверка, прошло ли 1 секунда (1,000,000,000 наносекунд)
if (( ELAPSED_NS >= 1000000000 )); then
break
fi
# Чтение одного символа из последовательного порта с небольшим таймаутом через FD 3
if read -r -n1 -t 0.1 CHAR <&3; then
RESPONSE+="$CHAR"
# Проверка, содержит ли накопленный буфер ожидаемый ответ
if [[ "$RESPONSE" == *"$EXPECTED_RESPONSE"* ]]; then
echo "$(date +"%Y-%m-%d %H:%M:%S") - Получен ожидаемый ответ: $EXPECTED_RESPONSE"
last_response_time=$(date +%s)
break
fi
# Ограничение размера буфера для предотвращения переполнения
if (( ${#RESPONSE} > 10 )); then
RESPONSE="${RESPONSE: -10}"
fi
fi
done
# Проверка, прошло ли N секунд с последнего успешного ответа
CURRENT_TIME=$(date +%s)
ELAPSED=$(( CURRENT_TIME - last_response_time ))
if (( ELAPSED >= N )); then
action
# После выполнения действия (например, выключение), скрипт завершится
# Если действие не завершает скрипт, можно сбросить last_response_time здесь
last_response_time=$(date +%s)
else
echo "$(date +"%Y-%m-%d %H:%M:%S") - Последний успешный ответ был $ELAPSED секунд назад."
fi
# Ожидание 1 секунды перед следующей отправкой команды
sleep 1
done
}
# ----------------------------
# Главная логика скрипта
# ----------------------------
# Проверка наличия прав на доступ к последовательному порту
if [[ ! -r "$SERIAL_PORT" || ! -w "$SERIAL_PORT" ]]; then
echo "$(date +"%Y-%m-%d %H:%M:%S") - Нет прав на доступ к последовательному порту $SERIAL_PORT."
exit 1
fi
# Инициализация последовательного порта
init_serial_port
echo "$(date +"%Y-%m-%d %H:%M:%S") - Скрипт запущен. Отправка команды '$COMMAND' каждые 1 секунду с ожиданием ответа '$EXPECTED_RESPONSE' в течение $N секунд."
# Запуск основной функции
main
from time import sleep
import serial
port = '/dev/tty.usbmodem14201'
ser = serial.Serial(port)
while True:
ser.write(b'~G')
ser_data = ser.readline()
if ser_data:
data = ser_data.decode("utf-8")
if data.startswith('~G'):
try:
print('Temperature is {0}'.format(int(data[2:])/10))
except ValueError:
print("Error")
sleep(1)