ChCh Öffnungsstatus: Unterschied zwischen den Versionen

Aus ChaosChemnitz
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Dieses Script wird einmal in der Minute gestartet und prüft das Ring-Signal der seriellen Schnittstelle. Wenn unsere Außenbeleuchtung eingeschaltet wird, gibt e…“)
 
 
(17 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
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.
+
Diese Informationen sind veraltet. Aktuell wird im [https://git.chch.it/ChCh/chch-power Schaltschrank] ausgelesen, ob irgendwo Strom eingeschaltet ist. Früher lief es folgendermaßen ab:
  
 +
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 dies im IRC bekannt. Ebenso gibt es das Ausschalten bekannt.
 +
 +
== elektrische Schaltung ==
 +
<pre>
 +
          -| |+    ______            ______
 +
Zuleitung  | |  .-|______|-o-->|--o-|______|-.  R1=R2=1k
 +
LED-Leucht- | o--'    R1    |  D1  |    R3    |  R3=10k
 +
reklame    o-|--.  ______  |      |  +C1-  |  C1=47µ
 +
(ChCh)      | |  o-|______|-'      o----||----o--Pin 5 (GND)
 +
            | |  |    R2          '----------|--Pin 9 (RI)
 +
            | |  '----------------------------'
 +
</pre>
 +
Der Schriftzug besteht aus einer blauen LED-Lichterkette, die von einer gelochten Kunststoffkonstruktion in Form gehalten wird. Das Netzteil liefert 24V Wechselspannung, welche jedoch im Stecker der Lichterkette (Zusätzlicher Stecker zwischen Netzteil und Zuleitung der Lichterkette) teilweise gleichgerichtet wird. Die oben dargestellte Schaltung halbiert und glättet die Spannung, so dass diese direkt am Seriellen Anschluss eines PCs ausgewertet werden kann.
 +
 +
Blinken ist noch nicht implementiert.
 +
 +
== neues Skript ==
 +
Dieses Skript wird vom [[ChCh Bot|ChCh-Bot]] aufgerufen, um den aktuellen Status darzustellen. Es findet sich in /bin/chch-status, so das es auch von anderen Skripten oder Diensten genutzt werden kann.
 +
<pre>
 +
#!/bin/sh
 +
 +
status="$(cat /proc/tty/driver/serial | grep RI)"
 +
 +
if [ -z "$status" ];
 +
then
 +
        printf "geschlossen\n"
 +
else
 +
        printf "geöffnet\n"
 +
fi
 +
 +
exit 0
 +
</pre>
 +
 +
== altes Skript ==
 +
 +
Dieses Skript wurde in der ersten Version vom ChCh-Bot verwendet.
 
<pre>
 
<pre>
 
#! /bin/bash
 
#! /bin/bash
Zeile 7: Zeile 43:
 
IRC_USER="chch"
 
IRC_USER="chch"
 
IRC_CHANNEL="#chaoschemnitz"
 
IRC_CHANNEL="#chaoschemnitz"
IRC_SERVER="irc.freenode.net"
+
IRC_SERVER="irc.hackint.eu"
ON_MSG="licht an"
+
PASSWORD="xxxxxxxxxxxxxxxxxxxxxxx"
OFF_MSG="licht aus"
+
ON_MSG="Wir haben geöffnet."
 +
OFF_MSG="Wir schließen jetzt."
 +
ON_TOPIC=" | Status: geöffnet"
 +
OFF_TOPIC=" | Status: geschlossen"
 +
STATUS_FILE="/home/chch-status/status"
 
###############
 
###############
  
 
# 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 19: Zeile 60:
 
CAT=/bin/cat
 
CAT=/bin/cat
 
CUT=/usr/bin/cut
 
CUT=/usr/bin/cut
TAIL=/usr/bin/tail
+
TAIL=/usr/bin/tail  
 
GREP=/bin/grep
 
GREP=/bin/grep
 +
SED=/bin/sed
 
ECHO=/bin/echo
 
ECHO=/bin/echo
 +
MV=/bin/mv
 
PS=/bin/ps
 
PS=/bin/ps
SLEEP=/bin/sleep
+
SLEEP=/bin/sleep  
 
II=/usr/bin/ii
 
II=/usr/bin/ii
#################
+
#################
  
 
IRC_CHAN_IN=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/in
 
IRC_CHAN_IN=$IRC_PREFIX/$IRC_SERVER/$IRC_CHANNEL/in
 
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")
 +
II_RESTARTED=0
 
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 -k $PASSWORD &
         while [ $II_START_TIMEOUT -gt 0 -a ! -a $IRC_SRV_IN ]; do
+
         while [ $II_START_TIMEOUT -ge 0 -a ! -e $IRC_SRV_IN ]; do
 +
                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 ! -e $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
 
         fi
 
         fi
 +
        II_RESTARTED=1
 
fi
 
fi
  
# CHOOSE CORRECT MESSAGE
+
$ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
 +
if [ $? -ne 0 ]; then
 +
        exit 1
 +
fi
 +
 
 +
if [ ! -e $IRC_CHAN_OUT ] || [ $II_RESTARTED -eq 1 ] ; then
 +
        TMP=$JOIN_TIMEOUT
 +
        while [ $JOIN_TIMEOUT -ge 0 -a ! -e $IRC_CHAN_OUT ]; do
 +
                JOIN_TIMEOUT=$(($JOIN_TIMEOUT-1))
 +
                $SLEEP 1
 +
        done
 +
        if [ $JOIN_TIMEOUT -lt 0 -a ! -e $IRC_CHAN_OUT ]; then
 +
                $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
 +
        fi
 +
        JOIN_TIMEOUT=$TMP
 +
        while [ $JOIN_TIMEOUT -ge 0 -a ! -e $IRC_CHAN_OUT ]; do
 +
                JOIN_TIMEOUT=$(($JOIN_TIMEOUT-1))
 +
                $SLEEP 1
 +
        done
 +
        if [ $JOIN_TIMEOUT -lt 0 -a ! -e $IRC_CHAN_OUT ]; then
 +
                exit 1
 +
        fi
 +
 
 +
        sleep 10
 +
        $ECHO -e "/j ChanServ op $IRC_CHANNEL\n" > $IRC_SRV_IN
 +
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")
 +
$TAIL -n 300 $IRC_SRV_OUT > ${IRC_SRV_OUT}_tmp
 +
$MV ${IRC_SRV_OUT}_tmp $IRC_SRV_OUT
 +
#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_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." | $SED -e "s/[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL //I" | $GREP -ve "^[^![:space:]]\+![^@[:space:]]\+@\S\+\s\+[0-9]\+" | $TAIL -n1 )
 +
 
 +
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
  
# SEND MESSAGE IF IT DIIFERS FROM PREVIOUS STATUS
+
$ECHO -e $TOPIC | $CUT -d: -f2 | $SED -e "s/^[[:space:]]*//" > $STATUS_FILE
if [ "$MSG" != "$PREV_MSG" ]; then
+
 
         $ECHO -e "$MSG\n" > $IRC_CHAN_IN
+
if [ ! -z "$CURRENT_TOPIC" ]; then
fi
+
        # SEND MESSAGE IF IT DIFFERS FROM PREVIOUS STATUS
if [ $? -ne 0 ]; then
+
        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
 +
else
 
         exit 1
 
         exit 1
 
fi
 
fi
 
</pre>
 
</pre>
 +
 +
[[Category:Software]] [[Category:Hardware]]

Aktuelle Version vom 6. Oktober 2018, 14:37 Uhr

Diese Informationen sind veraltet. Aktuell wird im Schaltschrank ausgelesen, ob irgendwo Strom eingeschaltet ist. Früher lief es folgendermaßen ab:

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 dies im IRC bekannt. Ebenso gibt es das Ausschalten bekannt.

elektrische Schaltung

           -| |+    ______            ______
Zuleitung   | |  .-|______|-o-->|--o-|______|-.   R1=R2=1k
LED-Leucht- | o--'    R1    |  D1  |    R3    |   R3=10k
reklame     o-|--.  ______  |      |   +C1-   |   C1=47µ
(ChCh)      | |  o-|______|-'      o----||----o--Pin 5 (GND)
            | |  |    R2           '----------|--Pin 9 (RI)
            | |  '----------------------------'

Der Schriftzug besteht aus einer blauen LED-Lichterkette, die von einer gelochten Kunststoffkonstruktion in Form gehalten wird. Das Netzteil liefert 24V Wechselspannung, welche jedoch im Stecker der Lichterkette (Zusätzlicher Stecker zwischen Netzteil und Zuleitung der Lichterkette) teilweise gleichgerichtet wird. Die oben dargestellte Schaltung halbiert und glättet die Spannung, so dass diese direkt am Seriellen Anschluss eines PCs ausgewertet werden kann.

Blinken ist noch nicht implementiert.

neues Skript

Dieses Skript wird vom ChCh-Bot aufgerufen, um den aktuellen Status darzustellen. Es findet sich in /bin/chch-status, so das es auch von anderen Skripten oder Diensten genutzt werden kann.

#!/bin/sh

status="$(cat /proc/tty/driver/serial | grep RI)"

if [ -z "$status" ];
then
        printf "geschlossen\n"
else
        printf "geöffnet\n"
fi

exit 0

altes Skript

Dieses Skript wurde in der ersten Version vom ChCh-Bot verwendet.

#! /bin/bash

# USER CONFIG #
IRC_USER="chch"
IRC_CHANNEL="#chaoschemnitz"
IRC_SERVER="irc.hackint.eu"
PASSWORD="xxxxxxxxxxxxxxxxxxxxxxx"
ON_MSG="Wir haben geöffnet."
OFF_MSG="Wir schließen jetzt."
ON_TOPIC=" | Status: geöffnet"
OFF_TOPIC=" | Status: geschlossen"
STATUS_FILE="/home/chch-status/status"
###############

# 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
MV=/bin/mv
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")
II_RESTARTED=0
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 -k $PASSWORD &
        while [ $II_START_TIMEOUT -ge 0 -a ! -e $IRC_SRV_IN ]; do
                II_START_TIMEOUT=$(($II_START_TIMEOUT-1))
                $SLEEP 1
        done
        if [ $II_START_TIMEOUT -lt 0 -a ! -e $IRC_SRV_IN ]; then
                exit 1
        fi
        $ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
        if [ $? -ne 0 ]; then
                exit 1
        fi
        II_RESTARTED=1
fi

$ECHO -e "/j $IRC_CHANNEL\n" > $IRC_SRV_IN
if [ $? -ne 0 ]; then
        exit 1
fi

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

        sleep 10
        $ECHO -e "/j ChanServ op $IRC_CHANNEL\n" > $IRC_SRV_IN
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")
$TAIL -n 300 $IRC_SRV_OUT > ${IRC_SRV_OUT}_tmp
$MV ${IRC_SRV_OUT}_tmp $IRC_SRV_OUT
#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_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." | $SED -e "s/[0-9]\{4,\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\} $IRC_CHANNEL //I" | $GREP -ve "^[^![:space:]]\+![^@[:space:]]\+@\S\+\s\+[0-9]\+" | $TAIL -n1 )

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

$ECHO -e $TOPIC | $CUT -d: -f2 | $SED -e "s/^[[:space:]]*//" > $STATUS_FILE

if [ ! -z "$CURRENT_TOPIC" ]; then
        # SEND MESSAGE IF IT DIFFERS 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
else
        exit 1
fi