cover image
< Αρχική
Iot

Έλεγχος φωτιστικών LED ZigBee με την εφαρμογή Go Web App

Κανονικά, όταν αγοράζετε ένα οικιακό φωτιστικό που θέλετε να ελέγχετε ηλεκτρονικά, πρέπει να εγκαταστήσετε προσαρμοσμένο λογισμικό. Αλλά με το πρωτόκολλο ZigBee και την πύλη RaspBee II, μπορείτε να χρησιμοποιήσετε συμβατές συσκευές και λογισμικό ανοιχτού κώδικα. Σε αυτό το άρθρο θα σας δείξω πώς να προσθέσετε μια προσαρμοσμένη υπηρεσία Go API στη στοίβα. Στο παρακάτω διάγραμμα, μπορείτε να δείτε τη στοίβα λογισμικού που χρησιμοποιώ για το έργο:

Στοίβα λογισμικού

ZigBee

Το ZigBee είναι μια προδιαγραφή βασισμένη στο IEEE 802.15.4 για μια σουίτα πρωτοκόλλων επικοινωνίας υψηλού επιπέδου που χρησιμοποιείται για τη δημιουργία προσωπικών δικτύων περιοχής με μικρά, χαμηλής ισχύος ψηφιακά ραδιόφωνα. Χρησιμοποιείται συχνά στον οικιακό αυτοματισμό, αλλά και σε άλλα πλαίσια, όπως η βιομηχανική παραγωγή ή οι ιατρικές συσκευές. Το βασικό χαρακτηριστικό του είναι ότι δεν καταναλώνει πολλή ενέργεια. Ως εκ τούτου, μπορεί συχνά να λειτουργεί με μπαταρία για μεγάλο χρονικό διάστημα. Η άλλη όψη του νομίσματος αυτού είναι ότι ο ρυθμός δεδομένων του είναι επίσης χαμηλός. Αλλά για το άναμμα και το σβήσιμο των φώτων αυτό είναι αρκετό. Όταν αγοράζετε μια συσκευή που επιτρέπει το ZigBee, όπως μια λωρίδα φωτός LED, χρειάζεστε μια πύλη για τον έλεγχο της συσκευής.

Πύλη RaspBee II

Μια τέτοια πύλη ZigBee είναι η Raspbee II gateway που χρησιμοποιώ για αυτό το άρθρο. Το RaspBee II αναπτύχθηκε από την Dresden Elektronik στη Γερμανία και είναι μια κάρτα επέκτασης που ταιριάζει σε ένα τυπικό Raspberry Pi. Το RaspBee II συνοδεύεται από μια εφαρμογή λογισμικού που ονομάζεται "deCONZ" και διασυνδέεται με το υλικό.

Το σπουδαίο με το deCONZ είναι ότι μπορείτε να το ενσωματώσετε εύκολα με το Home Assistant, επιτρέποντάς σας έτσι να ελέγχετε την πύλη ZigBee απευθείας μέσα από το Home Assistant.

Home Assistant

Home Assistant είναι μια ευρέως χρησιμοποιούμενη εφαρμογή οικιακού αυτοματισμού ανοικτού κώδικα. Αναπτύχθηκε αρχικά από τον Paulus Schoutsen και κυκλοφόρησε αρχικά το 2013. Είναι γραμμένο σε Python και διαθέτει διαδικτυακό περιβάλλον εργασίας, αλλά κυκλοφορεί και εφαρμογές για κινητά. Στο Home Assistant μπορείτε να προσθέσετε το deCONZ ως ενσωμάτωση. Με αυτόν τον τρόπο, οι συσκευές σας ZigBee που αναγνωρίζονται από το deCONZ είναι επίσης διαθέσιμες στο Home Assistant. Στη συνέχεια, μπορείτε να ρυθμίσετε απλές ρουτίνες αυτοματισμού. Για παράδειγμα, αν έχετε μια συσκευή ανιχνευτή κίνησης, θα μπορούσατε να προσθέσετε μια ρουτίνα αυτοματισμού που κάθε φορά που ανιχνεύεται μια κίνηση, τα φώτα ανάβουν. Αλλά για τον σκοπό μας, θέλουμε να ενσωματώσουμε το MQTT και να ελέγξουμε τα φώτα μέσω του MQTT.

Mosquitto

Το MQTT είναι ένα ελαφρύ πρωτόκολλο δημοσίευσης-συνδρομής που χρησιμοποιείται συχνά σε σενάρια οικιακού αυτοματισμού. Οι εφαρμογές μπορούν να επικοινωνούν μεταξύ τους με έναν μηχανισμό ανταλλαγής μηνυμάτων publish-subscribe. Στην περίπτωσή μας το χρησιμοποιώ για τον έλεγχο της κατάστασης των φώτων LED.

Αλλά πρώτα, πρέπει να εγκαταστήσουμε έναν μεσίτη MQTT. Ένας δημοφιλής μεσίτης MQTT ανοιχτού κώδικα είναι το Eclipse Mosquitto. Είναι εύκολο στην εγκατάσταση και τη διαμόρφωση. Στην περίπτωσή μου το εγκατέστησα μαζί στο ίδιο μηχάνημα όπου εκτελείται το Home Assistant. Στη συνέχεια, ρυθμίζετε έναν αυτοματισμό στο Home Assistant που αντιδρά στα μηνύματα που λαμβάνονται σε ένα κανάλι MQTT και ενεργοποιεί ή απενεργοποιεί τα φώτα LED. Μπορείτε να δείτε τη διαμόρφωσή μου στο ακόλουθο στιγμιότυπο οθόνης:

Home Assistant MQTT

Ως θέμα MQTT επέλεξα το "/homeassistant/sleep-light", αλλά η ονομασία εξαρτάται από εσάς. Απλά πρέπει να είναι συνεπής με την Go εφαρμογή ιστού που θα προγραμματίσουμε αργότερα και η οποία δημοσιεύει ένα μήνυμα MQTT. Μόλις ο Home Assistant ρυθμιστεί, ακούει για εισερχόμενα μηνύματα MQTT στο θέμα "/homeassistant/sleep-light" και αλλάζει ανάλογα το φως LED. Τώρα πρέπει να δημιουργήσουμε ένα REST API και μια απλή εφαρμογή ιστού για τον έλεγχο των φώτων.

Go App

Για τη συγγραφή του REST API και της απλής εφαρμογής ιστού, επέλεξα την Go ως γλώσσα προγραμματισμού. Με την Go είναι εύκολο να μεταγλωττιστεί σε επεξεργαστές αρχιτεκτονικής ARM. Επίσης, η ανάπτυξη είναι απλή στο Raspberry Pi. Αυτός είναι ο πηγαίος κώδικας της εφαρμογής Go:

package main

import (
	"fmt"
	"os"

	mqtt "github.com/eclipse/paho.mqtt.golang"
	"github.com/gofiber/fiber/v2"
)

func main() {
	broker := "tcp://your-server:1883"
	clientID := "go-mqtt-publisher"
	topic := "/homeassistant/sleep-light"
	message := "TOGGLE"

	opts := mqtt.NewClientOptions().AddBroker(broker).SetClientID(clientID)
	client := mqtt.NewClient(opts)
	if token := client.Connect(); token.Wait() && token.Error() != nil {
		fmt.Println(token.Error())
		os.Exit(1)
	}

	app := fiber.New()

	app.Get("/", func(c *fiber.Ctx) error {
		return c.SendFile("./public/index.html")
	})

	app.Get("/v1/lights", func(c *fiber.Ctx) error {
		token := client.Publish(topic, 0, false, message)
		token.Wait()

		if token.Error() != nil {
			return c.SendString(token.Error().Error())
		} else {
			return c.SendString("Toggled lights!")
		}
	})

	app.Listen(":3005")
}

