Im Space Bot: Unterschied zwischen den Versionen

Aus /dev/tal
Wechseln zu: Navigation, Suche
(Serviceding statt Nagios, Strike!)
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
{{ProjektInfoBox
 
{{ProjektInfoBox
 
|name        = Space-Status
 
|name        = Space-Status
|status      = beta
+
|status      = stable
 
|image      =  
 
|image      =  
 
|description = Info/API ob der Raum aktuell geöffnet ist
 
|description = Info/API ob der Raum aktuell geöffnet ist
 
|author      = thoto
 
|author      = thoto
 
|username    = thoto
 
|username    = thoto
|version    = 201411-1
+
|version    = 201708-2
|update      = 201609-1
+
|update      = 201708-2
|platform    = Linux/Nagios/PHP
+
|platform    = Linux/Shellskript/PHP
|license    =  
+
|license    = GPLv3
|download    =  
+
|download    = https://github.com/devtal-de/statespace
 
}}
 
}}
  
= Realisierung seit November 2014 =
+
== Funktionsweise ==
  
Da aus unten angegebenen Projekten nichts wurde, prüft nun das Serviceding (bis 2017-07-22 das Nagios) via Cron-Job ob der ZyXEL-Switch im /dev/tal eingeschaltet ist (ehemals Portstatus an übergeordnetem Switch via SNMP, seit 2016 via ICMP-Ping) und aktualisiert den Status auf <code>moon.devtal.de</code>.
+
Das Serviceding (bis 2017-07-22 das Nagios) prüft via Cron-Job ob der ZyXEL-Switch im /dev/tal eingeschaltet ist (ehemals Portstatus an übergeordnetem Switch via SNMP, seit 2016 via ICMP-Ping) und aktualisiert den Status auf <code>moon.devtal.de</code>.
  
 +
== API ==
 
Zur Abfrage sollte aktuell die URL <code>https://devtal.de/~thoto/statespace/state.php</code> verwendet werden. Es wird "closed" oder "open" zurückgeliefert. Sollte sich die API ändern, wird es kurzzeitig etwas anderes liefern.
 
Zur Abfrage sollte aktuell die URL <code>https://devtal.de/~thoto/statespace/state.php</code> verwendet werden. Es wird "closed" oder "open" zurückgeliefert. Sollte sich die API ändern, wird es kurzzeitig etwas anderes liefern.
  
----
 
<strike>
 
= Alte Ideen aus denen nix geworden ist =
 
 
(Methode mit einer großen Pilztaste)
 
 
== Hintergrund & Funktion ==
 
 
Da zur Zeit eine Möglichkeit gesucht wird um auf der Webseite anzuzeigen ob der Space offen ist, wurde das Thema am 06.01.12 besprochen.
 
Wir sind auf die Idee gekommen einen Notaus Knopf zu nutzen, an dem wir 2 Status LEDs befestigen. Diese schliessen wir an einen Arduino + Ethernet Shield an. Der Arduino schickt dann jeweils über das Internet an unseren Server ein "open" oder "closed" Signal. Frage ist noch, ob mit dem Notaus Knopf auch der Strom für den Space abgeschaltet wird.
 
 
== Hardware ==
 
 
* Arduino UNO
 
* Ethernet Shield W5100
 
