diff --git a/README.md b/README.md new file mode 100644 index 0000000..06cb652 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# KrautStatus + +This repository contains documentation and sources of KrautStatus. KrautStatus +is the n-th iteration of a software/hardware project to communicate whether +Jena's Krautspace is open or closed. + +KrautStatus consists of three components: an Arduino-sensor-combination at the +door, a Python script on a local server, and an API file served on by web +server. + +The Arduino broadcasts the current state of the door lock to our LAN. The state +is determined by a reed sensor in the door lock. In addition, it controls an +RGB LED matrix shield that provides a visual indication of the door locks's +state in the room. + +The python script polls the broadcast state and pushes changes to Twitter, +Mastodon and our API file. + +The API file is just that, a JSON file. It contains, among other things, the +current state of the door lock. + +## Arduino + +## Python Script + +## API diff --git a/source/arduino/config.h b/source/arduino/config.h new file mode 100644 index 0000000..d2f9073 --- /dev/null +++ b/source/arduino/config.h @@ -0,0 +1,11 @@ +// SSID and password of the WiFi network to which we broadcast the door lock's +// status. +char SSID[] = ""; +char PASSWORD[] = ""; + + +// Port on which to listen for status requests +unsigned int PORT = 12345; + +// Pin to which the reed switch is connected +uint8_t REED_PIN = 0; diff --git a/source/arduino/door_status.ino b/source/arduino/door_status.ino new file mode 100644 index 0000000..4a0f91b --- /dev/null +++ b/source/arduino/door_status.ino @@ -0,0 +1,87 @@ +#include +#include +#include + +#include "config.h" + +uint8_t OPEN = 1; +uint8_t CLOSED = 0; + +int wifi_status = WL_IDLE_STATUS; + +WiFiUDP Udp; + +void setup() { + pinMode(REED_PIN, INPUT_PULLUP); + + Serial.begin(9600); + while (!Serial); + + if (WiFi.status() == WL_NO_SHIELD) { + Serial.println("No WiFI shield present"); + // TODO: Create noShieldLoop with visual indication. + while (true); + } + + while (true) { + // TODO: Visually indicate that we are trying to connect + Serial.print("Connecting to SSID: "); + Serial.println(SSID); + status = WiFi.begin(SSID, PASSWORD); + + if (status == WL_CONNECTED) { + break; + } + + // TODO: Visually indicate that we waiting for trying to connect again + delay(10000); + } + + printNetworkInfo(); + +} + +void loop() { + int reed_state = digitalRead(REED_PIN); + + int packetSize = Udp.readPacket(); + if (packetSize) { + Udp.beginPacket(udp.remoteIP(), Udp.remotePort()); + + if (reed_state == HIGH) { + Udp.write(CLOSED); + } else { + Udp.write(OPEN); + } + + Udp.endPacket(); + } + // TODO: Visually indicate open/closed state. +} + + +void printNetworkInfo() { + + Serial.print("Connect to WiFi"); + + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + byte mac[6]; + WiFi.macAddress(mac); + Serial.print("MAC address: "); + for (int i = 5; i >= 0; --i) { + if (mac[i] < 16) { + Serial.print("0"); + } + + Serial.print(mac[i], HEX); + + if (i > 0) { + Serial.print(":"); + } + } + Serial.println(); + +} diff --git a/api b/source/server/api similarity index 100% rename from api rename to source/server/api diff --git a/api_template b/source/server/api_template similarity index 100% rename from api_template rename to source/server/api_template diff --git a/apistatusd.conf b/source/server/apistatusd.conf similarity index 100% rename from apistatusd.conf rename to source/server/apistatusd.conf diff --git a/apistatusd.py b/source/server/apistatusd.py similarity index 100% rename from apistatusd.py rename to source/server/apistatusd.py diff --git a/setstatus.conf b/source/server/setstatus.conf similarity index 100% rename from setstatus.conf rename to source/server/setstatus.conf diff --git a/setstatus.py b/source/server/setstatus.py similarity index 100% rename from setstatus.py rename to source/server/setstatus.py diff --git a/statusd.service b/source/server/statusd.service similarity index 100% rename from statusd.service rename to source/server/statusd.service diff --git a/watchdoor.py b/source/server/watchdoor.py similarity index 100% rename from watchdoor.py rename to source/server/watchdoor.py diff --git a/watchdoor.service b/source/server/watchdoor.service similarity index 100% rename from watchdoor.service rename to source/server/watchdoor.service