noiwid / tiko_heating_api

Component allowing to manage traditional radiators connected via the TIKO solution from within Home Assistant server. It requires hosting a web page that will serve as an endpoint to communicate with TIKO through their API.
19 stars 6 forks source link

Erreur500 lors de la première configuration #1

Closed SylvainDx closed 1 year ago

SylvainDx commented 1 year ago

First 😁

Bonjour et merci pour ce package ! j'ai la pression d'être le premier boulet a rencontrer un problème lors de son implémentation.

j'ai déposé le script sur un dossier du webserver de mon synology. et il me renvoi une erreur 500 lors de l'enregistrement des informations de login.

a ce stade j'ai vérifié que le groupe http ai bien accès en écriture pour créer le fichier .env (a priori ok)

et petite précision, quand on parle d'héberger le script, un webserver local suffit ou faut-il qu'il soit exposé sur le web ?

merci encore pour ce package !

SylvainDx commented 1 year ago

petit update, en ajoutant le dossier dans le openbasedir php le script a bien crée le fichier .env

mais j'ai toujours une 500 sur l'url de configuration avec le token

noiwid commented 1 year ago

Hello, tu dois en réalité être le premier à l'essayer 😅 quelle est l'url du endpoint dans ton fichier Tiko.env? correspond elle a l'adresse d'accès à ton script?

ça devrait ressembler à https://tonip/tiko.php

est ce le cas?

Le lun. 6 mars 2023, 07:41, SylvainDx @.***> a écrit :

petit update, en ajoutant le dossier dans le openbasedir php le script a bien crée le fichier .env

mais j'ai toujours une 500 sur l'url de configuration avec le token

— Reply to this email directly, view it on GitHub https://github.com/noiwid/tiko_heating_api/issues/1#issuecomment-1455539902, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFML5A7CCG76KM2T5OK33IDW2WBK7ANCNFSM6AAAAAAVQWM3OI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

noiwid commented 1 year ago

quelle est la version de PHP qui tourne sur ton synology?

pour le savoir, il suffit de mettre un fichier php qui contient cette instruction :

<?php phpinfo(); >

profite-en pour regarder sur le phpinfo si tu trouves le paramètre short_open_tag à true.

Le lun. 6 mars 2023, 07:41, SylvainDx @.***> a écrit :

petit update, en ajoutant le dossier dans le openbasedir php le script a bien crée le fichier .env

mais j'ai toujours une 500 sur l'url de configuration avec le token

— Reply to this email directly, view it on GitHub https://github.com/noiwid/tiko_heating_api/issues/1#issuecomment-1455539902, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFML5A7CCG76KM2T5OK33IDW2WBK7ANCNFSM6AAAAAAVQWM3OI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

SylvainDx commented 1 year ago

l'existance de ton poste avec ta premiere page php m'a inciter a passer le pas vers tiko. mon installation date de vendredi dernier ;)

pour le .Env oui l'adresse correspond bien. j'ai essayé avec l'ip a la place du nom local même punition.

SylvainDx commented 1 year ago

PHP Version 7.0.33 short_open_tag | On

noiwid commented 1 year ago

Hello, il manquait une fonction PHP utilisée dans mon script ;)

Je viens de publier une seconde version du fichier qui corrige également quelques détails :

Peux-tu retenter? il faut supprimer le fichier tiko.env qui sera recréé au prochain passage ;)

SylvainDx commented 1 year ago

Merci pour ces modifications ! il y a du changements ! image ça me donne un peu de boulot en plus ;) a suivre

SylvainDx commented 1 year ago

après activation du curl ça avance un peu plus loin. Je passe le login mot de passe puis "file not foud" tu appel un fichier heat.php non présent dans le dossier image

SylvainDx commented 1 year ago

j'ai remplacé par tiko.php, on va un peu plus loins avec les consignes pour HA. a suivre ;)

SylvainDx commented 1 year ago

j'aurais pu lire jusqu'au bout avant de faire les manips :p la génération du fichier yaml est vide pour l'instant ^^ image

SylvainDx commented 1 year ago

en remplaçant heat.php par tiko.php dans le fichier tiko.php le résultat est le même

SylvainDx commented 1 year ago

Pour info, j'ai fait un petit retour arrière pour éprouver la vérification des droits ^^ image ça fonctionne bien, et cela ne nécessite pas de modifier le open_base_dir comme je l'ai écrit plus haut.

SylvainDx commented 1 year ago

en fait, l'affichage du code semble bloquer la page. image en supprimant les lignes 626 à 628 j'obtient cela :

SylvainDx commented 1 year ago

et en supprimant celles du bloc 5 j'ai une belle mise en page qui apparait :)

noiwid commented 1 year ago

