mr_door_status

December 8th, 2011 § 3 comments § permalink

Schloss, Schalter, Arduino, Ethernet-Shield, Twitter
www.twitter.com/mr_door_status
http://mrdoor.paddd.de/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CODE:

#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>
#include <EthernetDHCP.h>
#include <Twitter.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const char* ip_to_str(const uint8_t*);
int state = 1; //door will be open at boot!!!
int sensorValue = 0;

Twitter twitter("your-token-here");

void setup() {
  Serial.begin(9600);
  network();
}

void network() {
  Serial.println("attempting to obtain DHCP lease...");
  EthernetDHCP.begin(mac);

  const byte* ipAddr = EthernetDHCP.ipAddress();
  const byte* gatewayAddr = EthernetDHCP.gatewayIpAddress();
  const byte* dnsAddr = EthernetDHCP.dnsIpAddress();
  
  Serial.println("DHCP lease has been obtained.");

  Serial.print("IP address is ");
  Serial.println(ip_to_str(ipAddr));
  
  Serial.print("gateway IP address is ");
  Serial.println(ip_to_str(gatewayAddr));
  
  Serial.print("DNS IP address is ");
  Serial.println(ip_to_str(dnsAddr));
}


// Just a utility function to nicely format an IP address.
const char* ip_to_str(const uint8_t* ipAddr) {
  static char buf[16];
  sprintf(buf, "%d.%d.%d.%d", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
  return buf;
}

void loop() {
  door_status();
  EthernetDHCP.maintain();
  randomSeed(millis());
}

void door_status() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  
  if(sensorValue>915 && state==1){
    delay(3000);
    int sensorValue = analogRead(A0);
    if(sensorValue>915 && state==1){
      delay(3000);
      int sensorValue = analogRead(A0);
      if(sensorValue>915 && state==1){
        state=0;
        tweet(state);
      }
    }
  } 
  if(sensorValue<916 && state==0) {
    delay(3000);
    int sensorValue = analogRead(A0);
    if(sensorValue<916 && state==0) {
      delay(3000);
      int sensorValue = analogRead(A0);
      if(sensorValue<916 && state==0) {
        state=1;
        tweet(state);
      }
    }
  }
  //update margin
  delay(10000);
}

void tweet(int state) {
  if(state==1) {
    
    int rand = random(5000);
    char txt [120];
    sprintf(txt, "der maschinenraum ist offen No. %d", state);
    
    Serial.println("connecting to twitter...");
    if (twitter.post(txt)) {
      int status = twitter.wait();
      if (status == 200) {
        Serial.println("status tweet OPEN sent.");
      } else {
        Serial.print("tweet failed : code ");
        Serial.println(status);
      }
    } else {
    Serial.println("connection to twitter failed.");
    setup();
    }
    
  }  
  
  if(state==0) {
    
    int rand = random(5000);
    char txt [120];
    sprintf(txt, "der maschinenraum ist geschlossen No. %d", state);
    
    
    Serial.println("connecting to twitter...");
    if (twitter.post(txt)) {
      int status = twitter.wait();
      if (status == 200) {
        Serial.println("status tweet CLOSED sent.");
      } else {
        Serial.print("tweet failed : code ");
        Serial.println(status);
      }
    } else {
    Serial.println("connection to twitter failed.");
    setup();
    }
  }
}

World Usability Day

October 24th, 2011 § 1 comment § permalink

Am 11.11.11, ab 10:00 gibt es in der M18 eine kleine "unconference" zum World Usability Day. Es wird nicht nur um klassische Usability gehen – Produktdesign, Nutzerforschung, Interaktionsdesign, Human Centered Design, Services, Informationsarchitektur und Architektur (solche zum anfassen!) werden auch ihren Platz finden.

Soweit zum Thema. Bleibt "unconference" zu klären. Die Wikipedia meint zu dem Format: "there is no agenda until... the attendees made one up." Sprich: Wer von den Anwesenden eine Diskussionsrunde, einen Workshop leiten oder einen Vortrag geben möchte sei dazu aufgerufen, genau das zu tun. (Vorträge sollten ca. 20 Minuten lang sein, damit Platz für Fragen und Diskussion bleibt)
Dass das Konzept funktioniert zeigen z.B. das EduCamp und das UXCamp Europe.

Also: kommet zahlreich, bringt Ideen mit.

UPDATE:

Wir freuen uns ankündigen zu dürfen, dass Prof. Dr. Bernhard Klein gegen 11 Uhr einen Vortrag über "usability in urban design" halten wird. Auch Prof. Jay Rutherford ist mit dabei.

UPDATE 2:

...und trägt um 14:00 zu "Core Competencies in Information Design" vor.

Anmeldung, Fragen:   wud@m18.uni-weimar.de

world usability day

Pure Data Convention

August 5th, 2011 § 0 comments § permalink

Nächste Woche ist das 4te Treffen der Künstler und Programmierer der Pure Data Convention. Der Maschinenraum wird versuchen dabei unterstützend als Ort zum Quatschen, Chillen und Mate-Trinken zu fungieren.
Natürlich gibt es wie immer die Möglichkeit sich der Realität zu Entziehen, Musik zu hören, Ideen zu tauschen oder einfach nur E-Mails zu checken.

Die wichtigsten Infos gibts hier.

youtube-dl-agent

January 22nd, 2011 § 3 comments § permalink

