Cannot call presence commands in MakerAPI

When trying to call the arrived or departed commands from MakeAPI, I get the following:

{"error":true,"type":"AppException","message":"Method Not Allowed"}

The target node is a virtual presence device.

Calling the Make API commands method for the device I get:

[{"command":"arrived","type":["n/a"]},{"command":"departed","type":["n/a"]}]

Is this intentional? And if so, is there a way to make this call w/o create my own API endpoint application?

The reason I need this, is that Life360 is severely broken. I have already added a refresh trigger to force refresh the life360 link, but their application is constantly unloading on my iPhone, and they do not respond to requests for support.

So, to build a better mouse trap, I created a Siri Shortcut that reports my presence back to Hubitat. Using Network (wifi) detection and Geo Fencing, I determine if my phone is present or away, and it seems to be rock solid -- except that I cannot change the state of the virtual presence sensor.

I found another topic from 2019 (I think it was) where the messages said support was being added to maker API back then.

Please help.

I have on occasion used a virtual switch with presence - switch on sets presence to present, etc.

Virtual Switch with Presence
 /*
 *  Virtual Switch with Presence
 *
 *  Licensed Virtual the Apache License, Version 2.0 (the "License"); you may not use this file except
 *  in compliance with the License. You may obtain a copy of the License at:
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
 *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
 *  for the specific language governing permissions and limitations under the License.
 *
 *  Change History:
 *
 *    Date        Who            What
 *    ----        ---            ----
 *    2021-01-03  thebearmay	 Original version 0.1.0
 * 
 */

static String version()	{  return '0.1.0'  }

metadata {
    definition (
		name: "Virtual Switch with Presence", 
		namespace: "thebearmay", 
		author: "Jean P. May, Jr.",
	        importURL:"https://raw.githubusercontent.com/thebearmay/hubitat/main/dashVariable.groovy"
	) {
        	capability "Actuator"
        	capability "Switch"
        	capability "PresenceSensor"
        	
		    command "arrived"
            command "departed"

    }   
}

preferences {
	input("debugEnable", "bool", title: "Enable debug logging?")
}

def installed() {
	log.trace "installed()"
    on()
}

def updated(){
	log.trace "updated()"
	if(debugEnable) runIn(1800,logsOff)
}

def on() {
    if(debugEnable) log.debug "switch on"
    sendEvent(name:"switch", value:"on")
    sendEvent(name:"presence",value:"present")
}

def arrived(){
    if(debugEnable) log.debug "arrived"
    on()
}    

def off() {
    if(debugEnable) log.debug "switch off"
    sendEvent(name:"switch", value:"off")
    sendEvent(name:"presence",value:"not present")
}

def departed(){
    if(debugEnable) log.debug "departed"
    off()
}    
    
void logsOff(){
     device.updateSetting("debugEnable",[value:"false",type:"bool"])
}

Works fine for me.

Did you make sure and add that device to the Maker API app?

App 2=Maker API on my dev hub
Device 484=a virtual presence device on my dev hub

Just did this on a virtual presence sensor, and it worked.

EDIT: Also make sure you are using a GET, and not a POST - common mistake!

http://192.168.2.162/apps/api/2/devices/484/arrived?access_token=<token removed>

This worked too:

http://192.168.2.162/apps/api/2/devices/484/departed?access_token=<token removed>
1 Like

Thank you!

Now that I have confirmation it works, I know it has to be something in my solution.

Digging into this further, it appears my mistake is that I used a POST instead of a GET. Changed it to a GET and it works perfectly.

2 Likes