Aller au contenu

Messages recommandés

Posté(e) (modifié)

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
Posté(e)

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 !?

Posté(e)

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 !!?? !!??

Posté(e)

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'})

 

Posté(e)

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
Posté(e)
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 ?

Posté(e)

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...

Posté(e)

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 :(

 

 

×
×
  • Créer...