youtube-dl-agent laedt eine liste von youtube-videos mit youtube-dl runter, konvertiert sie mit ffmpeg und fuegt sie mit mencoder zusammen. gedacht fuer splited youtube-videos.

usage:

$ youtube-dl-agent http://www.youtube.com/watch?v=Qpwj5k0zYDs \
http://www.youtube.com/watch?v=XCyXY4jLxo8 \
http://www.youtube.com/watch?v=BwJUV8vvGyA \
http://www.youtube.com/watch?v=xQuyiMravE4 \
--output="Weimar nach der Wende.avi"
#!/bin/bash

case "$1" in

  "" )
      exit $E_PARAM ;
  ;;

  * )
    TEMPPATH=$PWD"/youtube-dl-agent.swap/";
    mkdir $TEMPPATH;
    cd $TEMPPATH;

    for i in "$@"
    do
      case "$i" in
        http://* )
            URL=`echo $i`;
            echo " * * * "$URL" * * *";

            ###
            # DOWNLOAD FLV WITH YOUTUBE-DL
            /usr/local/bin/youtube-dl -t $URL

            ###
            # FIND DOWNLOADED FLV FILE BY ID
            ID=`echo $URL | /bin/sed -r 's/.*v=(.*)$/\1/'`;
#            echo $ID;
            IDS=$IDS$ID" ";

            FLV=`/usr/bin/find $PWD"/" -maxdepth 1 -name "*$ID.flv"`;
#            echo $FLV;
            FLVS=$FLVS$FLV" ";

            ###
            # COVERT FLV TO AVI
            /usr/bin/ffmpeg -i $FLV -vcodec copy \
            -acodec libmp3lame -ab 128k $FLV".avi"

            AVI=`/usr/bin/find $PWD"/" -maxdepth 1 \
            -name "*$ID*.avi"`;
#            echo $AVI
            AVIS=$AVIS$AVI" ";
        ;;

        # STRINGS WITH WHITESPACES HAVE TO BE
        # ENCAPSULATE WITH DOUBLE QUOTES
        --output=* )
            OUTPUT=`echo $i | sed 's/--output=//'`;
        ;;

        * )
            exit $E_PARAM ;
        ;;

      esac
    done
  ;;

esac

###
# MERGE SPLIT AVIS
/usr/bin/mencoder -ovc copy -oac copy $AVIS -o $OUTPUT

###
# MOVE FROM TEMP-DIR TO $USERS PWD
/bin/mv -v $OUTPUT ..

###
# CLEAN UP
/bin/rm -rv $TEMPPATH

exit 0

irgendwas bei 350 zeilen interface fuer einen one-liner

November 26th, 2010 § 3 comments § permalink

erinnert ihr euch an mein problem? das konnte ich nun doch sehr elegant loesen:

ed@mediathek:~$ find Media/Movies/ -name "*.nfo" -print0 | \
  xargs -0  egrep -i -c -e "countr.*dd|genre.*sci-fi|year.*196" | \
  grep ":3" | sort | sed 's/:3//'
Media/Movies/Der Schweigende Stern (1960)/\
  Der Schweigende Stern (1960).nfo
Media/Movies/First Spaceship on Venus (1962)/\
  First Spaceship on Venus (1962).nfo

und bevor ich das rausfand wurde mir im irc noch gesagt, ich koennte keine scheisse aufpolieren und solle das lieber in perl oder besser noch in python programmieren! und am ende habe ich es doch in einem one-liner untergebracht :P

damit das auch nachhaltig ist und benutzbar bleibt, habe ich mir das ziel gesetzt, nun auch in der bash das interface zuprogrammieren. nach ganz viel case-voodoo wird am ende auch nur wieder

 /usr/bin/find $DIR -type f -name "*.nfo" -print0 | \
  xargs -0 egrep -c -i -e "$EXPRESSION" | \
  grep ":$COUNTER" | sort | \
  sed 's/:'$COUNTER'//' | sed -r 's/^.*\/(.*)\/.*/\1/'

ausgefuehrt. in der benutzung sieht das dann z.b. so aus:

ed@mediathek:~$ mediathek-cli-search --country=dd --genre=sci-fi \
  --year=196
Der Schweigende Stern (1960)
First Spaceship on Venus (1962)

# link zum source von extern und von intern

die man-page und die bash-completion bau ich dann morgen oder so...

ed@mediathek:~$ mediathek-cli-search 
USAGE:
 mediathek-cli-search [OPTION=VALUE]...

OPTIONS: 
 --help
 --title
 --orignaltitle
 --alternativetitle
 --englishtitle
 --germantitle
 --year
 --country
 --director
 --genre
 --length 
 --dub 
 --sub
 --subfiles
 --source
 --videoformat 
 --resolution
 --aspectratio

EXAMPLES:
 mediathek-cli-search --help=OPTION
 mediathek-cli-search --country=dd --genre=sci-fi
 mediathek-cli-search --country=jp --genre=action \
   --year=199
 mediathek-cli-search --director=vertov
 mediathek-cli-search --dub=en --subfiles=de \
   --genre=horror

seit stunden droehnt der inhalt des goldenen doeschen (neben dem auch der benjamin liegt) in mein hirn und psychodelischer trance (den marv mitgebracht hat) in mein ohr.

Where Am I?

You are currently browsing the Projekt category at maschinenraum.