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.

Retro-Party

March 23rd, 2011 § 1 comment § permalink

in der M18 (Marienstraße 18 Weimar) am 2.4.11 21.00 Uhr.
Die Retro-Party wird eine Mischung aus 8-/16-Bit-Zockerei und Chiptunes-Livemusik. 

Mit dabei:

– Timescratch (www.myspace.com/timescratchinyourhead)
– Bikecore (www.soundcloud.com/bikecore)
– Mister Triac (www.myspace.com/mistertriac)

Unter anderem stehen folgende Konsolen und Rechner bereit, um ausgiebig bespielt zu werden: NES, C64, KC85, Atari 2600, Master System, Atari 7800, MSX(2), Interton VC4000, MB Vectrex, SNES, Mega Drive, Amiga und einiges mehr.

Zu trinken gibt es SpaßMate!
be there or be square

ssh ip/subnet controlling

February 19th, 2011 § 0 comments § permalink

Mit dem SSH-Server kann ein Unix Administrator den Zugriff auf das Gerät für seine User mit verschiedenen Methoden ermöglichen bzw. einschränken. Im Unix System Administration Handbook werden dazu auf Seite 673ff vier Methoden beschrieben, wie Schlüssel- und Passwortauthentifikation oder veraltete (weil unsichere) /etc/hosts.equiv Regeln, die den meisten aber bekannt sein sollten. Wer tippt schon gerne selber Passwörter ein, wenn man die Maschinen einfach die Schlüssel abgleichen lassen kann?

Welche Möglichkeiten hat man nun aber,wenn man den Zugang nur aus einem exklusiven Subnet ermöglichen möchte? Z.B. der eines Intranet wie 192.168.1.0/24 oder bspw. dem Subnet des SCC 141.54.0.0/16.

Dafür muss die PAM-Konfiguration für SSH unter /etc/pam.d/sshd angepasst werden:

account    required    pam_access.so

Danach können unter /etc/security/access.conf verschiedenste Regeln definiert werden. Von wo, wie und auf welchem Terminal sich ein User anmelden darf wird dort reglementiert.

In der Frage nach zulässigen Netzen von denen aus man sich verbinden möchte, sieht eine mögliche Regel für access.conf nun wie folgt aus:

+ : ALL : 141.54.0.0/16 192.168.1.0/24
- : ALL : ALL