Aller au contenu
jjacques68

API PUT en erreur

Recommended Posts

Bonsoir à tous,

 

J'avais déjà posté une question sur le PUT dans l'API... (avec le panneau de chauffage)

 

Et je rencontre la même chose avec le panneau GARDEN...

Et j'obtiens le même résultat si je passe par le SWAGGER !

 

Soit je fais mal quelque chose (ce qui est certainement le cas) soit la HC3 bloque les PUT (j'en doute)...

 

Voici un exemple : je veux modifier la liste des jours du panneau GARDEN.

 

local Liste = api.get("/panels/sprinklers/3")

print("Liste des jours initiale = "..json.encode(Liste.days))
table.remove(Liste.days, 1)
print("Liste des jours modifiée = "..json.encode(Liste.days))

print("Résutat du PUT = "..api.put("/panels/sprinklers/3", Liste).reason)

voici le debug :

[DEBUG] 27.03.2020 23:08:57: Liste des jours initiale = ["monday","wednesday","friday","sunday"]
[DEBUG] 27.03.2020 23:08:57: Liste des jours modifiée = ["wednesday","friday","sunday"]
[DEBUG] 27.03.2020 23:08:57: Résutat du PUT = http://{$gateway-ip}/json-schema/panels/sprinklers/PUT_sprinklers.json. Invalid schema: #. Invalid keyword: additionalProperties. Invalid document: #/id

Il me répond donc qu'il y a un soucis avec le schémas, donc le JSON que je lui transmet...

 

Mais je comprends pas, je ne touche pas au JSON, puisque je travail directement avec la table ??

 

vous avez une idée ?

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors je me rends compte que le api.get ne mets pas tous les éléments tu tableaux dans le même ordre que l'on peut voir dans le Swagger.

Mais le contenu est juste !!

 

Alors je sais pas si ça a de l'importance !?

Partager ce message


Lien à poster
Partager sur d’autres sites

alors je me réponds tout seul, mais c'est étrange...

 

voilà ce qui marche

 

local Liste = api.get("/panels/sprinklers/3").days

table.remove(Liste.days, 1)

local temp = json.encode(Liste)

api.put("/panels/sprinklers/3", {days=json.decode(temp)})

 

faut passer par une variable intermédiaire !!?? !!??

Partager ce message


Lien à poster
Partager sur d’autres sites

du coup j'ai l'impression que l'on ne pas écrire avec le PUT,un panel complet, du genre

 

ça ça marche pas :

local Panel = api.get("/panels/sprinklers/3")
Panel.name = 'toto'
api.put("/panels/sprinklers/3", Panel)

mais ça oui :

api.put("/panels/sprinklers/3", {name='toto'})

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Logiquement un PUT devrait permettre la mise à jour complète, partielle et également la création. Je suppose que l'intégration par Fibaro repose sur du POST uniquement pour la création mais cela ne devrait pas empêcher la modification complète via un PUT ... Sauf évidement si des données ne peuvent être modifiées, cela arrivent il faudrait connaitre précisément les règles de gestion pour cela ou accès au code source :)

 

Après dans ton exemple, passer un panel complet pour modifier juste le name ce n'est pas logique, PUT ne doit pas être utilisé comme cela (J'ai bien compris qu'il s'agit d'un exemple ;) )

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, Krikroff a dit :

Sauf évidement si des données ne peuvent être modifiées, cela arrivent il faudrait connaitre précisément les règles de gestion pour cela ou accès au code source

comment on peut le savoir ça ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ce ne sont pas des informations accessibles ni partagées par Fibaro. Il faudra procéder par élimination suivant nos retours d’expérience pour en déduire le fonctionnement exact j'en ai peur...

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui ben j'ai bien l'impression que certaine propriété ne peuvent pas être modifiée directement dans l'API.

Je pense qu'elles sont modifiées par le process uniquement.

Et ils ne veulent pas que l'on y touche par précaution j'imagine.

 

bon j'ai trouvé une solution de contournement pour mon Panel Climate, mais pourri :(

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×