Kategorien
Uncategorized

[Bastelei] Garagentoröffner mit Arduino und Homebridge

Nachdem ich bereits mit dem Feinstaubsensor und dem Temeraturfühler erste Arduino-Luft geschnuppert hab, stand das nächste „Problem“ auf der Liste: Meine Garagentore.

Bisher hatte ich für jedes Garagentor einen Raspberry Pi mit Homebridge und homebridge-rasppi-gpio-garagedoor im Einsatz. Das hat zwar funktioniert, war mir aber immer schon ein Dorn im Auge, da die Raspberry Pis für diese einzelne Anwendung etwas oversized waren. Zudem hat ein Raspberry Pi bzw. die SD-Karte den Geist aufgegeben. Daher war es wieder etwas Zeit für eine Bastelstunde.

Da sich meine C++ Fähigkeit stark in Grenzen hält, hab ich mir große Teile des Codes aus dem Internet zusammengeklaut. Mein Ziel war es, auf dem Arduino einen Webserver laufen zu lassen. Dieser sollte bei einem normalen Aufruf den Status des Tors (OPEN, CLOSED, OPENING, CLOSING) ausgeben, mit einem Parameter (?switch=1) das angeschlossene Relais schalten.

Neben dem Relais sollte noch ein Kontaktschalter am Tor abgefragt werden, der bei geschlossenem Tor ebenfalls geschlossen ist. Auf einen „Offen“-Kontaktschalter habe ich verzichtet, da ich nur bei einem Garagentor eine zuverlässige Möglichkeit zur Befestigung gefunden hab.

Der Code

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define RelaisPin D4
#define ClosePin D1

const char* ssid = "WLAN-SSID";
const char* password = "WLAN-PASSWORD";
const char* doorstatus = "";
int currentstate;
int timetoopen = 17;
unsigned long switchedtime;

ESP8266WebServer server(80);

void setup()
{
  pinMode(RelaisPin, OUTPUT);
  pinMode(ClosePin, INPUT_PULLUP);
  digitalWrite(RelaisPin, 1);

  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
  }
  server.on("/", BuildIndex);
  server.onNotFound ( handleNotFound );
  InitialDoorStatus();
  server.begin();
}

void loop()
{
  server.handleClient();
  if (millis() < (switchedtime + 200)) {
  }
  else if (digitalRead(ClosePin) != currentstate && digitalRead(ClosePin) == 1) {
    doorstatus = "OPENING";
    switchedtime = millis();
    currentstate = 1;
  }
  else if (digitalRead(ClosePin) != currentstate && digitalRead(ClosePin) == 0) {
    InitialDoorStatus();
  }
  else if (millis() > (1000 * timetoopen) + switchedtime && doorstatus == "OPENING") {
    InitialDoorStatus();
  }
  else if (millis() > (30000 + switchedtime)) {
    InitialDoorStatus();
  }
  delay(100);
}

void DoSwitch() {
  digitalWrite(RelaisPin, 1 ^ 1);
  delay(1000);
  digitalWrite(RelaisPin, 1 ^ 0);
  switchedtime = millis();
}

void BuildIndex()
{
  server.sendHeader("Cache-Control", "no-cache");
  if (server.arg("switch") == "1")
  {
    if (digitalRead(ClosePin) == 1) {
      doorstatus = "CLOSING";
    }
    else if (digitalRead(ClosePin) == 0) {
      doorstatus = "OPENING";
    }
    DoSwitch();
  }
  server.send(200, "text/html", doorstatus);
}

void InitialDoorStatus()
{
  currentstate = digitalRead(ClosePin);
  if (digitalRead(ClosePin) == 1) {
    doorstatus = "OPEN";
  }
  else if (digitalRead(ClosePin) == 0) {
    doorstatus = "CLOSED";
  }
}

void handleNotFound()
{
  server.send(404, "text/plain", "404: Not found");
}