Ως πλαίσιο REST API χρησιμοποιώ το Fiber. Η βιβλιοθήκη MQTT είναι η Paho MQTT. Πριν εκτελέσετε αυτή την εφαρμογή Go, πρέπει να προσαρμόσετε το τελικό σημείο "broker" στον διακομιστή σας. Αυτή η εφαρμογή ακούει το τελικό σημείο GET "/v1/lights" και στέλνει ένα μήνυμα MQTT στον Mosquitto MQTT broker. Δεδομένου ότι το Home Assistant ακούει για αυτού του είδους τα μηνύματα MQTT, μόλις επικαλεστείτε το τελικό σημείο REST, τα φώτα LED αλλάζουν. Ένα κομμάτι που λείπει είναι η εφαρμογή ιστού. Πρόκειται για ένα απλό κουμπί που καλεί το τελικό σημείο GET "/v1/lights". Έτσι, τα φώτα αλλάζουν όταν πατηθεί το κουμπί. Εδώ είναι η εφαρμογή ιστού: index.html

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Lights Toggler</title>
  </head>
  <body>
    <button id="myButton" style="font-size: 60px; padding: 10px 20px;">Toggle Lights</button>

    <script>
      document
        .getElementById("myButton")
        .addEventListener("click", function () {
          var xhr = new XMLHttpRequest();
          xhr.open("GET", "http://your-server:3005/v1/lights", true);
          xhr.send();
        });
    </script>
  </body>
</html>

Αυτή η ιστοσελίδα παραδίδεται στο πρόγραμμα περιήγησης μέσω του τελικού σημείου "/", όπως έχει ρυθμιστεί στην εφαρμογή Go Fiber. Στην ιστοσελίδα χρησιμοποίησα την XMLHttpRequest() αντί για την πλέον τυπική fetch(), επειδή η ιστοσελίδα πρέπει να λειτουργεί σε παλαιά προγράμματα περιήγησης για μένα. Αν αυτό δεν ισχύει για εσάς, τότε μπορείτε να αντικαταστήσετε αυτές τις γραμμές με την fetch(). Τώρα μπορείτε να ελέγχετε τα φώτα ZigBee με μια εφαρμογή ιστού και ένα API. Έτσι ολοκληρώνεται η ιστορία μας για το πώς να ελέγχετε τα φώτα LED ZigBee με μια εφαρμογή ιστού. Ελπίζω να απολαύσατε τη βόλτα.

Συμπέρασμα

Όπως θα μπορούσατε να δείτε από αυτό το άρθρο, η ενσωμάτωση ενός LED ZigBee φωτός στη λέξη του προτύπου ιστού όπως το HTTP και οι εφαρμογές ιστού απαιτεί αρκετά κομμάτια. Αλλά ευτυχώς, πολλά κομμάτια είναι ανοιχτού κώδικα και ελεύθερα διαθέσιμα. Είμαι βέβαιος ότι υπάρχουν και άλλοι τρόποι για να επιτευχθεί ο ίδιος στόχος και θα ήθελα πολύ να ακούσω τη δική σας ιστορία. Μπορείτε να επικοινωνήσετε μαζί μου πατώντας το παρακάτω κουμπί επικοινωνίας.

Αναφορές

Cover photo by Dejan Nasteski on Unsplash

Δημοσιευμένο

1 Μαι 2025


Creative Commons License

Το έργο αυτό διατίθεται με άδεια Creative Commons Attribution 4.0 International License.
Thomas Derflinger

Γράφει ο Thomas Derflinger

Είμαι ένας οραματιστής επιχειρηματίας και προγραμματιστής λογισμικού. Σε αυτό το ιστολόγιο γράφω κυρίως για τον προγραμματισμό ιστού και συναφή θέματα όπως το IoT.