Το HomeKit είναι τελικά σε άγρια κατάσταση, επιτρέποντας τον φωνητικό έλεγχο μέσω του Siri για μια χούφτα έξυπνων οικιακών συσκευών.
Δυστυχώς, εννοώ μια κυριολεκτική χούφτα - οτιδήποτε έχετε ήδη αγοράσει πιθανώς δεν είναι συμβατό. Ωστόσο, το πρωτόκολλο έχει ήδη σχεδιαστεί με αντίστροφη μηχανική και είναι διαθέσιμος ένας εξομοιωτής ανοιχτού κώδικα για το API HomeKit: ή σε απλά αγγλικά, μπορείτε τώρα να δημιουργήσετε "ψεύτικες" συσκευές HomeKit και η Siri θα τις ελέγξει ακριβώς όπως κάθε άλλο επίσημο εξάρτημα HomeKit.
Σήμερα, θα δημιουργήσουμε ένα Wi-Fi ελεγχόμενο φως και θα το ελέγξουμε με το Siri. Εδώ είναι ένα demo.
Εδώ είναι τι θα χρειαστείτε:
- Raspberry Pi (Έχω χρησιμοποιήσει ένα RPi2, υπάρχει μια μικρή διαφορά στις εκδόσεις των κόμβων για εγκατάσταση με δεδομένη την αναβαθμισμένη αρχιτεκτονική ARM - δείτε τις σημειώσεις αργότερα).
- Ένας μεσίτης MQTT εγκατεστημένος στο Raspberry Pi. Ανατρέξτε στην ενότητα "Εγκατάσταση Mosquitto στο Pi σας" στον οδηγό OpenHAB μέρος 2 Οδηγός για αρχάριους OpenHAB Μέρος 2: ZWave, MQTT, κανόνες και χαρτογράφηση OpenHAB Οδηγός για αρχάριους Μέρος 2: ZWave, MQTT, κανόνες και χαρτογράφηση OpenHAB, , υπερβαίνει κατά πολύ τις δυνατότητες άλλων συστημάτων αυτοματισμού στο σπίτι - αλλά δεν είναι εύκολο να δημιουργηθεί. Στην πραγματικότητα, μπορεί να είναι απογοητευτικό. Διαβάστε περισσότερα . Δεν χρειάζεται να εγκατασταθεί ειδικά στο Pi - μπορείτε να χρησιμοποιήσετε ακόμη και ένα διακομιστή MQTT βασισμένο σε σύννεφο, αλλά επειδή χρειαζόμαστε ένα Pi για αυτό το tutorial ούτως ή άλλως, είναι βολικό.
- NodeMCU v2 (συμβατό με Arduino)
- LED Neopixel (Θα συνιστούσα 4 εικονοστοιχεία για έλεγχο, τότε μπορείτε να προσθέσετε μια εξωτερική τροφοδοσία και να προσθέσετε όσα θέλετε)
Εγκατάσταση της γέφυρας HomeKit
Θα εγκαταστήσουμε μια εφαρμογή NodeJS που ονομάζεται HAP-NodeJS στο Raspberry Pi: αυτό θα αποτελέσει γέφυρα μεταξύ των αιτημάτων HomeKit και των συσκευών Wi-Fi. Θα ρυθμίσουμε αυτήν τη γέφυρα με ένα εξάρτημα για τώρα, αλλά μπορείτε να προσθέσετε όσα θέλετε.
Εγκαθιστώ αυτήν την κατάσταση στον υπάρχοντα οικιακό εξυπηρετητή που τρέχει το OpenHAB - ελπίζω να συνδέσω τα δύο μαζί σε μεταγενέστερη ημερομηνία, αλλά προς το παρόν, γνωρίζουμε ότι μπορούν να συνυπάρχουν στο ίδιο Raspberry Pi. Εάν κάνετε το ίδιο, μόνο σε περίπτωση, να κάνετε ένα backup κλωνοποίησης της τρέχουσας κάρτας σας Pi SD Κλωνοποιήστε εύκολα την κάρτα SD σας Για τα προβλήματα χωρίς Raspberry Pi Computing Εύκολα κλωνοποιήστε την κάρτα SD σας για προβλήματα χωρίς Raspberry Pi Computing Είτε έχετε ένα Κάρτα SD ή πολλά, ένα πράγμα που θα χρειαστείτε είναι η δυνατότητα να δημιουργήσετε αντίγραφα ασφαλείας των καρτών σας για να αποφύγετε τα προβλήματα που προκύπτουν όταν το Raspberry Pi σας αποτύχει να εκκινήσει. Διαβάστε περισσότερα . Εάν όλα πάνε στραβά, μπορείτε να τα επαναφέρετε.
Ξεκινήστε κάνοντας μια πλήρη αναβάθμιση από το τερματικό ή μια περίοδο SSH Ρύθμιση του Raspberry Pi σας Για την απρόσκοπτη χρήση με το SSH Ρύθμιση του Raspberry Pi σας για Headless Χρήση με SSH Το Raspberry Pi μπορεί να δεχτεί εντολές SSH όταν είναι συνδεδεμένο σε ένα τοπικό δίκτυο (είτε μέσω Ethernet ή Wi-Fi), επιτρέποντάς σας να το ρυθμίσετε εύκολα. Τα οφέλη της SSH ξεπερνούν την καθημερινή εξέταση ... Διαβάστε περισσότερα.
sudo apt-get ενημέρωση sudo apt-get αναβάθμιση
Μπορεί να χρειαστεί να κάνετε αυτές τις δύο φορές αν είναι λίγο.
Τώρα εγκαταστήστε μερικά βασικά πακέτα που θα χρειαστείτε:
sudo apt-get εγκαταστήσετε npm git-core libnss-mdns libavahi-compat-libdnssd-dev
Στη συνέχεια, πρόκειται να εγκαταστήσουμε την πιο πρόσφατη έκδοση του NodeJS. Ίσως μπείτε στον πειρασμό να το κάνετε αυτό με το apt-get, αλλά όχι - αυτή η έκδοση είναι πραγματικά παλιά τώρα και δεν θα λειτουργήσει. Αντ 'αυτού, επισκεφθείτε το nodejs.org, περιηγηθείτε στον κατάλογο download / release / latest-v5.x.0 / και ελέγξτε ποιος είναι ο σύνδεσμος για την τελευταία έκδοση. Ψάχνετε για linux-armv7l για Raspberry Pi 2, ή linuxarmv6l για τα αρχικά μοντέλα RPi. Στη συνέχεια, προσαρμόζοντας τις διευθύνσεις URL και τα ονόματα καταλόγων όπως απαιτείται, κάντε λήψη και εγκαταστήστε χρησιμοποιώντας τις ακόλουθες εντολές.
wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz tar -xvf node-v5.5.0-linux-armv7l.tar.gz cd node-v5.5.0-linux-armv7l sudo cp -R * / usr / τοπικό
Επιβεβαιώστε πληκτρολογώντας
έκδοση κόμβου
Και θα πρέπει να δείτε v5.5 (ή ό, τι πιο πρόσφατο ήταν ότι έχετε κατεβάσει).
Στη συνέχεια, έχουμε μερικές μονάδες κόμβων για εγκατάσταση.
sudo npm εγκατάσταση -g npm sudo npm εγκατάσταση -g node-gyp
Σε αυτήν την πρώτη εντολή, χρησιμοποιούμε πραγματικά το Node Package Manager (npm) για να εγκαταστήσουμε μια νεότερη έκδοση του. Εξυπνος!
Τώρα, για να κατεβάσετε τον εξομοιωτή HomeKit που ονομάζεται HAP-NodeJS:
git κλώνος https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm επαναδημιουργία sudo npm εγκαταστήστε node-persist sudo npm εγκαταστήσετε srp
Σε αυτό το σημείο έτρεξα αυτό το σφάλμα: " #error Αυτή η έκδοση του κόμβου / NAN / v8 απαιτεί έναν μεταγλωττιστή C ++ 11 ". Αν συμβεί αυτό, εγκαταστήστε έναν πιο πρόσφατο μεταγλωττιστή C ++ με τις εντολές:
sudo apt-get install gcc-4.8 g ++ - 4.8 sudo ενημέρωση-εναλλακτικές λύσεις -install / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo ενημέρωση-εναλλακτικές λύσεις-install / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo ενημέρωση-εναλλακτικές λύσεις -install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo ενημέρωση-εναλλακτικές λύσεις -install / usr / bin / g ++ g ++ / usr / 4.8 50
Τώρα δεν πρέπει να έχετε κάποιο πρόβλημα. Συνεχίστε να εκτελείτε αυτές τις εντολές, μία προς μία:
sudo npm εγκαταστήσετε sud sudo npm εγκαταστήσετε το mdns --unesafe-perm sudo npm εγκαταστήσετε debug sudo npm εγκαταστήσετε ed25519 --unsafe-perm sudo npm εγκαταστήσετε καμπύλη25519 --saafe-perm
Αυτό πρέπει να είναι όλα. Δοκιμάστε να εκτελέσετε τον εξομοιωτή με:
κόμβος Core.js
Εάν λάβετε λάθη λέγοντας ότι δεν μπορεί να βρει τέτοια και τέτοια μονάδα, απλώς χρησιμοποιήστε ξανά την εντολή sudo npm install και τοποθετήστε το όνομα της οποιασδήποτε μονάδας λείπει. Αν υποτεθεί ότι όλα είναι καλά, θα πρέπει να δείτε μερικές προειδοποιήσεις και η γέφυρά σας HomeKit θα λειτουργεί. Αυτό δείχνει η επιτυχία:
Μπορείτε να δείτε αμέσως ότι έχει ήδη δημιουργηθεί ένα σύνολο από 6 ψεύτικες συσκευές. Θα χρησιμοποιήσουμε αυτά ως σημείο εκκίνησης για το δικό μας φως Wi-Fi αργότερα, αλλά θα τα χρησιμοποιήσουμε μόνο για να δοκιμάσουμε τώρα. Μπορείτε επίσης να δείτε περισσότερες πληροφορίες εντοπισμού σφαλμάτων αν ξεκινήσετε τον διακομιστή με:
DEBUG = * κόμβος Core.js
Τώρα μεταβείτε σε μια συσκευή Apple ικανή να τρέξει το Siri. Η Apple περιέργως δεν παρέχει μια εφαρμογή HomeKit για μετοχές εκτός από τους εγγεγραμμένους προγραμματιστές, γι 'αυτό κατεβάστε την δωρεάν εφαρμογή Elgato Eve, μια εφαρμογή διαχείρισης HomeKit που σας επιτρέπει να προσθέσετε συσκευές (ακόμη και μη Elgato) στο δικό σας δίκτυο HomeKit.
Την πρώτη φορά που θα εκκινήσετε την εφαρμογή θα πρέπει να ονομάσετε το σπίτι σας, προχωρήστε και περπατήστε μέσα από αυτό. Στη συνέχεια, επιλέξτε "Προσθήκη εξαρτήματος". Αγνοήστε το μήνυμα ότι είστε κοντά σε αυτό!
Θα σας πει να αναζητήσετε στη συνέχεια έναν μοναδικό "Κωδικό εγκατάστασης του HomeKit". Αγνοήστε αυτό και πατήστε "Προσθήκη στο [όνομα του σπιτιού σας]".
Θα σας πει επίσης ότι η συσκευή δεν είναι πιστοποιημένη. Πράγματι δεν είναι. Πηγαίνετε ούτως ή άλλως. Όταν φτάσετε στην οθόνη ζητώντας έναν πρόσθετο κωδικό ...
Επιλέξτε να εισαγάγετε τον κώδικα με μη αυτόματο τρόπο και πληκτρολογήστε τα εξής:
031-45-154
Αυτό μπορεί να βρεθεί / αλλάξει στο αρχείο Light_accessory.js, αλλά περισσότερο σε αυτό αργότερα. Προσθέστε αυτό το εξάρτημα στο προεπιλεγμένο σας δωμάτιο, καλέστε το Fake Light και συνεχίστε με τα παράθυρα διαλόγου για να επιλέξετε το εικονίδιο κλπ.
Τέλος, μεταβείτε στην περίοδο SSH όπου εκτελείτε το HAP-NodeJS. Μπορεί να έχετε ήδη δει ένα μήνυμα που λέει "Είμαστε;" - αυτή είναι η τηλεπαραλαβή της εφαρμογής Elgato για την κατάσταση φωτισμού. Ανοίξτε το Siri και πείτε της "Ενεργοποιήστε το ψεύτικο φως", στη συνέχεια προσπαθήστε να το απενεργοποιήσετε ξανά. Ας ελπίσουμε ότι θα δείτε μερικά μηνύματα εντοπισμού σφαλμάτων από το HAP-NodeJS για να δείξει ότι έλαβε τις εντολές.
Είμαστε; Όχι. Ανάβοντας το φως! Απενεργοποιήστε το φως!
Φανταστικό, αυτό είναι το πρώτο βήμα τελειωμένο. Τώρα θα χρειαστεί ένα πραγματικό φως, πριν επιστρέψει για να ρυθμίσετε τη γέφυρα και πάλι.
Δημιουργία φωτός Wi-Fi
Η πλευρά υλικού αυτού του βήματος είναι εκπληκτικά απλή αν ξεκινήσουμε με τέσσερις Neopixels, καθώς μπορούμε να τροφοδοτήσουμε αυτούς απευθείας από τον πίνακα NodeMCU dev και τη σύνδεση USB. Αν έχετε μεγαλύτερη λωρίδα, μην ανησυχείτε - το έχουμε ορίσει στο λογισμικό, οπότε τα υπόλοιπα απλά δεν θα ενεργοποιηθούν.
Συνδέστε το κόκκινο καλώδιο τροφοδοσίας από ένα κέλυφος Neopixel στον ακροδέκτη VIN, το μπλε γείωσης στο GND και το πράσινο καλώδιο σήματος στην πινέζα με την ένδειξη D2 στο NodeMCU. Να είστε πολύ προσεκτικοί σχετικά με την πολικότητα: αν αναμίξετε το έδαφος και το VIN, θα στείλετε ένα κύμα εξουσίας μέσω του σκάφους σας και θα το καταστρέψετε στη διαδικασία.
Εάν το περιβάλλον Arduino σας δεν έχει ρυθμιστεί ακόμα για να συνεργαστεί με το ESP8266, προχωρήστε και ακολουθήστε τον οδηγό στο ESP8266 μου: Killer του Arduino Γνωρίστε τον Kildeur του Arduino: ESP8266 Γνωρίστε τον Kildeur του Arduino: ESP8266 Τι να σας πω αν υπάρχει ένα συμβατό με Arduino dev με ενσωματωμένο Wi-Fi για λιγότερο από $ 10; Λοιπόν, υπάρχει. Διαβάστε περισσότερα οδηγός και έπειτα επιστρέψτε αφού επιβεβαιώσετε ότι λειτουργεί. Εγκαταστήστε αυτές τις πρόσθετες βιβλιοθήκες:
- Το PubSubClient του lmroy
- Τα NeoPixels του Adafruit
Ο κώδικας που χρησιμοποιούμε είναι μια τροποποίηση του χρήστη του Github Aditya Tannu's - Έχω αφαιρέσει την περιττή λειτουργίες ενημέρωσης μέσω του αέρα, προστέθηκαν σε ορισμένες λειτουργίες HSV που λείπουν και καθιστούσαν ευκολότερη τη δημιουργία περισσότερων φώτων αλλάζοντας μόνο ένα ενιαία μεταβλητή. Εάν δεν μπορείτε να δείτε τον κώδικα που είναι ενσωματωμένος στη συνέχεια, θα το βρείτε σε αυτό το Think.
Ενημερώστε τις ακόλουθες γραμμές με τις δικές σας πληροφορίες δικτύου και ένα μοναδικό όνομα για κάθε προϊόν που δημιουργείτε (κεντρικός υπολογιστής).
const char * ssid = "...."; const char * κωδικός πρόσβασης = "..."; const char * host = "officalight"; IPAddress MQTTserver (192, 168, 1, 99).
Η διεύθυνση IP αυτού του εξαρτήματος αποκτάται αυτόματα μέσω DHCP - δεν έχει σημασία αν αλλάζει, αφού συνδέουμε κάθε φορά τον ίδιο διακομιστή MQTT.
Προς το παρόν χρησιμοποιούμε μόνο 4 Neopixels, αλλά μπορείτε να αυξήσετε τον αριθμό αργότερα εάν τα τροφοδοτήσετε από μια εξωτερική πηγή. Ανεβάστε τον κώδικα και δοκιμάστε - χρησιμοποιήστε τον αγαπημένο σας πελάτη MQTT για να στείλετε εντολές (προσαρμόστε το όνομα του κεντρικού υπολογιστή στις παρακάτω οδηγίες αν το έχετε αλλάξει) .
- Μπορείτε να στείλετε στο κανάλι της επίσημης ρίζας για να το ενεργοποιήσετε. Στείλτε οποιαδήποτε άλλη τιμή σε αυτό το κανάλι για να την απενεργοποιήσετε.
- Μπορείτε να στείλετε έναν αριθμό από το 0-360 στο επίσημο / χρωματικό χρώμα για να αλλάξετε το χρώμα. Χρησιμοποιούμε το χώρο χρώματος HSV, έτσι το 0 και το 360 είναι κόκκινο, το 120 είναι πράσινο και το 240 είναι μπλε.
- Στέλνετε μια εκατοστιαία τιμή για τη φωτεινότητα (0-100, μην συμπεριλάβετε το σύμβολο%).
- Ίδια για τον κορεσμό. Μια τιμή 100 θα είναι πλήρως κορεσμένη (δηλαδή ένα συμπαγές χρώμα) και το μηδέν θα είναι καθαρό λευκό, ανεξάρτητα από την καθορισμένη απόχρωση.
Αφού επιβεβαιώσετε ότι το φωτιστικό σας που λειτουργεί με MQTT λειτουργεί, προχωρήστε.
Διαμόρφωση νέου εξαρτήματος HomeKit
Επιστρέψτε στο Raspberry Pi και τερματίστε την εφαρμογή HAP-NodeJS, αν δεν το έχετε ήδη κάνει. Μεταβείτε στον κατάλογο / εξαρτήματα . Για να γίνει αυτό εύκολο, μπορείτε να κατεβάσετε απευθείας τον κώδικα που έχει ήδη αντιστοιχιστεί με το προσχέδιο "officalight" πληκτρολογώντας τα εξής:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
Ουσιαστικά, αυτό είναι ένα αντίγραφο του προεπιλεγμένου φωτιστικού αξεσουάρ, με άλλα μεταβλητά ονόματα άλλαξαν (και πάλι, προσαρμόστηκαν από το έργο της Adysan, απλουστευμένα για ευκολία χρήσης). Εδώ είναι τι πρέπει να γνωρίζετε για τη δημιουργία των δικών σας προσαρμοσμένων αξεσουάρ με βάση αυτό.
- Όλα τα αξεσουάρ πρέπει να ονομάζονται * _accessory.js
- Αλλάξτε τη διεύθυνση IP στη μεταβλητή επιλογών στην κορυφή του διακομιστή MQTT
- Αν έχετε διαφορετικό όνομα, ανακαλύψτε / αντικαταστήστε όλες τις εμφανίσεις του " officelight " με το μοναδικό σας όνομα. Μπορείτε να κάνετε μια αναζήτηση / αντικατάσταση στο Nano πιέζοντας CTRL και \, πληκτρολογώντας τον όρο για να βρείτε τον όρο που θα αντικαταστήσετε και στη συνέχεια πατήσετε A (που σημαίνει όλες τις περιπτώσεις). Βήμα μέσα από κάθε ένα από αυτά για να μάθετε με ακρίβεια ποιες μεταβλητές ενημερώνονται.
- Δημιουργήστε ένα μοναδικό δεκαεξαδικό όνομα χρήστη για το εξάρτημα ( light.username = "1B: 2B: 3C: 5D: 6E: FF"; )
- Μην αλλάξετε τον κωδικό PIN. Ακολουθεί μια συγκεκριμένη μορφή, και αν δεν ξέρετε τι κάνετε, δεν θα είναι σε θέση να ζευγαρώσει. Δεν υπάρχει κανένα πρόβλημα με τη διατήρησή τους το ίδιο μεταξύ των φώτων.
- Μπορείτε να δώσετε στο εξάρτημα σας ένα διαφορετικό "όνομα Siri" όταν τα προσθέτετε στην εφαρμογή Elgato Eve και να τα επεξεργαστείτε ανά πάσα στιγμή, ώστε να μην είστε κολλημένοι με την αρχική σας επιλογή. Δεν χρειάζεται να επεξεργαστείτε τα αρχεία ρυθμίσεων ή να κάνετε επανεκκίνηση του διακομιστή.
- Μόλις έχετε πολλαπλά παιχνίδια, μπορείτε να χρησιμοποιήσετε την εφαρμογή Elgato Eve για να τα ομαδοποιήσετε ανά δωμάτιο ή για να δημιουργήσετε συγκεκριμένες σκηνές που αποτελούνται από πολλαπλές σύνθετες ενέργειες. Οι σκηνές μπορούν να αποτελούνται από πολλαπλές ενέργειες, όπως: ενεργοποιήστε το φως του γραφείου, μειώστε το στο 25%, το κάνετε κόκκινο και ενεργοποιήστε το καφετιέρα.
Θα χρειαστεί να προσθέσετε ξανά το νέο σας εξάρτημα μέσω της επιλογής σας HomeKit.
Τέλος, θέλουμε να τρέξουμε την εφαρμογή μας HAP-NodeJS κάθε φορά που γίνεται επανεκκίνηση του Pi. Προσθέστε τα ακόλουθα στο αρχείο κτλ / rc.local, ακριβώς πριν την έξοδο 0 .
sudo κόμβος /home/pi/HAP-NodeJS/Core.js </ dev / null &
Μπορείτε να δείτε ότι έχω συνδυάσει αυτό με κάποιες άλλες εντολές που έχω ήδη θέσει για να ξεκινήσω την εκκίνηση.
Εάν αυτή είναι η πρώτη φορά που χρησιμοποιείτε rc.local, ίσως χρειαστεί να την ορίσετε ως εκτελέσιμο:
sudo chmod 755 /etc/rc.local
Αν για κάποιο λόγο πρέπει να το εκτελέσετε ξανά σε λειτουργία εντοπισμού σφαλμάτων, μπορείτε να σκοτώσετε την τρέχουσα εφαρμογή κόμβου με:
killall κόμβο
Ένα τελευταίο βήμα: πλοηγηθείτε στον κατάλογο αξεσουάρ και διαγράψτε το GarageDoorOpener_accessory.js . Τη στιγμή της γραφής, αυτό είναι buggy, και θα προκαλέσει το διακομιστή να σπάσει μετά από λίγο.
Τι θα ελέγξετε με το Siri;
Τώρα που έχετε τα βασικά κάτω, δεν υπάρχει πραγματικά κανένα όριο σε ό, τι μπορείτε να ελέγξετε - αν μπορείτε να κωδικοποιήσετε το Javascript, μπορείτε να κάνετε το δικό σας αρχείο αξεσουάρ. Υπάρχουν τόσα πολλά δυνατά εδώ, νομίζω ότι θα έχετε μεγάλη διασκέδαση. Επιτρέψτε μου να γνωρίζω στα σχόλια με τι έρχεστε!