HA API = 401: Unauthorized

Bonjour à tous et bonne année

je suis un peu bloqué sur un 401: Unauthorized lorsque j’essaye de tester l’accès à l’API, j’ai bien créee un token dans mon profil et j’utlise postman pour faire mes tests.

https://mon_url_ext:8123/api/?Content-Type=application/json&Authorization=mon_token

Dans mon fichier configuration j’ai ajouté api:

En vous remerciant pour votre aide

srvmonchy

Ma configuration


[center]## System Information

version core-2023.12.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.58-haos-raspi
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.33.0
Stage running
Available Repositories 1366
Downloaded Repositories 35
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 11.2
update_channel stable
supervisor_version supervisor-2023.12.0
agent_version 1.6.0
docker_version 24.0.7
disk_total 57.8 GB
disk_used 10.6 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (17.0.1), Glances (0.20.0), Home Assistant Google Drive Backup (0.112.1), Let’s Encrypt (5.0.9), MariaDB (2.6.1), NGINX Home Assistant SSL proxy (3.6.0), Nginx Proxy Manager (0.12.3), Node-RED (15.1.1), Samba share (12.2.0), Spotify Connect (0.12.6), Studio Code Server (5.14.2), Terminal & SSH (9.8.1), WireGuard (0.10.1), eWeLink Smart Home (1.4.3), CEC Scanner (3.0), Mosquitto broker (6.4.0), Zigbee2MQTT (1.35.0-1)
Dashboards
dashboards 8
resources 21
views 23
mode storage
Recorder
oldest_recorder_run December 29, 2023 at 5:56 PM
current_recorder_run January 5, 2024 at 7:20 PM
estimated_db_size 76.98 MiB
database_engine sqlite
database_version 3.41.2
Spotify
api_endpoint_reachable ok
[/center] Comment récupérer ma configuration : Dans votre HA, Menu latéral `Paramètres` > `Système` > `Corrections` puis les trois petits points en haut a droite > `Informations Système` puis une fois en bas `Copier` ___

Bonjour,
quand j’avais fait des tests avec l’api, j’utilisais c’est commande sous l’invite de commande de window.

curl -X GET -H "Authorization: Bearer tokenkey" http://192.168.1.XX:8123/api/states/sensor.atc_67c6_temperature

Bonjour WarC0zes
je te remercie pour cette commande,en fait monsouci est lié un probleme de routage de mon https ext. versun http interne… j’ai essayé de revoir cela et plus rien de ne fonctionne.
je suis passé un d’un 401 à 403… idéal pour un dimanche avec un froid de canard !

Je pourrais pas plus te dire, j’ai fais des essaie quand local avec http.

je vais d’abord essayer en local, je suis sur mac donc je vais essayer ta cmd avec un terminal

J’ai installé postman en local et je teste sur l’IP interne et voila le premier retour de la console et cela ne me console pas …

Je me demande si mon fichier de conf n’est pas incomplet

GET http://192.168.1.53:8123/api/

Error: socket hang up

:arrow_forward:Request Headers

content: application/json

Authorization: MY_TOKEN

User-Agent: PostmanRuntime/7.36.0

Accept: /

Postman-Token: fceaf5d0-567b-4d07-934b-590d68c9598b

Host: 192.168.1.53:8123

Accept-Encoding: gzip, deflate, br

Connection: keep-alive

Bj

dans ta config tu as essayé de mettre ceci pour voir

   api:
     cors_allowed_origins:
       - https://mon_url_ext:8123
     trusted_networks:
       - mon_adresse_ip

Redémarrez Home Assistant pour appliquer les modifications de configuration.

Retour au point de départ !! un bon 401

en local je teste en utlisant https://homeassistant.local:8123/api/

et cela va bien juqu’au bout, mais postman me renvoie un 401, j’ai regenéré un token et cela ne change rien. Je vois bien la tentative de connection dans HA :

Logger: homeassistant.components.http.ban
Source: components/http/ban.py:129
Integration: HTTP (documentation, issues)
First occurred: 3:54:57 PM (8 occurrences)
Last logged: 4:04:25 PM

Login attempt or request with invalid authentication from (192.168.1.23). Requested URL: ‹ /api/ ›. (PostmanRuntime/7.36.0)

