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();
    }
  }
}

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

Where Am I?

You are currently browsing the howto category at maschinenraum.