function get_nation_limit() { get_dev_info || return 1 COUNTRY=`echo $DEV_INFO | jsonpath -e "@.get_country"` [ -z "${MODEL}" ] && MODEL=`echo $DEV_INFO | jsonpath -e "@.get_model"` SN=`echo $DEV_INFO | jsonpath -e "@.get_sn"` TIMESTAMP="`date +%s`" REQ_MSG="{\"countryCode\":\"${COUNTRY}\",\"model\":\"${MODEL}\",\"nonce\":\"${RANDOM}\",\"sn\":\"${SN}\",\"timestamp\":${TIMESTAMP}000}" REQ_MSG_AES=`echo -n ${REQ_MSG} | openssl enc -e -aes-256-cbc -K ${KEY} -iv ${IV_VALUE} -base64` log "$REQ_MSG_AES" REQ_MSG_SEC=`echo -n ${REQ_MSG_AES} | sed -e 's/ //g' -e 's/+/%2B/g' -e 's/\//%2F/g' -e 's/=/%3D/g'` log "$REQ_MSG_SEC" export SSL_CERT_DIR=/etc/ssl/certs CURL_RESULT=`curl --connect-timeout 60 -X GET -H "Accept:*/*" -H "Content-Type:application/x-www-form-urlencoded" "https://device.dreame.tech/dreame-region/public/check?data=${REQ_MSG_SEC}"` log "${CURL_RESULT}" RESULT=`echo $CURL_RESULT | jsonpath -e "@.data.result"` log "${RESULT}" echo "${CURL_RESULT}" | jshon -n ${TIMESTAMP} -i timestamp > /data/log/curl_area.json # invalid: 表示参数有误或者时间戳超时; # unknown: 无法判断该IP属于哪个国家; # mismatched: 机器内置国家码和IP不匹配; # matched: 机器和IP相匹配 if [ "$RESULT" == "matched" ]; then avacmd msg_cvt '{"type":"msgCvt","cmd":"device_lock","code":200}' & elif [ "$RESULT" == "mismatched" ]; then avacmd msg_cvt '{"type":"msgCvt","cmd":"device_lock","code":401}' & else avacmd msg_cvt '{"type":"msgCvt","cmd":"device_lock","code":0}' & fi ext_dinfo=`echo $CURL_RESULT | jsonpath -e "@.data.ext.d"` if [ -n "${ext_dinfo}" ]; then laser_flare=0 elems=`echo "${ext_dinfo}" | sed 's/,/ /g'` for i in $elems do if [ "$i" == "laser_flare" ]; then laser_flare=1 fi done if [ "${PRODUCT_NAME}" == "r2215" -o "${PRODUCT_NAME}" == "r2235" ]; then avacmd msg_cvt "{\"type\":\"msgCvt\",\"ext_info\":{\"laser_flare\":${laser_flare}}}" & fi fi } function check_ip_limit() { get_dev_info || return 1 [ -z "${MODEL}" ] && MODEL=`echo $DEV_INFO | jsonpath -e "@.get_model"` COUNTRY=`echo $DEV_INFO | jsonpath -e "@.get_country"` SN=`echo $DEV_INFO | jsonpath -e "@.get_sn"` DID=`echo $DEV_INFO | jsonpath -e "@.get_did"` TIMEZONE=`echo $DEV_INFO | jsonpath -e "@.get_timezone"` TIMESTAMP="`date +%s`" [ -z "${DID}" ] && DID=12345678 REQ_MSG="{\"model\":\"${MODEL}\",\"sn\":\"${SN}\",\"did\":${DID},\"timezone\":\"${TIMEZONE}\",\"timestamp\":${TIMESTAMP}000}" REQ_MSG_AES=`echo -n ${REQ_MSG} | openssl enc -e -aes-256-cbc -K ${KEY} -iv ${IV_VALUE} -base64` log "IP LOCK: $REQ_MSG_AES" REQ_MSG_SEC=`echo -n ${REQ_MSG_AES} | sed -e 's/ //g' -e 's/+/%2B/g' -e 's/\//%2F/g' -e 's/=/%3D/g'` mkdir -p /data/log /tmp/log get_dreame_iot_area "${COUNTRY}" export SSL_CERT_DIR=/etc/ssl/certs URL="https://${iot_area}.iot.dreame.tech:15541/dreame-region/public/didCheck?data=${REQ_MSG_SEC}" CURL_RESULT=`curl --connect-timeout 30 -X GET --location "${URL}" 2>/tmp/log/curl_area.log` curl_ret=$? if [ ${curl_ret} -eq 0 ]; then log "curl ${URL} ok: ${CURL_RESULT}" echo "${CURL_RESULT}" | jshon -n ${TIMESTAMP} -i timestamp > /data/log/curl_area.json CODE=`echo "${CURL_RESULT}" | jsonpath -e "@.code"` avacmd msg_cvt "{\"type\":\"msgCvt\",\"cmd\":\"device_lock\",\"code\":${CODE}}" & rm -f /data/log/devlock_record.json record_events.sh lock_code ${CODE} else ERR_INFO=`tail -1 /tmp/log/curl_area.log` log "curl ${URL} failed: ${ERR_INFO}" RECORD_CODE=`jshon -F /data/config/ava/iot_conf.json -e LockCode` if [ -z "${RECORD_CODE}" -o "${RECORD_CODE}" == "200" ]; then RECORD_CNT=`jshon -F /data/log/devlock_record.json -e record_cnt 2>/dev/null` RECORD_TIME=`jshon -F /data/log/devlock_record.json -e record_time 2>/dev/null` if [ -n "${RECORD_CNT}" -a -n "${RECORD_TIME}" ]; then NOW_TIME=`date +%s` let EXPECT_TIME=${RECORD_TIME}+86400 if [ ${NOW_TIME} -ge ${EXPECT_TIME} ]; then let RECORD_CNT++ if [ ${RECORD_CNT} -ge 3 ]; then log "curl area failed reach:${RECORD_CNT}, lock device" avacmd msg_cvt "{\"type\":\"msgCvt\",\"cmd\":\"device_lock\",\"code\":201}" & rm -f /data/log/devlock_record.json record_events.sh lock_code 201 else RECORD_TIME=`date +%s` log "record cnt: ${RECORD_CNT}, record time:${RECORD_TIME}" echo "{\"record_cnt\":${RECORD_CNT},\"record_time\":${RECORD_TIME}}" > /data/log/devlock_record.json fi else log "expect time: ${EXPECT_TIME}, now time: ${NOW_TIME}" fi else RECORD_TIME=`date +%s` echo "{\"record_cnt\":1,\"record_time\":${RECORD_TIME}}" > /data/log/devlock_record.json fi fi fi } function get_location_city() { get_dev_info || return 1 TIMESTAMP="`date +%s`000" DID=`echo $DEV_INFO | jsonpath -e "@.get_did"` COUNTRY=`echo $DEV_INFO | jsonpath -e "@.get_country"` [ -z "${DID}" ] && DID=12345678 //2023-03-08 经和耿工、邹工讨论,决定所有区域都请求城市中文名,像台湾地区如需繁体中文,由服务端做映射。 #若APP上语言显示非中文,由APP映射为对应的城市拼音或者外文名。 REQ_MSG="{\"did\":${DID},\"lang\":\"ZH\",\"timestamp\":${TIMESTAMP}}" REQ_MSG_AES=`echo -n ${REQ_MSG} | openssl enc -e -aes-256-cbc -K ${KEY} -iv ${IV_VALUE} -base64` log "Get City: $REQ_MSG_AES" REQ_MSG_SEC=`echo -n ${REQ_MSG_AES} | sed -e 's/ //g' -e 's/+/%2B/g' -e 's/\//%2F/g' -e 's/=/%3D/g'` mkdir -p /tmp/log get_dreame_iot_area "${COUNTRY}" export SSL_CERT_DIR=/etc/ssl/certs URL="https://${iot_area}.iot.dreame.tech:15541/dreame-region/public/didCity?data=${REQ_MSG_SEC}" CURL_RESULT=`curl --connect-timeout 30 -X GET --location "${URL}" 2>/tmp/log/curl_area.log` curl_ret=$? if [ ${curl_ret} -eq 0 ]; then log "curl ${URL} ok: ${CURL_RESULT}" echo "${CURL_RESULT}" > /data/log/location_city.json else ERR_INFO=`tail -1 /tmp/log/curl_area.log` log "curl ${URL} failed: ${ERR_INFO}" fi city=`echo ${CURL_RESULT} | jsonpath -e "@.city"` avacmd msg_cvt "{\"method\":\"set_properties\",\"params\":[{\"did\":\"${DID}\",\"siid\":7,\"piid\":7,\"value\":\"${city}\"}],\"id\":1234}" }