Je n’avais pas compris qu’il fallait bien mettre Bearer devant le token… et maintenant :

{« message »:« API running. »}

SI quelqu’un peut m’expliquer puorquoi il faut mettre Bearer devant, je serais content même si cela fonctionne !

j’allais te le dire. c’est un user on dirait.

dans la doc que je t’es filer.

Citation
All API calls have to be accompanied by the header Authorization: Bearer TOKEN ,

je l’avais bien vu mais je l’avais traduit par le « token du porteur »… je n’aurais pas du réflechir…
Merci pour ton aide.
`
Maintenant je suis à l’étape d’après : récupérer le « state » d’une entity pour aller l’afficher dans une page web…

Tu veut extraire le statut du résultat de la réponse json ?

{% set value_json = {"type":"0","ch":"0","mode":"10","loop":"0","eq":"0","status":"stop","curpos":"1696411","offset_pts":"1696411","totlen":"0","Title":"69+�lT","Artist":"","Album":"","alarmflag":"0","plicount":"0","plicurr":"0","vol":"0","mute":"1","iuri":"687474703A2F2F7579657365652E7674756E65722E636F6D2F73657475706170702F7579657365652F6173702F66756E632F64796E616D4F442E6173703F65783435763D333733663833366661616466316662306236646163623232633035393234643833373366383336666161646631666230623664616362323263303539323464382669643D3938343630","uri":""} %}

{{ value_json.status }}

{{ value_json["status"] }}

En effet je veux afficher 18.6 °C extrait de l’appel de l API

{« entity_id »:« sensor.dining_thermo »,« state »:« 18.6 »,« attributes »:{« state_class »:« measurement »,« unit_of_measurement »:« °C »,« device_class »:« temperature »,« friendly_name »:« Thermo Dining Temperature »},« last_changed »:« 2024-01-07T18:01:35.993227+00:00 »,« last_updated »:« 2024-01-07T18:01:35.993227+00:00 »,« context »:{« id »:« 01HKJHCNZS0B4SKXBQJC17WN1T »,« parent_id »:null,« user_id »:null}}

donc je veux créer un sensor

sensor:

Mais pour le moment le sensor n’apparait pas…

Salut
Tu veux créer un sensor à partir de l’API de ton propre HA???
:thinking:

Salut Giga77,

oui je veux uniquement la donnée « state » pour la publier sur une page web.
lorsque j’appelle l’api j’ai un resultat avec toutes les infos du sensor :

{« entity_id »:« sensor.dining_thermo »,« state »:« 18.6 »,« attributes »:{« state_class »:« measurement »,« unit_of_measurement »:« °C »,« device_class »:« temperature »,« friendly_name »:« Thermo Dining Temperature »},« last_changed »:« 2024-01-07T18:01:35.993227+00:00 »,« last_updated »:« 2024-01-07T18:01:35.993227+00:00 »,« context »:{« id »:« 01HKJHCNZS0B4SKXBQJC17WN1T »,« parent_id »:null,« user_id »:null}}

mais bien sûr si tu as une solution plus simple cela serait top !!

Tu peux créer un capteur pour extraire la valeur d’un attribut d’un autre capteur. Tu crées un capteur via un template: Template - Home Assistant

Et ensuite, tu appelles l’API sur ce nouveau capteur.

Salut @Srvmonchy

Avec « curl » et « jq » tu dois pouvoir y arriver directement :

Au final la commande :

curl -s GET -H "Authorization: Bearer tontoken" -H "Content-Type: application/json" https://ton.url.fr/api/states/ton_sensor | jq -r '.state'

Par contre j’ai rien dans mon configuration.yaml qui ressemble à ce que @Nothing avait mis plus haut :

Et je sais pas si ça joue :man_shrugging:

1 « J'aime »

@Herbs

Info trouvé ici

et ici aussi

Je suis pas certain que ce soit obligatoire.

De ce que je comprends dans la doc, c’est qu’une fois en place tu seras obligé de respecter les urls définies pour que ça réponde.

Faut surtout, je pense respecter les settings qui sont dans système / réseau, « URL de Home Assistant » « internet » / « réseau local », pour faire l’appel qui va bien.

Mais je peux me tromper :wink:

je dis pas le contraire
mais j’ai eu un souci API avec octoprint et j’ai du passé par Cors Allowed