IPX800 v5 : Source de données

Bonsoir,

C’est certainement sous mes yeux, mais je ne trouve pas le menu pour gérer les sources de données.

A priori ce n’est pas présenté dans le mode d’emploi. Je souhaiterai ajouter une source json.

Merci :slight_smile:

Bonjour Thierry15,
les sources de données n’existent plus sous la forme habituelle (V4).
Il faut utiliser l’API restful dans des widgets HTML
bonne soirée

Bonsoir @fgtoul ,

J’ai bien créé une APIKEY, puis un widget en HTML, mais ensuite j’ai uniquement « téléversement » ou « ouvrir éditeur » dans les options du widget, rien qui ressemble a une API.

Je laisse tomber pour le moment, rien d’urgent.

Merci bonne soirée

mini tuto grâce à un exemple de retranscription d’un widget V4 par @Jeremy_GCE, pendant les bétatests :

sur V4, il fallait créer une source de données, puis l’utiliser en javascript :

let EtatGarage = ([((datasources["MonIPX800"]["response"]["btn0"]))])

if (EtatGarage=="0") {
  Lockcolor="#FF0000"; // red
  Verrou="glyphicons glyphicons-unlock x2";
  Etat="Porte ouverte";
} else if (EtatGarage=="1") {
  Lockcolor="#32CD32";  // green
  Verrou="glyphicons glyphicons-lock x2";
  Etat="Porte fermée";
}

return `
<table width='100%'>
  <tr>
    <td align=center valign=middle width='30%'><span style='color: ${Lockcolor}'class='${Verrou}'</span></td>
    <td align=right valign=middle width='40%'><span style='color:${Lockcolor};font-size: 15px;'>${Etat}</span></td> 
    <td align=right valign=middle width='40%'><span style='color:${Lockcolor};font-size: 15px;'>${EtatGarage}</span>
    </td> 
  </tr>
</table>
`;

Sur V5, il n’y a pas de source de données à créer, par contre il faut faire les appels à l’API par script Javascript.
Le Widget HTML de la V5 attend du code HTML, le javascript sera donc inséré dans les balises <script>.....</script>
Voici la transcription du widget précédent :

<script type="text/javascript">
  /* Get state and set widget */
  function init() {
    let lockColor,
        lockIcon,
        stateMsg;
    
    getState((ipx) => {
      let garageState = ipx.ioRelays[0]; // Isolated relay state
      
      if (garageState == "off") {
        lockColor = "#FF0000"; // red
        lockIcon = "icon-lock-open_security";
        stateMsg = "Porte ouverte";
      } else if (garageState == "on") {
        lockColor = "#32CD32";  // green
        lockIcon = "icon-lock-open_security";
        stateMsg = "Porte fermée";
      }
      
      setIcon(lockIcon, lockColor);
      setMessage(stateMsg, lockColor);
      setState(garageState, lockColor);
    });
  }
  /***/
  
  /* Get data from API */
  function getState(cb) {
    fetch("/api/system/ipx?ApiKey=myApiKey", {method: "GET"}).then((ret) => { // Get IPX object
      ret.json().then((ipx) => {
        cb(ipx); // Return IPX state from API
      });
    });
  }
  /***/
  
  /* Set icon and color */
  function setIcon(icon, color) {
    let myIcon = document.getElementById("myIcon");
    myIcon.style.color = color;
    myIcon.classList.add(icon);
  }
  /***/
  
  /* Set state message */
  function setMessage(text, color) {
    let msg = document.getElementById("myStateMsg");
    msg.style.color = color;
    msg.innerHTML = text;
  }
  /***/
  
  /* Set garage state */
  function setState(text, color) {
    let garage = document.getElementById("myGarageState");
    garage.style.color = color;
    garage.innerHTML = text;
  }
  /***/
  
  /* Auto refresh (optional) */
  function autoRefresh() {
    setInterval(() => {
      init();
    }, 1000); // 1 sec
  }
  /***/
  
  init();
  autoRefresh(); // Optional
</script>