Hello, je viens de remettre une nouvelle version corrigée ; ) Il faut remettre le nouveau fichier PHP dans ton dossier et supprimer le fichier .env pour relancer le processus. Le fichier principal doit bien s'appeler tiko.php. Est-ce que ton fichier spyc.php est bien rempli ?

SylvainDx commented 1 year ago

hmmm. il était vide le fichier spyc.php, quelle nouille de ne pas l'avoir vérifier ^^

noiwid commented 1 year ago

J'imagine que c'est parce qu'a la première tentative il n'avait pas les droits pour le remplir.

2 options:

SylvainDx commented 1 year ago

a devenir chèvre ... l'erreur 500 est de retour après la saisie du formulaire et aucun fichier n'est créé dans le dossier

noiwid commented 1 year ago

1- Pour simplifier les questions de dossiers, met dans la variable $currentFolder ton path : /volume2/web/tiko/ 2- Vérifie que le fichier tiko.env contient bien les 4 variables attendues, et que le end_point URL correspond bien à l'URL d'accès à ton script PHP 3- Vérifie également que le fichier spyc.env contient la même chose que sur l'URL que j'ai mise au dessus

Si celà ne fonctionne toujours pas, tu devrais pouvoir débugger en ajoutant ces deux lignes en haut du fichier, juste après l'ouverture du PHP ;

error_reporting(E_ERROR);
ini_set('display_errors', '1');
SylvainDx commented 1 year ago

rhaaaa pardon ma faute, a tripatouiller dans tous les sens j'étais en PHP5 et non 7. donc retour a la case départ ou presque, il n'y a plus le problème d'erreur de cible avec le heat mais les conversion en yaml ne se font toujours pas pour cause de fichier spyc.php vide

SylvainDx commented 1 year ago

j'ai remplis le fichier spyc.php et la page s'affiche correctement !

SylvainDx commented 1 year ago

au passage tu es sur de ce lien : Vertical Stack In Card : ##### ?

noiwid commented 1 year ago

Effectivement, cette URL n'aurait jamais du se retrouver là 😅 Voici la bonne URL : https://github.com/ofekashery/vertical-stack-in-card

noiwid commented 1 year ago

Le serveur Apache à besoin que le paramètre allow_url_fopen soit actif pour pouvoir aller chercher tout seul le contenu du fichier spyc.php, le problème doit venir de là ;)

noiwid commented 1 year ago

Est-ce que tout est ok de ton côté ?

Pour une raison qui m'échappe, il y a un petit souci dans la config des automations H.A qui cause l'extinction régulière des radiateurs (le mode OFF est activé tout seul). J'ai déjà rencontré et corrigé ce problème sur une autre instance de H.A qui tourne chez moi et me permet de gérer les radiateurs de mon bureau, mais je n'arrive plus à me souvenir comment 😅.

Ce package que j'avais monté à la main tourne très bien, c'est lui qui m'a servi de base à monter le script qui autogénère l'installeur. J'ai du rater un truc... je vais creuser la question cet après-midi ;)

SylvainDx commented 1 year ago

on doit toucher au but :) mais avant le reboot HA la vérificateur de config fait la tête sur les fichiers yaml

[140368657555104] The system cannot restart because the configuration is not valid: Error loading /config/configuration.yaml: 'utf-8' codec can't decode byte 0xb0 in position 8885: invalid start byte 13:13:15 – (ERREUR) Home Assistant WebSocket API The system cannot restart because the configuration is not valid: Error loading /config/configuration.yaml: 'utf-8' codec can't decode byte 0xb0 in position 8885: invalid start byte 13:13:15 – (ERREUR) Home Assistant Core Integration Unable to read file /config/packages/tiko/tiko.yaml: 'utf-8' codec can't decode byte 0xb0 in position 8885: invalid start byte 13:13:15 – (ERREUR) util/yaml/loader.py

noiwid commented 1 year ago

J'imagine que tu as des accents dans le nom d'un de tes raditateur ? C'est également mon cas, cela ne devrait en théorie pas poser de problème. Dans le fichier tiko.yaml qui est généré, les accents s'affichent ils bien ? Tu peux le voir dès le début du fichier, dans les attributs "name" du bloc climate.

As tu d'autres caractères spéciaux dans les noms de tes radiateurs?

SylvainDx commented 1 year ago

bon je pense que j'aurais heurté tous les murs disponibles. j'ai re-enregistré les fichier en UTF8 je ne sais pas pourquoi mon editeur de texte a modifier ça

par contre j'ai toujours un pb avec HA suite à la ligne ajoutée dans le configuration.yaml image

noiwid commented 1 year ago

le package doit être installé dans le dossier/fichier: /config/packages/tiko/tiko.yaml

la ligne dans le fichier /config/configuration.yaml doit être dans le bloc homeassistant: packages: !include_dir_merge_named packages/

SylvainDx commented 1 year ago

