Je veux attirer votre attention sur une série d'articles sur les modules de contrôle Laurent de KernelChip . Dans cette série, je vais vous expliquer comment intégrer ces modules dans votre maison intelligente, comment apprendre à les gérer à partir du système domotique populaire MajorDoMo , des croquis Arduino, du système Arduino Mega Server et même comment utiliser ces modules dans un but complètement inattendu - pour enseigner à vos enfants la programmation en traitement.
En général, les modules qui sont assez intéressants en eux-mêmes peuvent être très utiles de manière inattendue dans les ménages si vous les approchez avec une certaine imagination et créativité.Pourquoi Laurent?
Parce que ces modules fonctionnent avec succès dans mon système Smart Home depuis longtemps (plus de trois ans) et j'ai acquis une certaine expérience dans leur utilisation et j'ai quelque chose à dire à leur sujet. Et j'ai aussi une certaine expérience et un code prêt à l'emploi et testé pour la gestion de ces modules, que je veux partager avec vous.Et vous pourrez développer vos solutions logicielles à partir de ce code, ce sera assez simple, car j'ai déjà fait l'essentiel du travail. De plus, le code sera expliqué en détail, ce qui contribue certainement à votre compréhension de son fonctionnement, à l'apprentissage de la programmation et à la construction de systèmes de maison intelligente.Modules eux-mêmes
Lorsque j'ai choisi pour moi une solution toute faite pour gérer les charges électriques à travers le réseau, Laurent m'a soudoyé avec l'exhaustivité et la simplicité de la solution. Pour commencer à contrôler le réseau et à éteindre les appareils et l'éclairage, presque rien n'était nécessaire. Il n'était pas nécessaire d'apprendre le langage de programmation, il n'était pas nécessaire de souder quoi que ce soit, il suffisait de connecter le module au réseau local, de connecter la charge aux bornes du relais (et n'oubliez pas d'alimenter le module lui-même) et c'était tout. Après cela, il a été possible d'envoyer des commandes directement à partir de l'ordinateur (à partir du programme du terminal). Le module a immédiatement commencé à allumer et éteindre docilement la lumière selon mes commandes. A cette époque, je n'en avais pas besoin de plus.Je peux dire sur les modules eux-mêmes que pendant toute la période de fonctionnement, il n'y a pas eu de plantage et de gel, tout a fonctionné et fonctionne «comme une horloge», ce qui, en fait, est requis de ces modules pour fonctionner.Conception et qualité de construction
Il suffit de regarder le module pour montrer clairement qu'il a été développé pour une raison, «si seulement», mais a essayé de faire quelque chose de vraiment digne. Je n'ai également rien à redire sur la qualité de construction, tout est fait avec soin et comme il se doit: pas de pièces tordues, des taches de soudure ou quelque chose comme ça, tout est clair et soigné. Dans l'ensemble, la qualité de construction ne diffère pas des composants informatiques "de marque" et de l'Arduino "d'usine".La seule chose que je ferais si je libérais ces modules moi-même était d'installer des bornes multicolores pour connecter les fils au lieu de bornes monochromes, au moins de mettre en évidence les bornes de connexion d'alimentation, mais c'est ainsi, petite pioche (tout, bien sûr, est soigneusement signé).Quel est le premier article de la série?
Toutes les informations sont divisées en trois articles finis logiquement. Le premier article portera sur l'intégration des modules Laurent à MajorDoMo, une plateforme domotique open source populaire. Des exemples spécifiques et du code PHP seront fournis.Le deuxième article concerne l'intégration avec l'écosystème Arduino. Vous pouvez gérer les modules à partir de vos croquis individuels ou intégrer Laurent au Arduino Mega Server (qui est également basé sur le code Arduino) et gérer les Laurents à partir d'une interface pratique ou automatiquement, selon le programme. Des solutions toutes faites et du code testé seront également fournis.Et dans le troisième - sur la gestion des modules Laurent à partir d'esquisses sur le traitement. C'est-à-dire directement depuis le bureau de votre ordinateur personnel. Le même article décrira comment accroître l'intérêt des enfants pour l'apprentissage des programmes et quel rôle ces modules peuvent jouer dans ce domaine.La série est consacrée à l'intégration des modules Laurent aux systèmes domotiques et ne prend pas en compte l'architecture et le fonctionnement des modules eux-mêmes. Cela a été décrit dans d'autres articles avec lesquels vous pouvez lire 1 , 2 , 3 et sera discuté plus tard. Ici, nous nous concentrons uniquement sur l'intégration.En cours de rédaction d'articles, le module Laurent avec firmware La01 et la version d'interface web LW1.0 a été utilisé, c'est-à-dire le module très «combat» qui fonctionne depuis trois ans. Dans les nouvelles versions des modules, les détails d'implémentation peuvent différer légèrement, mais la compatibilité avec les équipes de contrôle est préservée, donc tout ce qui est dit ici est également vrai pour les modifications plus récentes.Fonctionnement de la gestion des modules
Tous les échanges d'informations avec les modules sont effectués sur le réseau et pour commencer à travailler avec eux, vous devez établir une connexion TCP / IP sur le port 2424. Une fois la connexion établie, vous pouvez envoyer des commandes de texte (dites commandes KE) qui contrôlent le module. Le site Web KernelChip contient une documentation détaillée, y compris une description accessible des commandes KE.KernelChip s'est occupé des utilisateurs et a fourni à ses modules une interface Web pratique, mais il s'agit d'un «contrôle manuel», et la commodité, la valeur et l'utilité de la solution augmenteront d'une commande si nous apprenons à gérer le module à partir de notre maison intelligente.
L'interface Web est protégée par mot de passe par défaut et pour voir le contenu de la page Web, vous devez entrer le nom d'utilisateur "admin" et le mot de passe "Laurent".Majordome
Le système MajorDoMo est assez populaire et je ne m'y attarderai pas ici en détail. Il est supposé que vous avez déjà installé ce système et que vous l'avez utilisé pendant un certain temps. Pour ceux qui ne sont pas du tout à jour, j'expliquerai qu'il s'agit d'une plate-forme domotique ouverte qui fonctionne sur Windows et Linux et qui est basée sur un serveur Web et est une sorte de CMS spécialisé (système de gestion de contenu) avec de larges capacités et "affûté" pour automatisation de la maison.Les possibilités de MajorDoMo sont vraiment infinies et la gestion des modules Laurent n'est qu'un des talents de ce système.Détails techniques
MajorDoMo incorpore le fichier laurent.class.php, qui se trouve dans le répertoire\htdocs\lib\
Code complet 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);
}
?>
et contient tout ce dont vous avez besoin pour travailler avec les modules Laurent. Ce fichier contient des fonctions dans le langage de programmation PHP et, probablement, sous forme finie ou avec des modifications minimes, peut être transféré vers n'importe quel système utilisant ce langage de programmation. Donc, si vous avez un projet Smart Home sur une autre plateforme, vous pouvez essayer d'intégrer Laurent à votre système en utilisant ce fichier.La fonction principale utilisée pour contrôler le module estlaurent_command('< >', '<>', '< >');
par exemple,$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
, où '192.168.2.19' est l'adresse IP du module, '$ KE, INF' est la commande elle-même, 'Laurent' est le mot de passe (par défaut).Le résultat du travail de la fonction entre dans la variable $ result, c'est-à-dire la réponse du module, que vous pouvez analyser et interpréter à l'aide des outils de langage PHP standard. Le mot de passe est spécifié tel qu'il est par défaut. Si vous avez changé le mot de passe pour accéder à votre module, vous devrez le remplacer par un nouveau et dans l'appel de fonction.Tout doit être clair avec l'équipe, vous pouvez prendre toutes les commandes du répertoire et gérer le module comme vous le souhaitez. L'adresse IP ne devrait pas non plus poser de problème. Spécifiez simplement l'adresse IP que votre module Laurent possède réellement.Vous pouvez terminer la théorie avec ceci et maintenant je vais vous montrer avec un exemple pratique comment faire le contrôle de la lumière (ou d'un appareil) directement à partir du menu MajorDoMo.Exemple pratique
À titre d'exemple pratique, examinons la création de deux boutons «Activer» et «Désactiver» dans le menu principal du système MajorDoMo. Avec ces boutons, vous pouvez allumer ou éteindre la lumière ou tout autre appareil électrique (ici, il suffit de se rappeler que les relais installés sur le module ne sont pas en mesure de contrôler directement une charge puissante comme une cuisinière électrique ou un chauffe-eau).Donc, nous créons le bouton "Activer", pour cela nous allons dans le panneau d'administration de MajorDoMo et entrons le nom d'utilisateur et le mot de passe (admin / admin par défaut) et cliquez sur "OBJETS / Menu Contrôle" puis sur le gros bouton vert "Ajouter une nouvelle section".
Ensuite, nous trouvons la liste déroulante "Type" et sélectionnons "Bouton" parmi toute la variété de types présentés et cliquez sur "Enregistrer".
Ensuite, sélectionnez "élément de menu parent" est l'endroit où notre bouton "accroche". Je l'ai Laurent, et vous pouvez avoir n'importe quel élément de menu pratique. Par défaut, il y a "ROOT", ce qui signifie que le bouton sera visible immédiatement, sans cliquer sur aucun élément de menu.Dans le champ de saisie "Titre", écrivez ce que vous voulez qu'il soit écrit sur le bouton. Et enfin, dans le champ Code, écrivez le code de la fonction laurent_command que nous connaissons déjà:laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
Ici c'est la même chose que dans l'exemple théorique, seule la variable $ resultat manque (on n'en a pas besoin) et la commande est remplacée par '$ KE, REL, 2,1', ce qui signifie activer le relais n ° 2.Nous faisons de même pour le bouton "Désactiver", n'oubliez pas de changer le nom du bouton et au lieu de '$ KE, REL, 2.1' écrire '$ KE, REL, 2.0', ce qui signifie désactiver le relais n ° 2:laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
C'est tout. Nous rechargeons la page avec l'interface MajorDoMo, deux nouveaux boutons apparaissent qui allument et éteignent les lumières (ou l'appareil) directement à partir de l'interface MajorDoMo magnifiquement et presque sans délai. Ce que nous voulions réaliser.Contrôle automatique
Essayons maintenant de contrôler le module automatiquement, sans intervention humaine. Vous verrez maintenant que c'est encore plus simple que d'utiliser les boutons pour contrôler le module.
On retrouve dans le menu principal du panneau d'administration de MajorDoMo l'élément «Objets», cliquez dessus, puis on retrouve l'objet «ClockChime» et sa méthode «onNewMinute». Nous avons besoin de lui. Pour ceux qui ne sont pas au courant, il s'agit de la méthode «centrale» MajorDoMo, qui est appelée toutes les minutes et est très populaire. C'est dans cette méthode qu'il existe de nombreuses fonctions et appels de script qui fournissent les fonctionnalités utilisateur du système.
Et tout ce que nous devons faire est d'ajouter notre code à cette méthode. Par exemple, considérez cette situation. Votre module Laurent contrôle l'éclairage nocturne dans la cour de votre maison. Et vous, par exemple, souhaitez que la lumière s'allume à 21h00 et s'éteigne à 7h30 du matin. Rien de plus simple, voici le code que vous devez ajouter à la méthode onNewMinute: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');
}
Et c'est tout! Vous devez admettre que ce n’est pas difficile du tout. Ce n'est qu'un exemple, la logique du travail peut être absolument n'importe laquelle et très sophistiquée. Et les talents des modules Laurent ne se limitent pas à allumer et éteindre des charges, leur fonctionnalité est beaucoup plus large, mais ce n'est pas le sujet de cet article, nous ne considérons ici que les problèmes d'intégration avec des exemples simples.Réception et sortie des données du module
Et le dernier exemple sera comment obtenir et afficher les informations reçues du module Laurent sur la page Web de MajorDoMo.MajorDoMo est un système orienté objet et tout le travail s'y déroule à travers la création d'objets et l'utilisation de leurs données (variables) et méthodes (code programme). Un peu difficile? En fait, ça va et maintenant vous verrez par vous-même.
Ainsi, pour un exemple nous utiliserons l'objet déjà existant "ThisComputer" et nous lui ajouterons une nouvelle propriété "test". Pour ce faire, cliquez sur l'élément de menu "Objets" qui nous est déjà familier dans la zone d'administration de MajorDoMo, trouvez l'objet "ThisComputer" et cliquez sur l'élément "Propriétés", faites défiler vers le bas et trouvez le champ de saisie "Ajouter une nouvelle propriété", entrez "test" et cliquez sur "Actualiser" (laissez la valeur vide).
Sur ce point, les opérations préparatoires peuvent être considérées comme terminées, nous avons ajouté une nouvelle propriété «test» à l'objet «ThisComputer», que nous utiliserons dans nos expérimentations.Maintenant, notre tâche est de demander les informations nécessaires au module Laurent et de les mettre dans la propriété (variable) du «test» de l'objet «ThisComputer». Comment faire ça? Très simple.Ajoutez ce code à la méthode onNewMinute que nous connaissons déjà:$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result);
Et chaque minute MajorDoMo demandera au module les informations nécessaires et mettra à jour la variable «test», que nous pouvons utiliser selon nos besoins. Par exemple, afficher sur une page Web. Pour ce faire, nous plaçons le code suivant à n'importe quel endroit de la page dont nous avons besoin:%ThisComputer.test%
C'est ce qu'on appelle. une macro qui, lors du chargement d'une page, substitue la valeur de la variable au lieu d'elle-même, stockée dans la propriété "test" de l'objet "ThisComputer". Et par conséquent, vous voyez des informations transmises par le module Laurent en réponse à votre demande sur la page Web.Comment ajouter une macro à la page? Nous allons dans le menu d'administration et sélectionnons l'élément "Pages d'accueil" et sélectionnons n'importe quelle page que vous voulez ou créez-en une en utilisant le gros bouton vert "Nouvelle page". Et ajoutez la macro à l'emplacement souhaité sur la page.Total
Voilà donc tout. Armé des informations de cet article, vous pouvez vous sentir comme un vrai maître des Laurents et intégrer ces modules dans votre système Smart Home. Et dans le prochain article de la série, vous apprendrez à gérer les modules à partir de vos croquis sur Arduino et du système Arduino Mega Server .