Bonjour la communauté,
Je cherche à récupérer et lire un fichier JSON qui est stocker sur NAS en local depuis mon IPX v5.
J’essayes de créer un PUSH, mais je n’ai que des erreurs en retour !!!
Un petit coup de main me serait bien utile.
Bien amicalement à tous.
Jean-Pierre
Bonjour Jean-Pierre,
Je pense que les CORS sont en cause, c’est verifiable dans la console du navigateur (faire F12 )
Il faut créer un fichier .htaccess dans le dossier web du json pour mettre les bons headers en place.
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Bonjour fgtoul,
Je n’utilise pas Apache comme serveur web mais Nginx. J’ai donc ajouter un fichier lisible par nginx.conf dans le quelle je déclare mes Headers.
Mon souci est plus dans l’écriture du push.
Si je connais parfaitement mon URL ou se trouve mon fichier, ai-je besoin de la découper pour en laisser une partie dans l’URI ?
Et cette URL doit elle commencer par file:/// ou bien par l’adresse du NAS (le fichier étant en interne) ?
Méthode : GET
L’Auth mode sur basic avec ID et MdP pour accéder au NAS (normal !!!)
et quoi d’autre ???
Pour chaque essai j’ai en retour IHM : configuration invalide !
Merci pour ton retour.
Bonjour Jean-Pierre,
NGINX lit les .htaccess aussi.
Oui, il faut séparer adresse ip, port et URI. L’URI doit commencer par /
L’authentification n’est nécessaire que si le dossier Web est protégé.
Attention, j’ai bien dit « Dossier Web » et non « Dossier partagé »
Quelle est l’URL de ton Json ?
Si je fais une copie de mon chemin (depuis MAC) j’obtiens : file:///Volumes/web/Victron/VictronFic.json.
L’adresse IP de mon NAS est 10.0.4.7
l’URL est donc : http://IP_NAS/Victron/VictronFic.json
donc URI : /Victron/VictronFic.json
Par défaut : authentification : none
Je mets donc 2 fois /Victron/VictronFic.json , 1 fois dans l’URL et 1 fois dans l’URI ???
Je pensais que l’URI était l’extension du chemin de l’URL !!!
je ne comprends pas.
Le push ne contient pas de champ URL. Il ne propose que la saisie de l’IP, port, URI et type d’entête via un toggle. Il recompose l’URL en assemblant tous ces éléments.
Tu dois renseigner :
methode : GET
IP : 10.0.4.7
port : 80
authentification : None (ou BASIC user:pass si nécessaire)
URI ON : /Victron/VictronFic.json
body : rien
idem URI OFF si nécessaire : /Victron/VictronFic.json
Je dois confondre Ardesse et URL… il me semblais que ces 2 termes étaient identique !!
l’uri est une composante de l’URL
L’URL est l’adresse complète, comprenant les entêtes et le chemin complet
Ok sur ces 2 termes ! Mais l’adresse n’est elle pas une URL à part entière ?
D’ou mon incompréhension … Un éclaircissement sur le fait qu’il faut « saucissonner » l’URL pour arriver au bon résultat ?
dans le push, adresse représente le radical, c’est à dire l’adresse ip, le domaine,…
exemples :
- 10.0.4.7
- monDomaine.fr
L’IPX rajoute les entêtes, il ne faut donc pas les préciser dans le champ adresse
Si l’URI est différente dans le cas ON et OFF, alors il ne faut pas la préciser dans le champ adresse et plutôt utiliser les URI
Une copie d’écran serait bienvenue
En fait dans mon cas, il faut que je parse mon JSON pour récupérer des valeurs de mon onduleur… donc juste besoin du ON. Après je pense lire les valeurs de mon onduleur avec ModBus plus raide et plus pratique…
En tout cas merci pour ces éclaircissements… à la lecture de du Wiki sur les push, ce n’est pas aussi évident !
même si tu n’as besoin que du ON, je te conseille de bien séparer adresse IP et URI.
Pour l’utilisation du Parser, il faut se rappeler que le json ne peut pas être trop long, de mémoire 512 caractères (sauf erreur).
Fais nous un retour
Alors je vais avoir un problème ! Le JSON est bien plus gros. Il faut que je précise (je pense dans le PUSH) la valeur que je cherche ???
l’objet parser ne fonctionnera pas. il faut une réponse json plus courte. donc s’il existe une requête permettant d’obtenir une réponse optimisée, alors oui, il faut créer un push spécifique
Pour le coup, il faut que j’interroge l’API Victron directement par un PUSH spécifique en précisant la valeur recherchée…
La il faut ajouter Body et tout ce qu’il faut… une autre façon de construire le PUSH !!!
Je pense que l’utilisation de ModBus sera beaucoup plus pratique !!!
Bonjour @jppouma
Pour palier au 512 caractères tu peux créer un script sur ton NAS qui interroge ton onduleur et qui renvoi un JSON court à la V5.
Dans mes réponses au dessus, j’étais parti du principe que l’API VRM Victron était appelée par l’IPX et qu’en réponse elle recevait un Json. j’ai réalisé plus tard que mes réponses étaient fausses car le json était déjà constitué par le NAS.
Un push attend une réponse http, il ne peut pas lire un fichier.
Dans le cas de Victron, soit l’IPX envoie une requête GET à l’installation qui retourne un json (malheureusement trop long et donc non traitable), soit l’ipx envoie la requête au NAS qui retourne un Json optimisé.
Cependant cela suppose que l’on ne souhaite pas récupérer un grand nombre d’infos.
Cela dit, j’ai regardé un peu l’API et ses Jsons qui sont beaucoup trop longs.
La solution optimale passera effectivement par modbus si on veut malgré tout récupérer le plus possible d’informations.
Oui effectivement faire un script sur NAS qui interroge la valeur concernée est tout à fait réalisable ! Cependant, vu le nombre de valeurs que je souhaite récupérer est important, cela va multiplier le nombres de script ! C’est d’ailleurs pour cela que récupérais un JSON plus important qui contenait toutes mes valeurs…
Je traitais ensuite mon JSON par un autre script pour récupérer les valeurs concernées que je revoyais (que renvoie toujours dans l’immédiat puisque mon V5 n’est qu’en test !!!) dans des variables adaptées (dans l’IPX V4) par son API.
Avec l’IPX v5, je souhaite utiliser ses ressources afin de limiter l’accès au NAS (éviter de multiplier les sources d’info pour limiter la complexité et les sources de panne et une meilleure compréhension du système !).
C’est pour cela que je vais me tourner sur des objets ModBus - facilement utilisable avec l’IPX v5, pour récupérer mes infos !