Mein Code lädt zunächst die beiden Libraries für WLAN und den Webserver. Danach definiere ich den Relais-Pin (D4), der das Relais schaltet und den Kontaktschalter-PIN (D1) der den „Geschlossen“-Status des Tors liefert. Die timetoopen ist die Zeit, wie lange der Status des Tors nach dem Öffnen-Impuls auf „OPENING“ steht, bevor es dann auf „OPEN“ springt. Dieser Status ist später für die Homebridge Implementierung sinnvoll.

Die Variable „doorstatus“ hält den jeweiligen Status des Tors und gibt ihn über den Webserver aus. Dazu überprüft es regelmäßig den Zustand des Kontaktschalters. Bei einem Schaltvorgang setze ich den doorstatus auf OPENING (wenn der Kontaktschalter geschlossen war) bzw. CLOSING (wenn der Kontaktschalter offen war). Gleichzeitig merke ich mir die Laufzeit des Arduino beim Auslösen des Schaltvorgangs.

Beim öffnenden Tor setze ich den Status nach der angegebenen Zeit in timetoopen auf OPEN, beim Schließvorgang setzt das Schließen des Kontakts den Status von CLOSING auf CLOSED. Sollte hier nach 30sek keine Änderung des Kontaktzustands erfolgen (z.B: wenn das Tor manuell angehalten wird), frage ich den Status erneut ab.

Ich hoffe, das Script ist einigermaßen verständlich…

Die Homebridge-Anbindung

Für die Einbindung in Homebridge benutze ich homebridge-garagedoor-command mit folgenden Einstellungen:

{
	"accessory": "GarageCommand",
	"name": "Garage Door",
	"open": "curl 'http://MY_IP/?switch=1'",
	"close": "curl 'http://MY_IP/?switch=1'",
	"state": "curl 'http://MY_IP/'",
	"status_update_delay": 17,
	"poll_state_delay": 20
}

Das war’s.

Kategorien
Uncategorized

[Bastelei] Arduino mit DS18B20 Temperatursensor (für Homebridge)

Bisher hatte ich einen Raspberry Pi 3 im Einsatz, der zum einen mein Garagentor steuerte, zum anderen die Temperatur meiner Heizung ausliest und über Homebridge an mein iPhone lieferte. Da ich den RasbPi aber für einen anderen Zweck benötigt habe, musste ich beide Anwendungen anderweitig abbilden. Hier meine Lösung auf NodeMCU ESP8266 – Basis mit mehreren DS18B20 Sensoren, die die Werte als JSON über einen Webserver ausliefert.

Kategorien
Uncategorized

[Bastelei] Synology Push über Pushover

Kurz und knapp: Ich hab letztens versucht, meiner Synology Push-Mitteilungen beizubringen. Und zwar ohne SMS (die meistens etwas kosten), sondern über den Dienst von Pushover.net. Wer Pushover noch nicht kennt, das ist ein Anbieter einer universellen Push-Schnittstelle. Voraussetzung ist ein kostenloser Account und eine App, die es inzwischen für zahlreiche Plattformen gibt.

Da ich Pushover schon für einige Hausautomation-Geschichten benutze, lag es natürlich nahe, darüber auch Meldungen meiner Synology schicken zu lassen. Wie das geht? Here we go…

Kategorien
Apple Zubehörtipp

[Eindrücke] Ein Monat mit den Apple AirPods


Als im Herbst 2016 das iPhone 7 vorgestellt wurde, zauberte Apple gleichzeitig auch noch die AirPods aus dem Hut. Die ersten kabellosen Kopfhörer von Apple riefen viel Unverständnis und teilweise auch Hohn hervor. Zu teuer, hässlich, unpraktisch usw. war hier nach der Ankündigung zu lesen. Da ich aber grundsätzlich von der Idee von wirklich kabellosen Kopfhörern begeistert war, reihte ich mich in die Schar der wartenden ein und bestellte die AirPods vor. Und wartete lange. Sehr lange. Nach über drei Monaten Wartezeit, konnte ich allerdings Ende Januar endlich die AirPods in Händen halten. Nach jetzt einem guten Monat Nutzung ist es Zeit, ein paar Eindrücke festzuhalten…