en fait il faut ça dans le fichier configuration : homeassistant: packages: !include_dir_merge_named packages/

après c'est peut être la faute à une installation très fraiche ;)

noiwid commented 1 year ago

il me semble que c'était précisé dans la doc ;)

SylvainDx commented 1 year ago

il me semble que c'était précisé dans la doc ;)

ça c'est bas !

modeMauvaiseFoiON et puis en même temps tu n'avais pas dis de vérifier l'existence de la section !!!!!!! NA

modeMauvaiseFoiOFF

bon sinon il reste encore quelques murs ^^ c'est fou ^^

Bon, la phase de config s'est bien passée. J'ai créé les fichier yaml avec le bon encodage mis les bonnes entrées dans le configuration.yaml et HA a bien voulu redémarrer !

j'ai bien ajouté les compléments lovelace et créé cette magnifique carte personnalisée !

mais la aucune info ne remonte et les ordres ne passent pas non plus.

noiwid commented 1 year ago

C'est mon premier package github, c'est formateur 😅

Tu devrais pouvoir vérifier si les infos sont bien accessibles par le endpoint en testant l'URL : https://tonip/tiko.php?hash=[ENDPOINT_TOKEN] -> à remplacer par la valeur que tu trouves dans le tiko.env

Il m'affiche en retour un tableau :

{
boost: false,
frost: false,
absence: false,
disableHeating: false,
bureau_1_cur: 18.6,
bureau_1_tar: 28,
bureau_1_dry: 47,
bureau_1_on: true,
entree_cur: 16.4,
entree_tar: 22.4,
entree_dry: 46,
entree_on: true,
bureau_2_cur: 17.9,
bureau_2_tar: 22.4,
bureau_2_dry: 42,
bureau_2_on: true
}

Regardes dans les logs de H.A, il devrait te donner quelques précisions ;)

SylvainDx commented 1 year ago

rien ne vaux un gentil boulay qui débarque pour tester un produit ! { "boost":false, "frost":false, "absence":false, "disableHeating":false, "salon_cur":17.9, "salon_tar":17, "salon_dry":49, "salon_on":false, "palier_cur":20.3, "palier_tar":21, "palier_dry":50, "palier_on":true } les infos sont bonnes en sortie du php !

SylvainDx commented 1 year ago

sync_temp_salon: Error executing script. Invalid data for call_service at pos 1: expected float for dictionary value @ data['temperature'] Error while executing automation automation.sync_temp_salon: expected float for dictionary value @ data['temperature']

Template variable error: 'value_json' is undefined when rendering '{% if (value_json.disableHeating) %} mdi:radiator-off {% else %} mdi:radiator-off {% endif %}' Template variable error: 'value_json' is undefined when rendering '{% if (value_json.boost) %} mdi:sun-thermometer {% else %} mdi:lightning-bolt-outline {% endif %}' Template variable error: 'value_json' is undefined when rendering '{% if (value_json.frost) %} mdi:snowflake-thermometer {% else %} mdi:snowflake-thermometer {% endif %}' Template variable error: 'value_json' is undefined when rendering '{% if (value_json.absence) %} mdi:door-closed-lock {% else %} mdi:door {% endif %}'

Error parsing value: 'value_json' is undefined (value: <!DOCTYPE html>

403

, template: {{value_json["frost"]}})

Unable to parse output as JSON: <!DOCTYPE html>

403

ça me semble un peu brut et avec de l'allemand dedans qui doit venir de l'integration termostat

noiwid commented 1 year ago

C'est très bon signe ;)

Le premier endroit ou regarder, c'est dans H.A, Developer Tools, States, et rechercher "tiko_"

Tu devrais voir sensor.tiko_consumption avec en attribute un truc qui ressemble à ça :

today_total_wh: 15744
yesterday_total_same_time_wh: 452
last_month_total_wh: 328183
this_month_total_wh: 91169
last_month_total_same_day_wh: 67494
unit_of_measurement: W
friendly_name: Tiko_consumption

Ainsi que sensor.tiko_settings avec en attribute :

boost: false
frost: false
absence: false
disableHeating: false
bureau_1_cur: 18.7
bureau_1_tar: 24.4
bureau_1_dry: 47
bureau_1_on: true
entree_cur: 16.6
entree_tar: 22.4
entree_dry: 46
entree_on: true
bureau_2_cur: 18
bureau_2_tar: 22.4
bureau_2_dry: 42
bureau_2_on: true
friendly_name: Tiko_settings

Si c'est pas le cas, direction les logs de home assistant. Si c'est le cas, est-ce que les entités climate.salon, climate.palier sont là ? les temperatures dedans sont elles récupérées ? Voilà un exemple sur un mes radiateurs :

