ChCh Öffnungsstatus: Unterschied zwischen den Versionen

Aus ChaosChemnitz
Zur Navigation springen Zur Suche springen
Zeile 8: Zeile 8:
 
IRC_CHANNEL="#chaoschemnitz"
 
IRC_CHANNEL="#chaoschemnitz"
 
IRC_SERVER="irc.freenode.net"
 
IRC_SERVER="irc.freenode.net"
ON_MSG="licht an"
+
ON_MSG="Wir haben geöffnet."
OFF_MSG="licht aus"
+
OFF_MSG="Wir schließen jetzt."
 +
ON_TOPIC=" | Status: geöffnet"
 +
OFF_TOPIC=" | Status: geschlosen"
 
###############
 
###############
  
 
# SYSTEM CONFIG #
 
# SYSTEM CONFIG #
 
II_START_TIMEOUT=10
 
II_START_TIMEOUT=10
 +
JOIN_TIMEOUT=10
 
IRC_PREFIX=/var/irc
 
IRC_PREFIX=/var/irc
 
PORT="port:000003F8"
 
PORT="port:000003F8"
Zeile 21: Zeile 24:
 
TAIL=/usr/bin/tail
 
TAIL=/usr/bin/tail
 
GREP=/bin/grep
 
GREP=/bin/grep
 +
SED=/bin/sed
 
ECHO=/bin/echo
 
ECHO=/bin/echo
 
PS=/bin/ps
 
PS=/bin/ps
Zeile 30: Zeile 34:
 
IRC_CHAN_OUT=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/out
 
IRC_CHAN_OUT=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/out
 
IRC_SRV_IN=$IRC_PREFIX/$IRC_SERVER/in
 
IRC_SRV_IN=$IRC_PREFIX/$IRC_SERVER/in
 +
IRC_SRV_OUT=$IRC_PREFIX/$IRC_SERVER/out
 
II_RUNNING=$($PS awx | $GREP "ii" | $GREP "\-n $IRC_USER")
 
II_RUNNING=$($PS awx | $GREP "ii" | $GREP "\-n $IRC_USER")
 
RING=$($CAT /proc/tty/driver/serial | $GREP "$PORT" | $GREP -o "RI")
 
RING=$($CAT /proc/tty/driver/serial | $GREP "$PORT" | $GREP -o "RI")
# FIND OUR LAST STATUS MESSAGE
 
PREV_MSG=$($CAT $IRC_CHAN_OUT | $CUT -d":" -f2 | $GREP -e "^[0-9]\{2\} <$IRC_USER> $ON_MSG\$\|^[0-9]\{2\} <$IRC_USER> $OFF_MSG\$" | $TAIL -n1 | $GREP -oe "$ON_MSG\|$OFF_MSG")
 
  
 
# RESTART II
 
# RESTART II
 
if [ -z "$II_RUNNING" ]; then
 
if [ -z "$II_RUNNING" ]; then
 
         $II -n $IRC_USER -i $IRC_PREFIX &
 
         $II -n $IRC_USER -i $IRC_PREFIX &
         while [ $II_START_TIMEOUT -gt 0 -a ! -a $IRC_SRV_IN ]; do
+
         while [ $II_START_TIMEOUT -ge 0 -a ! -a $IRC_SRV_IN ]; do
 
                 II_START_TIMEOUT=$II_START_TIMEOUT-1
 
                 II_START_TIMEOUT=$II_START_TIMEOUT-1
 
                 $SLEEP 1
 
                 $SLEEP 1
 
         done
 
         done
         if [ $II_START_TIMEOUT -le 0 -a ! -a $IRC_SRV_IN ]; then
+
         if [ $II_START_TIMEOUT -lt 0 -a ! -a $IRC_SRV_IN ]; then
 
                 exit 1
 
                 exit 1
 
         fi
 
         fi
         echo "/j $IRC_CHANNEL" > $IRC_SRV_IN
+
         $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
 
         if [ $? -ne 0 ]; then
 
         if [ $? -ne 0 ]; then
 
                 exit 1
 
                 exit 1
Zeile 51: Zeile 54:
 
fi
 
fi
  