* Notaus Pilztaste (wie [http://www.ebay.de/itm//180782231771 hier] => Schon da!)
 
* 2 LED (rot und grün)
 
* Widerstände (1x 10k Ohm und 2x 220 Ohm)
 
* 5V Netzteil
 
* Kabel
 
 
== Status ==
 
 
* Hardware habe ich zu Hause schon auf einem Breadboard aufgebaut (Ohne Notaus Knopf, aber mit einem Schalter)
 
* Code ist fertig
 
* Daten gehen nicht direkt an den /dev/tal e.V. Server, sondern erst an [https://pachube.com/ pachube.com] von dort aus per API auf unsere Seite
 
 
== To Do ==
 
 
* Fotos, Code und Schaltpläne uploaden ('''Wo ?''')
 
 
== Wen fragen ? ==
 
 
[[Benutzer:Scirocco|Scirocco]]
 
 
== Die Lösung á la solo ==
 
 
Ich habe mich dann mal dem angeschlossen und alles Fertig gemacht, was nur noch angeschaft werden muss ist ein Arduino mit Ethernet Karte. Der Code ist von mir und ich hoffe das er verständlich ist. Es wird kein Drittanbieter genutzt und alle Daten bleiben bei /dev/tal.
 
 
Ich werde alle Fertigen scripts hier hinterlegen sobald das richtig plugin instaliert worden ist.
 
Bis dahin ist es hier erhältlich: http://etaoin.tk/~solo/dev-tal.tar.gz
 
 
Hier der Source für den Arduino:
 
 
 
<source lang="cpp">
 
/* Benötigte Libs müssen geladen werden */
 
#include <Ethernet.h>
 
#include <SPI.h>
 
/* MAC Adresse des Netzwerk controlers */
 
    byte mac_adr[] = { 0xAB, 0x13, 0x42, 0x37, 0xDE, 0xAD };
 
 
/* Server DNS Name von /dev/tal */
 
    char devtal_server[] = "dev-tal.de";
 
/* Lokale IP, muss nur benutzt werden, wenn kein DHCP genutzt werden soll. */
 
    byte ip_adr[] = { 192, 168, 1, 55 };
 
/* Verbindungsfehler */
 
    int verb_fail = 0;
 
/* Der Steckplatz des Button drückers */
 
    const int buttonPin = 1;
 
/* Steckplatz der Status LED */
 
    const int ledPin = 5;
 
 
EthernetClient client;
 
 
void setup() {
 
 
/* Fürs Debuging */
 
  Serial.begin(9600);
 
  Serial.println("Begin...");
 
/* Button eingabe definieren. */
 
  pinMode(buttonPin, INPUT);
 
/* IP Addresse via DHCP beziehen, wenn nicht bricht das Programm ab.
 
  Für eine Statische wird der aufruf Ethernet.begin(mac_adr, ip_adr) genutzt.*/
 
  if (Ethernet.begin(mac_adr) == 0) {
 
  Serial.println("Konnte keine MAC Adresse beziehen.");
 
  for(;;);
 
  }
 
delay(1500);
 
}
 
 
void loop() {
 
  for(;;) {
 
    if (digitalRead(buttonPin) == HIGH) {
 
    Serial.println("rufe Funktion zum aktualiesieren auf.");
 
    aktu();
 
    Serial.println("aktualiesiert");
 
    /* Warte 3 Minuten */
 
    delay(300000);
 
    }
 
    else {
 
      digitalWrite(ledPin, HIGH);
 
      delay(1000);
 
      digitalWrite(ledPin, LOW);
 
      delay(1000);
 
    }
 
     
 
 
 
}
 
   
 
   
 
void aktu() {
 
 
 
  if (client.connect(devtal_server, 80)) {
 
    Serial.println("In Bearbeitung...");
 
    client.println("GET /bin_da/update.php?status=1");
 
    client.println();
 
  }
 
 
 
  else {
 
    Serial.print("Konnte nicht mit dem Server verbinden, stimmen die Server Daten?");
 
    verb_fail++;
 
  }
 
 
 
 
  if (verb_fail == 3) {
 
    Serial.print("Arduino muss neugestartet um evtl. netzwerk probleme zu beseitigen...");
 
  }
 
 
 
 
 
  if (!client.connected()) {
 
    Serial.print ("schliesse verbindung");
 
    client.stop();
 
  }
 
}
 
 
 
</source>
 
 
Hier eine kleine globale config Datei für die "update.php" und "dev-tal.php" damit nur diese eine angepast werden muss:
 
(verbindung_mysql.php)
 
 
<source lang="php">
 
<?php
 
/* Der Nutzer der MySQL Datenbank  */
 
$mysql_user = "mysql_user";
 
/* Das Passwort des MySQL Nutzters */
 
$mysql_passwort = "user_password";
 
/*Der Host auf dem der MySQL server läuft */
 
$mysql_host = "mysql_host";
 
/* Die Datenbank die genutzt werden soll. */
 
$mysql_db = "mysql_datenbank";
 
/* Die Tabelle in der Datenbank die genutzt werden soll. */
 
$mysql_table = "mysql_tabelle";
 
 
 
/* Hier wird die verbindung hergestellt. */
 
 
$mysql_id = mysql_connect($mysql_host, $mysql_user, $mysql_passwd) or die("Konnte sich nicht mit dem MySQL Server verbinden");
 
mysql_select_db($mysql_id, $mysql_db) or die("Konnte die Datenbank nicht auswählen");
 
?>
 
</source>
 
 
Hier die Datei die auf dem Webserver zum Aktualiesieren genutzt wird:
 
 
 
<source lang="php">
 
<?php
 
include 'verbindung_mysql.php';
 
IF ($_GET['status'] == "1") {
 
$status = mysql_query("SELECT status FROM ".$mysql_tabelle);
 
IF ($status == "1") {
 
mysql_query("UPDATE ".$mysql_tabelle." SET status = 0, stunden = ".date(G).", minuten = ".date(i).";");
 
}
 
}
 
?>
 
</source>
 
 
 
Und nun das eigentliche sehr magere was den Nutzter folglich sieht:
 
 
 
<source lang="html" lang="php">
 
<html>
 
<head>
 
<?php 
 
/* Seitentitel */
 
$site_title = "/dev/tal Ich bin da!";
 
 
/* Externes Script laden für die Verbindung zum MySQL Server */
 
include verbindung_mysql.php;
 
 
/* Abruf der Daten */
 
 
$mysql_status = mysql_query("SELECT status FROM ".$mysql_tabelle) or die("Fehler bei dem Aufruf der Datenbank");
 
$mysql_minuten = mysql_query("SELECT minuten FROM ".$mysql_tabelle);
 
$mysql_stunden = mysql_query("SELECT stunden FROM ".$mysql_tabelle);
 
IF ($mysql_status == "1") {
 
IF(date(G) == $mysql_stunden) {
 
$tmp_min = date(i)-$mysql_minuten;
 
IF($tmp_min =< 5) {
 
$status = "1";
 
}
 
}
 
else {
 
$tmp_std = date(G)-1
 
IF($tmp_std == $mysql_stunden) {
 
$tmp_min = date(i) + 60
 
$tmp_min = date(i) - $mysql_minuten;
 
IF ($tmp_min =< 5) {
 
$status = "1";
 
}
 
}
 
}
 
 
?>
 
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
 
  <title><?php echo htmlspecialchars($site_title); ?></title>
 
</head>
 
<body>
 
<h1>/dev/tal ICH BIN DA!</h1>
 
<p><?php
 
IF ($status == "1") {
 
echo "Jemand ist im Space";
 
}
 
else {
 
echo "Keiner ist im Space";
 
}
 
?>
 
</P>
 
</body>
 
</html>
 
</source>
 
Einen Pilzförmiger Button muss nicht mehr besorgt werden ich bringe einen mit.
 
 
= Weitere Möglichkeiten =
 
* Tür-Sensorik
 
** kapazitive Messung mittels zweier dünner Metallplättchen
 
** induktive Messung mittels flacher Spulen
 
* Multi-Faktor-Messung
 
** Aktive Hosts
 
** Änderung des Stromverbrauches
 
** Licht
 
** Wärme/Luftfeuchtigkeit
 
** ...
 
 
== Wen fragen ? ==
 
</strike>
 
  
 
[[Kategorie:Projekt]]
 
[[Kategorie:Projekt]]

Aktuelle Version vom 17. September 2018, 18:50 Uhr

         
Space-Status

Release status: stable [box doku]

Description Info/API ob der Raum aktuell geöffnet ist
Author(s)  thoto
Last Version  201708-2 (201708-2)
Platform  Linux/Shellskript/PHP
License  GPLv3
Download  https://github.com/devtal-de/statespace







Funktionsweise

Das Serviceding (bis 2017-07-22 das Nagios) prüft via Cron-Job ob der ZyXEL-Switch im /dev/tal eingeschaltet ist (ehemals Portstatus an übergeordnetem Switch via SNMP, seit 2016 via ICMP-Ping) und aktualisiert den Status auf moon.devtal.de.

API

Zur Abfrage sollte aktuell die URL https://devtal.de/~thoto/statespace/state.php verwendet werden. Es wird "closed" oder "open" zurückgeliefert. Sollte sich die API ändern, wird es kurzzeitig etwas anderes liefern.