<table width='100%' style="padding: 10px">
  <tr style="display: flex; align-item: center; justify-content: space-between">
    <!--Icon -->
    <td>
      <i id="myIcon" class="gce-glyph"></i>
    </td>
    <!---->
    
    <!-- State message -->
    <td>
      <span id="myStateMsg" style='font-size: 15px'></span>
    </td>
    <!---->
    
    <!-- Garage state -->
    <td>
      <span id="myGarageState" style='font-size: 15px;'></span>
    </td>
    <!---->
  </tr>
</table>

Vous aurez besoin de consulter la doc de l’API V5 afin de lancer les bonnes requêtes au travers de la commande fetch

IPX800 V5 Ressources (gce-electronics.com)

5 « J'aime »

Merci, je regarderai ça a tête reposée… Je ne pensai pas que ce serai aussi complexe par rapport a la V4

Bonjour @fgtoul ,

la doc de l’API ne m’a pas apportée de réponse, je ne souhaite pas contrôler l’IPX par API, mais que l’IPX se connecte a une source externe json.

Pour le moment j’ai un début d’embryon de connexion par html, mais même si cela devait finir par fonctionner, je ne vois pas comment l’utiliser ensuite dans un scénario…au mieux j’aurai un widget fonctionnel (ce qui n’est pas le but final).

Cdt

Bonjour Thierry,

Le widget HTML n’est actif que sur le PC qui exécute le navigateur, il devra donc être actif 7/24, tout comme les datasources sur V4.
Pour se connecter à un Json externe, il faut tout programmer en javascript dans le widget, en s’appuyant sur l’exemple fourni (avec la commande fetch dont la requête est à adapter).
La V5 peut être entièrement pilotée via son API, sans passer par des Push externes.
La valeur Json peut donc être passée à une variable de l’ipx800 v5 sans problème (grâce à l’API v5) pour une utilisation dans les scènes.

Bonjour @Thierry15,

Il est possible d’interagir avec un JSON externe en utilisant l’objet « PUSH »:

  • Récupération d’un JSON (stocké dans la variable STR « [Push N°0]Response »)

  • Écriture dans un JSON (si l’origine du fichier permet sa modification)


    Note: il est également possible d’utiliser des variables avec la syntaxe $id$ (id étant l’id de la ressources à récupérer, par exemple une analogue: $262145$)

Il est ensuite possible d’afficher la valeur du JSON sur un dashboard via le code HTML suivant (à adapter si besoin)


Note: Ici on affiche la clé « key1 » récupéré plus tôt via un push

Actuellement il n’est pas possible d’utiliser des STR dans le moteur de scénario.

L’IPX800_V5 va continuer d’évoluer, plusieurs objet permettant de manipuler des STR sont déjà envisagé (ex: recherche, comparaison, parse, etc…) et devrais encore augmenter les possibilités.

Pouvez-vous nous apporter plus de précisions sur ce que vous souhaitez faire afin que nous puissions vous guider au mieux ?

Cordialement.

5 « J'aime »

Bonsoir @JB_GCE,

Merci pour toutes ces explications et ces informations, je vais faire de nouveaux tests.

BIen-sûr, a terme j’aurai un module arduino qui fournira la hauteur d’eau de ma réserve d’eau de pluie (sonar étanche), d’un anémomètre et de 2 capteurs de pressions (de 0.5 à 4.5v: pour piscine et réseau d’eau potable) au format json.

Ces différents capteurs ne sont pas adaptés a l’IPX, certains peuvent être adaptés mais au prix d’un forte perte de résolution que je préfère éviter si possible.

Ce que je souhaite c’est récupérer ces données pour les utiliser dans des scénarios, mais ça n’a rien d’urgent, j’ai plusieurs mois devant moi pour trouver une solution (pour ne pas dire un an).
D’ici là il y aura peut-être eu des mises a jours qui modifierons certaines fonctions.

Au pire, même si ce n’était pas possible d’ici un an, je ne regretterai pas mon achat, bien au contraire :wink:

Ce que j’ai mal compris c’est une expression lu sur le forum: « tout ce qui traverse la V5 ou ses accessoires et accessible ». Et c’est vrai, je l’ai simplement mal interprétée. Je ne fait aucun reproche :slight_smile:

L’IPX v5 est un excellent produit, et s’il faut adapter/bidouiller pour connecter 2 ou 3 objets exotiques que pratiquement personne n’utilise ne me dérange pas.

Félicitations a toute l’équipe GCE :+1:

2 « J'aime »

