[API] erreur sur l'api local alors que api cloud OK

L'utilisation de api.eedomus.com et de l'eedomus toolbox

[API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 30 Juin 2024 23:56

bonjour à tous,

je suis entrain de developper quelques flow sur node red et je tente de passer des requetes API a l'api local de ma eedomus.

initiallement j'utilisais l'api cloud, mais pour essayer de gagner un peu en latence je tente passer mes appel en local...

voici une URL test :

API cloud :
Code : Tout sélectionner
https://api.eedomus.com/get?action=periph.caract&periph_id=XXXXXXXX&api_user=XXXXXX&api_secret=XXXXXXXXX

en resultat j'ai une http 200 et mon json qui contient la value de mon peripherique, tout va bien.

API local :
Code : Tout sélectionner
http://192.168.2.3/api/get?action=periph.caract&periph_id=XXXXXXXX&api_user=XXXXXX&api_secret=XXXXXXXXX

et la .... erreur :
RequestError: Parse Error: Invalid character in chunk size : http://192.168.2.3/api/get?action=perip ... =XXXXXXXXX


et je ne comprend pas pourquoi .... quelqu'un a eux deja l'erreur ?
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 01 Juil 2024 07:58

edit : par contre je viens de test le call api local dans un navigateur et il fonctionne ...
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar opa95 » 01 Juil 2024 08:21

Bonjour killpilot
killpilot a écrit:bonjour à tous,

API local :
Code : Tout sélectionner
http://192.168.2.3/api/get?action=periph.caract&periph_id=XXXXXXXX&api_user=XXXXXX&api_secret=XXXXXXXXX

et la .... erreur :
RequestError: Parse Error: Invalid character in chunk size : http://192.168.2.3/api/get?action=perip ... =XXXXXXXXX


et je ne comprend pas pourquoi .... quelqu'un a eux deja l'erreur ?

Quel est le contenu du json?
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 775
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 01 Juil 2024 09:31

opa95 a écrit:Bonjour killpilot
killpilot a écrit:bonjour à tous,

API local :
Code : Tout sélectionner
http://192.168.2.3/api/get?action=periph.caract&periph_id=XXXXXXXX&api_user=XXXXXX&api_secret=XXXXXXXXX

et la .... erreur :
RequestError: Parse Error: Invalid character in chunk size : http://192.168.2.3/api/get?action=perip ... =XXXXXXXXX


et je ne comprend pas pourquoi .... quelqu'un a eux deja l'erreur ?

Quel est le contenu du json?


que j'envoi ou que je recois ? parce que en reception j'ai rien ..... mon payload ne contient que le message d'erreur ...

Screenshot 2024-07-01 at 10.43.26.png
Screenshot 2024-07-01 at 10.43.26.png (126.11 Kio) Consulté 7701 fois


voici mon test ... j'ai 2 node d'injection qui n'envoi rien il declenche juste la tache derriere, dans le premier flow j'ai test avec format=xml , j'ai un retour de l'api local mais je suis obligé de convertir en json derriere et reformaté pour avoir un truc comme je suis censé avoir de base avec template

Screenshot 2024-07-01 at 10.30.25.png
Screenshot 2024-07-01 at 10.30.25.png (47.33 Kio) Consulté 7701 fois


dans le deuxieme flow je met pas de format=xml donc json by default et la j'ai l'erreur ... et du coup j'ai pas de json correc en retour ... juste un payload avec le texte d'erreur dedans ...

je sais pas si j'ai repondu à ta question .....
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 01 Juil 2024 09:48

et je viens du coup de test le format=xml sur une action de type periph_value et cette fois ca ne passe pas du tout ...ni en json ni en xaml.....
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 03 Juil 2024 10:13

Bjr,

Oui j'ai l'erreur aussi en nodejs depuis quelques mois.
J'ai essayé avec plusieurs modules axios, fetch... pareil. Ca ne vient pas de là.

J'ai passé quelques heures à essayer de débugger ce truc sans succès.
J'ai chercher sur les forums, on est pas les seuls à avoir ce problème. aucune réponse satisfaisante.

Comme il fallait que j'avance et que je ne fais pas 1000 requêtes par jour sur mon système, je suis passé par l'api.eedomus.com et là ca passe et qu'il n'y a pas de latence visible (du moins chez moi), j'ai lâché l'affaire. Pour l'instant...

Je pense que c'est un pb de parser et de sécurité dans l'entête en HTTP/2. Quand j'aurais le temps j'essayerai avec une connexion sécurisée en https, juste pour voir.
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 03 Juil 2024 11:36

mais ce que je comprend pas c'est que la query via un navigateur web ca fonctionne ...... donc y'a quelque chose dans le formatage du navigateur qui fait que ca marche et qui n'est pas present dans le call de node red .... si on trouve quoi et comment le formater correctement ca devrai marcher ....
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 03 Juil 2024 14:14

Le parser d'un navigateur est moins strict que le parser HTTP de nodejs (ou node red c'est pareil). Ca explique la différence.

