Ontem achei algumas documentações e scripts para serem usados nos produtos da Reolink.
Eu estou testando os comandos para gravar a mascara de detecção e alterar de acordo com a posição da câmera, mas tem muita coisa nos links.
Aqui tive que fazer umas alterações para executar os scripts no HA.
Segue um ex das alterações:
1 - Crie uma pasta reolink dentro da pasta config do HA
2 - Crie um arquivo especifico para cada câmera dentro da pasta reolink com o código abaixo, alterando o ip, usuário e senha da câmera
ex: rl-e1
#!/bin/bash
HOST="IP_CAMERA" # Your NVR or Camera IP Address
USER="USUARIO" # Your username
PASS="SENHA" # Your password
# Set this to true and the script will dump the request/response
# payloads to stderr.
DEBUG=false
### END OF CONFIGURATION ###
URL="https://$HOST/cgi-bin/api.cgi"
# TOKEN must initially be set to null, so that it gets passed to the
# login command as `?cmd=Login&token=null`
TOKEN="null"
# Takes an API command as the first argument, and JSON-ish payload as
# an optional second argument. If a payload is provided it's
# processed with `jq -n` to make it easier (jq -n doesn't require
# property names to be quoted, you can have trailing commas and other
# stuff that isn't actually valid JSON)
rl-api() {
local CMD="$1" PARAM='{}'
if [ -n "$2" ]; then PARAM="$(jq -n "$2")"; fi
local REQ="$(
jq -n --arg CMD "$CMD" --argjson PARAM "$PARAM" '{
cmd: $CMD,
action: 0,
param: $PARAM,
}'
)"
local TGT="$URL?cmd=$CMD&token=$TOKEN"
if $DEBUG; then
echo ">>> REQUEST >>>" 1>&2
echo "TARGET: $TGT" 1>&2
jq -C . <<<"$REQ" 1>&2
fi
local RES="$(
curl -kfsSLH 'Content-Type: application/json' -d "[$REQ]" -XPOST "$TGT" |
jq '.[0]'
)"
if $DEBUG; then
echo "<<< RESPONSE <<<" 1>&2
jq -C . <<<"$RES" 1>&2
fi
# If the response had "code: 0" then it was successful, otherwise it
# was an error
if [ "$(jq -r '.code' <<<"$RES")" -eq "0" ]; then
jq '.value' <<<"$RES"
return 0
else
echo -n "$CMD ERROR: " 1>&2
jq -r '"\(.error.detail) (\(.error.rspCode))"' <<< "$RES" 1>&2
return 1
fi
}
# Send a Login command to the API
rl-login() {
rl-api Login "$(
jq -n --arg USER "$USER" --arg PASS "$PASS" '{
User: { userName: $USER, password: $PASS }
}'
)" | jq -r '.Token.name'
}
# Send a Logout command to the API
rl-logout() {
if [ "$TOKEN" = "null" ] || [ "$TOKEN" = "" ]; then return; fi
rl-api Logout > /dev/null
}
# Login with username and password and get a session token
TOKEN="$(rl-login)"
if [ -z "$TOKEN" ]; then exit 1; fi
# Now that we have a token, we add an exit hook to remove it when the
# script exits, if you leave it around you may get the dreaded (and
# annoying) "max session" error. If that happens all you can really
# do is wait, by default the tokens are good for an hour (and the
# session limit is global, so using multiple usernames won't help)
trap 'rl-logout' EXIT
# Process any arguments on the command line as commands, if the
# command is followed by something that looks like a payload, then
# pass that as the payload to the command.
while (( $# )); do
CMD="$1" ; shift
#if (( $# )) && jq -eR 'try(fromjson)' <<<"$1"; then
if (( $# )) && [[ $1 == *[{}]* ]]; then
PAYLOAD="$1" ; shift
else
PAYLOAD="{}"
fi
rl-api "$CMD" "$PAYLOAD" || exit 1
done
3 - Para criar os comandos shell no HA tive que fazer essas alterações:
Comando original:
./rl-api GetAiAlarm '{"channel":0,"ai_type":"people"}' | jq '{channel:.[].channel,md:.[].scope,people:.[].scope,vehicle:.[].scope}' -c > json_detectionzoneAI_id1
Tive que substituir as "
por \"
e as '
por "
Alterei ./rl-api
para ./reolink/rl-e1
que é a pasta/câmera criada no item 1 e 2
e alterei tbm -c > json_detectionzoneAI_id1
para -c > ./reolink/json_detectionzoneAI_id1
, para salvar a mascara dentro da pasta
O comando ficou assim dentro do arquivo shell_command.yaml:
reolink_save_json_detectionzoneai_id1: './reolink/rl-e1 GetAiAlarm "{\"channel\":0,\"ai_type\":\"people\"}" | jq "{channel:.[].channel,md:.[].scope,people:.[].scope,vehicle:.[].scope}" -c > ./reolink/json_detectionzoneAI_id1'
4 - Reinicie o HA
Os comandos mudam de acordo com o modelo da câmera, então fiquem atentos a isso.