Étape 5: Plus d’infos sur le Code
Le code utilise ajax et json pour la synchronisation de l’interface web pour le SBC et la mangouste pour le serveur web (tant les jquery et mangouste source fichiers nécessaires sont dans le dossier du projet pour vous). Cela permet à la page Web afficher les mises à jour en temps réel de la SBC de manière assez propre.
homeAutomation.c est le cœur de celui-ci, alors commençons là.
Globals
En haut du fichier homeAutomation.c sont les définitions globales. Vous aurez besoin définir le numéro de série de la SBC que vous utilisez, mettez le mot de passe système (celui utilisé pour la connexion à l’interface web), l’index des capteurs et l’index de la lumière que vous êtes commander. Dans ce cas, le numéro de série est 250000, le mot de passe est le mot de passe, le capteur de lumière est sur 0 d’entrée, le capteur de sons est sur entrée 2 et la lumière de la lampe est sur sortie 0.
#define SbcSerial 250000
#define SbcSystemPassword "PASSWORD"
#define LightSensorIndex 0
#define SoundSensorIndex 2
#define Output_Light1Index 0
Lorsque vous ajoutez plusieurs Phidgets, vous pouvez les ajouter aux macros globales aussi bien.
Aussi, nous avons mis quelques numéros d’étalonnage et créé un CPhidgetInterfaceKitHandle global pour nos Sbc, que nous avons nommée McflySbc.
Interpréter les données entrantes et étalonnage
Certaines valeurs de calibration sont également mis en haut. Les valeurs de la cellule photoélectrique changent de Phidget à Phidget alors cocher l’autocollant attaché à la sonde pour le m et b valeurs et ceux en type.
#define LightCalibrationMValue 1.478777
#define LightCalibrationBValue 33.67076
La fonction get_data
gère les requêtes ajax-canalisé pour les messages, comme valeurs de capteur. Lors de l’ajout de capteurs plus vous les mettrez dans ce code dans un autre " else if (!strncmp(request_info->query_string, "sound", reqlen))...
" comme instruction de condition. Vous pouvez copier et coller les instruments existants et modifier la formule dans le cercle intérieur si déclaration en tant que nécessaire. Consultez le guide de l’utilisateur de l’appareil pour des formules et valeurs, mais les sons et lumière sont déjà faits.
Contrôle de sortie
La fonction set_data envoie des messages à la SBC pour modifier les États de sortie (comme transformer une lumière allumé ou éteint). Requêtes arrivent via Ajax, comme « light1On » et « light1Off » et l’état de sortie approprié est défini sur le SBC. Vous pouvez vous connecter plus de lumières dans ce mode (remplacez le 1 par ordre croissant des numéros), ou d’autre chose que vous voulez contrôler autour de la maison (mais soyez prudent lorsque vous travaillez avec électricité et assurez-vous que vous savez ce que vous faites, ou demandez à quelqu'un qui le fait, avant de jouer avec les courants électriques).
Gestionnaire d’événements
L’event_handler relie le get_data
et set_data
fonctionne lorsque Ajax obtient un get_data
ou send_message
demander, respectivement. Rien à perdre son temps ici.
Fixer le Kit d’Interface
SbcAttach
met en place le kit d’interface sur le SBC avec le ratiométrique, affecte le déclencheur du changement capteur 1 pour capteurs ci-joint et le débit de données aussi bien. Lorsque vous ajoutez plus de capteurs que vous devrez les ajouter à la liste et mettre le débit à quelque chose dans les centaines de bas gamme. Pour les entrées ne l’utilisez pas, nous avons mis le débit pour 1000 ms.
Index.html est le visage du programme... comme la plupart des pages web, vous savez comment cela fonctionne.
Nous utilisons jquery et certains css très simples. fichier jquery est disponible en ligne et dans les fichiers source pour ce projet. style.CSS est assez basique, donc il ne sera pas être expliqué ici, mais n’hésitez pas à jouer avec elle ou utiliser votre propre feuille de style. Vous pouvez consulter un tutoriel CSS sur W3 Schools.
Mise en place des requêtes Ajax
Nous commençons avec du javascript qui définit l’intervalle pour les demandes de données de la SBC via Ajax. Tous les capteurs devront être chargé tout de suite et ensuite vérifié périodiquement. Vous pouvez définir différents capteurs d’avoir différents intervalles en mettant dans setInterval différentes méthodes et en changeant le deuxième paramètre est le nombre de millisecondes que vous souhaitez entre les requêtes de données. Vous devez préciser toutes vos sondes un nom unique et descriptif. Notez que dans cet exemple nous allons également à détecter si notre lumière attaché à la SBC est activée ou désactivée.
Nous avons aussi des éléments avec l’ID « light1On » et « light1Off » que, lorsque vous cliquez dessus, nous voulons envoyer une demande via Ajax à la SBC. Nous définissons ici la fonctionnalité onclick. Chaque élément (bouton ou image ou ce que vous voulez changer la sortie) devra son propre ID unique et descriptif.
window.onload = function() {
var turnon1 = document.getElementById("light1On");
var turnoff1 = document.getElementById("light1Off");
turnon1.onclick = function() {
$("light1On").load('/ajax/send_message?light1On');
return false;
}
turnoff1.onclick = function() {
$("light1Off").load('/ajax/send_message?light1Off');
return false;
}
}
Notez que nous gardons le nom de l’id de l’élément (comme « light », « output_light1 » et « light1Off »), le même que le message est envoyé via Ajax pour le programme c. Si le code s’affiche également à la fin de la requête Ajax (c.-à-d. /ajax/get_data?light
pour l’élément « feu » et /ajax/send_message?light1On
pour l’élément « light1On »). Vous pouvez modifier ces messages et assurez-vous que la variable à la fin de la requête Ajax correspond à ce qui est dans votre programme c, mais vous pouvez imaginer combien déroutant il obtiendrait, alors nous vous suggérons de garder les mêmes.
La page Web Enfin, le corps. Les cellules d’un tableau où nous voulons que les valeurs du capteur soient affichés sont donnés les ID que nous habitués à mettre en place les requêtes ajax. Cela rend afin que leur contenu est mis à jour à chaque nouvelle demande de get_data, décrit un peu plus tôt.
Aussi, les cellules de tableau que nous voulons utiliser pour contrôler les lumières sont donnés les ID appropriés (« light1On » et « light1Off ») afin que lorsqu’ils sont cliqués la fonction onclick envoie la requête Ajax.
Vous pouvez ajouter plusieurs lignes de la table pour les capteurs différents, ce qui donne de la cellule où vous voulez que vos données affichent l’id que vous avez choisi (comme "température", si vous aviez un capteur de température).