# CHOOSE CORRECT MESSAGE
+
if [ ! -a $IRC_CHAN_OUT ]; then
 +
        TMP=$JOIN_TIMEOUT
 +
        while [ $JOIN_TIMEOUT -ge 0 -a ! -a $IRC_CHAN_OUT ]; do
 +
                JOIN_TIMEOUT=$JOIN_TIMEOUT-1
 +
                $SLEEP 1
 +
        done
 +
        if [ $JOIN_TIMEOUT -lt 0 -a ! -a $IRC_CHAN_OUT ]; then
 +
                $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
 +
        fi
 +
        JOIN_TIMEOUT=$TMP
 +
        while [ $JOIN_TIMEOUT -ge 0 -a ! -a $IRC_CHAN_OUT ]; do
 +
                JOIN_TIMEOUT=$JOIN_TIMEOUT-1
 +
                $SLEEP 1
 +
        done
 +
        if [ $JOIN_TIMEOUT -lt 0 -a ! -a $IRC_CHAN_OUT ]; then
 +
                exit 1
 +
        fi
 +
fi
 +
 
 +
# FIND OUR LAST STATUS MESSAGE
 +
PREV_MSG=$($CAT $IRC_CHAN_OUT | $CUT -d":" -f2 | $GREP -e "^[0-9]\{2\} <$IRC_USER> $ON_MSG\$\|^[0-9]\{2\} <$IRC_USER> $OFF_MSG\$" | $TAIL -n1 | $GREP -oe "$ON_MSG\|$OFF_MSG")
 +
CURRENT_TOPIC=$($ECHO "/TOPIC $IRC_CHANNEL" > $IRC_SRV_IN; $SLEEP 3; $CAT $IRC_SRV_OUT | $GREP -i -e "[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL" | $GREP -v "End of /NAMES list." | $GREP -v "[[:alnum:]]*!~[[:alnum:]]*@" | $TAIL -n1 | $SED -e "s/[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL //I")
 +
CURRENT_STATUS=$($ECHO $CURRENT_TOPIC | $GREP -oe "$ON_TOPIC$\|$OFF_TOPIC$")
 +
if [ ! -z "$CURRENT_STATUS" ]; then
 +
        CURRENT_TOPIC=$($ECHO $CURRENT_TOPIC | $SED -e "s/$CURRENT_STATUS//")
 +
fi
 +
 
 +
# CHOOSE CORRECT MESSAGE AND TOPIC
 
if [ -z "$RING" ]; then
 
if [ -z "$RING" ]; then
 
         MSG="$OFF_MSG"
 
         MSG="$OFF_MSG"
 +
        TOPIC="$OFF_TOPIC"
 
else
 
else
 
         MSG="$ON_MSG"
 
         MSG="$ON_MSG"
 +
        TOPIC="$ON_TOPIC"
 
fi
 
fi
  
Zeile 61: Zeile 93:
 
if [ "$MSG" != "$PREV_MSG" ]; then
 
if [ "$MSG" != "$PREV_MSG" ]; then
 
         $ECHO -e "$MSG\n" > $IRC_CHAN_IN
 
         $ECHO -e "$MSG\n" > $IRC_CHAN_IN
 +
fi
 +
# SET TOPIC IF IT DIFFERS FROM PREVIOUS ONE
 +
if [ "$TOPIC" != "$CURRENT_STATUS" ]; then
 +
        $ECHO -e "/t $CURRENT_TOPIC$TOPIC\n" > $IRC_CHAN_IN
 
fi
 
fi
 
if [ $? -ne 0 ]; then
 
if [ $? -ne 0 ]; then

Version vom 25. März 2012, 04:55 Uhr

Dieses Script wird einmal in der Minute gestartet und prüft das Ring-Signal der seriellen Schnittstelle. Wenn unsere Außenbeleuchtung eingeschaltet wird, gibt es dieß im IRC bekannt. Ebenso gibt es das Ausschalten bekannt.

#! /bin/bash

# USER CONFIG #
IRC_USER="chch"
IRC_CHANNEL="#chaoschemnitz"
IRC_SERVER="irc.freenode.net"
ON_MSG="Wir haben geöffnet."
OFF_MSG="Wir schließen jetzt."
ON_TOPIC=" | Status: geöffnet"
OFF_TOPIC=" | Status: geschlosen"
###############

# SYSTEM CONFIG #
II_START_TIMEOUT=10
JOIN_TIMEOUT=10
IRC_PREFIX=/var/irc
PORT="port:000003F8"

