Difference between revisions of "Home Assistant - Python API Client"

From ETCwiki
Jump to navigationJump to search
(Created page with "This script allows us to access our Home Assistant server (HASS) through Python scripts. I posted this on GitHub and will keep it more updated there, so please check it out th...")
 
Line 1: Line 1:
 
This script allows us to access our Home Assistant server (HASS) through Python scripts. I posted this on GitHub and will keep it more updated there, so please check it out there.  
 
This script allows us to access our Home Assistant server (HASS) through Python scripts. I posted this on GitHub and will keep it more updated there, so please check it out there.  
  
 +
 +
== Updated Python API Client ==
 +
Go here. It is more updated.
 
https://github.com/ddxfish/home-assistant-python-api-client
 
https://github.com/ddxfish/home-assistant-python-api-client
  
 +
 +
== Original v1 client ==
  
 
  from requests import get, post
 
  from requests import get, post

Revision as of 19:37, 24 October 2021

This script allows us to access our Home Assistant server (HASS) through Python scripts. I posted this on GitHub and will keep it more updated there, so please check it out there.


Updated Python API Client

Go here. It is more updated. https://github.com/ddxfish/home-assistant-python-api-client


Original v1 client

from requests import get, post
import json 
class HassRestAPIClient:
    def __init__(self):
        #Change to your Home Assistant API URL (ex. http://192.168.1.100:8123/api )
        self.hassurl = "http://192.168.1.100:8123/api"
        #Make sure you enter your own Long Time Access token (Bearer token) from Home Assistant
        self.headers = {
            "Authorization": "Bearer BEARERTOKENGOESHERE",
            "content-type": "application/json",
        } 
    #Get information from home assistant states
    def getHassStates(self, entitysearch="", key="all", exactmatch=0):
        url = self.hassurl + "/states"
        response = get(url, headers=self.headers)
        entities = response.json()
        result = []
        for entity in entities:
            if exactmatch == 0:
                if entitysearch.lower() in entity['entity_id'].lower() or entitysearch.lower() in entity['attributes']['friendly_name'].lower():
                    if key == "all":
                        result.append(entity)
                    if key == "basic":
                        result.append([entity['entity_id'],entity['attributes']['friendly_name'],entity['state']])
                    else:
                        try:
                            result.append(entity[key])
                        except KeyError:
                            try:
                                result.append(entity['attributes'][key])
                            except KeyError:
                                result.append("no key named " + key)
            if exactmatch == 1:
                if entitysearch.lower() == entity['entity_id'].lower() or entitysearch.lower() == entity['attributes']['friendly_name'].lower():
                    if key == "all":
                        return entity
                    if key == "basic":
                        return [entity['entity_id'],entity['attributes']['friendly_name'],entity['state']]
                    else:
                        try:
                            return entity[key]
                        except KeyError:
                            try:
                                return entity['attributes'][key]
                            except KeyError:
                                return "no key named " + key
        return result  
    #Custom service call 
    def callHassService(self, entity_id, service, action):
        payload = json.dumps({"entity_id": entity_id})
        entityurl = self.hassurl + "/services/" + service + "/" + action
        result = post(entityurl, headers=self.headers, data=payload)
        return result


External Links