Bonjour @Thierry15,

Dans ce cas là, l’usage de l’objet MQTT est peut être plus adapté, votre Adruino doit envoyer ces données sur un broker MQTT installé sur votre réseau (cf. Mosquitto), il sera alors possible de lire les données souhaitez et de les utiliser dans le moteur de scénario (en tout cas pour ce qui concerne les valeurs numérique via les analogues ou boolean avec les IO).

Cordialement.

Bonjour @JB_GCE,

Et dire qu’il n’y a pas si longtemps que ça j’ai critiqué Mosquito pour son apparente complexité…
Il n’y a que les idiots qui ne changent pas d’avis :smirk:

J’ai justement un ESP32 en stock depuis un moment, je vais voir s’il peut se transformer en broker, je souhaite éviter de dépendre d’un serveur externe.

Merci beaucoup pour le temps que vous m’avez consacré :smiley:

Cordialement

2 « J'aime »

Bonjour Thierry15,

comme quoi… :wink:

Merci de nous faire un retour d’expérience détaillé lorsque vous serez au point.

Bonne journée

1 « J'aime »

Bonjour Thierry, un esp32 pour un broker peut être limite mais c’est possible, par exemple ici sur github, avec un nombre limité de clients ce qui semble être votre cas. Sinon, on peut installer mosquitto ou équivalent sur certains NAS (Synology, QNAP, …) ou sur un Raspberry même un peu ancien. Bon courage.

1 « J'aime »

Bonsoir @Thierry_59, mon Synology n’est malheureusement pas compatible avec Docker.
J’ai regardé et effectivement un ESP8266 est un peu limite. L’ESP32 est a priori largement suffisant, mais les rares librairies sont très limitées il n’y a que quelques fonctions de bases…qui fonctionnent plus ou moins bien…

Je ne sais pas encore quoi faire… :face_with_monocle:

En tout cas merci des conseils :slight_smile:

Bonjour @Thierry15 , il n’est pas nécessaire de passer par Docker, il existe un package de la communauté Synology, la procédure est expliquée ici, cela n’a pas l’air si simple et je n’ai pas testé, j’ai recyclé un vieux Mac Mini pour héberger les services qui tournent 24/24.

Bonjour Thierry, j’ai eu la chance de trouver chez un vendeur Français un PI4 /4G « en stock », comme tout le reste c’est devenu une denrée rare. C’est un peu overkill, je le reconnais mais ça peu aussi servir a d’autres choses: mon NAS n’est plus tout jeune (DS114) :smirk:

4 messages ont été scindés en un nouveau sujet : V5 : lecture datasource sur V4

Bonjour,

Merci pour vos infos, elles m’ont été très utiles.
Je me suis fait mon petit serveur Mosquitto sur PI 4, je tiens a tout garder en local.
Le système MQTT est très performant, il surpasse de loin les Push et autre Http en vitesse de
transmission.
Lorsque depuis mon PC (Wifi) je modifie un topic sur le PI (RJ45), l’IPX réagi instantanément, c’est comme appuyer sur un interrupteur :flushed:.
Depuis un simple arduino j’ai trouvé comment modifier un topic, j’ai encore quelques réglages a faire mais tout est parfait :+1:
Si j’ai le temps je me ferai un petit tuto histoire de sauvegarder ce que j’ai fait, si ça vous dit je peux le partager. Il n’y aura rien d’extraordinaire, j’ai utilisé Linux pour la première fois il y a moins d’une semaine, mais pour un débutant peut-être ?
Merci bonne journée :slight_smile:

2 « J'aime »

Meme retour d’expérience que toi @Thierry15, le MQTT est très performant.

Pour ton Mosquitto, je te recommande de le mettre sous Docker, c’est bcp plus facile à maintenir et faire évoluer dans el temps.

Tu peux aller voir mon mini tuto pour plus d’infos sur la config Linux.

Bonjour, si un jour j’y suis obligé pourquoi pas, mais mon objectif est de garder le maximum de ressources pour en faire un NAS. J’ai d’ailleurs installé Pi OS version Lite (sans graphique) pour cette raison.
Il est même probable que Docker utilise plus de ressources que Mosquitto.

Ne perdons pas de vue que Mosquitto est avant tout conçu pour être le plus léger possible :wink: