Inhaltsverzeichnis:
- Schritt 1: Melden Sie sich bei Ihrem AWS-Konto an
- Schritt 2: Erste Schritte mit AWS IOT-"Dingen"
- Schritt 3: Registrieren eines AWS IOT-„Dings“
- Schritt 4: Aktivieren eines Zertifikats
- Schritt 5: Hinzufügen einer Richtlinie zu Ihrem Zertifikat
- Schritt 6: Ersteinrichtung für AWS SNS-Thema
- Schritt 7: Erstellen der Datei Iot-role.trust.json
- Schritt 8: Iot-policy.json-Datei erstellen
- Schritt 9: Erstellen eines AWS SNS-Themas (Teil 1)
- Schritt 10: Erstellen eines AWS SNS-Themas (Teil 2)
- Schritt 11: Erstellen eines AWS SNS-Themas (Teil 3)
- Schritt 12: Erstellen Sie einen Bucket auf Amazon S3
- Schritt 13: Generieren einer AWS-Richtlinie (Teil 1)
- Schritt 14: Generieren einer AWS-Richtlinie (Teil 2)
- Schritt 15: Erstellen von Tabellen für DynamoDB
- Schritt 16: Roomstatus.py
- Schritt 17: Rfid.py
- Schritt 18: Server.py
- Schritt 19: Telegram.py
- Schritt 20: Livestream (camera_pi.py)
Video: Seroma: Serverraum-Manager - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Seroma ist ein All-in-One-Serverraum-Manager, der es Benutzern ermöglicht, den Status der Server (Temperatur und Luftfeuchtigkeit), die Zugangsprotokolle des Serverraums zu überprüfen sowie den Serverraum selbst auf Sicherheitsverletzungen zu überwachen.
Schritt 1: Melden Sie sich bei Ihrem AWS-Konto an
- Bei uns haben wir uns über das AWS-Education-Studenten-Gateway angemeldet, da wir ein Studenten-AWS-Konto haben.
- Gehen Sie im Navigationsmenü oben rechts zum Tab „AWS-Konto“.
- Klicken Sie auf „Gehe zu Ihrem AWS Educate Starter-Konto“
- Öffnen Sie Console, um auf Ihre AWS Management Console zuzugreifen.
Schritt 2: Erste Schritte mit AWS IOT-"Dingen"
- Suchen Sie in der Suchleiste der AWS-Services nach „AWS IoT“.
- Klicken Sie auf „Erste Schritte“, um zum Dashboard der AWS IoT-Konsole zu gelangen, in dem Sie alle in Ihrem AWS-Konto registrierten IoT-Geräte anzeigen können.
Schritt 3: Registrieren eines AWS IOT-„Dings“
- Navigieren Sie in der Navigationsleiste, um Ihre IoT-„Dinge“zu verwalten.
- Klicken Sie auf „Ein Ding registrieren“, wenn Sie noch kein Ding haben. (Wenn Sie bereits etwas haben, klicken Sie auf die Schaltfläche "Erstellen" oben rechts auf dem Bildschirm neben der Registerkarte "Suchen".)
- Klicken Sie auf die erste Schaltfläche mit der Bezeichnung „Ein einzelnes Ding erstellen“.
- Geben Sie als Namen des Dings "RaspberryPi" ein. Für diesen Schritt ist außer dem „Namen“keine weitere Eingabe erforderlich. Klicken Sie anschließend auf Weiter.
Schritt 4: Aktivieren eines Zertifikats
- Klicken Sie im nächsten Schritt auf die Schaltfläche „Zertifikat erstellen“.
- Laden Sie die 4 Download-Links auf der nächsten Seite herunter und speichern Sie sie in einem Arbeitsverzeichnis oder Ordner. Um die Root-CA-Datei zu speichern, klicken Sie mit der rechten Maustaste und speichern Sie unter.
- Klicken Sie auf „Aktivieren“und eine Erfolgsmeldung sollte erscheinen.
- Verwenden Sie Anzeigenamen für die Dateien, indem Sie die Nummern vor jedem Dateinamen entfernen und die Stammzertifizierungsstellendatei in "rootca.pem" umbenennen.
- Klicken Sie auf "Richtlinie anhängen", um fortzufahren.
Schritt 5: Hinzufügen einer Richtlinie zu Ihrem Zertifikat
- Wenn Sie auf der nächsten Seite keine Richtlinie haben, werden Sie aufgefordert, eine über die Schaltfläche „Richtlinie erstellen“zu erstellen.
- Wenn Sie bereits eine Richtlinie haben, klicken Sie unten auf die Schaltfläche „Neue Richtlinie erstellen“.
-
Fügen Sie die folgenden Informationen in das Formular zur Richtlinienerstellung ein.
Name: RaspberryPiSecurityPolicy
Aktion: iot:*
Ressourcen-ARN: *
Effekt: Erlauben
- Ihre Richtlinie sollte dann im Reiter „Richtlinie“unter „Sicherheit“erscheinen.
- Gehen Sie als Nächstes auf die Registerkarte „Zertifikate“, die sich auch unter „Sicherheit“befindet, und hängen Sie Ihre Richtlinie an das zuvor erstellte Zertifikat an.
- Klicken Sie auf der nächsten Seite auf Ihre Richtlinie und dann auf „Anhängen“.
- Auf der Detailseite des von Ihnen erstellten Dings befindet sich auf der Registerkarte „Interact“ein REST-API-Endpunkt, der kopiert und gespeichert werden sollte.
- AWS sollte jetzt über ein Ding verfügen, das an eine Richtlinie angehängt ist und über ein Zertifikat verfügt.
Schritt 6: Ersteinrichtung für AWS SNS-Thema
SSH in Raspberry Pi und installieren Sie AWS CLI mit dem folgenden pip-Befehl:
sudo pip install awscli
AWS CLI enthält eine Funktion zur Befehlsvervollständigung, die jedoch nicht standardmäßig installiert ist. Verwenden Sie den folgenden Befehl, um die Befehlsvervollständigungsfunktion auf der CLI-Schnittstelle des Raspberry Pi zu installieren:
komplett -C aws_completer aws
Konfigurieren Sie AWS CLI mit Zugriffsschlüssel-ID, geheimem Zugriffsschlüssel, AWS-Regionsname und Befehlsausgabeformat mithilfe des folgenden Befehls:
aws konfigurieren
Die Konsole fordert Sie dann auf, die folgenden Informationen einzugeben:
pi@raspberrypi:~ $ aws configure
AWS Access Key ID [None]: „Put your User’s Access Key ID here“AWS Secret Access Key [None]: „Put your User’s Secret Access Key here“Standardregionsname [Keine]: eu-central-1 Standardausgabeformat [Keine]: json pi@raspberrypi:~ $
Schritt 7: Erstellen der Datei Iot-role.trust.json
- Erstellen Sie eine JSON-Datei mit der obigen IAM-Richtlinie mit dem Dateinamen iot-role.trust.json.
- Erstellen Sie die Rolle mithilfe der AWS CLI mit dem folgenden Befehl
aws iam create-role --role-name my-iot-role --assume-role-policy-document file://iot-role-trust.json
Schritt 8: Iot-policy.json-Datei erstellen
- Erstellen Sie eine JSON-Datei mit der obigen Richtlinie mit dem Dateinamen iot-policy.json.
- Erstellen Sie die Rollenrichtlinie mithilfe der AWS CLI mit dem folgenden Befehl:
aws iam put-role-policy --role-name IoTRole --policy-name iot-policy --policy-document file://iot-policy.json
Schritt 9: Erstellen eines AWS SNS-Themas (Teil 1)
- Suchen Sie in der AWS-Services-Suchleiste nach „SNS“-Service oder gehen Sie zu
- Da Sie jetzt keine Themen haben, klicken Sie auf „Neues Thema erstellen“, um ein Thema zu erstellen.
- Geben Sie Ihren Themennamen und Anzeigenamen ein und klicken Sie auf „Thema erstellen“. Wenn alle Schritte erfolgreich waren, wird ein neues Thema angezeigt.
- Klicken Sie auf die Dropdown-Schaltfläche "Aktionen" und dann auf "Themenrichtlinie bearbeiten".
Schritt 10: Erstellen eines AWS SNS-Themas (Teil 2)
- Legen Sie die Richtlinie fest, damit jeder veröffentlichen und abonnieren kann, da dies Einschränkungen eines AWSEducate-Kontos sind.
- Abonnieren Sie dieses Thema, um zu diesem Thema veröffentlichte Updates zu erhalten.
-
Ändern Sie das Protokoll auf „E-Mail“und geben Sie am Endpunkt Ihre E-Mail ein.
- Gehen Sie zu Ihrer E-Mail, in der Sie Ihren Endpunkt eingegeben haben, klicken Sie auf den Bestätigungslink, um Ihr E-Mail-Abonnement zu bestätigen und das Thema zu abonnieren.
- Navigieren Sie zu „AWS IoT“-Diensten, klicken Sie im Navigationsmenü links auf „Act“. Auf dieser Seite werden Ihre Regeln angezeigt und stehen Ihnen zum Anzeigen und Bearbeiten zur Verfügung. Derzeit gibt es keine Regeln für Ihr IoT-Ding, klicken Sie auf „Regel erstellen“.
Schritt 11: Erstellen eines AWS SNS-Themas (Teil 3)
- Geben Sie im Feld Name einen Namen für Ihre Regel ein. Geben Sie im Feld Beschreibung eine Beschreibung für Ihre Regel ein. Wenn wir mit dem Abschnitt Nachrichtenquelle fortfahren, würden wir die aktuellste SQL-Version im Abschnitt „SQL-Version verwenden“auswählen. Geben Sie * in das Attribut ein, um die gesamte MQTT-Nachricht aus dem Thema auszuwählen, in unserem Fall ist unser Thema „TempHumid“.
- Fügen Sie dann eine „SNS“-Benachrichtigungsaktion für Ihre Regel hinzu. Klicken Sie dann auf „Aktion konfigurieren“.
- Wählen Sie auf der Seite „Aktion konfigurieren“das soeben erstellte SNS-Thema und das Nachrichtenformat RAW. Wählen Sie anschließend die Rolle, die Sie gerade mit AWS CLI erstellt haben, und klicken Sie auf „Aktion hinzufügen“.
- Ihre Aktion wird konfiguriert und kehrt zu „Regel erstellen“zurück.
- Klicken Sie auf Bearbeiten, wenn Sie die Regel bearbeiten möchten.
Schritt 12: Erstellen Sie einen Bucket auf Amazon S3
- Suchen Sie in der AWS-Suchleiste nach S3.
- Klicken Sie auf der Amazon S3-Seite auf die Schaltfläche „Create Bucket“, um zu beginnen.
-
Füllen Sie das angezeigte Popup-Formular mit den folgenden Informationen aus:
- Bucket-Name: seroma-bucket (dieser muss für alle vorhandenen Amazon S3-Buckets eindeutig sein)
- Region: USA West (Oregon)
- Kopiereinstellungen: (Ignorieren)
- Überspringen Sie die Schritte 2 bis 3 einfach, indem Sie auf „Weiter“klicken, da nichts geändert werden muss. Klicken Sie in Schritt 4 auf "Bucket erstellen".
- Nach der Erstellung sollten Sie Ihren Bucket auf der Startseite sehen.
Schritt 13: Generieren einer AWS-Richtlinie (Teil 1)
- Klicken Sie auf den von Ihnen erstellten Bucket, um die obige Seite aufzurufen, und fahren Sie dann auf der Registerkarte "Berechtigungen" mit "Bucket-Richtlinie" fort.
- Klicken Sie als Nächstes auf den Link „Richtliniengenerator“unten auf der Seite, um Ihre AWS-Richtlinie zu generieren.
-
Geben Sie im Formular die folgenden Werte ein:
- Richtlinientyp: S3-Bucket-Richtlinie
- Effekt: Erlauben
- Rektor: *
- AWS-Service: Amazon S3
- Aktionen: GetObject
- Amazon-Ressourcenname (ARN): arn:aws:s3:::seroma-bucket
- Klicken Sie nach dem Ausfüllen der Informationen auf Kontoauszug hinzufügen.
- Klicken Sie auf die Schaltfläche „Richtlinie erstellen“.
Schritt 14: Generieren einer AWS-Richtlinie (Teil 2)
- Kopieren Sie die generierten Codes und klicken Sie auf Schließen.
- Kehren Sie zu Ihrem Amazon S3-Bucket-Richtlinieneditor zurück und fügen Sie die zuvor kopierten Codes ein.
- Fügen Sie ein "/*" in die Codes direkt hinter den Ressourcencodes ein, wie in der Abbildung oben, und klicken Sie dann auf Speichern.
- Danach ist Ihr Bucket erfolgreich eingerichtet und einsatzbereit.
Schritt 15: Erstellen von Tabellen für DynamoDB
- Suchen Sie in der AWS Services-Suchleiste nach DynamoDB
-
Klicken Sie auf "Tabelle erstellen" und erstellen Sie 3 Tabellen mit den folgenden Informationen: (Es werden nur "Tabellenname" und "Primärschlüssel" geändert)
- accesslog, pk datetimevalue
- roomstatus, pk datetimevalue
- Personaldaten, pk Benutzername
Schritt 16: Roomstatus.py
Dieser Abschnitt enthält den Code für roomstatus.py, der jede Minute alle Daten zum Serverraum selbst schreibt. Dazu gehören Temperatur, Luftfeuchtigkeit, Bewegung (Bilder und Videos, falls zutreffend) und Zugriffsprotokolle. Es schreibt auch Daten in eine Google-Tabelle, Daten in DynamoDB, Bilder und Videos (falls vorhanden) in S3, zeigt Informationen auf dem LCD-Bildschirm an, sendet eine SMS und eine E-Mail, wenn ein Verdacht auf einen Verstoß vorliegt oder wenn die Temperatur oder Luftfeuchtigkeit unregelmäßig ist.
Um Python-Dateien auszuführen, wechseln Sie in das Verzeichnis, in dem sich die Datei befindet, und geben Sie in die Konsole ein: "sudo python"
Bild 2: Deklarierte Funktionen, um SMS- und E-Mail-Benachrichtigungen zuzulassen und auf S3 hochzuladen
Bild 3: Variablen, die für Funktionen und RPi deklariert sind
Bild 4: Start der Schleife, die die Temperatur- und Feuchtigkeitswerte vom RPi erhält. Es schreibt die Daten auch in eine Google-Tabelle.
Bild 5: Sicherheitsteil der Schleife. Es wird nur von 19:00 bis 7:00 Uhr (außerhalb der Öffnungszeiten) aktiviert. Es wird innerhalb einer Minute auf Bewegung prüfen. Wenn eine Bewegung erkannt wird, nimmt es ein Bild und ein Video auf, lädt es auf S3 hoch und schreibt gleichzeitig Informationen zur späteren Referenz in DynamoDB. Danach sendet es eine SMS und eine E-Mail, wenn etwas unregelmäßig ist.
Bild 6: Das Ende der Schleife. Es schreibt auch Daten in DynamoDB und sendet entsprechende Warnungen. Die letzte Zeile der Schleife lässt das Skript schlafen, bis die nächste Minute erreicht ist.
Schritt 17: Rfid.py
Dieser Abschnitt enthält den Code für rfid.py, der die Funktion hinzufügt, zu verfolgen, wenn ein Mitarbeiter auf den Serverraum zugreift. Es ist auch Teil des Sicherheitsaspekts von Seroma, bei dem ein Mitarbeiter außerhalb der Bürozeiten den Serverraum nicht betreten darf, um eine Datenpanne zu verhindern. Es sendet auch eine E-Mail und SMS an alle Mitarbeiter, wenn ein Verstoß vermutet wird.
Bild 2: Start der RFID-Reader-Logik. Immer wenn eine Karte gegen das Lesegerät gescannt wird, wird die eindeutige ID (uid) der Karte verwendet. Danach versuchen wir, den UID-Wert der Karte in der Staffdata-Tabelle zu finden, um zu sehen, ob die Karte zu einem der Mitarbeiter gehört. Bild 3: Wenn die UID der Karte in der Datenbank vorhanden ist, wird überprüft, ob sie im Büro ist Auszeiten. Wenn dies der Fall ist, werden die übrigen Mitarbeiter per SMS und E-Mail an die abonnierten E-Mail-Adressen benachrichtigt. Wenn es noch während der Bürozeiten ist, schreibt es eine Zeile mit den entsprechenden Daten in die Accesslog-Tabelle in der Datenbank. Es wird auch eine Willkommensnachricht auf dem LCD-Display angezeigt.
Schritt 18: Server.py
Dies ist die Datei server.py. Wir werden das Flask-Framework für das Webportal verwenden. Die in /templates einzufügenden HTML-Dateien werden ebenfalls angehängt.
Bild 1: Erste Route für Flask definiert. Es leitet den Benutzer auf die Anmeldeseite um, wenn er nicht angemeldet ist, und auf die Dashboard-Seite, wenn dies der Fall ist. Definiert auch eine Funktion, die in der Livestream-Funktion verwendet werden soll
Bild 2, 3, 4: Routen für Flask. Es holt Daten aus der DynamoDB-Tabelle und gibt sie dann an die HTML-Dateien zurück, damit sie dort verwendet werden können.
Bild 5: Die letzten 2 Routen für Flask. Es übernimmt die Abmeldefunktion und die Livestream-Funktion. Es gibt auch den Port an, auf dem die Website ausgeführt wird.
Schritt 19: Telegram.py
Dieser Abschnitt enthält den Code für den Telegramm-Bot von Seroma. Es verwendet die Telepot-Bibliothek, um auf die Bot-API von Telegram zu tippen. Es funktioniert, indem es die erhaltenen Anfragen akzeptiert und dem Benutzer die entsprechenden Informationen anzeigt. Der Benutzer kann „Hilfe“eingeben, um eine vollständige Liste der Befehle anzuzeigen.
Bild 1, 2: Um einen Telegramm-Bot einzurichten, müssen Sie BotFather verwenden. Führen Sie einfach die Anweisungen durch, um die HTTP-API zu erhalten, die wir in unserem Code benötigen.
Bild 4: Beispiel einer Funktion, die basierend auf der Anfrage des Benutzers eine bestimmte Anzahl von Datenzeilen aus der Datenbank nimmt
Bild 5: Wie wir die Eingaben des Benutzers aufnehmen und entscheiden, was entsprechend ausgeführt wird.
Schritt 20: Livestream (camera_pi.py)
Wir haben ein neues Feature für unser Serverraum-Überwachungssystem implementiert, einen Live-Stream des Geschehens im Serverraum, auf den jederzeit und überall zugegriffen werden kann. Wie dieser Livestream funktioniert: Es ist eine Funktion, die in Flask zusammen mit der Pi-Kamera ausgeführt wird. Videoframes werden so heruntergeladen, wie es im wirklichen Leben geschieht, sodass Sie tatsächlich sehen können, dass es beim Herunterladen und Zusammenfügen von Videoframes eine leichte Verzögerung (1-2 Sekunden) gibt. Dies wäre ohne Threading nicht möglich, da der Hintergrund-Thread Frames von der Kamera liest und den aktuellen Frame speichert. Das Zusammensetzen all dieser Frames würde dann einen Live-Stream ausgeben.
Bild 2: Dies ist eine separate Datei, in der alle Videobilder gespeichert sind. Wie Sie sehen, verwenden wir das Picamera-Modul, um auf unsere Himbeer-Pi-Kamera zuzugreifen, da wir damit am besten vertraut sind. Wir haben eine Klasse Kamera, damit wir eine Funktion importieren können, als ob es sich um einen Livestream handelt und nicht um mehrere Bilder, die zusammengefügt werden.
Bild 3: Dies ist Teil unserer server.py-Datei, in der der Livestream-Teil codiert ist. Die Hauptklasse, die wir dafür importiert haben, ist die Kamera aus unserer Datei camera_pi.py am Anfang unserer Datei server.py. Wir haben eine Funktion in unserem Stammverzeichnis gen definiert, die jedoch nur verwendet wird, wenn wir zu /video_feed gehen, wo sich unser Live-Stream befindet, wo er diese Funktion durchläuft und den Live-Stream auf der Webseite zurückgibt.