Callback HTTP + VirtualHub for Web

Callback HTTP + VirtualHub for Web

Cette semaine, on va parler de notre librairie PHP, des callbacks HTTP et de VirtualHub for Web. Et en particulier comment mixer les trois.

Nous avons déjà écrit plusieurs articles sur les callbacks HTTP et la librairie PHP. Pour rappel, ce mode de fonctionnement permet de réaliser des applications accessibles partout sur internet et de s'affranchir des problèmes de NAT. Nous avons, par exemple, vu comment afficher les rendez-vous de la journée sur Yocto-MaxiDisplay ou comment contrôler à distance le chauffage d'un chalet.

Le mode callback HTTP et la librairie PHP permettent de réaliser presque n'importe quelle application, mais il ne s'agit pas d'une solution clef en main. C'est au client de développer sa propre application.

Il a quelques mois, nous avons publié un nouvel outil, VirtualHub for Web, qui permet d'accéder à distance aux modules. Les fonctionnalités sont les mêmes que pour la version native de VirtualHub avec quelques limitations. Concrètement, VirtualHub for Web est une application que nous avons écrite en utilisant la librairie PHP et le mode callback HTTP.

Nous allons voir comment réaliser un système qui utilise à la fois VirtualHub for Web et une application PHP qui utilise un callback HTTP.

Utiliser le callback HTTP et VirtualHub for Web


Pour des raisons techniques, les YoctoHubs ne peuvent se connecter qu'à un seul callback HTTP. Il faut donc configurer le YoctoHub pour qu'il se connecte au callback HTTP de l'application. Puis utiliser la fonction YAPI::ForwardHTTPCallback pour passer la main à VirtualHub for Web.

La méthode YAPI::ForwardHTTPCallback permet de passer la main à VirtualHub for Web
La méthode YAPI::ForwardHTTPCallback permet de passer la main à VirtualHub for Web



L'exemple de l'article Utiliser le mode callback HTTP en PHP qui commute un relai en fonction de la température ambiante, peut être modifié pour que l'on puisse utiliser en parallèle VirtualHub for Web.

Pour ce faire, il faut ajouter un appel à la méthode YAPI::ForwardHTTPCallback en lui passant en argument l'URL que l'on configurerait normalement sur le YoctoHub. Par exemple si notre VirtualHub for Web est installé sur http://www.example.com/VHu4Web/ le paramètre est "http://www.example.com/VHu4Web/HTTPCallback".

Voici ce code du callback HTTP avec la redirection vers VirtualHub for Web.

<?php
include('Sources/yocto_api.php');
include('Sources/yocto_temperature.php');
include('Sources/yocto_relay.php');

YAPI::RegisterHub("callback");
YAPI::ForwardHTTPCallback("http://www.example.com/VHu4Web/HTTPCallback");

$t = YTemperature::FirstTemperature();
if (is_null($t)){
    die("No temperature sensor found");
}
$r = YRelay::FirstRelay();
if (is_null($r)) {
    die("No temperature sensor found");
}
$value = $t->get_currentValue();
if ($value>25)
    $r->set_state(YRelay::STATE_B);
if ($value<24)
    $r->set_state(YRelay::STATE_A);

Print("temperature = $value\n");
YAPI::FreeAPI();
?>



Notez, l'appel à YAPI::ForwardHTTPCallback est exécuté avant la partie du code qui commute le relai en fonction de la température. Cela veut dire que le code du script va overrider les potentielles commandes que VirtualHub for Web a envoyées. Dans ce cas précis, il ne sera pas possible de changer l'état du relai par le biais de VirtualHub for Web.



Si l'on veut que VirtualHub for Web soit prioritaire, il faut l'appeler en dernier:

<?php
include('Sources/yocto_api.php');
include('Sources/yocto_temperature.php');
include('Sources/yocto_relay.php');

YAPI::RegisterHub("callback");

$t = YTemperature::FirstTemperature();
if (is_null($t)){
    die("No temperature sensor found");
}
$r = YRelay::FirstRelay();
if (is_null($r)) {
    die("No temperature sensor found");
}
$value = $t->get_currentValue();
if ($value>25)
    $r->set_state(YRelay::STATE_B);
if ($value<24)
    $r->set_state(YRelay::STATE_A);

Print("temperature = $value\n");
YAPI::ForwardHTTPCallback("http://www.example.com/VHu4Web/HTTPCallback");
YAPI::FreeAPI();



Les deux solutions sont correctes. En fonction des cas, on préfèrera donner la priorité à VirtualHub for Web ou au script PHP.

Signature MD5


Comme le script retransmet les mêmes données à VirtualHub for Web, le mot de passe utilisé pour la signature MD5 doit être le même partout. Le YoctoHub, le script PHP et VirtualHub for web doivent utiliser la même signature MD5


La signature MD5 du YoctoHub
La signature MD5 du YoctoHub



....
YAPI::RegisterHub("md5:mypass@callback");
YAPI::ForwardHTTPCallback("http://www.example.com/VHu4Web/HTTPCallback");
...



La signature MD5 du VirtualHub for Web doit être identique
La signature MD5 du VirtualHub for Web doit être identique



HTTPS


La méthode YAPI::ForwardHTTPCallback supporte le protocole HTTPS.

YAPI::ForwardHTTPCallback("https://www.example.com:443/VHu4Web/HTTPCallback");



Il faut toutefois que PHP autorise les connexions sortantes et que les certificats soient configurés. En fonction des installations et de votre serveur web, il sera peut-être nécessaire de modifier votre fichier php.ini.

Conclusion


Comme vous venez de le voir, il est possible d'utiliser VirtualHub for Web en parallèle de vos scripts PHP. Cette fonctionnalité est très intéressante pour modifier quelques paramètres des modules à distance sans devoir ajouter du code au script PHP. Dans notre exemple, cela permet de consulter les températures mini et maxi sans avoir à modifier le code.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.