hvac_modes: heat, off
min_temp: 7
max_temp: 35
target_temp_step: 0.1
current_temperature: 18.7
temperature: 25
hvac_action: idle
friendly_name: Bureau 1
supported_features: 1
noiwid commented 1 year ago

Wait, j'avais pas vu tes logs, ton synology renvoie une erreur 403 à ton home assistant, il doit y avoir un problème de droits.

SylvainDx commented 1 year ago
sensor.tiko_settingsTiko_settings | 1 | friendly_name: Tiko_settings -- | -- | -- [sensor.tiko_settings](http://ds-home.taild894.ts.net:8123/developer-tools/state#) Tiko_settings 1 friendly_name: Tiko_settings
SylvainDx commented 1 year ago

c'est dans le fichier tiko.yaml l'appel il manque le tiko.php dans l'url ^^ palier_set_temp: '/usr/bin/curl -X POST http://192.168.1.16/tiko/?hash=11843de3

noiwid commented 1 year ago

il faut que la variable ENDPOINT URL qui est dans le fichier tiko.env ressemble à ça: ENDPOINT_URL='http://192.168.1.16/tiko/tiko.php'

C'est bizarre qu'il ne l'ait pas récupérée tout seul à l'install 🤔

Il faut que tu corriges cette variable, et que tu récupère une mise à jour du fichier tiko.yaml via l'url d'install ;) il faut ensuite redémarrer H.A ;)

SylvainDx commented 1 year ago

yep ça fonctionne a merveille !

noiwid commented 1 year ago

Génial ;)

Bon, il me reste à fixer ce bug énervant qui éteint en boucle les radiateurs...

SylvainDx commented 1 year ago

Merci beaucoup pour ton travail, ton support et ta patience !

pour alimenter la machine, j'ai essayé de me faire un thermostat individuel. et comme je suis curieux j'ai remis a false tous les true type: custom:better-thermostat-ui-card name: Buanderie entity: climate.buanderie eco_temperature: 5 disable_window: true disable_summer: true disable_heat: true disable_eco: true disable_off: true set_current_as_main: false

dès que j'active le bouton chauffe de la carte ça envoie le signal OFF à Tiko et ça l'enlève quand je desactive la chauffe

SylvainDx commented 1 year ago

sur un radiateur changé en Chauffe. déclenché par le service climate.set_hvac_mode déclenche le Off de Tiko mais je ne sais pas qui il appelle ce .set_hvac_mode

par contre du coup il serait possible de savoir si un radiateur chauffe avec ce mode la non ?

noiwid commented 1 year ago

Ok, j'ai trouvé d'où vient le bug ;)

Sur les entités climate en haut du fichier tiko.yaml, les heater doivent être heater: switch.radiateurs_on_off

et non pas heater: switch.radiateurs_off

Je viens de corriger le fichier PHP. Je n'avais pas créé ces switchs on_off pour rien 😅

noiwid commented 1 year ago

Le système récupère toutes les 60 secondes les infos des radiateurs, donc en temps normal (= une fois le bug juste au dessus corrigé), si tu changes le statut d'un radiateur via l'APP TIKO (ou via une programmation), Home Assistant devrait le répercuter et réaffiché le le radiateur allumé dans les 60 secondes (idem pour les changements de température ou de mode).

Les consommations ne sont récupérées qu'une fois par heure.

SylvainDx commented 1 year ago

J'ai trouvé pour la remonté d'état :) Dans la fonction sync_status_on tu cherches un statut "heat" qui n'existe pas a la place d'un statut "on"

  id: sync_status_on_palier

  alias: sync_status_on_palier
  description: >
    on H.A startup or heater status change,
    check if heater is currently on to
    update the climate object in HA
  trigger:
    - 
      platform: homeassistant
      event: start
    - 
      platform: state
      entity_id: binary_sensor.palier_chauffage
  condition:
    - 
      condition: state
      entity_id: binary_sensor.palier_chauffage
      state: heat

state: "on"

noiwid commented 1 year ago

Merci pour ton retour, effectivement c'était un point que j'avais changé à la version 1.1, et corrigé à la version 1.2 ;) je pensais que mon problème d'extinction venait de là ;)

j'aurai du te le préciser, je pensais que tu reprendrai le fichier PHP complet !

SylvainDx commented 1 year ago

ok tu as gagné, je supprime tout et je recommence de 0 !

noiwid commented 1 year ago

Haha, si tu peux me confirmer que tout passe, ce serait top 😅 J'ai corrigé les différents problèmes que tu m'as remonté au fil de l'eau donc tout devrait être ok.

Je suis content de pouvoir partager ces devs avec quelqu'un, le reverse engineering de leur API n'a pas été simple. Leur support m'a d'ailleurs répondu qu'ils n'avaient pas d'API 😂 Bref, content que ce soit transposable... J'espère que quelqu'un en fera une belle intégration clé en main depuis H.A....