IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Accès Shelly H&T par PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut Accès Shelly H&T par PHP
    Bonsoir,
    Je n'ai pas une grande connaissance dans l'usage des objets connectés, donc soyez indulgent si je ne comprend pas de suite les réponses !
    J'équipe actuellement ma maison en domotique en utilisant des Shellys.
    Celui qui me pose problème est le Shelly H&T, capteur de température et d'humidité.
    Je souhaite automatiser l'initialisation de l'url qui permet au Shelly d'envoyer ses mesures (report_url).
    Cette url a la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://196.162.0.10:8888/Shelly/Shelly.php
    Je dois pour cela développer une fonction PHP dans laquelle j'utilise une instance curl.
    Pour préciser, j'ai déjà developpé une fonction (plutôt une méthode statique) qui me permet de récupérer les données de la batterie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected static function getBatteryDatas($inDeviceIP,$inPsw=null)
    	{
    		$url = 'http://';
    		if ($inPsw)
    			$url .= 'admin:' . $inPsw . '@';
    		$url .= $inDeviceIP . '/status';
    		$curl = curl_init($url);
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    		$json = curl_exec($curl);
    		$data = json_decode($json, true);
    		curl_close($curl);
    		return $data['bat'];
    	} /* getBatteryDatas */
    Mon problème est de comprendre comment peut-on écrire cette url à assigner à "urls".
    Ci-dessous le json dans laquelle figure l'url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GET /settings/actions
     
    {
      "actions": {
        "report_url": [
          {
            "index": 0,
            "urls": [],
            "enabled": false
          }
        ],
    J'espère avoir été clair et merci à celui ou celle qui viendra m'aider.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 253
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 253
    Points : 8 544
    Points
    8 544
    Billets dans le blog
    17
    Par défaut
    Je ne pense pas que cURL soit nécessaire. Ceci devrait être suffisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected static function getBatteryDatas($inDeviceIP, $inPsw = null)
    {
        $url = sprintf('http://%s%s/status', ($inPsw !== null ? "admin:{$inPsw}@" : ''), $inDeviceIP);
        $json = file_get_contents($url);
        $data = json_decode($json, true);
        return $data['bat'];
    }
    Avec les contextes on peut même faire des requêtes POST => stream_context_create()

    Concernant ta question première, je ne comprends pas bien ce que tu cherches à faire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GET /settings/actions
     
    {
      "actions": {
        "report_url": [
          {
            "index": 0,
            "urls": [],
            "enabled": false
          }
        ],
    Les requêtes HTTP GET n'ont pas de corps de requête, contrairement à POST ou PUT. Vérifie la doc de ton API/SDK, ils doivent préciser le format exact de la requête et donner des exemples.

  3. #3
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut Suite
    Bonjour Séb,

    D'abord, merci de ton aide.
    Le problème est qu'il n'existe pas d'api/sdk pour ce genre de matériel.
    N'y a-t-il donc pas de possibilité d'initialiser cette structure (report_url) comme par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    urls[0]='http://192.168.10:8888/Shelly/Shelly.php'
    enabled = true
    J'ai déjà procedé de cette façon pour le Shelly 2.5 en mode volet roulant dont voici la méthode pour initialiser le temps d'une ouverture complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public static function setSettings($inDeviceIP,$inFeature,$inValue,$inPsw=null)
    		{
    			$url = 'http://';
    			if ($inPsw)
    				$url .= 'admin:' . $inPsw . '@';
    			$url .= $inDeviceIP . '/settings/roller/0?';
    			$command = $inFeature . '=' . $inValue;
    			$curl = curl_init($url);
    			curl_setopt($curl, CURLOPT_POST, true);
    			curl_setopt($curl, CURLOPT_POSTFIELDS, $command);
    			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    			$response = curl_exec($curl);
    			curl_close($curl);
    			return $response;
    		} /* setSettings */
    Lorsque j'obtient la durée d'une ouverture complète, exprimée en seconde, j'effectue l'appel suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PHPShelly_RollerShutter::setSettings($inDeviceIP,'maxtime_open',strval($openingDuration));
    $inDeviceIP transmet l'adresse IP du Shelly
    'max_time' est une propriété mémorisant une valeur entière positive stricte.
    $openingDuration correspond à la durée d'une ouverture complète.

    En fait, j'aimerai procéder de cette façon pour initialiser report_url.

  4. #4
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 797
    Points
    797

  5. #5
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut
    Bonjour unanonyme,

    Je connais ce site, c'est d'ailleurs celui que j'utilise.
    Ma question est comment je peux effectuer l'initialisation comme je l'ai expliqué plus haut.
    Le problème est au niveau des tableaux "urls".
    Je viens de constater que pour le shelly 2.5, puisqu'il dispose de deux relais, on accède au premier par l'écriture:

    J'essaierai ce soir si je parvient à initialiser une url par ce biais du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    http://192.168.0.21/settings/actions/report_url/0?enabled=true
    http://192.168.0.21/settings/actions/report_url/0/urls/0?http://192.168.0.10:8888/Shelly/Shelly.php
    '192.168.0.21' étant l'IP du shelly.
    '192.168.0.10' étant l'IP du serveur

  6. #6
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 797
    Points
    797
    Par défaut
    Je ne suis pas certain d'avoir compris comment ces choses fonctionnaient.
    Ce sont des URLs que le device utilise de manière autonome pour pousser de la données ?

    Cependant, je note que dans la doc, la syntaxe est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://192.168.33.1/settings/actions?index=0&name=out_on_url&enabled=true&urls[]=http://192.168.1.4/on&urls[]=http://192.168.1.5/on
    Notamment, name=out_on_url et &urls[]=http://192.168.1.4/on, ce dernier paramètre est répété.

    La valeur index, j'ai du mal à comprendre. C'est une valeur en rapport avec les appareils connectés à ce device ?
    C'est pas clair pour moi, pas d'expérience dans ce domaine.

  7. #7
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut
    Bonsoir unanonyme,

    Merci pour ta réponse. Je vois ça demain.

    A+

  8. #8
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut
    Bonjour unanonyme,

    J'ai essayé ton idée. Cela ne fonctionne pas.
    J'ai essayé la mienne, idem.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://192.168.0.22/settings/actions/report_url/0?enabled=true&urls[]=http://192.168.0.10:8888/Shelly/Shelly.php
    J'obtient le json:

    Nom : ShellyHnT.jpg
Affichages : 121
Taille : 51,6 Ko

    Je vais continuer à chercher…

    Merci de ton intervention.

    NEW: Finalement, j'ai déposé un ticket d'assistance sur le site de Shelly. A suivre…

  9. #9
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 797
    Points
    797
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://192.168.33.1/settings/actions?index=0&name=report_url&enabled=true&urls[]=[....]
    ?

  10. #10
    Membre régulier
    Homme Profil pro
    Aucun
    Inscrit en
    Avril 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Avril 2008
    Messages : 78
    Points : 79
    Points
    79
    Par défaut
    Génial unanonyme !
    Merci, c'est ça. Quelle fantaisie ! C'est la première fois que je vois ce genre de construction !
    Je suis vraiment content.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2019, 17h06
  2. accès à une image après vérification par php
    Par sakini dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2007, 21h38
  3. sécuriser l'accès à un fichier flash (par php)
    Par melonmaudic dans le forum Flash
    Réponses: 1
    Dernier message: 29/11/2006, 13h51
  4. [MySQL] Accès MySQL par PHP
    Par Badaboumpanpan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2006, 16h41
  5. Réponses: 7
    Dernier message: 18/03/2006, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo