Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

shack_open_close_monitor [2012/11/29 19:06]
82.212.50.234
shack_open_close_monitor [2015/01/07 21:45] (aktuell)
chris
Zeile 1: Zeile 1:
 ====== shack open/close monitor ======= ====== shack open/close monitor =======
-{{tags> project infrastructure shackoperations process hardware software }}+{{tag> project infrastructure shackoperations process hardware software }}
  
 das open/​close-monitoring basiert auf der annahme, dass die shack-tuere nur unverschlossen ist, das open/​close-monitoring basiert auf der annahme, dass die shack-tuere nur unverschlossen ist,
Zeile 7: Zeile 7:
 ===== abstract ===== ===== abstract =====
  
-der server erhaelt einen cron-job der alle 2 minuten ein cgi-script auf einem webserver aufruft, das wiederum eine flag-datei schreibt.+der server erhaelt einen cron-job der alle 2 minuten ein cgi-script auf einem webserver aufruft, das wiederum eine von zwei flag-dateien ​schreibt
 +welche flag-datei geschrieben wird, ist abhaengig davon, ob der status "​open"​ oder "​closed"​ uebermittelt wird.  
 +die jeweils nicht geschriebene flag-datei wird dabei geloescht.
 auf dem webserver wird jede minute geprueft, ob diese datei aelter als 3 minuten ist, in diesem falle wird sie geloescht. auf dem webserver wird jede minute geprueft, ob diese datei aelter als 3 minuten ist, in diesem falle wird sie geloescht.
  
-das cgi-script gibt bei aufruf ohne parameter ein pixel als gif zurueck, das abhaengig von der existenz der flagdatei ​gruen (vorhanden) ​oder rot (fehlt) ist.+das cgi-script gibt bei aufruf ohne parameter ein pixel als gif zurueck, das abhaengig von der existenz der flagdateien ​gruen (vorhanden,  offen),  
 +rot (vorhanden, closed) oder grau (fehlen) ist.
  
 dieses pixel wird vergroessert aus der passenden wiki-seite heraus aufgerufen dieses pixel wird vergroessert aus der passenden wiki-seite heraus aufgerufen
Zeile 155: Zeile 158:
 </​file>​ </​file>​
  
-der tuerstatus-vserver ​prueft ​alle 2 minuten ​per cronjob den zustand des tuerkontakts:​+die tuerstatus-kvm prueft ​jede minute ​per cronjob den zustand des tuerkontakts:​
  
 <file txt /​etc/​cron.d/​sopen-shack>​ <file txt /​etc/​cron.d/​sopen-shack>​
