I have Home Assistant running on a Raspberry Pi 4 and wanted an app on my Mac desktop on the same local network to be able to command lights to turn on and off etc.  You can give Home Assistant instructions with curl calls to the REST API - see the documentation here:  REST API | Home Assistant Developer Docs 
Once I had succeeded in making some curl calls work in the Terminal I wrote a simple method to do this from within Xojo:
HA_Action(device as string, action as string)
dim sh as new shell, HA_Header as string, DQUOTE, SQUOTE as string
DQUOTE=chr(34)
SQUOTE=chr(39)
HA_Header=“-H “+DQUOTE+“Authorization: Bearer ”+DQUOTE+”  -H “+DQUOTE+“Content-Type: application/json”+DQUOTEhttp://homeassistant.local:8123/api/ "+action)
You get  from the Home Assistant web interface.  See here: Authentication API | Home Assistant Developer Docs 
So the call
HA_Action(“switch.plug”,“services/switch/turn_on”)
switches on the Zigbee plug called ‘plug’
For me it seems to work very quickly and reliably.
             
            
              1 Like 
            
            
           
          
            
            
              Also - the call to curl responds with a JSON string, so you can access this through sh.result
             
            
              
            
           
          
            
            
              
 Richard_Dixon:
 
HA_Action(device as string, action as string)
dim sh as new shell, HA_Header as string, DQUOTE, SQUOTE as string
DQUOTE=chr(34)
SQUOTE=chr(39)
HA_Header=“-H “+DQUOTE+“Authorization: Bearer ”+DQUOTE+” -H “+DQUOTE+“Content-Type: application/json”+DQUOTEhttp://homeassistant.local:8123/api/ "+action)
You get from the Home Assistant web interface. See here: Authentication API | Home Assistant Developer Docs 
 
 
Sorry I see the system has removed something I had in angle brackets, here it is in square brackets:
HA_Action(device as string, action as string)
dim sh as new shell, HA_Header as string, DQUOTE, SQUOTE as string
DQUOTE=chr(34)
SQUOTE=chr(39)
HA_Header=“-H “+DQUOTE+“Authorization: Bearer [TOKEN]”+DQUOTE+” -H “+DQUOTE+“Content-Type: application/json”+DQUOTEhttp://homeassistant.local:8123/api/ "+action)
You get a long-term [TOKEN] from the Home Assistant web interface. See here: Authentication API | Home Assistant Developer Docs 
             
            
              
            
           
          
            
              
                DerkJ  
              
                  
                    October 19, 2025, 11:40am
                   
                  4 
               
             
            
              Use the URLConnection class for this. It’s more integrated into xojo
             
            
              
            
           
          
            
            
              Thanks Derk, I’ll take a look at that.