human
I wrote the below code

    entity_id = config.get(CONF_ENTITY_ID)
    zone_entity_id = config.get(CONF_ZONE)
    event = config.get(CONF_EVENT)
    @callback
    def zone_automation_listener(entity, from_s, to_s):
        'Listen    for    state    changes    and    calls    action.'
        if ((from_s and (not location.has_location(from_s))) or (not location.has_location(to_s))):
            return
        zone_state = hass.states.get(zone_entity_id)
        if from_s:
            from_match = condition.zone(hass, zone_state, from_s)
        else:
            from_match = False
        to_match = condition.zone(hass, zone_state, to_s)
        if (((event == EVENT_ENTER) and (not from_match) and to_match) or ((event == EVENT_LEAVE) and from_match and (not to_match))):
            hass.async_run_job(action, {'trigger': {'platform': 'zone', 'entity_id': entity, 'from_state': from_s, 'to_state': to_s, 'zone': zone_state, 'event': event}})
    return async_track_state_change(hass, entity_id, zone_automation_listener, MATCH_ALL, MATCH_ALL)

What's a good function header?

Here's a good function header?
assistant
#Here's a good function header.

@asyncio.coroutine
def async_trigger(hass, config, action):