CAT=/bin/cat
CUT=/usr/bin/cut
TAIL=/usr/bin/tail
GREP=/bin/grep
SED=/bin/sed
ECHO=/bin/echo
PS=/bin/ps
SLEEP=/bin/sleep
II=/usr/bin/ii
#################

IRC_CHAN_IN=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/in
IRC_CHAN_OUT=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/out
IRC_SRV_IN=$IRC_PREFIX/$IRC_SERVER/in
IRC_SRV_OUT=$IRC_PREFIX/$IRC_SERVER/out
II_RUNNING=$($PS awx | $GREP "ii" | $GREP "\-n $IRC_USER")
RING=$($CAT /proc/tty/driver/serial | $GREP "$PORT" | $GREP -o "RI")

# RESTART II
if [ -z "$II_RUNNING" ]; then
        $II -n $IRC_USER -i $IRC_PREFIX &
        while [ $II_START_TIMEOUT -ge 0 -a ! -a $IRC_SRV_IN ]; do
                II_START_TIMEOUT=$II_START_TIMEOUT-1
                $SLEEP 1
        done
        if [ $II_START_TIMEOUT -lt 0 -a ! -a $IRC_SRV_IN ]; then
                exit 1
        fi
        $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
        if [ $? -ne 0 ]; then
                exit 1
        fi
fi

if [ ! -a $IRC_CHAN_OUT ]; then
        TMP=$JOIN_TIMEOUT
        while [ $JOIN_TIMEOUT -ge 0 -a ! -a $IRC_CHAN_OUT ]; do
                JOIN_TIMEOUT=$JOIN_TIMEOUT-1
                $SLEEP 1
        done
        if [ $JOIN_TIMEOUT -lt 0 -a ! -a $IRC_CHAN_OUT ]; then
                $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
        fi
        JOIN_TIMEOUT=$TMP
        while [ $JOIN_TIMEOUT -ge 0 -a ! -a $IRC_CHAN_OUT ]; do
                JOIN_TIMEOUT=$JOIN_TIMEOUT-1
                $SLEEP 1
        done
        if [ $JOIN_TIMEOUT -lt 0 -a ! -a $IRC_CHAN_OUT ]; then
                exit 1
        fi
fi

# FIND OUR LAST STATUS MESSAGE
PREV_MSG=$($CAT $IRC_CHAN_OUT | $CUT -d":" -f2 | $GREP -e "^[0-9]\{2\} <$IRC_USER> $ON_MSG\$\|^[0-9]\{2\} <$IRC_USER> $OFF_MSG\$" | $TAIL -n1 | $GREP -oe "$ON_MSG\|$OFF_MSG")
CURRENT_TOPIC=$($ECHO "/TOPIC $IRC_CHANNEL" > $IRC_SRV_IN; $SLEEP 3; $CAT $IRC_SRV_OUT | $GREP -i -e "[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL" | $GREP -v "End of /NAMES list." | $GREP -v "[[:alnum:]]*!~[[:alnum:]]*@" | $TAIL -n1 | $SED -e "s/[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL //I")
CURRENT_STATUS=$($ECHO $CURRENT_TOPIC | $GREP -oe "$ON_TOPIC$\|$OFF_TOPIC$")
if [ ! -z "$CURRENT_STATUS" ]; then
        CURRENT_TOPIC=$($ECHO $CURRENT_TOPIC | $SED -e "s/$CURRENT_STATUS//")
fi

# CHOOSE CORRECT MESSAGE AND TOPIC
if [ -z "$RING" ]; then
        MSG="$OFF_MSG"
        TOPIC="$OFF_TOPIC"
else
        MSG="$ON_MSG"
        TOPIC="$ON_TOPIC"
fi

# SEND MESSAGE IF IT DIIFERS FROM PREVIOUS STATUS
if [ "$MSG" != "$PREV_MSG" ]; then
        $ECHO -e "$MSG\n" > $IRC_CHAN_IN
fi
# SET TOPIC IF IT DIFFERS FROM PREVIOUS ONE
if [ "$TOPIC" != "$CURRENT_STATUS" ]; then
        $ECHO -e "/t $CURRENT_TOPIC$TOPIC\n" > $IRC_CHAN_IN
fi
if [ $? -ne 0 ]; then
        exit 1
fi