Kategorien
Apple Netzpolitik

Apple Pay in Deutschland nutzen.


Leider gibt es immer noch keine offizielle Möglichkeit, Apple Pay in Deutschland zu nutzen. Mit einem kleinen Umweg über unseren Nachbarn in Frankreich, ist dies jedoch inzwischen ohne große Schmerzen möglich.

Kategorien
Technik Zubehörtipp

[Kurztest] Huawei E5786 vs. Netgear AC790 – The next level


Ich hab mir vor einiger Zeit den mobilen LTE-Router Huawei E5776 gekauft. Der Router hat mir jetzt fast drei Jahre lang gute Dienste geleistet und mich zuverlässig auf Geschäftsreisen und im Urlaub mobil mit Internet/WLAN versorgt. Da ich den Router jetzt an anderer Stelle anbringen konnte, war es Zeit, sich für eine Alternative umzuschauen. Nach einiger Recherche kamen für mich eigentlich nur der Nachfolger meines Huawei, der E5786, oder der Netgear AC790 in Frage. Ich hatte beide ein paar Tage zum testen hier und konnte beide Router so vergleichen…

Kategorien
Allgemein

Jetzt podcastet der auch noch…

Ich habe gerade das Vergnügen, mich in unregelmäßigen Abständen im technikblase.fm über Technik auszulassen. Gesundes Halbwissen ist garantiert…

Kategorien
Apple Technik

[Basteltipp] Windows auf externem USB-Laufwerk/USB-Stick am Mac? (Fast) kein Problem!


Manchmal kommt man auch als eingefleischtester Mac-Nutzer nicht um Windows herum. Wenn z.B. eine Fritz!Box wiederhergestellt werden will, eine SSD oder ein Laufwerk geflasht oder einfach ein Tool gebraucht wird, das es partout für MacOS nicht geben will.

Für diese gelegentliche Nutzung gibt es von Apple Boot Camp. Aber gerade in Zeiten fest verbauter SSD-Bausteine in den MacBooks verzichtet man nur ungern auf wertvollen Plattenplatz. Daher wäre es doch wünschenswert, eine Windows-Installation auf eine externe SSD oder einen USB-Stick auszulagern und einfach bei Bedarf an den Rechner zu stecken.

Ich hatte das vor einigen Jahren schon mal ohne Erfolg ausprobiert, bin aber letztens über die Freakshow wieder darauf gestolpert und hab mir das dort erwähnte Tutorial auf der Apple Support Community angesehen und konnte mir so recht schmerzlos ein entsprechendes System bauen…

Kategorien
Allgemein Fundstück Medien

[Linktipp] Springer verschenkt eBooks /*Update

Update: Aus gewöhnlich gut informierten Kreisen wird mit gerade geflüstert, dass es sich bei der Aktion um einen “kurzfristigen freien Zugang” und keinen dauerhaften Zustand handelt 😉

Springer (der gute Springer), verschenkt gerade einen Haufen digitaler Bücher. Darunter viele sehr spezielle Titel, aber auch einige aktuelle Bücher rund um den Bereich Journalismus, Unternehmensführung und neue Medien. Ich hab mal eine Liste von Titeln gemacht, die mir aufgefallen sind:

Kategorien
Apple Fotografie

[Tipp] Apples Fotos.app das automatische Starten abgewöhnen

Wer ebenso wie ich genervt ist, dass Apples Fotos.app bei jedem Kontakt mit einer Kamera, einer Speicherkarte oder einem iOS Gerät automatisch startet, sollte mal
defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool YES
im Terminal versuchen…

PS: Den automatischen Start kann man mit
defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool NO
wieder aktivieren.

Danke an PetaPixel für den Tipp!