Ich wollte meine Frau zu Weihnachten überraschen. Sie ist eine Rothaarige, ein Harry-Potter-Fan und auch eine Mutter. All dies hat mich dazu inspiriert, die Weasley-Uhr zu kreieren. Ich kam im Februar auf die Idee, also hatte ich 10 Monate Zeit, um das Projekt zu entwickeln und zu erstellen.
Für Leute, die mit Harry Potter und der Weasley-Familie nicht vertraut sind, werde ich erklären, dass die Weasley-Zaubererfamilie eine magische Uhr hat, die nicht die Zeit anzeigt, sondern den Ort der Familienmitglieder, von denen jedes seinen eigenen Pfeil hat. Hier ist ein Auszug aus Harry Potter und dem Feuerkelch (J. Rowling, 2000):
, . . , , – - . , . , , . «», «», «», « », «», «», «»; , «12», « ». «», , , «».
«, !» – , . , «» « », «» , , .
Es waren einige Forschungsarbeiten erforderlich, um magische Uhren in echte zu verwandeln. Ich habe viel Programmiererfahrung, aber ich habe erst vor kurzem angefangen, Code zu schreiben, der etwas in der physischen Welt bewegt. 2018 leitete ich von FIRST aus unseren lokalen FRC-Robotikclub und lernte die Welt der Motoren und Encoder kennen.
Das Flussdiagramm zum Aktualisieren von Daten auf der Weasley-Uhr:
Benutzer auf Smartphones haben die Life360-App ausgeführt -> Die
App verfolgt den Standort und die Geschwindigkeit der
Benutzer -> HA verfolgt Benutzer und berechnet den Status der Uhr. Sendet Updates über das MQTT-Protokoll an den Raspberry Pi ->
Auf dem Raspberry Pi wird ein spezieller Weasleyclockd-Prozess ausgeführt, der den MQTT-Stream überwacht und die Uhrenservos steuert ->
Jede ausreichend fortgeschrittene IoT-Integration ist nicht von Magie zu unterscheiden.
Ich habe das Projekt mit der Uhr in mehrere Teilprojekte aufgeteilt, mit denen bereits gearbeitet werden konnte, und zunächst den Standort verfolgt. Zuerst habe ich Apples mobile App Find My Phone verwendet, da alle meine unmittelbaren Familienmitglieder iPhones verwenden. Aber dann wechselte ich zu Life360, weil sich herausstellte, dass die API für Dritte benutzerfreundlicher war, und ich die Verwandten meiner Frau hinzufügen konnte, die bei uns leben und Android-Telefone verwenden. Noch bevor ich mit dem Erstellen und Programmieren anfing, musste ich alle davon überzeugen, Life360 zu installieren und zu verwenden. Zum Glück waren sich alle einig. Meine Frau tat es aus Sicherheitsgründen und erfuhr nie von meinem geheimen Plan, eine komplizierte Überraschung für Weihnachten zu machen.
Die nächste Herausforderung war die Schaffung einer Uhr mit mehreren Zeigern. Ich nahm naiv an, dass es solche Dinge gibt, und ich müsste nur so etwas kaufen und einfach meine eigenen Motorsteuerungen hineinstecken. Am Ende habe ich konzentrische Messingrohre aus Hobbygeschäften verwendet. Ich habe die Zahnräder mit Klemmen von ServoCity.com an den Rohren befestigt.
Um die Pfeile zu drehen, entschied ich mich für Servowinden mit der Möglichkeit mehrerer Umdrehungen. Ich kaufte bei Adafruit und löte eine 16-Kanal-Raspberry Pi Servo HAT-Erweiterungskarte und begann mit dem Prototyping. Und in diesem Moment war ich von Aufregung überwältigt, als mir klar wurde, dass alles funktionieren würde.
Dann brauchte ich ein Programm, das die Rohdaten in bestimmte Zustände der Weasley-Uhr konvertiert. Ich beschloss, das Home Assistant- Automatisierungssystem zu einem Vermittler zwischen Standortdaten von Life360 und dem Zählen des Uhrenzustands zu machen . Dies komplizierte das System insgesamt, ermöglichte es mir jedoch, die Last der Life360-Integration (und mögliche API-Änderungen in der Zukunft) auf die Schultern von Home Assistant zu verlagern. Durch die Verfolgung der spezifischen WLAN-Hotspots von Personen kann ich deren Standort im Haus genauer bestimmen. Wenn beispielsweise das Telefon einer Person eine Verbindung zu einem Straßenrouter herstellt, weiß das System, dass sich die Person im „Garten“ befindet.
Home Assistant Panel
Nachdem ich die Regeln für Home Assistant geschrieben hatte, bekam ich ein Bedienfeld, in dem alle Zustände der Weasley-Uhr aufgelistet waren. Jetzt musste ich nur noch diese Daten verwenden, um die Uhrzeiger zu bewegen.
Home Assistant ist ein Open Source-Hausautomationsprojekt mit Schwerpunkt auf lokaler Speicherung und Verwaltung. Dies steht im Gegensatz zu den meisten IoT-Automatisierungssystemen, die eine Internetverbindung benötigen und Ihre Daten in der Cloud speichern.
Da die Uhrzustände bereits auf dem Home Assistant selbst berechnet wurden und der Raspberry Pi und die Servocontroller in der Uhr standen, musste ich herausfinden, wie Daten vom Home Assistant zur Weasley-Uhr übertragen werden können. Ich habe das MQTT- Protokoll gewähltbeliebt für den IoT-Einsatz und wird in Home Assistant gut unterstützt. Ich habe Home Assistant um die Automatisierung erweitert, um MQTT-Nachrichten zu senden, wenn sich der Überwachungsstatus ändert. Auf der Listenerseite habe ich einen Python-Daemon geschrieben, weasleyclockd , der den MQTT-Ereignisstrom abhört und die Pfeile entsprechend verschiebt.
Ich habe dem Zifferblatt einige Informationen hinzugefügt, damit mehr Daten als nur "zu Hause" oder "verloren" vorhanden sind. In den Sektoren "verloren" und "unterwegs" ist die Position der Pfeile von den angegebenen Werten proportional dazu, wie weit die Person vom Haus entfernt ist. Sie können auf einen Blick erkennen, ob sich eine Person in der Nähe ihres Zuhauses befindet, sich im nächsten Geschäft befindet oder hundert Kilometer entfernt ist.
Um das Lesen zu erleichtern, sind die Pfeile versetzt, um ein Überfüllen in Sektoren wie dem "Zuhause" zu vermeiden. Der Haussektor gliedert sich in zwei Teile - das Haupthaus und das zweite Gebäude, die Werkstatt.
Ein wichtiger Teil des Projekts ist das Zeichnen des Zifferblatts. Ich habe ein wunderschönes Weasley-Uhrenplakat von Minalima gefunden . Dieser Autor hat viele der offiziellen Zeichnungen für die Harry-Potter-Filme gezeichnet.
Während ich diese Uhr herstellte, versuchte ich mir vorzustellen, was ihr Fall sein sollte. Mir wurde klar, dass es am besten wäre, eine antike Uhr wiederzuverwenden. Oder Sie hätten den Fall selbst machen können, aber ich hatte keine Erfahrung als Tischler. Im Prinzip war dies möglich, aber ich wusste, dass die Ergebnisse meines ersten Jobs nicht zu mir passen würden. Die Kaminsimsuhr, die ich in lokalen Antiquitätengeschäften in Snohomish, Washington, sah, war zu klein für das Uhrwerk und das Zifferblatt. Und dann lächelte mich das Glück an.
Meine Frau und ich fuhren nach Whidbey Island und gingen in den Good Cheer Thrift Store in Langley. Sie verkauften eine Standuhr, deren Größe auf den ersten Blick sowohl für den Mechanismus als auch für das Zifferblatt geeignet war. Ich war jedoch überhaupt nicht bereit, sie zu kaufen. Ich hatte die Abmessungen des Zifferblatts und des Uhrwerks nicht dabei. Und bei mir war meine Frau, für die diese Überraschung bestimmt war. Also erinnerte ich mich gerade an diesen Moment und entschied, dass ich definitiv eine solche Uhr
zu Hause kaufen musste , bewaffnet mit all den Maßen. Ich fing an, eBay auf der Suche nach einer Standuhr zu kämmen. Dies war keine leichte Aufgabe. Arbeitszeiten waren teuer. Niemand wollte sie schicken. Sobald ich eine passende Uhr gefunden hatte, stellte sich heraus, dass sie per Selbstabholung aus Florida verkauft wurden.
Drei Monate später beschlossen meine Frau und ich mit der ganzen Familie, wieder nach Whidbey Island zu fahren. Wir haben wieder in Langley gegessen, und ich bin schnell zu diesem Laden gelaufen. Die Standuhr war noch da! Sie wurden sogar auf 165 Dollar reduziert. Solch ein glücklicher Zufall konnte nicht übersehen werden, deshalb bat ich meine Frau, keine Fragen zu stellen, da dies alles Teil der Überraschung war. Ich habe eine Uhr gekauft und wir haben sie in einen bereits verklemmten Honda Odyssey Van geladen. Jetzt verstand sie bereits, dass etwas geplant war.
Es stellte sich als noch schwieriger heraus als das Uhrengehäuse, herauszufinden, wie man die Zeiger herstellt. Ich wollte sie zunächst entweder in 3D drucken oder aus Messing schneiden. Ich habe das Glück, ein paar meiner eigenen Experten zu Hause zu haben. Sehen Sie die atemberaubenden gedruckten Pfeile auf druckbaren RequisitenIch habe mich für den 3D-Druck entschieden. Unser Sohn Alex hat gerade seinen High School Advanced CAD Kurs abgeschlossen und seine Solidworks Zertifizierungsprüfung mit hervorragenden Noten bestanden. Ich habe es mit Pfeilen beladen und sie kamen großartig heraus. Mein Schwiegervater Ron war für den 3D-Druck verantwortlich. Er arbeitet mit einem 3D-Drucker in unserem Roboterteam und ist unser lokaler Experte auf diesem Gebiet. Zum Abschluss der Pfeile habe ich sie mit Metallic-Farbe bemalt und für den Kontrast Schwarz hinzugefügt.
Familienbewegungen während des Tages
Entfernung von zu Hause
Ich wollte wirklich mit den Fähigkeiten der Uhr prahlen, aber inmitten der Selbstisolation ging niemand weit von zu Hause weg. Um dieses Problem zu lösen, habe ich ein Programm geschrieben, das aufgezeichnete Sequenzen von MQTT-Nachrichten sendet. Ich konnte Ereignisse simulieren und die Uhrzeiger bewegen, als würden Leute hin und her fahren.
Fertige Uhr
In die Küche stellen
Am Ende habe ich es geschafft, das ganze Projekt geheim zu halten. Aber ich hatte keine Zeit mit ihm zu Weihnachten. Daher musste ich in den Ferien die Uhr in einem nicht funktionierenden, statischen Zustand demonstrieren. Es gelang mir, die äußere Politur zu bringen, und meine Frau war überrascht und erfreut.
Weitere zwei Monate wurden für die endgültige Fertigstellung aufgewendet - Drucken der Komponenten auf einem 3D-Drucker, Installieren des Mechanismus, Drucken und Lackieren der Pfeile sowie Anpassen der Software.
Das Projekt scheint abgeschlossen zu sein, aber ich möchte noch ein paar Verbesserungen vornehmen. Ich plane, eine Uhr mit sechs oder sieben Zeigern zusammenzubauen und das Schlagen der Uhr zu automatisieren.
Um Arthur Clarke zu paraphrasieren: "Jede ausreichend fortgeschrittene IoT-Integration ist nicht von Magie zu unterscheiden."
In der zweiten Generation von Weasley-Uhren möchte ich Folgendes ändern:
- Entwerfen und drucken Sie Zahnräder, die direkt an Messingstangen haften.
- Verwenden Sie Motoren mit Encodern.
- Schneiden Sie die Pfeile aus dem Messing, um Platz für weitere Pfeile zu schaffen.
Links zu meinem Entwicklungsprotokoll, Fotos und Programmen:
- Weasley Clock Project auf Github
- weasleyclockd , ein Steuerungsprogramm.
- Das Weasley Striking Clock Projekt .
- Fotoalbum-Montage .
- Protokoll erstellen .
- Diskussion auf HackerNews .