Domoticz : récupérer les valeurs en PHP

Après avoir installé domoticz sur votre Raspberry Pi (voir cet article), il peut être intéressant de vouloir récupérer les valeurs des capteurs en PHP, pour les stocker dans une base de données. Ainsi, vous pourriez les utiliser sur votre site web.

domoticz

Mon exemple de test : un site météo basique pour mon village.

Domoticz étant bien fait, il dispose d’une entrée qui n’attends que vous et votre script PHP.

Il y a toutefois un petit prérequis, vous devez avoir activé l’extension CURL sur votre hébergement qui va exécuter le script. Rien de bien méchant. Une fois que c’est fait (vérifiez avec un phpinfo), vous pouvez vous lancer.domoticz_dispositifs

Je vais simplement vous présenter le script PHP, je pense que si vous êtes là, le stockage en SQL ne devrait pas vous poser de problème.

Rendez vous sur votre interface web domoticz, puis dans le menu Réglages > Dispositifs.

Vous retrouvez un tableau tel que celui ci-contre. Nous avons besoin de la valeur contenu dans la colonne Idx (index). C’est l’identifiant du périphérique que nous allons utiliser dans le script php.

Je vais utiliser pour l’exemple mon périphérique #12. Il s’agit d’un capteur de température et d’humidité sans fil (433Mhz). Les données sont donc récupérées via un adaptateur USB RFXCOM433E.

En PHP, nous allons écrire :

//Sonde température + humidité exterieur
$curl = curl_init("http://192.168.1.100:8080/json.htm?type=devices&rid=12");
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$json = json_decode($result);

echo '<pre>';
print_r($json);
echo '</pre>';

Bien entendu, vous devez remplacer 192.168.1.100:8080 par l’IP et le port d’accès configuré lors de votre installation Quant à id=12, cela correspond bien à la valeur de mon exemple citée plus haut.

Le script va vous renvoyer quelque chose tel que :

stdClass Object
(
    [ActTime] => 1461137962
    [ServerTime] => 2016-04-20 09:39:22
    [Sunrise] => 06:30
    [Sunset] => 20:27
    [result] => Array
        (
            [0] => stdClass Object
                (
                    [AddjMulti] => 1
                    [AddjMulti2] => 1
                    [AddjValue] => 0
                    [AddjValue2] => 0
                    [BatteryLevel] => 100
                    [CustomImage] => 0
                    [Data] => 10.5 C, 65 %
                    [Description] => 
                    [DewPoint] => 4.20
                    [Favorite] => 1
                    [HardwareID] => 3
                    [HardwareName] => RFXCOM433USB
                    [HardwareType] => RFXCOM - RFXtrx433 USB 433.92MHz Transceiver
                    [HardwareTypeVal] => 1
                    [HaveTimeout] => 
                    [Humidity] => 65
                    [HumidityStatus] => Normal
                    [ID] => 8901
                    [LastUpdate] => 2016-04-20 09:39:00
                    [Name] => Extérieur
                    [Notifications] => false
                    [PlanID] => 0
                    [PlanIDs] => Array
                        (
                            [0] => 0
                        )

                    [Protected] => 
                    [ShowNotifications] => 1
                    [SignalLevel] => 6
                    [SubType] => THGR810, THGN800
                    [Temp] => 10.5
                    [Timers] => false
                    [Type] => Temp + Humidity
                    [TypeImg] => temperature
                    [Unit] => 1
                    [Used] => 1
                    [XOffset] => 0
                    [YOffset] => 0
                    [idx] => 12
                )

        )

    [status] => OK
    [title] => Devices
)

Il n’y a plus qu’a choisir les données qu’il vous faut.

Pour récupérer la valeur Humidity par exemple, il faut y accéder de la sorte :

$var = (float) $json->result[0]->Humidity;

Personnellement j’ai précisé que ce serait un flottant, par principe.

Amusez vous bien, domoticz réserve bien d’autre surprises =)

A lire : https://www.domoticz.com/wiki/Extracting_status_and_measuring_values_with_PHP

 

2 commentaires

  • Bonjour,

    Comment faire pour parvenir a voir ce resultat pour 1 sonde en particulier ?

    {
    « temperature »: 25.8,
    « humidity »: 38
    }

    Merci d’avance pour vos lumières 😉

  • Bonjour Benoit.
    Si votre sonde à l’ID 2 par exemple, voilà comment faire :

    $curl = curl_init("http://192.168.1.100:8080/json.htm?type=devices&rid=2");
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    $json = json_decode($result);
    $humidite = (float) $json->result[0]->Humidity;
    $temperature = (float) $json->result[0]->Temp;

    Cordialement

Laisser un commentaire