-0-59/* * * * nobody /​usr/​local/​app/​shackdoor/​sopen-client 2>&1 | logger+0-59/* * * * nobody /​usr/​local/​app/​shackdoor/​sopen-client 2>&1 | logger
 </​file>​ </​file>​
  
-sopen-client fragt den zustand der tuere ab und setzt bei geoeffneter tuere einen http-request an shackspace.de ab:+sopen-client fragt den zustand der tuere ab und setzt einen http-request an shackspace.de ab
 +der den zustand uebermittelt:
  
 <file txt /​usr/​local/​app/​shackdoor/​sopen-client>​ <file txt /​usr/​local/​app/​shackdoor/​sopen-client>​
 #!/bin/bash #!/bin/bash
 +
 +set -u 
 +
 +# closed loop (=closed door) is more reliable to detect.
 +# so, if there are $CHECKS checks in favour to the door 
 +# being closed, we might assume that this is the case.
 +
 +
 +CHECKS=20
  
 FLAG=0 FLAG=0
-for i in {1..20} ; do +for i in $( seq $CHECKS ); do 
         if [ x`/​usr/​local/​app/​shackdoor/​shackdoor /​dev/​ttyUSB0` = xDSR ] ; then         if [ x`/​usr/​local/​app/​shackdoor/​shackdoor /​dev/​ttyUSB0` = xDSR ] ; then
                 FLAG=$(( $FLAG + 1 ))                  FLAG=$(( $FLAG + 1 )) 
         fi         fi
 done done
 +echo FLAG=$FLAG
  
-if [ "​$FLAG"​ = ] ; then +if [ "​$FLAG" ​!"​$CHECKS" ​] ; then 
-         echo -e -n "GET /​sopen/​************ HTTP/​1.0\r\nHost:​ shackspace.de\r\n\r\n"​ | nc shackspace.de 80+         echo -e -n "GET /sopen/​open/​************ HTTP/​1.0\r\nHost:​ shackspace.de\r\n\r\n"​ | nc shackspace.de 80 
 +else  
 +         echo -e -n "GET /​sopen/​closed/​************ HTTP/​1.0\r\nHost:​ shackspace.de\r\n\r\n"​ | nc shackspace.de 80
 fi fi
 </​file>​ </​file>​
-da die erkennung der dsr-leitung nicht in jedem falle funktioniertwird sie mehrfach abgefragt+die erkennung der dsr-leitung ​funktioniert ​nicht in jedem falle zuverlaessiginsbesondere der  
-moegliche ursache koennte evtl. die leitungslaenge ​sein+zustand "tuere offen",​ bei dem die Leiterschleife geoeffnet ist, ist verrauscht, weil hochohmig
-      +das sieht dann so aus: 
 + 
 +{{http://​shackspace.de/​projects/​chris/​shack-status/​shackstatus-signal.gif}} 
 + 
 +die leitungslaenge ​macht das sicher nicht besser. daher wird der zustand mehrfach abgefragt
 ==== auf shackspace.de ==== ==== auf shackspace.de ====
  
Zeile 187: Zeile 208:
 #​!/​usr/​bin/​perl -Tw #​!/​usr/​bin/​perl -Tw
 # Thu Nov 29 17:52:13 CET 2012, chris # Thu Nov 29 17:52:13 CET 2012, chris
 +# Wed Jan  7 11:35:36 CET 2015, chris
 +# - added three-state display
 +
 # - Doku hier: # - Doku hier:
 # - http://​shackspace.de/​wiki/​doku.php?​id=shack_open_close_monitor # - http://​shackspace.de/​wiki/​doku.php?​id=shack_open_close_monitor
Zeile 192: Zeile 216:
 use strict; use strict;
  
-my $uri = "/​sopen/​************";​+my $uri_c = "/​sopen/closed/**********";​ 
 +my $uri_o = "/​sopen/​open/​**********";​
 my $uri_text_de = "/​sopen/​text/​de";​ my $uri_text_de = "/​sopen/​text/​de";​
 my $uri_text_en = "/​sopen/​text/​en";​ my $uri_text_en = "/​sopen/​text/​en";​
Zeile 207: Zeile 232:
  
 # korrekte uri setzt flag file # korrekte uri setzt flag file
-$request_uri eq $uri and do {+$request_uri eq $uri_o and do {
  open F,">"​.$statfilename or die "​can'​t open '​$statfilename':​ $!";  open F,">"​.$statfilename or die "​can'​t open '​$statfilename':​ $!";
- print F time ,"​\n";​+ print F time ," ​OPEN\n";
  close F;  close F;
  -e $trackfilenameon or do {  -e $trackfilenameon or do {
Zeile 218: Zeile 243:
  -e $trackfilenameoff and do {  -e $trackfilenameoff and do {
  unlink $trackfilenameoff;​  unlink $trackfilenameoff;​
 + };
 +
 + print "​Content-Type:​ text/​plain\n\n1\n";​
 + exit;
 +};
 +# else if
 +$request_uri eq $uri_c and do {
 + open F,">"​.$statfilename or die "​can'​t open '​$statfilename':​ $!";
 + print F time ," CLOSED\n";​
 + close F;
 + -e $trackfilenameon and do {
 + unlink $trackfilenameon;​
 + };
 + -e $trackfilenameoff or do {
 + open F,">"​.$trackfilenameoff or die "​can'​t open '​$trackfilenameoff':​ $!";
 + print F time ,"​\n";​
 + close F;
  };  };
  
Zeile 226: Zeile 268:
 $request_uri eq $uri_text_de and do { $request_uri eq $uri_text_de and do {
  print "​Content-Type:​ text/​plain\n\n";​  print "​Content-Type:​ text/​plain\n\n";​
- -f $statfilename ​and do {+ -f $trackfilenameon ​and do {
  print "​offen\n";​  print "​offen\n";​
- } or do { + } or -f $trackfilenameoff and do {
  print "​geschlossen\n";​  print "​geschlossen\n";​
 + } or do { 
 + print "keine Daten\n";​
  };  };
  exit;  exit;
Zeile 236: Zeile 280:
 $request_uri eq $uri_text_en and do { $request_uri eq $uri_text_en and do {
  print "​Content-Type:​ text/​plain\n\n";​  print "​Content-Type:​ text/​plain\n\n";​
- -f $statfilename ​and do {+ -f $trackfilenameon ​and do {
  print "​open\n";​  print "​open\n";​
- } or do { + } or -f $trackfilenameoff and do {
  print "​closed\n";​  print "​closed\n";​
 + } or do { 
 + print "no data\n";​
  };  };
  exit;  exit;
Zeile 246: Zeile 292:
 $request_uri eq $uri_img_png and do { $request_uri eq $uri_img_png and do {
  print "​Content-Type:​ image/​png\n\n";​  print "​Content-Type:​ image/​png\n\n";​
- -f $statfilename ​and do {+ -f $trackfilenameon ​and do {
  # pixel gruen  # pixel gruen
  print ​  print ​
Zeile 259: Zeile 305:
  "​\0\0\0\7\164\111\115\105\7\333\13\27\7\64\73\1\135\24\55\0\0\0",​  "​\0\0\0\7\164\111\115\105\7\333\13\27\7\64\73\1\135\24\55\0\0\0",​
  "​\0\111\105\116\104\256\102\140\202";​  "​\0\111\105\116\104\256\102\140\202";​
- } or do { + } or -f $trackfilenameoff and do {
  # pixel rot  # pixel rot
  print  print
Zeile 272: Zeile 318:
  "​\115\105\7\333\13\27\7\65\17\71\362\321\331\0\0\0\0\111\105\116",​  "​\115\105\7\333\13\27\7\65\17\71\362\321\331\0\0\0\0\111\105\116",​
  "​\104\256\102\140\202";​  "​\104\256\102\140\202";​
 + } or do {
 + # pixel grey
 + print
 + "​\211\120\116\107\15\12\32\12\0\0\0\15\111\110\104\122\0\0\0\1\0",​
 + "​\0\0\1\1\3\0\0\0\45\333\126\312\0\0\0\4\147\101\115\101\0\0\261",​
 + "​\217\13\374\141\5\0\0\0\3\120\114\124\105\177\177\177\220\312\33",​
 + "​\43\0\0\0\70\164\105\130\164\123\157\146\164\167\141\162\145\0\130",​
 + "​\126\40\126\145\162\163\151\157\156\40\63\56\61\60\141\40\40\122",​
 + "​\145\166\72\40\61\62\57\62\71\57\71\64\40\50\120\116\107\40\160\141",​
 + "​\164\143\150\40\61\56\62\51\335\25\56\111\0\0\0\12\111\104\101\124",​
 + "​\10\231\143\140\0\0\0\2\0\1\364\161\144\246\0\0\0\7\164\111\115\105",​
 + "​\7\337\1\7\13\12\35\32\267\176\341\0\0\0\0\111\105\116\104\256\102",​
 + "​\140\202";​
  };  };
  exit;  exit;
Zeile 278: Zeile 337:
 $request_uri eq $uri_imgtxt_png and do { $request_uri eq $uri_imgtxt_png and do {
  print "​Content-Type:​ image/​png\n\n";​  print "​Content-Type:​ image/​png\n\n";​
- -f $statfilename ​and do {+ -f $trackfilenameon ​and do {
  # image text gruen  # image text gruen
  print ​  print ​
Zeile 312: Zeile 371:
  ;  ;
  #perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\n"​}'​ ~chris/​open.png  #perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\n"​}'​ ~chris/​open.png
- } or do { + } or -f $trackfilenameoff and do {
  # image text rot  # image text rot
  print  print
Zeile 349: Zeile 408:
  "​\102\140\202",​  "​\102\140\202",​
  ;  ;
- # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}' ​~chris/​closed.png+ } or do { 
 + # image text grey 
 + print 
 + "​\211\120\116\107\15\12\32\12\0\0\0\15\111\110",​ 
 + "​\104\122\0\0\0\72\0\0\0\25\10\3\0\0",​ 
 + "​\0\40\237\15\371\0\0\0\4\147\101\115\101\0",​ 
 + "​\0\261\217\13\374\141\5\0\0\0\146\120\114\124",​ 
 + "​\105\172\172\172\176\176\176\203\203\203\204\204\204\210",​ 
 + "​\210\210\215\215\215\223\223\223\227\227\227\230\230\230",​ 
 + "​\235\235\235\240\240\240\245\245\245\251\251\251\255\255",​ 
 + "​\255\260\260\260\266\266\266\271\271\271\274\274\274\303",​ 
 + "​\303\303\305\305\305\314\314\314\316\316\316\324\324\324",​ 
 + "​\327\327\327\331\331\331\337\337\337\340\340\340\344\344",​ 
 + "​\344\351\351\351\355\355\355\362\362\362\364\364\364\373",​ 
 + "​\373\373\377\377\377\250\34\47\121\0\0\0\70\164",​ 
 + "​\105\130\164\123\157\146\164\167\141\162\145\0\130\126",​ 
 + "​\40\126\145\162\163\151\157\156\40\63\56\61\60\141",​ 
 + "​\40\40\122\145\166\72\40\61\62\57\62\71\57\71",​ 
 + "​\64\40\50\120\116\107\40\160\141\164\143\150\40\61",​ 
 + "​\56\62\51\335\25\56\111\0\0\0\360\111\104\101",​ 
 + "​\124\70\215\355\121\313\162\302\60\14\124\36\206\72",​ 
 + "​\61\204\330\111\234\30\374\320\377\377\144\245\200\11",​ 
 + "​\320\366\322\351\364\304\36\74\132\215\326\273\262\1",​ 
 + "​\336\310\160\366\117\244\107\54\177\57\55\276\16\134",​ 
 + "​\106\23\103\107\105\241\3\272\346\332\54\207\20\65",​ 
 + "​\113\305\30\222\255\100\42\242\7\250\47\237\346\152",​ 
 + "​\223\46\55\7\224\0\66\235\224\345\202\260\244\256",​ 
 + "​\165\110\122\65\311\66\116\120\366\270\27\0\207\111",​ 
 + "​\66\161\313\162\161\144\210\75\354\120\21\73\73\356",​ 
 + "​\355\271\256\322\155\310\370\307\135\7\377\20\230\216",​ 
 + "​\250\241\105\301\143\221\173\12\353\333\256\107\117\121",​ 
 + "​\103\336\65\263\27\351\352\132\144\127\312\135\122\64",​ 
 + "​\201\247\142\275\356\300\256\167\366\44\65\353\256\255",​ 
 + "​\305\353\73\55\101\311\231\166\255\320\210\46\4\276",​ 
 + "​\254\357\152\142\273\46\276\112\65\71\232\200\347\374",​ 
 + "​\302\143\214\206\3\53\237\226\201\207\373\350\77\230",​ 
 + "​\315\303\26\370\107\174\363\221\157\374\33\76\1\352",​ 
 + "​\14\23\160\224\41\237\53\0\0\0\7\164\111\115",​ 
 + "​\105\7\337\1\7\13\67\50\46\354\362\174\0\0",​ 
 + "​\0\0\111\105\116\104\256\102\140\202",​ 
 +
 + # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}' ​nodata.png
  };  };
  exit;  exit;
Zeile 356: Zeile 456:
 $request_uri eq $uri_imgtxt_gif and do { $request_uri eq $uri_imgtxt_gif and do {
  print "​Content-Type:​ image/​gif\n\n";​  print "​Content-Type:​ image/​gif\n\n";​
- -f $statfilename ​and do {+ -f $trackfilenameon ​and do {
  # image text gruen  # image text gruen
  print ​  print ​
Zeile 441: Zeile 541:
  ;  ;
  # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}'​ ~chris/​open.gif  # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}'​ ~chris/​open.gif
- } or do { + } or -f $trackfilenameoff and do {
  # image text rot  # image text rot
  print  print
Zeile 531: Zeile 631:
  ;  ;
  # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}'​ ~chris/​closed.gif  # perl -e '​$/​="";​$c=0;​for (split //,<>​) { printf "​\\%o",​ord($_);​ ++$c%14 or print "​\",​\n\t\t\t\""​}'​ ~chris/​closed.gif
 + } or do {
 + # image text grey
 + print
 + "​\107\111\106\70\71\141\72\0\25\0\366\120\0\172",​
 + "​\172\172\173\173\173\176\176\176\177\177\177\200\200\200",​
 + "​\201\201\201\203\203\203\204\204\204\207\207\207\210\210",​
 + "​\210\213\213\213\215\215\215\216\216\216\223\223\223\226",​
 + "​\226\226\227\227\227\230\230\230\233\233\233\235\235\235",​
 + "​\237\237\237\240\240\240\243\243\243\245\245\245\247\247",​
 + "​\247\250\250\250\251\251\251\253\253\253\255\255\255\256",​
 + "​\256\256\260\260\260\263\263\263\265\265\265\266\266\266",​
 + "​\270\270\270\271\271\271\272\272\272\274\274\274\275\275",​
 + "​\275\276\276\276\303\303\303\304\304\304\305\305\305\306",​
 + "​\306\306\307\307\307\310\310\310\313\313\313\314\314\314",​
 + "​\315\315\315\316\316\316\320\320\320\321\321\321\324\324",​
 + "​\324\326\326\326\327\327\327\331\331\331\334\334\334\337",​
 + "​\337\337\340\340\340\341\341\341\342\342\342\343\343\343",​
 + "​\344\344\344\351\351\351\354\354\354\355\355\355\356\356",​
 + "​\356\357\357\357\361\361\361\362\362\362\363\363\363\364",​
 + "​\364\364\365\365\365\366\366\366\367\367\367\370\370\370",​
 + "​\371\371\371\373\373\373\374\374\374\375\375\375\376\376",​
 + "​\376\377\377\377\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\0\0\0\0\0\0\0\0\0",​
 + "​\0\0\0\0\0\41\371\4\0\0\0\0\0\54",​
 + "​\0\0\0\0\72\0\25\0\0\7\376\200\0\202",​
 + "​\203\204\205\206\207\210\211\212\213\214\215\216\217\220",​
 + "​\221\222\223\224\225\226\212\71\65\227\233\211\231\212",​
 + "​\35\120\6\234\222\236\211\240\2\221\76\60\51\106",​
 + "​\104\40\203\2\47\104\120\71\24\206\6\56\104\106",​
 + "​\47\245\13\60\104\114\65\7\0\22\120\306\100\202",​
 + "​\11\63\100\114\66\303\207\76\114\47\22\56\120\22",​
 + "​\202\65\114\42\31\65\326\205\70\114\40\26\71\120",​
 + "​\232\0\31\63\22\26\106\63\0\6\44\120\17\13",​
 + "​\202\33\351\24\106\346\206\76\71\202\2\120\44\0",​
 + "​\32\100\311\60\250\7\277\101\17\6\12\72\20\314",​
 + "​\120\12\144\0\100\211\62\344\2\242\76\30\203\166",​
 + "​\1\260\0\145\236\40\126\204\62\100\111\60\250\124",​
 + "​\7\40\306\240\20\21\164\152\320\311\224\53\241\141",​
 + "​\24\244\121\40\101\0\2\14\22\112\170\315\35\76",​
 + "​\0\13\240\210\100\5\22\300\206\120\202\202\16\5",​
 + "​\120\364\142\306\24\330\264\131\350\146\213\20\16\42",​
 + "​\31\44\330\50\7\340\0\224\24\13\50\20\211\231",​
 + "​\220\4\210\4\136\123\64\270\147\4\221\252\214\61",​
 + "​\47\372\245\230\325\243\52\41\3\60\214\30\111\121",​
 + "​\52\3\63\34\56\332\12\42\141\4\10\204\163\314",​
 + "​\154\344\32\165\10\25\343\307\220\43\113\236\114\271",​
 + "​\262\345\313\230\55\5\2\0\73",​
 + ;
  };  };
  exit;  exit;
Zeile 536: Zeile 692:
 # else  # else 
 print "​Content-Type:​ image/​gif\n\n";​ print "​Content-Type:​ image/​gif\n\n";​
--f $statfilename ​and do {+-f $trackfilenameon ​and do {
  # pixel gruen  # pixel gruen
  print "​GIF87a\001\0\001\0\200\0\0\0\377\0\0\0\0,​\0\0\0\0\001\0\001\0\0\002\002D\001\0;";​  print "​GIF87a\001\0\001\0\200\0\0\0\377\0\0\0\0,​\0\0\0\0\001\0\001\0\0\002\002D\001\0;";​
 + exit;
 +} or -f $trackfilenameoff and do {
 + # pixel rot
 + print "​GIF87a\001\0\001\0\200\0\0\377\0\0\0\0\0,​\0\0\0\0\001\0\001\0\0\002\002D\001\0;";​
  exit;  exit;
 }; };
 # else # else
-# pixel rot +# pixel grau 
-print "​GIF87a\001\0\001\0\200\0\0\377\0\0\0\0\0,​\0\0\0\0\001\0\001\0\0\002\002D\001\0;";​+print "​GIF87a\001\0\001\0\200\0\0\177\177\177\0\0\0,​\0\0\0\0\001\0\001\0\0\002\002D\001\0;";​
 </​file>​ </​file>​
  
-dieser cronjob wirft ''/​var/​run/​sopen/​stat''​ weg, wenn die datei aelter als 3 minuten ist:+dieser cronjob wirft ''/​var/​run/​sopen/​stat'',​ ''/​var/​run/​sopen/​track-on''​ und ''/​var/​run/​sopen/​track-off''​ weg, wenn ''/​var/​run/​sopen/​stat'' ​aelter als 3 minuten ist:
 ''/​etc/​cron.d/​sopen'':​ ''/​etc/​cron.d/​sopen'':​
 <file txt /​etc/​cron.d/​sopen>​ <file txt /​etc/​cron.d/​sopen>​
-* * * * * www-data /​usr/​bin/​perl -e '$s = "/​var/​run/​sopen/​stat";​ [stat $s]->[9] + 180 < time and unlink $s'+     ​* * * www-data /​usr/​bin/​perl -e '$s = "/​var/​run/​sopen/​stat";​ [stat $s]->[9] + 180 < time and do { unlink $s, "/​var/​run/​sopen/​track-on",​ "/​var/​run/​sopen/​track-off"​ };'
 </​file>​ </​file>​
  
Zeile 601: Zeile 761:
  
 [0] als content-type wird "​text/​plain"​ uebermittelt [0] als content-type wird "​text/​plain"​ uebermittelt
 +
 +===== Kabelweg =====
 +
 +Die Leitung verlaeuft von der Zuhaltung der Eingangstuere am
 +Tuerrahmen nach oben, ueber den Tuerrahmen, an die Decke, durch die Wand
 +zum Lager, im Lager links, oben unter der Decke ans Fenster, dort nach
 +unten bis auf Hoehe des Fensterbankkanals. Hier ist ein db9-Stecker[0]
 +angeloetet, in den ein hellblaues Cisco-Console-Kabel eingesteckt ist,
 +dessen RJ45-Stecker in eine Netzwerkdose im Fensterbankkanal
 +eingesteckt ist. Im RZ kommt die Leitung auf einem Patchfeld wieder raus,
 +es folgen ein LAN-Kabel, ein weiteres hellblaues Cisco-Console-Kabel sowie ein 
 +USB/​RS232-Adapter,​ der schliesslich im linken Rack in den KVM-Host (Name?):
 +eingesteckt ist.
 +
 +Pix: 
 +  * http://​shackspace.de/?​s=shack_open_close_monitor
 +  * http://​shackspace.de/​projects/​chris/​shack-status
 +
 +===== Debugging =====
 +
 +[0] Der db9-Stecker waere der erste Pruefpunkt fuer die Messung des
 +Tuerkontakts:​
 +
 +Abziehen, Widerstand an den Leitungen messen
 +  * Tuer auf: Widerstand unendlich
 +  * Tuer zu: Widerstand nahe null
 +
 +Fuer die Funktion Richtung Server:
 +* db9-Stecker wieder einstecken und (nur!) die beiden Leitungen kurzschliessen. Der Tuerstatus sollte innerhalb 3 Minuten reagieren. ​
 +
 +Auf dem KVM-Host (Name?):
 +* ist der USB/​RS232-Adapter ueberhaupt am USB sichtbar?
 +* ist das USB-Device dort vorhanden?
 +* ist das USB-Device der KVM zugaenglich gemacht?
 +
 +Auf der KVM-Instanz "​tuerstatus":​
 +* ist ''/​dev/​ttyUSB0''​ vorhanden
 +* hat ''/​dev/​ttyUSB0''​ die Device-IDs "188, 0"
 +* ist ''/​dev/​ttyUSB0''​ world-readable
 +* ''​while sleep 1 ; do /​usr/​local/​app/​shackdoor/​shackdoor /​dev/​ttyUSB0;​ done''​ liefert bei geschlossener Tuere "​DSR",​ bei offener Tuere Leerzeilen
  
 (idee und drehbuch: chris) (idee und drehbuch: chris)
shack_open_close_monitor.txt · Zuletzt geändert: 2015/01/07 21:45 von chris