En général, de ce que j'ai pu lire sur le sujet, ca provient généralement d'un serveur qui ne respecte pas les spécifications HTTP afin d'empêcher le scraping du site.

Peut être que tu as raison, il faudrait passer du temps à essayer des entêtes pour voir. J'y crois pas trop, j'en ai essayé quelques-unes et rien. C'est plutôt coté serveur qu'il faudrait faire quelque chose je pense.

Ce qui m'étonne c'est que c'est facile à reproduire et que du coté des développeurs eeDomus, ce problème de parser HTTP nodejs doit être un problème connu ou référencé et pourtant la doc est toujours la même depuis des années, silence radio, pas de contournement, et à minima pas d'information. Nada.
Ils doivent se dire que comme ca fonctionne avec l'api https c'est pas grave... ptet :D

j'ai une version précédente de mon système qui utilise un nodejs plus ancien et ca fonctionne donc ca vient surement du parser HTTP nodejs qui a été rendu plus secure dans les dernières versions.
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 03 Juil 2024 15:06

ouai alors ... si on cherche dans les registres publique eedomus (connected object), on tombe la dessus

https://www.pappers.fr/entreprise/conne ... -511726671

et on voit que d'apres les données de 2021 les effectifs de la société sont de 1 à 2 personnes .... donc si tu veux quand tu dis "LES" developpeurs je crois que.......

je pense qu'il doit effectivement y'avoir 1 ou 2 bonhomme qui fait le dev, le support, la com, etc... et que donc je pense que c'est pour ca que beaucoup de nos questions/probléme/demande de feature reste sans réponse.

