Διαφήμιση
Το 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, το λογισμικό αυτοματισμού ανοικτού κώδικα, ξεπερνά κατά πολύ τις δυνατότητες άλλων συστημάτων αυτοματισμού στο σπίτι της αγοράς - αλλά δεν είναι εύκολο να εγκατασταθεί. Στην πραγματικότητα, μπορεί να είναι απογοητευτικό. Διαβάστε περισσότερα . Δεν χρειάζεται να εγκατασταθεί ειδικά στο Pi - μπορείτε ακόμη και να χρησιμοποιήσετε ένα διακομιστή MQTT που βασίζεται σε σύννεφο, αλλά επειδή χρειαζόμαστε ένα Pi για αυτό το tutorial ούτως ή άλλως, είναι βολικό.
- NodeMCU v2 (συμβατό με Arduino)
- Neopixel LEDs (Θα προτείνω 4 εικονοστοιχεία για έλεγχο, τότε μπορείτε να προσθέσετε μια εξωτερική τροφοδοσία και να προσθέσετε όσα θέλετε)
Εγκατάσταση της γέφυρας HomeKit
Θα εγκαταστήσουμε μια εφαρμογή NodeJS που καλείται HAP-NodeJS στο Raspberry Pi: αυτό θα αποτελέσει γέφυρα μεταξύ των αιτημάτων HomeKit και των συσκευών Wi-Fi. Θα ρυθμίσουμε αυτήν τη γέφυρα με ένα εξάρτημα για τώρα, αλλά μπορείτε να προσθέσετε όσα θέλετε.
Εγκαθιστώ αυτό το πράγμα στον υπάρχοντα οικιακό διακομιστή που τρέχει το OpenHAB - ελπίζω να συνδέσω τα δύο μαζί σε ένα αργότερα, αλλά για τώρα, ξέρετε ότι μπορούν να συνυπάρχουν στο ίδιο Raspberry Pi. Αν κάνετε το ίδιο, απλά μέσα υπόθεση, δημιουργήστε ένα αντίγραφο ασφαλείας κλώνου της τρέχουσας κάρτας SD σας Pi Εύκολα κλωνοποιήστε την κάρτα SD σας για προβλήματα χωρίς υπολογισμό Raspberry PiΕίτε έχετε μια κάρτα SD είτε πολλά, ένα πράγμα που θα χρειαστείτε είναι η δυνατότητα να δημιουργήσετε αντίγραφα ασφαλείας των καρτών σας για να αποφύγετε τα προβλήματα που εμφανίζονται όταν το Raspberry Pi σας αποτύχει να εκκινήσει. Διαβάστε περισσότερα . Εάν όλα πάνε στραβά, μπορείτε να τα επαναφέρετε.
Ξεκινήστε κάνοντας μια πλήρη αναβάθμιση από το τερματικό ή ένα SSH session Ρύθμιση του σμέουρου Pi σας για χρήση χωρίς κεφαλή με 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 κόμβος-gyp.
Σε αυτήν την πρώτη εντολή, χρησιμοποιούμε πραγματικά το Node Package Manager (npm) για να εγκαταστήσουμε μια νεότερη έκδοση του ίδιου. Εξυπνος!
Τώρα, για να κατεβάσετε τον εξομοιωτή HomeKit που ονομάζεται HAP-NodeJS:
git clone https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. npm reconstruct. sudo npm install node-persist. sudo npm εγκατάσταση srp.
Σε αυτό το σημείο έτρεχα αυτό το σφάλμα: "#error Αυτή η έκδοση του κόμβου / NAN / v8 απαιτεί έναν μεταγλωττιστή C ++ 11“. Αν συμβεί αυτό, εγκαταστήστε έναν πιο πρόσφατο μεταγλωττιστή C ++ με τις εντολές:
sudo apt-get εγκαταστήσετε 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/bin/g++-4.8 50.
Τώρα δεν πρέπει να έχετε κάποιο πρόβλημα. Συνεχίστε να εκτελείτε αυτές τις εντολές, μία προς μία:
sudo npm εγκατάσταση srp. sudo npm install mdns -unsafe-perm. sudo npm εγκατάσταση εντοπισμού σφαλμάτων. sudo npm εγκαταστήστε το ed25519 - δεν υπάρχει. sudo npm καμπύλη εγκατάστασης25519 --saaafe-perm.
Αυτό πρέπει να είναι όλα. Δοκιμάστε να εκτελέσετε τον εξομοιωτή με:
κόμβος Core.js.
Εάν λάβετε λάθη λέγοντας ότι δεν μπορεί να βρει τέτοια και τέτοια ενότητα, απλά χρησιμοποιήστε το sudo npm install εντολή και πάλι, και να επικολλήσετε το όνομα της οποιασδήποτε μονάδας λείπει. Υποθέτοντας ότι όλα είναι καλά, θα πρέπει να δείτε μερικές προειδοποιήσεις και η γέφυρά σας HomeKit θα λειτουργεί. Αυτό δείχνει η επιτυχία:

Μπορείτε να δείτε αμέσως ότι έχει ήδη δημιουργηθεί ένα σύνολο από 6 ψεύτικες συσκευές. Θα τα χρησιμοποιήσουμε ως αφετηρία για το δικό μας φως Wi-Fi αργότερα, αλλά θα τα χρησιμοποιήσουμε μόνο για να δοκιμάσουμε τώρα. Μπορείτε επίσης να δείτε περισσότερες πληροφορίες εντοπισμού σφαλμάτων αν ξεκινήσετε τον διακομιστή με:
DEBUG = * κόμβος Core.js
Τώρα μεταβείτε σε μια συσκευή Apple ικανή να τρέχει το Siri. Η Apple περιέργως δεν παρέχει μια εφαρμογή HomeKit αποθέματος εκτός από τους εγγεγραμμένους προγραμματιστές, γι 'αυτό κατεβάστε δωρεάν Ελγάτο Eve app, μια εφαρμογή διαχείρισης του 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: Δολοφόνος Arduino Γνωρίστε τον δολοφόνο του Arduino: ESP8266Τι θα συμβεί αν σας έλεγα ότι υπάρχει ένας πίνακας Dev συμβατός με Arduino με ενσωματωμένο Wi-Fi για λιγότερο από $ 10; Λοιπόν, υπάρχει. Διαβάστε περισσότερα Οδηγός έπειτα επιστρέψτε αφού έχετε επιβεβαιώσει ότι λειτουργεί. Εγκαταστήστε αυτές τις πρόσθετες βιβλιοθήκες:
- Το PubSubClient του lmroy
- Τα NeoPixels του Adafruit
Ο κώδικας που χρησιμοποιούμε είναι μια τροποποίηση του Github χρήστη του Aditya Tannu - Έχω αφαιρέσει την περιττή λειτουργίες ενημέρωσης μέσω του αέρα, που προστέθηκαν σε ορισμένες λειτουργίες του HSV που λείπουν και καθιστούσε ευκολότερη τη δημιουργία περισσότερων φώτων αλλάζοντας μόνο μία μόνο μεταβλητή. Εάν δεν μπορείτε να δείτε τον παρακάτω κώδικα, θα το βρείτε αυτή την ουσία.
Ενημερώστε τις ακόλουθες γραμμές με τις δικές σας πληροφορίες δικτύου και ένα μοναδικό όνομα για κάθε συσκευή που δημιουργείτε (κεντρικός υπολογιστής).
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, αν δεν το έχετε ήδη κάνει. Πλοηγηθείτε στο /accessories Ευρετήριο. Για να γίνει αυτό εύκολο, μπορείτε να κατεβάσετε απευθείας τον κώδικα που έχει ήδη αντιστοιχιστεί στο προσάρτημα "officalight" πληκτρολογώντας τα εξής:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
Ουσιαστικά, αυτό είναι ένα αντίγραφο του προεπιλεγμένου ελαφρού εξαρτήματος, με άλλα μεταβλητά ονόματα άλλαξαν (και πάλι, προσαρμόστηκαν από το έργο της Adysan, απλοποιημένα για ευκολία χρήσης). Εδώ είναι τι πρέπει να γνωρίζετε για τη δημιουργία των δικών σας προσαρμοσμένων αξεσουάρ με βάση αυτό.
- Όλα τα εξαρτήματα πρέπει να ονομάζονται *_accessory.js
- Αλλάξτε τη διεύθυνση IP στη μεταβλητή επιλογών στην κορυφή στον διακομιστή MQTT
- Εάν έχετε ένα διαφορετικό όνομα φακέλου, αναζητήστε / αντικαταστήστε όλες τις εμφανίσεις του "επίσημη"Με το μοναδικό σας όνομα. Μπορείτε να κάνετε μια αναζήτηση / αντικατάσταση στο Nano πατώντας CTRL και \, πληκτρολογώντας τον όρο για να βρείτε, τον όρο που θα αντικαταστήσει και στη συνέχεια χτυπήσει ΕΝΑ (δηλαδή όλες τις περιπτώσεις). Βήμα μέσα από κάθε ένα από αυτά για να μάθετε με ακρίβεια ποιες μεταβλητές ενημερώνονται.
- Δημιουργήστε ένα μοναδικό δεκαεξαδικό όνομα χρήστη για το εξάρτημα (light.username = "1Β: 2Β: 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, μπορείτε να δημιουργήσετε το δικό σας εξάρτημα αρχείου. Υπάρχουν τόσα πολλά δυνατά εδώ, νομίζω ότι θα έχεις πολύ διασκέδαση. Επιτρέψτε μου να γνωρίζω στα σχόλια με τι έρχεστε!
Ο James έχει πτυχίο στην Τεχνητή Νοημοσύνη και είναι πιστοποιημένος με CompTIA A + και Network +. Είναι ο κύριος προγραμματιστής της MakeUseOf, και ξοδεύει τον ελεύθερο χρόνο του παίζοντας VR paintball και boardgames. Κατασκευάζει υπολογιστές από τότε που ήταν παιδί.