최대 절전 모드 스크립트의 일부

최대 절전 모드 스크립트의 일부

elif 부분을 일시 중지/휴면하고 싶지만 다른 elif 부분은 정상적으로 작동하도록 유지하고 싶습니다. 하나의 센서가 꺼지면 전체 스크립트가 잠자기 상태가 되는 것을 원하지 않습니다.

#!/bin/sh

while true;  do
    valid=""


    scan=`./script`

    if [ "$scan" = "$valid" ]; then
        echo "Good value"

    else
        echo "Bad value"

    fi

    sleep 5
done

exit

따라서 1개의 센서가 트리거되면 해당 1개의 센서에 대한 푸시 알림을 보내기 전에 몇 초를 기다리지만, 1개의 센서가 지연되어도 다른 센서의 알림 전송이 중단되지는 않습니다.

센서가 꺼질 때마다 알림을 받고 싶지 않고, 알림이 계속해서 전송되지 않도록 지연을 갖고 싶습니다.

답변1

#!/bin/bash
#again you must use bash... 
valid[0]=160650648 ; valid[1]=163686025
valid[2]=120806542 ; valid[3]=37206841
i=0

while sleep 5;  do
    scan=$(./RFSniffer)
    if [ "$scan" == "$oldscan" ]; then
    i=$((i+1))
    #if i is minor than 10 restart loop...
    #So a alert will not be displayed again after 50 seconds...
        if [ "$i" -lt "10" ]; then
            continue
        else 
            i=0
        fi
    fi

    case $scan in 
           ${valid[0]})
               echo "Good Read"
               echo "Your code is " $scan
               ./buzzer.sh &
               omxplayer -o local sleighbells.mp3
               curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="DoorBell" &
            ;; 
            ${valid[1]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="front sensor" &
            ;;
            ${valid[2]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="Back door sensor" &
            ;;
            ${valid[3]})
                curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="Second sensor" &
            ;;
            *)
               echo "BAD READ:  your code and the valid don't match"
               echo "Your correct valid code should be " $scan
            ;;
    esac

    oldscan=$scan
    scan=''
    #sleep 5 not needed sleep 5 is in while condition 

done

편집: 댓글을 참조하세요..

답변2

"스크립트는 읽기 스캔을 독립적으로 전달해야 하지만 각 스캔이 발생한 후 1분 동안 차단해야 합니다"라고 설명한 것이 맞습니까?

bash귀하의 스크립트에는 단순화/최적화를 위한 몇 가지 기회가 있습니다. (hoppla - 태그가 편집되었습니다...?) 를 사용하고 있다고 가정합니다. bash비록 shebang에서는 다르게 표시되지만... 따라서 개별 스캔에 대해 1분간 일시 중지를 구현하는 동안 저는 또한 기회를 잡으십시오( echo내 시스템에 설치되지 않은 명령의 경우 - 작업에 만족하면 삭제하십시오). 한번 시도해 보고 자유롭게 적응해 보세요.

VALID=(160650648 163686025 120806542 37206841)                          # define valid scans
BODY=(DoorBell "front sensor" "Back door sensor" "Second sensor")       # define body tests

while true
  do    scan=$(./RFSniffer)

        for IX in "${!VALID[@]}" "${#VALID[@]}"                         # 0 - 3 elements, and 4 to identify bad reads
          do    if [ "${scan:-FALSE}" = "${VALID[IX]}" ]                # compare 4 elements, the 5. tries to compare to "" empty
                  then  echo "Good Read"
                        echo "Your code is " $scan

                        if (( $SECONDS > ${LAST[IX]} + 60 ))            # test for one minute pause
                          then  if [ "$IX" = 0 ]                        # do this just for the "door bell"
                                  then  echo ./buzzer.sh
                                        echo omxplayer -o local sleighbells.mp3
                                fi

                                echo curl -u "code": https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="${BODY[IX]}" # &

                                LAST[IX]=$SECONDS                       # keep last scan occurrence
                          else  echo "pausing "                         
                        fi

                        break                                           # if good read - break out of the for loop to avoid the bad read msg
                fi

                if [ "$IX" = "${#VALID[@]}" ]                           # the fifth loop means no valid scan found

                  then  echo "BAD READ:  your code $scan and the valid ones don't match"
                        echo "Your correct valid code should be one of ${VALID[@]}"
                fi
          done

        sleep 5
  done

관련 정보