j'ai ouvert un ticket sur ce sujet auprès du support eedomus, et je pense que j'aurai peut etre une réponse dans quelques dizaines de jour si j'ai de la chance .... ne vous méprenez pas j'ai rien contre eedomus, c'est une bonne box, mais je pense simplement que ca fait quelques année que ca vivote sans qu'elle n'évolue vers une modernisation pour suivre le marché .... aprés si la société n'a pas les finances pour investir dans du R&D ou embaucher des salariés en plus, je pense qu'elle paie l'infra existante avec les abonnements premium et les quelques box qu'elle doit vendre mais qu'un jour ca ne suffira plus et que ca va se casser la figure ...... :( je precise que ca reste une analyse personnel et que ca ne reflete pas forcement la realité.

bref je suis quand meme chaud pour essayer de troubleshoot le truc, mais effectivement sans l'aide du support eedomus qui est le seul a avoir la main sur l'api on ira pas bien loin .... surtout si l'api cloud marche c'est que c'est correctement formaté et si la local ne marche pas il devrait pouvoir aligner .....

bref .... a votre dispo pour ceux qui sont volontaire pour regarder....
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 03 Juil 2024 15:16

et pour revenir sur notre sujet initial dsl du hors sujet ... mais je suppose quand meme que le code de l'API doit etre le meme sur le cloud que sur le box... du coup pourquoi ca marcherai mieux sur le cloud qu'en local.... j'avou que des trucs m'echappe ...
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 03 Juil 2024 15:35

ca fonctionne mieux en api parce que c'est du secure et donc ca passe avec un certificat.
en local c'est du http et là y'a un soucis avec le serveur.

Je suis d'accord, en théorie ca doit fonctionner de toute façon puisqu'il nous donne une api de dev et que c'est écrit dans la doc qu'on peut faire du local. Donc... ou alors qu'ils enlèvent la possibilité dans la doc pour être clair.

C'est vrai que c'est dommage parce que c'est une très bonne box et je ne me vois pas changer. carrément pas.

Tiens nous au courant parce que ca m'intéresse aussi. Quoi qu'ils disent.
Correction, contournement...
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 03 Juil 2024 16:11

alors du coup pour essayer de voir si en https c'est mieux ....
du coup j'ai :

forcé la resolution dns de "eedomus" vers l'ip de la ma box, puisque le certificat self signed est eedomus.

Screenshot 2024-07-03 at 17.03.39.png
Screenshot 2024-07-03 at 17.03.39.png (19.68 Kio) Consulté 7554 fois


j'ai dans node red changé l'url de request pour dire https://eedomus/api /.......

Screenshot 2024-07-03 at 17.03.04.png
Screenshot 2024-07-03 at 17.03.04.png (26.17 Kio) Consulté 7554 fois


j'ai activé le TLS en decochant verif de cerificat

Screenshot 2024-07-03 at 17.03.14.png
Screenshot 2024-07-03 at 17.03.14.png (42 Kio) Consulté 7554 fois


et ..... meme resultat ...

Screenshot 2024-07-03 at 17.11.23.png
Screenshot 2024-07-03 at 17.11.23.png (17.32 Kio) Consulté 7554 fois
killpilot
 
Messages : 186
Inscription : 03 Jan 2017

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 04 Juil 2024 13:27

Ton test secure était nécessaire pour éliminer une possibilité.
Je voulais le faire aussi.

Donc à partir de là, j'ai passé la matinée à intercepter les réponses des requêtes sur toutes les api que j'utilise, exemple sur periph.caract:
Code : Tout sélectionner
error: AxiosError: Parse Error: Invalid character in chunk size
    at AxiosError.from (file:///...node_modules/axios/lib/core/AxiosError.js:89:14)
    at RedirectableRequest.handleRequestError (file:///.../node_modules/axios/lib/adapters/http.js:610:25)
    at RedirectableRequest.emit (node:events:514:28)
    at eventHandlers.<computed> (...\node_modules\follow-redirects\index.js:38:24)
    at ClientRequest.emit (node:events:514:28)
    at Socket.socketOnData (node:_http_client:544:9)
    at Socket.emit (node:events:514:28)
    ... 3 lines matching cause stack trace ...
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
  rawPacket: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 54 68 75 2c 20 30 34 20 4a 75 6c 20 32 30 32 34 20 30 38 3a 34 31 3a 31 30 20 47 ... 590 more bytes>,
  reason: 'Invalid character in chunk size',
  code: 'HPE_INVALID_CHUNK_SIZE',
  bytesParsed: 415,
  config: {
....


Ce qui serait intéressant d'étudier, c'est le rawPacket en erreur pour voir ce qu'il y a dedans mais je manque de connaissances sur les buffers, c'est pas mon domaine, moi c'est plutôt les systèmes d'informations :|
Code : Tout sélectionner
error: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 54 68 75 2c 20 30 34 20 4a 75 6c 20 32 30 32 34 20 31 31 3a 34 39 3a 35 30 20 47 ... 590 more bytes>


J'ai intercepté ensuite les méthodes de l'api que j'utilise:
- periph.list : Aucun soucis. Ca passe sur tous les types de valeurs float ou list ou string.
- periph.value et periph.macro : La réponse est en erreur mais ca passe, normal puisque c'est du post et que l'action est exécutée avant l'envoie de la réponse:
Code : Tout sélectionner
error: HTTP/1.1 200 OK
      Date: Thu, 04 Jul 2024 10:43:38 GMT
      Server: Apache
      Access-Control-Allow-Origin: *
      Set-Cookie: PHPSESSID=6f4b2eee9850b24cb8bedcad142eeba7; path=/
      Expires: Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma: no-cache
      Keep-Alive: timeout=15, max=9
      Connection: Keep-Alive
      Transfer-Encoding: chunked
      Content-Type: text/html

      3a

      {
      "success": 1,
      "body":
      {
            "result": "[OK]"
      }
      }
      0

L'erreur retourne que ca c'est bien passé quand même. Là on a une piste sur la forme de la réponse qui elle ne passe pas même si son contenu est correcte.

periph.value_list Tout passe. Aucune erreur mais uniquement en value_type 'list' mais c'est normal et c'est précisé dans la doc.

periph.caract Là, rien ne passe.
types de valeur float ou list. Tout en erreur.
Code : Tout sélectionner
error: HTTP/1.1 200 OK
Date: Thu, 04 Jul 2024 11:15:55 GMT
Server: Apache
Access-Control-Allow-Origin: *
Set-Cookie: PHPSESSID=fc4c4e9d7137807e1076b7df28bb08a5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=15, max=8
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

d7
{
    "success": 1,
    "body":{"periph_id": "1151500",
    "name": "Interrupteur Salon",
    "last_value": "0",
     "last_value_text": "Off",
     "unit": "",
     "battery": "",
    "last_value_change": "2024-07-04 12:47:16"}}
0

Dans l'erreur on récupère quand même les infos correctes du device et même le code retour est "success". Truc de fou... :lol: donc on peut penser que ce n'est pas le device ni la requête sur le device mais le format de la réponse.

Donc vu que je n'ai pas le code source pour débugger les api, on ne peut faire que des hypothèses.
Ce qui me semble le plus proche c'est que le pb est dans la réponse de la requête et est lié à juste quelques api : periph.caract, periph.value et periph.macro.
Ce sont des méthodes qui sont liées à la valeur courante des devices.
A moins d'un hasard, je pense que les méthodes qui sont utilisées pour récupérer ou définir la valeur retourne un format de réponse pas bon.
Et c'est très curieux mais uniquement en local.
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar opa95 » 04 Juil 2024 17:44

Bonjour AVATAR
AVATAR a écrit:Ton test secure était nécessaire pour éliminer une possibilité.
Je voulais le faire aussi.
...
Ce qui serait intéressant d'étudier, c'est le rawPacket en erreur pour voir ce qu'il y a dedans mais je manque de connaissances sur les buffers, c'est pas mon domaine, moi c'est plutôt les systèmes d'informations :|
Code : Tout sélectionner
error: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 54 68 75 2c 20 30 34 20 4a 75 6c 20 32 30 32 34 20 31 31 3a 34 39 3a 35 30 20 47 ... 590 more bytes>
error: HTTP/1.1 200 OK
      Date: Thu, 04 Jul 2024 10:43:38 GMT
      Server: Apache
      Access-Control-Allow-Origin: *
      Set-Cookie: PHPSESSID=6f4b2eee9850b24cb8bedcad142eeba7; path=/
      Expires: Thu, 19 Nov 1981 08:52:00 GMT
      Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      Pragma: no-cache
      Keep-Alive: timeout=15, max=9
      Connection: Keep-Alive
      Transfer-Encoding: chunked
      Content-Type: text/html

      3a

      {
      "success": 1,
      "body":
      {
            "result": "[OK]"
      }
      }
      0


error: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 54 68 75 2c 20 30 34 20 4a 75 6c 20 32 30 32 34 20 31 31 3a 34 39 3a 35 30 20 47 ... 590 more bytes>
c'est simplement les codes ASCII du message dont la traduction est en dessous
48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b -> HTTP/1.1 200 OK (0d 0a -> saut de ligne)
44 61 74 65 3a -> Date: (20 -> espace) etc... 41 -> A, 42 -> B etc... :)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 775
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 05 Juil 2024 08:37

Oui je sais Opa, c'est la réponse qui est affichée.
Ce que je voulais dire c'est si le buffer est correctement formaté.
Est-ce qu'il n'y a pas un caractère en début ou en fin en trop, ou un caractère de saut de ligne, d'espace en trop. est-ce que la réponse affichée est l'image complète du buffer. Est-ce que le nombre de bytes attendu est correcte...
Je crois avoir lu quelque part que quand c'est en paquets, le dernier paquet termine avec un 0 mais je ne sais pas dire si c'est le dernier caractère du buffer.
Enfin bref, j'aurais bien aimé le convertir pour le comparer mais je n'y suis pas arrivé. Même pas à l'attraper dans l'erreur. Juste l'afficher et encore pas entièrement.
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar opa95 » 05 Juil 2024 09:01

Bonjour AVATAR
Je n'avais pas bien compris ton problème.
On pourrait envisager qu'il existe un checksum dans le buffer qui ne serait pas toujours vérifié par les récepteurs.
Il me semble que j'avais rencontré des différences de comportement entre l'eedomus et les navigateurs au niveau du Header des requêtes HTTP (peut-être dans le user-agent?, je ne me rappelle plus). Les navigateurs ont évolué, mais pas eedomus. :)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 775
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar AVATAR » 05 Juil 2024 10:13

Oui c'est clair qu'eeDomus n'a pas évolué depuis un moment mais bon c'est pas évident de maintenir tout ca à jour. Il faut une équipe et des compétences dans beaucoup de domaines.
Entre la compatibilité avec les devices, les mises à jour matériels, système, la doc. Sacré boulot. Franchement si ils ont une équipe réduite. je dis bon courage...

Je viens de m'apercevoir que pour la méthode periph.value_list, ca ne passe pas sur tous les devices de type 'list'.
J'en ai un qui ne passe pas en local. Les autres oui. Ca se complique... :shock:
C'est le seul que j'ai qui n'est pas fibaro. De là à dire que finalement c'est lié aussi avec les devices... argrhhh Bref... Je passe mon tour.
AVATAR
 
Messages : 42
Inscription : 05 Juin 2020
Localisation : Toulouse

Re: [API] erreur sur l'api local alors que api cloud OK

Messagepar killpilot » 05 Juil 2024 14:51

effectivement ca se complique ...... et effectivement aussi on ne peut faire que des hypotheses et au final sans l'aide des sachants nous n'arriverons pas a nos fins ...

c'est dommage parce que ce que nous pointons du doigts, n'est ni plus ni moins qu'un bug, j'entend par la qu'une feature "l'api" ne fonctionne pas comme la doc dit qu'elle devrait fonctionner, et qu'a minima l'équipe eedomus devrai soit mettre à jour la doc, soit corriger le code.... ou a minima nous dire qu'ils ont lu ce thread et nous laisser attendre :D
killpilot
 
Messages : 186
Inscription : 03 Jan 2017


Retour vers API eedomus & eedomus toolbox

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)