Ich möchte Sie auf eine Reihe von Artikeln zu den Laurent-Steuerungsmodulen von KernelChip aufmerksam machen . In dieser Serie werde ich Ihnen erklären , wie Sie diese Module in Ihr Smart Home integrieren, wie Sie sie mit dem beliebten MajorDoMo -Hausautomationssystem , mit Arduino-Skizzen, mit dem Arduino Mega Server-System verwalten und sogar wie Sie diese Module für einen völlig unerwarteten Zweck anwenden - für Bringen Sie Ihren Kindern das Programmieren in Verarbeitung bei.
Im Allgemeinen können Module, die an und für sich sehr interessant sind, in Haushalten unerwartet sehr nützlich sein, wenn Sie sich ihnen mit einem gewissen Maß an Fantasie und Kreativität nähern.Warum Laurent?
Weil diese Module in meinem Smart Home-System seit langer Zeit (mehr als drei Jahre) erfolgreich funktionieren und ich einige Erfahrungen in der Verwendung gesammelt habe und etwas darüber zu erzählen habe. Außerdem habe ich Erfahrung und vorgefertigten, getesteten Code für die Verwaltung dieser Module, den ich mit Ihnen teilen möchte.Und Sie werden in der Lage sein, Ihre Softwarelösungen basierend auf diesem Code zu entwickeln. Das wird ganz einfach, da ich den größten Teil der Arbeit bereits erledigt habe. Darüber hinaus wird der Code ausführlich erläutert, was sicherlich dazu beiträgt, dass Sie verstehen, wie er funktioniert, Programmieren lernen und Smart-Home-Systeme erstellen.Module selbst
Als ich mich für eine vorgefertigte Lösung für die Verwaltung elektrischer Lasten über das Netzwerk entschied, bestach mich Laurent mit der Vollständigkeit und Einfachheit der Lösung. Um das Netzwerk ein- und ausschalten zu können, wurde fast nichts benötigt. Es war nicht notwendig, die Programmiersprache zu lernen, es war nicht notwendig, etwas zu löten, es war ausreichend, das Modul mit dem lokalen Netzwerk zu verbinden, die Last an die Relaisklemmen anzuschließen (und nicht zu vergessen, das Modul selbst mit Strom zu versorgen) und das war alles. Danach war es möglich, Befehle direkt vom Computer (vom Terminalprogramm) zu senden. Das Modul begann sofort, das Licht gemäß meinen Befehlen gehorsam ein- und auszuschalten. Mehr brauchte ich damals nicht.Ich kann über die Module selbst sagen, dass es während des gesamten Betriebs keine Abstürze und Einfrierungen gab, alles funktionierte und „wie eine Uhr“ funktioniert, was tatsächlich von solchen Modulen benötigt wird, um nur zu funktionieren.Design und Bauqualität
Es reicht aus, nur das Modul zu betrachten, um zu verdeutlichen, dass es aus einem Grund „wenn nur“ entwickelt wurde, aber versucht hat, etwas wirklich Wertvolles zu tun. Ich habe auch keine Beschwerden über die Verarbeitungsqualität, alles ist ordentlich gemacht und wie es sein sollte: keine krummen Teile, Lötflecken oder ähnliches, alles ist klar und ordentlich. Im Großen und Ganzen unterscheidet sich die Verarbeitungsqualität nicht von den "Marken" -Computerkomponenten und dem "Fabrik" -Arduino.Das einzige, was ich tun würde, wenn ich diese Module selbst freigeben würde, wäre, mehrfarbige Klemmen zum Anschließen von Drähten anstelle von einfarbigen Klemmen zu installieren, zumindest die Stromanschlussklemmen hervorzuheben, aber es ist so, kleine Auswahl (alles ist natürlich ordentlich signiert).Worum geht es im ersten Artikel der Serie?
Alle Informationen sind in drei logisch fertige Artikel unterteilt. Der erste Artikel konzentriert sich auf die Integration von Laurent-Modulen in MajorDoMo, eine beliebte Open-Source-Plattform für die Hausautomation. Spezifische Beispiele und PHP-Code werden angegeben.Der zweite Artikel befasst sich mit der Integration in das Arduino-Ökosystem. Sie können die Module anhand Ihrer individuellen Skizzen verwalten oder Laurent in den Arduino Mega Server (der ebenfalls auf dem Arduino-Code basiert) integrieren und die Laurents über eine praktische Oberfläche oder automatisch je nach Programm verwalten. Vorgefertigte Lösungen und getesteter Code werden ebenfalls angegeben.Und im dritten - über die Verwaltung von Laurent-Modulen anhand von Skizzen zur Verarbeitung. Das heißt, direkt vom Desktop Ihres Heimcomputers. In demselben Artikel wird beschrieben, wie das Interesse der Kinder am Programmierlernen gesteigert werden kann und welche Rolle diese Module in dieser Angelegenheit spielen können.Die Serie widmet sich der Integration von Laurent-Modulen in Hausautomationssysteme und berücksichtigt nicht die Architektur und den Betrieb der Module selbst. Dies wurde in anderen Artikeln beschrieben, mit denen Sie 1 , 2 , 3 lesen können , und wird später erläutert. Hier konzentrieren wir uns nur auf die Integration.Beim Schreiben der Artikel wurde das Laurent-Modul mit La01-Firmware und die LW1.0-Webinterface-Version verwendet, dh das seit drei Jahren funktionierende „Kampf“ -Modul. In neuen Versionen von Modulen können sich die Implementierungsdetails geringfügig unterscheiden, die Kompatibilität mit Steuerungsteams bleibt jedoch erhalten, sodass alles, was hier angegeben wird, auch für neuere Änderungen gilt.So funktioniert die Modulverwaltung
Der gesamte Informationsaustausch mit den Modulen erfolgt über das Netzwerk. Um mit ihnen arbeiten zu können, müssen Sie eine TCP / IP-Verbindung an Port 2424 herstellen. Sobald die Verbindung hergestellt ist, können Sie Textbefehle (sogenannte KE-Befehle) senden, die das Modul steuern. Die KernelChip-Website enthält eine detaillierte Dokumentation, einschließlich einer zugänglichen Beschreibung der KE-Befehle.KernelChip kümmerte sich um die Benutzer und stellte seinen Modulen eine praktische Weboberfläche zur Verfügung. Dies ist jedoch eine „manuelle Steuerung“. Der Komfort, der Wert und der Nutzen der Lösung werden um einen Auftrag erhöht, wenn wir lernen, das Modul von unserem Smart Home aus zu verwalten.
Die Weboberfläche ist standardmäßig durch ein Passwort geschützt. Um den Inhalt der Webseite anzuzeigen, müssen Sie den Benutzernamen "admin" und das Passwort "Laurent" eingeben.Haushofmeister
Das MajorDoMo- System ist sehr beliebt und ich werde hier nicht näher darauf eingehen. Es wird davon ausgegangen, dass Sie dieses System bereits installiert und einige Zeit damit gearbeitet haben. Für diejenigen, die überhaupt nicht auf dem neuesten Stand sind, erkläre ich, dass dies eine offene Hausautomationsplattform ist, die unter Windows und Linux läuft und auf einem Webserver basiert und eine Art spezialisiertes CMS (Content Management System) mit umfassenden Funktionen ist und für das „geschärft“ wird Heimautomatisierung.Die Möglichkeiten von MajorDoMo sind wirklich endlos und die Verwaltung von Laurent-Modulen ist nur eines der Talente dieses Systems.Technische Details
MajorDoMo enthält die Datei laurent.class.php, die sich im Verzeichnis befindet\htdocs\lib\
Vollständiger Code laurent.class.php<?
function laurent_command($host, $command, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
socket_close($socket);
return trim($res);
}
function laurent_getStat($host, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$command='$KE,DAT,ON';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
$started=0;
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "#TIME,"))) {
if (!$started) {
$started=1;
} else {
break;
}
}
}
$command='$KE,DAT,OFF';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
sleep(1);
socket_write($socket, $in, strlen($in));
socket_write($socket, $in, strlen($in));
socket_close($socket);
return trim($res);
}
?>
und enthält alles, was Sie für die Arbeit mit Laurent-Modulen benötigen. Diese Datei enthält Funktionen in der Programmiersprache PHP und kann wahrscheinlich in fertiger Form oder mit minimalen Änderungen mit dieser Programmiersprache auf jedes System übertragen werden. Wenn Sie also ein Smart Home-Projekt auf einer anderen Plattform haben, können Sie versuchen, Laurent mithilfe dieser Datei in Ihr System zu integrieren.Die Hauptfunktion zur Steuerung des Moduls istlaurent_command('< >', '<>', '< >');
z.B,$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
, wobei '192.168.2.19' die IP-Adresse des Moduls ist, '$ KE, INF' der Befehl selbst ist, 'Laurent' das Passwort ist (Standard).Das Ergebnis der Arbeit der Funktion wird in die Variable $ result eingegeben, dh die Antwort des Moduls, die Sie mit Standard-PHP-Sprachtools analysieren und interpretieren können. Das Passwort wird standardmäßig angegeben. Falls Sie das Passwort für den Zugriff auf Ihr Modul geändert haben, müssen Sie es im Funktionsaufruf durch ein neues ersetzen.Mit dem Team sollte alles klar sein. Sie können alle Befehle aus dem Verzeichnis übernehmen und das Modul nach Ihren Wünschen verwalten. Die IP-Adresse sollte ebenfalls keine Probleme verursachen. Geben Sie einfach die IP-Adresse an, über die Ihr Laurent-Modul wirklich verfügt.Sie können die Theorie damit beenden, und jetzt zeige ich Ihnen anhand eines praktischen Beispiels, wie Sie die Lichtsteuerung (oder eine Gerätesteuerung) direkt über das MajorDoMo-Menü vornehmen können.Praktisches Beispiel
Schauen wir uns als praktisches Beispiel die Erstellung der beiden Schaltflächen "Einschalten" und "Ausschalten" im Hauptmenü des MajorDoMo-Systems an. Mit diesen Tasten können Sie das Licht oder ein elektrisches Gerät ein- oder ausschalten (hier müssen Sie nur daran denken, dass die am Modul installierten Relais eine starke Last wie einen Elektroherd oder einen Warmwasserbereiter nicht direkt steuern können).Also erstellen wir die Schaltfläche "Aktivieren". Gehen Sie dazu zum MajorDoMo-Administrationsbereich, geben Sie den Benutzernamen und das Kennwort ein (standardmäßig admin / admin) und klicken Sie auf "OBJEKTE / Steuerungsmenü" und dann auf die große grüne Schaltfläche "Neuen Abschnitt hinzufügen".
Als nächstes finden wir die Dropdown-Liste "Typ" und wählen "Schaltfläche" aus der Vielzahl der angezeigten Typen und klicken auf "Speichern".
Als nächstes wählen Sie "Übergeordneter Menüpunkt" ist die Stelle, an der unsere Schaltfläche "einhakt". Ich habe es Laurent, und Sie können jeden bequemen Menüpunkt haben. Standardmäßig gibt es "ROOT", was bedeutet, dass die Schaltfläche sofort sichtbar ist, ohne auf einen Menüpunkt zu klicken.Schreiben Sie in das Eingabefeld "Titel", was Sie möchten, dass es auf die Schaltfläche geschrieben wird. Und schließlich schreiben Sie in das Feld Code den uns bereits bekannten Funktionscode laurent_command:laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
Hier ist es dasselbe wie im theoretischen Beispiel, nur die Variable $ result fehlt (wir brauchen sie nicht) und der Befehl wird durch '$ KE, REL, 2,1' ersetzt, was bedeutet, dass Relais Nr. 2 aktiviert wird.Wir machen dasselbe für die Schaltfläche "Ausschalten", vergessen Sie jedoch nicht, den Namen der Schaltfläche zu ändern, und schreiben Sie anstelle von "$ KE, REL, 2.1" "$ KE, REL, 2.0", was bedeutet, dass Relais Nr. 2 ausgeschaltet wird:laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
Das ist alles. Wir laden die Seite mit der MajorDoMo-Oberfläche neu. Es erscheinen zwei neue Schaltflächen, mit denen die Lichter (oder die Appliance) direkt über die MajorDoMo-Oberfläche schön und fast unverzüglich ein- und ausgeschaltet werden können. Was wir erreichen wollten.Automatische Kontrolle
Versuchen wir nun, das Modul ohne menschliches Eingreifen automatisch zu steuern. Jetzt werden Sie sehen, dass es noch einfacher ist, als die Tasten zur Steuerung des Moduls zu verwenden.
Wir finden im Hauptmenü des MajorDoMo-Administrationsbereichs das Element "Objekte", klicken darauf, dann finden wir das Objekt "ClockChime" und seine Methode "onNewMinute". Wir brauchen ihn. Für diejenigen, die sich nicht auskennen, ist dies die „zentrale“ Methode MajorDoMo, die jede Minute aufgerufen wird und sehr beliebt ist. Bei dieser Methode gibt es viele Funktionen und Skriptaufrufe, die die Benutzerfunktionalität des Systems bereitstellen.
Und alles, was wir tun müssen, ist unseren Code zu dieser Methode hinzuzufügen. Betrachten Sie zum Beispiel diese Situation. Ihr Laurent-Modul steuert die Nachtbeleuchtung im Innenhof Ihres Hauses. Sie möchten beispielsweise, dass das Licht um 21.00 Uhr eingeschaltet und um 7.30 Uhr morgens ausgeschaltet wird. Nichts ist einfacher, hier ist der Code, den Sie der onNewMinute-Methode hinzufügen sollten:if (timeIs('21:00')) {
laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
}
if (timeIs('7:30')) {
laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
}
Und alle! Sie müssen zugeben, dass es überhaupt nicht schwierig ist. Dies ist nur ein Beispiel, die Logik der Arbeit kann absolut beliebig und sehr ausgefeilt sein. Und die Talente von Laurent-Modulen enden nicht mit dem Ein- und Ausschalten von Lasten, ihre Funktionalität ist viel umfassender, aber dies ist nicht das Thema dieses Artikels. Hier werden Integrationsprobleme nur anhand einfacher Beispiele betrachtet.Moduldaten empfangen und ausgeben
Das letzte Beispiel ist das Abrufen und Anzeigen von Informationen, die vom Laurent-Modul empfangen wurden, auf der MajorDoMo-Webseite.MajorDoMo ist ein objektorientiertes System, in dem alle Arbeiten durch die Erstellung von Objekten und die Verwendung ihrer Daten (Variablen) und Methoden (Programmcode) stattfinden. Etwas schwierig? Eigentlich ist es okay und jetzt wirst du es selbst sehen.
Als Beispiel verwenden wir das bereits vorhandene Objekt "ThisComputer" und fügen ihm eine neue Eigenschaft "test" hinzu. Klicken Sie dazu im MajorDoMo-Administrationsbereich auf das uns bereits bekannte Menüelement „Objekte“, suchen Sie das Objekt „ThisComputer“ und klicken Sie auf das Element „Eigenschaften“, scrollen Sie nach unten und suchen Sie das Eingabefeld „Neue Eigenschaft hinzufügen“, geben Sie „Test“ ein und klicken Sie auf "Aktualisieren" (lassen Sie den Wert leer).
Da die vorbereitenden Vorgänge als abgeschlossen betrachtet werden können, haben wir dem Objekt "ThisComputer" eine neue Eigenschaft "test" hinzugefügt, die wir in unseren Experimenten verwenden werden.Unsere Aufgabe ist es nun, die notwendigen Informationen vom Laurent-Modul anzufordern und in die Eigenschaft (Variable) des "Tests" des Objekts "ThisComputer" zu stellen. Wie macht man das? Sehr einfach.Fügen Sie diesen Code der bereits bekannten onNewMinute-Methode hinzu:$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result);
Und jede Minute fragt MajorDoMo das Modul nach den erforderlichen Informationen und aktualisiert die Testvariable, die wir nach Bedarf verwenden können. Zum Beispiel auf einer Webseite anzeigen. Dazu platzieren wir den folgenden Code an einer beliebigen Stelle auf der Seite, die wir benötigen:%ThisComputer.test%
Dies ist das sogenannte. Ein Makro, das beim Laden einer Seite den Variablenwert anstelle von sich selbst ersetzt und in der Eigenschaft "test" des Objekts "ThisComputer" gespeichert ist. Infolgedessen sehen Sie auf der Webseite Informationen, die vom Laurent-Modul als Antwort auf Ihre Anfrage übertragen wurden.Wie füge ich der Seite ein Makro hinzu? Wir gehen zum Admin-Menü und wählen den Eintrag "Startseiten" und wählen eine beliebige Seite aus oder erstellen eine neue mit der großen grünen Schaltfläche "Neue Seite". Fügen Sie das Makro an einer beliebigen Stelle auf der Seite hinzu.Zwischensumme
Das ist also alles. Mit den Informationen aus diesem Artikel können Sie sich wie ein echter Meister der Laurents fühlen und diese Module in Ihr Smart Home-System integrieren. Im nächsten Artikel aus der Reihe erfahren Sie, wie Sie Module anhand Ihrer Skizzen auf Arduino und des Arduino Mega Server-Systems verwalten .