CF757G Can Bash Save the Day?

CF757G Can Bash Save the Day?

#include<bits/stdc++.h>
#define RG register
#define IL inline
#define _ 200100
#define ycb (1<<30) 
#define ll long long 
using namespace std;

IL int gi(){
    RG int data = 0 , m = 1; RG char ch = 0;
    while(ch != '-' && (ch<'0' || ch > '9')) ch = getchar();
    if(ch == '-'){m = 0; ch = getchar();}
    while(ch>='0' && ch<='9'){data = (data<<1) + (data<<3) + ch - '0' ;  ch = getchar();}
    return (m) ? data : -data ; 
}

int fa[_],son[_],sz[_],dep[_],dfn[_],top[_];
struct YCB{int ls,rs; ll tag,sum;} t[120*_] ;  int n,Q,a[_],rt[_],tot; 
struct Road{int to,next,w;}edg[2*_] ; int head[_],cnt; ll dis[_],bit[_],ans,predist[_];

IL void add(int u,int v,int w){
    edg[++cnt] = (Road){v , head[u] , w} ; head[u] = cnt ;
}

void dfs1(int u,int fth,ll dist){
    fa[u] = fth; dis[u] = dist;
    son[u] = 0; sz[u] = 1;  
    for(int i = head[u]; i; i = edg[i].next){
        int v = edg[i].to;
        if(v == fth)continue;
        dfs1(v,u,dist + edg[i].w);
        if(!son[u] || sz[son[u]] < sz[v])son[u] = v;
        sz[u] = sz[u] + sz[v];
    }
}
void dfs2(RG int u,RG int upp){
    top[u] = upp; dfn[u] = ++cnt;
    predist[cnt] = predist[cnt-1] + dis[u] - dis[fa[u]] ;   
    if(son[u]) dfs2(son[u] ,upp) ;  else return ;   
    for(RG int i = head[u] ; i ; i = edg[i].next){
        RG int v = edg[i].to;
        if(v == fa[u] || v == son[u]) continue;     
        if(v != son[u]) dfs2(v , v) ;       
    }return ; 
}

IL void Pre(){
    n = gi(); Q = gi();
    for(RG int i = 1; i <= n; i ++) a[i] = gi() ;
    for(RG int i = 1,u,v,w; i <= n-1; i ++)
        u = gi() , v = gi() , w = gi() , add(u,v,w) , add(v,u,w) ;
    dfs1(1,0,0); cnt = 0; dfs2(1,1);
}

IL void Ins(int x,ll d){while(x<=n)bit[x] += d , x += (x&-x); }
IL ll get(int x){RG ll ret = 0; while(x)ret += bit[x] , x -= (x&-x); return ret ; }

void Build(int &o,int l,int r){
    o = ++ tot;
    t[o].tag = t[o].sum =0; if(l == r)return ; 
    RG int mid = (l + r) >> 1;
    Build(t[o].ls , l , mid) ; Build(t[o].rs , mid + 1 , r) ;
}

void Update(int &o,int l,int r,int ql,int qr){
    t[++tot] = t[o]; o = tot;
    if(ql == l && r == qr){t[o].tag++; return ; }
    t[o].sum += predist[qr] - predist[ql-1] ; 
    RG int mid = (l + r) >> 1;
    if(qr <= mid) Update(t[o].ls , l , mid , ql , qr) ;
    else if(ql  > mid) Update(t[o].rs , mid + 1, r , ql , qr) ;
    else Update(t[o].ls,l,mid,ql,mid) , Update(t[o].rs,mid+1,r,mid+1,qr) ; 
}

ll Query(int o,int l,int r,int ql,int qr){
    RG ll dt = 1ll * t[o].tag * (predist[qr]-predist[ql-1]) ;
    if(ql == l && r == qr) return t[o].sum + dt;
    RG int mid = (l + r) >> 1; 
    if(qr <= mid) return dt + Query(t[o].ls , l , mid , ql , qr) ;
    if(ql > mid) return dt + Query(t[o].rs , mid + 1 , r , ql , qr) ;
    return dt + Query(t[o].ls , l , mid , ql , mid) + Query(t[o].rs , mid + 1, r , mid + 1, qr); 
}

IL void Modify_Pre(int P,int p){
    while(top[p] ^ 1)
        Update(rt[P] , 1 , n , dfn[top[p]] , dfn[p]) , 
            p = fa[top[p]] ;
    if(p ^ 1) Update(rt[P] , 1 , n , dfn[son[1]] , dfn[p]) ;
}
IL ll Calc_Pre(int root,int p){
    RG ll ret = 0;
    while(top[p] ^ 1)
        ret = ret + Query(root , 1 , n , dfn[top[p]] , dfn[p]) ,
            p = fa[top[p]] ;
    if(p ^ 1) ret += Query(root , 1 , n , dfn[son[1]] , dfn[p]) ;
    return ret ;
}

int main(){
    Pre();
    Build(rt[0] , 1 , n) ;
    for(RG int i = 1; i <= n; i ++)
        rt[i] = rt[i-1] , Modify_Pre(i , a[i]) ;
    for(RG int i = 1; i <= n; i ++) Ins(i , dis[a[i]]) ; 
    RG int opt,l,r,x;
    ans = 0;
    while(Q--){
        opt = gi();
        if(opt == 2) x = gi() ;
        else l = gi() , r = gi() , x = gi() ;
        l = (ans % ycb) ^ l ;
        r = (ans % ycb) ^ r ;
        x = (ans % ycb) ^ x ;
        if(l > r) swap(l , r) ;
        if(opt == 1){
            ans = 0;
            ans += 1ll * (r-l+1) * dis[x] ;
            ans += get(r) - get(l-1) ;
            ans -= 1ll * 2 * (Calc_Pre(rt[r] , x) - Calc_Pre(rt[l-1] , x));
            printf("%lld\n" , ans) ;
        }
        else if(opt == 2){
            rt[x] = rt[x-1] ;
            Modify_Pre(x , a[x+1]) ;
            Ins(x , -dis[a[x]]); Ins(x+1 , -dis[a[x+1]]); 
            swap(a[x] , a[x+1]) ;
            Ins(x , dis[a[x]]) ; Ins(x+1 , dis[a[x+1]]) ; 
        }
    }return 0;
}

转载于:https://www.cnblogs.com/Guess2/p/8708434.html

root@NVR:~# ubus list -v 'chm_debug' @3bc5bee7 "chm_set_debug_level": { "level": "Integer" } 'chm_dev_manager' @d8112d5a "chm_ubus_set_device_status": { "device_list": "Array" } "chm_dev_manager_simple_mode_config": { "enable": "Integer" } "chm_dev_manager_chn_extend_config": { "enable": "Integer" } "chm_dev_manager_encode_config": { "enable": "Integer" } "chm_dev_manager_smartcodec_config": { "enable": "Integer" } "chm_dev_manager_rsa_decrypt": { "ciphertxt": "String" } "chm_ubus_dev_ver_info_refresh": { "channel": "String" } "chm_dev_manager_get_device_version_info": { } "chm_ubus_device_discovery": { } "chm_ubus_get_added_device_idx": { } "chm_ubus_get_device_num": { } "chm_ubus_get_device_list": { "type": "Integer", "start": "Integer", "num": "Integer" } "chm_ubus_check_fisheye_ipc": { "channel": "Integer" } "chm_ubus_add_device": { "device_list": "Array", "ignore_bw": "Integer" } "chm_ubus_delete_device": { "channel": "String" } "chm_ubus_get_device_url": { "channel": "String" } "chm_ubus_edit_device": { "channel": "Integer", "name": "String", "connect_prot": "String", "port": "Integer", "username": "String", "ciphertext": "String", "passwd_strength": "String", "rtsp_prot": "String" } "chm_ubus_edit_device_list": { "device_list": "Array" } "chm_ubus_edit_device_url": { "channel": "Integer", "name": "String", "username": "String", "ciphertext": "String", "url_main": "String", "url_sub": "String" } "chm_dev_manager_conn_status_report": { "channel": "Integer", "status": "Integer", "audio_support": "Integer" } "chm_ubus_change_password": { "channel": "Integer", "old": "String", "new": "String", "passwd_strength": "String", "reset_pwd_email": "String" } "chm_ubus_change_password_list": { "device_list": "Array" } "chm_ubus_set_sec_question": { "channel": "Integer", "old": "String", "sec_question_1": "String", "sec_answer_1": "String", "sec_question_2": "String", "sec_answer_2": "String", "sec_question_3": "String", "sec_answer_3": "String" } "chm_ubus_get_sec_question": { "channel": "Integer" } "chm_ubus_get_adding_dev_sec_question": { "uuid": "String", "ip": "String", "port": "Integer" } "chm_ubus_check_sec_answer": { "uuid": "String", "ip": "String", "port": "Integer", "sec_answer_1": "String", "sec_answer_2": "String", "sec_answer_3": "String" } "chm_ubus_forget_sec_settings": { "uuid": "String", "ip": "String", "port": "Integer" } "chm_ubus_get_sensor_framerate": { "channel": "Integer" } "chm_ubus_get_expose_and_image_setting": { "channel": "Integer" } "chm_ubus_set_sensor_framerate": { "channel": "Integer", "sensor_framerate": "Integer" } "chm_ubus_set_sensor_framerate_all": { "sensor_framerate": "Integer" } "chm_ubus_get_device_security_code": { "uuid": "String" } "chm_ubus_device_verification_code_check": { "uuid": "String", "code": "String" } "chm_ubus_device_password_reset": { "uuid": "String", "code": "String", "username": "String", "ciphertext": "String" } "chm_ubus_device_password_reset_by_sec_question": { "uuid": "String", "ip": "String", "port": "Integer", "stok": "String", "old": "String", "new": "String" } "chm_ubus_set_factory_device_password": { "uuid": "String", "username": "String", "ciphertext": "String", "reset_pwd_email": "String", "ip": "String", "port": "Integer", "sec_question_1": "String", "sec_answer_1": "String", "sec_question_2": "String", "sec_answer_2": "String", "sec_question_3": "String", "sec_answer_3": "String" } "chm_ubus_alloc_device_ipaddr": { "base_list": "Array", "device_list": "Array" } "chm_ubus_ip_conflict_detect": { "device_list": "Array" } "chm_ubus_set_device_ipaddr": { "device_list": "Array" } "chm_ubus_localnode_change_handler": { } "chm_ubus_set_system_auto_reboot": { "channel": "String" } "chm_ubus_set_system_reset": { "channel": "String" } "chm_ubus_set_system_restore": { "channel": "String" } "chm_ubus_recv_center_task_queue_print": { } "chm_ubus_check_video_configuration_ready": { } "chm_ubus_check_motion_detect_conf_ready": { } "chm_ubus_channel_video_configuration_adapt": { "channel": "String", "type": "Integer" } "chm_ubus_get_notified_event": { } "chm_ubus_activate_hik_device": { "mac": "String", "password": "String" } "chm_ubus_force_chn_iframe": { "targets": "Array" } "chm_ubus_set_source_time_info": { "source_time_priority": "String", "source_mac": "String", "transmit": "Integer" } "chm_ubus_manual_msg_alarm": { "channel": "Integer", "action": "String" } "chm_dev_manager_notify_reconnected": { "source_time_priority": "String", "source_mac": "String", "transmit": "Integer" } "chm_ubus_set_chn_id": { "old_id": "Integer", "chn_id": "Integer" } "chm_ubus_get_smart_analysis_version": { "chn_id": "Integer" } "chm_ubus_get_smart_analysis_version_list": { "chn_list": "String" } "chm_ubus_set_onvif_enable": { "enable": "Integer" } "chm_ubus_lc_debug": { "chnid": "Integer" } "chm_ubus_check_ip_conflict": { "ipaddr_list": "Array" } "chm_ubus_limit_bandwidth": { "enable": "Integer", "mode": "Integer" } 'chm_display' @58f4b44b "chm_display_set_imaging_settings": { "channel": "String", "mode_config": "String" } "chm_display_set_imaging_BLC_area": { "chn_id": "Integer", "mode_config": "Integer", "x_coor": "Integer", "y_coor": "Integer", "width": "Integer", "height": "Integer" } "chm_display_set_OSD_settings": { "channel": "String", "mode_config": "String" } "chm_display_set_cover_settings": { "channel": "String", "mode_config": "String" } "chm_display_get_cover_settings": { "channel": "String", "mode_config": "String" } 'chm_event_detect' @d8227bc4 "chm_event_detect_debug": { } "chm_motion_detect_restart": { "channel": "String" } "chm_tamper_detect_restart": { "channel": "String" } "chm_intrusion_detect_restart": { "channel": "String" } "chm_linecross_detect_restart": { "channel": "String" } "chm_regen_detect_restart": { "channel": "String" } "chm_regex_detect_restart": { "channel": "String" } "chm_at_detect_restart": { "channel": "String" } "chm_vd_detect_restart": { "channel": "String" } "chm_pd_detect_restart": { "channel": "String" } "chm_lt_detect_restart": { "channel": "String" } "chm_sc_detect_restart": { "channel": "String" } "chm_ae_detect_restart": { "channel": "String" } "chm_get_smart_detection_conf": { "chn_id": "Integer", "event_type": "String" } "chm_get_smart_detection_conf_from_local": { "chn_id": "Integer", "event_type": "String" } "chm_get_all_channel_smart_detection_conf": { "event_type": "String" } "chm_get_all_channel_smart_analysis": { "smart_type_list": "Array" } "chm_get_msg_alarm_list": { "chn_id": "Integer" } "chm_set_channel_alarm": { "chn_id": "Integer", "light_onoff": "Integer", "sound_onoff": "Integer", "event_type": "String", "sub_name": "String" } "chm_onvif_notify": { "ip": "String", "info": "String" } "chm_get_ai_enhance_capability": { "chn_id": "Integer" } "chm_get_face_enhance_capability": { "chn_id": "Integer" } "chm_set_motion_detect_arming_schedule": { "channel": "String" } "chm_set_intrusion_detect_arming_schedule": { "channel": "String" } "chm_set_linecross_detect_arming_schedule": { "channel": "String" } "chm_set_regen_detect_arming_schedule": { "channel": "String" } "chm_set_regex_detect_arming_schedule": { "channel": "String" } "chm_set_at_detect_arming_schedule": { "channel": "String" } "chm_set_vd_detect_arming_schedule": { "channel": "String" } "chm_set_pd_detect_arming_schedule": { "channel": "String" } "chm_set_lt_detect_arming_schedule": { "channel": "String" } "chm_set_sc_detect_arming_schedule": { "channel": "String" } "chm_set_ae_detect_arming_schedule": { "channel": "String" } "chm_get_stranger_face": { "channel": "String" } "chm_get_family_face": { "channel": "String" } "chm_add_black_group": { "chn_id": "Integer", "sec_name": "String", "group_name": "String" } "chm_set_face_group": { "chn_id": "Integer", "sec_name": "String", "group_name": "String", "confidence": "Integer", "light_alarm_enabled": "Integer", "sound_alarm_enabled": "Integer" } "chm_delete_face_group": { "chn_id": "Integer", "name": "Array" } "chm_set_face_comparison": { "chn_id": "Integer", "enabled": "Integer", "mode": "String" } "chm_get_group_face": { "chn_id": "Integer", "sec_name": "String", "group_name": "String" } "chm_add_family_face": { "chn_id": "Integer", "face_sec_name": "Array", "group_sec_name": "String" } "chm_add_stranger_face": { "chn_id": "Integer", "stranger_face_id": "Array", "group_sec_name": "String" } "chm_delete_face": { "chn_id": "Integer", "face_name": "Array" } "chm_get_face_group": { "channel": "String" } "chm_face_comparison_restart": { "channel": "String" } "chm_load_motion_config": { "channel": "String" } "chm_set_marker_box_enable": { "channel": "String", "enabled": "String" } "chm_set_motion_detect_enable": { "channel": "String", "enabled": "String" } "chm_set_tamper_detect_enable": { "channel": "String", "enabled": "String" } "chm_set_intrusion_detect_enable": { "channel": "String", "enabled": "String" } "chm_set_linecross_detect_enable": { "channel": "String", "enabled": "String" } "chm_set_smtevt_detect_enable": { "channel": "String", "enabled": "String", "event": "String" } "chm_set_smart_analysis_enable": { "channel": "String", "smart_event_enabled": "String", "face_snapshot_enabled": "String", "object_attr_enabled": "String" } "chm_set_smart_analysis_switch": { "channel": "String", "switch_mode": "String" } "chm_set_face_snapshot_enable": { "channel": "String", "enabled": "String" } "chm_face_snapshot_restart": { "channel": "String" } "chm_load_face_config": { "channel": "String" } "chm_set_face_snapshot_arming_schedule": { "channel": "String" } "chm_set_obj_attr_enable": { "channel": "String", "peopleattr_enable": "String", "vehicleattr_enable": "String" } 'chm_ptz' @32564423 "chm_ubus_ptz_basic_control_opt": { "chn_id": "Integer", "direction": "Integer", "speed": "String" } "chm_ubus_ptz_preset_opt": { "chn_id": "Integer", "preset_id": "Integer", "preset_name": "String", "save_ptz": "Integer", "opt_type": "Integer" } "chm_ubus_ptz_tour_opt": { "chn_id": "Integer", "tour_id": "Integer", "opt_type": "Integer" } "chm_ubus_ptz_pattern_opt": { "chn_id": "Integer", "pattern_id": "Integer", "opt_type": "Integer" } "chm_ubus_ptz_3Dzoom_opt": { "chn_id": "Integer", "start_x": "String", "start_y": "String", "end_x": "String", "end_y": "String" } "chm_ubus_ptz_debug_info": { "chn_id": "Integer", "info_type": "Integer" } "chm_ubus_ptz_lens_mask": { "chn_id": "Integer", "opt_type": "Integer", "enabled": "String" } "chm_ubus_ptz_target_track_info": { "chn_id": "Integer", "opt_type": "Integer", "enabled": "String", "people_enabled": "String" } "chm_ubus_ptz_park_set": { "chn_id": "Integer" } "chm_ubus_ptz_lens_init": { "chn_id": "Integer" } "chm_ubus_ptz_auto_focus": { "chn_id": "Integer" } 'chm_slp' @90d939ff "chm_slp_passthrough": { "device_list": "Array" } 'chm_stream' @9c21aaea "chm_stream_set_video_encoder_settings": { "channel": "String" } "chm_stream_set_ROI_settings": { "channel": "String" } "chm_stream_set_audio_config": { "channel": "String" } "chm_stream_set_advance_settings": { "channel": "String" } 'cloud_brd' @39dae7f3 "cloud_brd_set_debug_level": { "level": "Integer" } "cloud_cycle_dump": { } 'cloud_service' @dba17bfa "set_dbg_level": { "dbg_level": "Integer" } "check_fw_version": { } "request_device_token": { } "get_device_token": { } 'cloudclient' @b4567941 "construct_ssl_path": { "service_type": "Integer", "source": "String" } "cloud_set_level": { "level": "Integer" } "cloud_set_brd_level": { "level": "Integer" } "get_cloud_switch": { } "get_link_status": { } "dump_cloud_brd": { } "user_register": { "user_conf_path": "String" } "user_login": { "user_conf_path": "String" } "user_bind": { "username": "String", "password": "String" } "user_unbind": { "user_conf_path": "String" } "check_fw_version": { "user_conf_path": "String" } "download_fw": { "download_url": "String", "download_type": "Integer" } "cancel_download_fw": { } "get_cloud_account_stat": { "cloud_username": "String" } "reset_cloud_password": { "user_conf_path": "String" } "modify_cloud_password": { "user_conf_path": "String" } "resend_register_email": { "cloud_username": "String" } "get_reg_verify_code": { "user_conf_path": "String" } "get_reset_pwd_verify_code": { "user_conf_path": "String" } "check_reg_verify_code": { "user_conf_path": "String" } "check_reset_pwd_verify_code": { "user_conf_path": "String" } "notify_event": { "params": "Table" } "send_cloud_msg": { "method": "String", "params": "Table", "script": "String" } "knock": { "update_share_info": "Array" } "share_permission_check": { "seqNum": "Integer", "shareId": "String", "subDevice": "String", "action": "String" } "get_device_token": { "service_id": "String" } "send_device_token_request": { "serviceIds": "Array" } "get_device_token_by_serviceid": { "serviceIds": "String" } "get_vms_status": { } "get_vms_device_id": { } "set_vms_info": { } "get_vms_device_token_by_serviceid": { "serviceId": "String", "force_update": "Integer" } "enable_vms": { "enable": "Integer" } "check_device": { "username": "String", "password": "String", "passwdType": "String" } "reset_device_password": { "user_conf_path": "String" } "cloud_config": { "operate_mode": "Integer", "url": "String" } "cloud_log": { "url": "String" } 'genericd' @6898aa93 "internetd_switch": { "switch": "Integer", "period": "Integer" } "get_internetd_status": { } 'msg_push' @6859caa0 "enable_reconfig": { } "plan_reconfig": { } "vms_enable_reconfig": { } "vms_plan_reconfig": { } "update_dev_name": { } "msg_share_reconfig": { } "event_push_enable_reconfig": { } "show_cfg": { } "email_info_reconfig": { } "email_event_reconfig": { } "show_email_alarm_cfg": { } "email_info_test": { } "disarming_reconfig": { } "notify_cloud_connect_status": { "connect_status": "Integer" } "notify_cloud_bind_status": { "bind_status": "Integer" } "notify_vms_connect_status": { "connect_status": "Integer" } "set_dbg_level": { "dbg_level": "Integer" } "vms_device_token": { "type": "String" } "vms_push_iframe": { "channel": "String", "type": "String" } "alarm_info_test": { "ip_or_domain": "String", "port": "String" } "stop_raid_rebuild_buzzing": { } 'msglog_v2' @4aa4a628 "msglog_search": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "types": "Array", "offset": "Integer", "number": "Integer" } "msglog_export": { "client_id": "Integer", "start_time": "Integer", "end_time": "Integer", "types": "Array", "dev_path": "String", "file_path": "String" } "msglog_sync": { } "msglog_export_progress": { "client_id": "Integer" } "msglog_search_tmp": { "start_time": "Integer", "end_time": "Integer", "main_type": "Integer", "offset": "Integer", "number": "Integer" } "msglog_export_tmp": { "start_time": "Integer", "end_time": "Integer", "main_type": "Integer", "number": "Integer" } "msglog_get_type_offset": { "main": "Integer", "sub": "Integer" } 'netlinkd' @1d10548d "send": { "cmd": "String", "data": "String" } 'network' @de13d900 "restart": { } "reload": { } "add_host_route": { "target": "String", "v6": "Boolean" } "get_proto_handlers": { } 'network.device' @198c9cec "status": { "name": "String" } "set_alias": { "alias": "Array", "device": "String" } "set_state": { "name": "String", "defer": "Boolean" } 'network.interface' @cf8c0649 "up": { } "down": { } "status": { } "prepare": { } "add_device": { "name": "String" } "remove_device": { "name": "String" } "notify_proto": { } "remove": { } "set_data": { } 'network.interface.lan' @0ab6e1d1 "up": { } "down": { } "status": { } "prepare": { } "add_device": { "name": "String" } "remove_device": { "name": "String" } "notify_proto": { } "remove": { } "set_data": { } 'network.interface.loopback' @ffd9ad60 "up": { } "down": { } "status": { } "prepare": { } "add_device": { "name": "String" } "remove_device": { "name": "String" } "notify_proto": { } "remove": { } "set_data": { } 'network.interface.wan' @d4b0b3d2 "up": { } "down": { } "status": { } "prepare": { } "add_device": { "name": "String" } "remove_device": { "name": "String" } "notify_proto": { } "remove": { } "set_data": { } 'nvrgui' @7f6f6230 "get_login_status": { } "nvrgui_get_resolution": { } "nvrgui_notify_permission_change": { } "nvrgui_notify_chn_permission_change": { } "nvrgui_get_last_operateTime": { } "nvrgui_notify_loginout": { "username": "String" } "nvrgui_refresh_status": { "type": "Integer" } "nvrgui_set_debug_level": { "level": "Integer", "win_level": "Integer", "text_level": "Integer" } "nvrgui_set_hdextreme_factor": { "type": "Integer", "level": "Integer" } "nvrgui_get_nvrcore_res": { "client_id": "Integer", "error_code": "Integer" } "nvrgui_get_chn_sel_res": { "error_code": "Integer", "channel_map": "Array" } "nvrgui_set_chn_warning": { "error_code": "Integer", "channel_message": "Array", "layer": "Integer" } "nvrgui_check_new_version": { "check_type": "Integer" } "nvrgui_switch_preview": { "switch_type": "Integer" } "nvrgui_refresh_resolution": { "width": "Integer", "height": "Integer" } "nvrgui_update_nonoper_screen": { "screen": "Integer", "(unknown)" } "nvrgui_refresh_gui_display": { "screen": "Integer", "status": "Integer" } "nvrgui_shutdown_display": { "screen": "Integer", "status": "Integer" } "nvrgui_change_stream_type": { "screen": "Integer", "type": "Integer" } "nvrgui_logparam_init": { "screen": "Integer", "loginterval": "Integer", "loginenable": "Integer" } "nvrgui_logtime_update": { "updatetype": "Integer", "(unknown)", "(unknown)" } "nvrgui_vice_refresh_status": { "screen": "Integer", "status": "Integer" } "nvrgui_set_playback_status": { "screen": "Integer", "status": "Integer" } "nvrgui_update_gui_status": { "screen": "Integer", "status": "Integer" } "nvrgui_vice_update_language": { "language": "Integer" } "nvrgui_vice_update_logdata": { "log_mode": "Integer", "need_refresh": "Boolean", "is_login": "Boolean", "is_login_chn_atuh": "Boolean", "curr_usr": "String", "curr_passwd": "String" } "nvrgui_set_need_menu_timeout": { "need_menu_timeout": "Integer" } "nvrgui_set_blockestPage": { "blockTestPage": "Integer" } "nvrgui_get_login": { } "nvrgui_vice_refresh": { } "nvrgui_vice_exit_safely": { } "nvrgui_vice_shutdown": { } "nvrgui_vice_update_markerbox": { "channel": "Array", "num": "Integer" } "nvrgui_set_talk_error": { "talk_error": "Integer" } "notify_nvrgui_cloud_connect_status": { "connect_status": "Integer" } "nvrgui_notify_del_dev": { "ids": "String" } "nvrgui_notify_chn_video": { "channel": "Integer", "xpos": "Integer", "ypos": "Integer", "width": "Integer", "height": "Integer", "type": "Integer" } "update_menu_timeout": { "enable_gui_session_time": "String", "logout_time": "String" } "string_support_check": { "str_to_check": "String" } "nvrgui_update_warnwin": { } "nvrgui_notify_quit_initialize": { } "nvrgui_notify_upgrade": { } "nvrgui_update_preview_language": { } "nvrgui_update_preview_region": { } "nvrgui_update_markerbox": { "channel": "Array", "num": "Integer" } 'playback' @4ed3bd39 "playback_new_resource": { "client_id": "Integer", "x_coor": "Integer", "y_coor": "Integer", "width": "Integer", "height": "Integer", "dev": "Integer" } "playback_change_chns": { "client_id": "Integer", "action": "Integer", "channel_map": "Array" } "playback_change_chn_attr": { "client_id": "Integer", "action": "Integer", "channel": "Integer", "start_time": "Integer", "end_time": "Integer" } "playback_play_pause": { "client_id": "Integer", "win_id": "Integer", "play_pause": "Integer" } "playback_set_play_speed": { "client_id": "Integer", "play_speed": "Integer", "type": "Integer" } "playback_set_play_type": { "client_id": "Integer", "play_type": "Integer" } "playback_set_play_time": { "client_id": "Integer", "event_id": "Integer", "win_id": "Integer", "start_time": "Integer", "breverse": "Integer" } "playback_fullscreen": { "client_id": "Integer", "x_coor": "Integer", "y_coor": "Integer", "width": "Integer", "height": "Integer", "win_id": "Integer", "screen_mode": "Integer" } "playback_set_multi_play_sync": { "client_id": "Integer", "sync": "Integer" } "playback_set_play_zoom": { "client_id": "Integer", "win_id": "Integer", "x_coor": "Integer", "y_coor": "Integer", "width": "Integer", "height": "Integer" } "playback_set_play_step": { "client_id": "Integer" } "playback_stop": { "client_id": "Integer", "win_id": "Integer" } "playback_set_play_audio_chn": { "client_id": "Integer", "action": "Integer", "win_id": "Integer" } "playback_set_play_audio_volume": { "client_id": "Integer", "volume": "Integer" } "playback_set_play_audio_mute": { "client_id": "Integer", "is_mute": "Integer" } "playback_release_resource": { "client_id": "Integer" } "playback_search_media_res": { "client_id": "Integer", "event_type": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "file_type": "Integer", "channel_map": "Array", "layer": "Integer" } "playback_smart_search_media_res": { "client_id": "Integer", "smart_search_type": "Integer", "search_id": "Integer", "channel": "Integer", "start_time": "Integer", "end_time": "Integer", "x_coor": "Array", "y_coor": "Array", "direction": "Array", "humanoid": "Integer" } "playback_search_pic_res": { "client_id": "Integer", "event_type": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array" } "playback_search_tag_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "tag_name": "String", "channel_map": "Array" } "playback_search_tagmedia_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel": "Integer" } "playback_search_subevent_list_res": { "client_id": "Integer", "event_type_high32": "Integer", "event_type_low32": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array" } "playback_search_subevent_media_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel": "Integer" } "playback_search_facegal_res": { "client_id": "Integer", "search_id": "Integer", "face_type": "Integer", "channel_map": "Array" } "playback_search_faceid_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_face_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_same_face_res": { "client_id": "Integer", "search_id": "Integer", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "src_faceid": "Integer", "src_diskid": "Integer", "src_version": "Integer" } "playback_delete_face": { "disk_id": "Integer", "face_id": "Integer", "version": "Integer" } "playback_search_peopleid_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "gender": "Integer", "sleeve_len": "Integer", "lower_body": "Integer", "lower_body_color": "Integer", "hair_len": "Integer", "upper_body_color": "Integer", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_people_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "gender": "Integer", "sleeve_len": "Integer", "lower_body": "Integer", "lower_body_color": "Integer", "hair_len": "Integer", "upper_body_color": "Integer", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_carid_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "car_type": "Integer", "car_color": "Integer", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_car_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array", "car_type": "Integer", "car_color": "Integer", "id_array": "Array", "disk_id_array": "Array", "version_array": "Array", "num": "Integer", "flag": "Integer" } "playback_search_bgimage_res": { "client_id": "Integer", "search_id": "Integer", "disk_id": "Integer", "version": "Integer", "zone_id": "Integer", "offset": "Integer", "snap_len": "Integer", "bg_len": "Integer", "channel": "Integer", "snap_time": "String" } "playback_search_faceevent_res": { "client_id": "Integer", "search_id": "Integer", "faceid": "Integer", "start_time": "Integer", "end_time": "Integer", "channel_map": "Array" } "playback_search_faceevent_media_res": { "client_id": "Integer", "search_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel": "Integer" } "playback_update_facegal": { "client_id": "Integer", "index_id": "Integer", "disk_id": "Integer", "faceid": "Integer", "type": "Integer", "facegal_new_name": "String" } "playback_search_frame_res": { "client_id": "Integer", "start_time": "Integer", "flag": "Integer", "channel_map": "Array" } "playback_add_tag": { "channel": "Integer", "tag_time": "Integer", "tag_name": "String" } "playback_add_tagdebug": { "channel": "Integer", "tag_time": "Integer", "tag_name": "String" } "playback_del_tag": { "client_id": "Integer", "index_id": "Integer", "channel": "Integer", "tag_time": "Integer", "tag_name": "String" } "playback_update_tag": { "client_id": "Integer", "index_id": "Integer", "channel": "Integer", "tag_time": "Integer", "tag_name": "String", "new_tag_name": "String" } "playback_get_month_bitmap": { "client_id": "Integer", "channel_map": "Array", "start_time": "Integer", "end_time": "Integer" } "playback_get_play_status": { "client_id": "Integer" } "playback_get_playing_evt_idx": { "client_id": "Integer" } "playback_set_cut_start": { "client_id": "Integer", "start_time": "Integer", "channel": "Array" } "playback_set_cut_end": { "client_id": "Integer", "end_time": "Integer", "channel": "Array" } "playback_cut_clip": { "client_id": "Integer", "start_time": "Integer", "end_time": "Integer", "channel": "Integer", "type": "Integer" } "playback_export_file": { "client_id": "Integer", "file_path": "String", "dev_path": "String" } "playback_stop_export": { "client_id": "Integer" } "playback_get_export_process": { "client_id": "Integer" } "playback_cut_slice_clean": { "client_id": "Integer" } "playback_backup_event": { "client_id": "Integer", "event_id": "Integer", "hd_id": "Integer", "channel": "Integer", "file_path": "String", "dev_path": "String", "mode": "Integer" } "playback_set_file_lockstatus": { "hd_id": "Integer", "event_id": "Integer", "status": "Integer" } "playback_export_video_merge": { "client_id": "Integer", "start_time": "Integer", "end_time": "Integer", "export_mode": "Integer", "udisk_type": "Integer", "channel": "Array" } "playback_set_dbg_level": { "level": "Integer" } "playback_set_shm_dbg_level": { "level": "Integer" } "nvrcore_set_dbg_level": { "nvrcore": "Integer", "rtsp": "Integer", "record": "Integer", "preview": "Integer", "playback": "Integer", "msg_push": "Integer", "msg_log": "Integer", "media_server": "Integer", "event_center": "Integer", "cloud_storage": "Integer", "storage": "Integer" } "playback_data_read_msg": { "msg_type": "Integer", "chn_id": "Integer", "evt_id": "Integer", "index_id": "Integer" } "playback_data_read_debug": { "client_id": "Integer", "chn_id": "Integer", "search_type": "Integer", "start_time": "Integer", "end_time": "Integer" } "playback_data_read_info": { } "playback_msg_queue_flush": { } "playback_debug": { "debug_type": "Integer" } "play_audio_file": { "path": "String", "mode": "Integer", "volume": "Integer" } "set_play_audio_file": { "path": "String", "mode": "Integer", "volume": "Integer" } "playback_attach_shareinfo": { "client_id": "Integer" } "playback_dettach_shareinfo": { "client_id": "Integer" } "playback_web_command": { "command": "String" } "get_video_info": { "chn_id": "Integer" } 'preview' @7c8e0e2d "get_hdmi_edid": { } "restart": { "layer": "Integer" } "debug": { "reg_idx": "Integer" } "set_image_quality": { "mode": "String" } "image_quality_debug": { "set": "Integer", "brightness": "Integer", "sharpness": "Integer", "contrast": "Integer", "hue": "Integer", "saturation": "Integer" } "set_real_mode": { "mode": "String" } "set_flag_preview": { "layer": "Integer", "flag_preview": "Integer" } "set_debug_level": { "level": "Integer" } "set_adp_debug_level": { "level": "Integer" } "stop": { "layer": "Integer" } "exit": { "layer": "Integer" } "stop_zoomin": { "layer": "Integer" } "start_zoomin": { "chn": "Integer", "layer": "Integer" } "zoomin": { "chn": "Integer", "x": "Integer", "y": "Integer", "w": "Integer", "h": "Integer", "layer": "Integer" } "vo_remap": { "chn": "Integer", "x": "Integer", "y": "Integer", "width": "Integer", "height": "Integer", "layer": "Integer" } "vo_ori_remap": { "chn": "Integer", "x": "Integer", "y": "Integer", "width": "Integer", "height": "Integer", "layer": "Integer" } "start_turn": { "chn_num": "Integer", "bind_status": "Array", "layer": "Integer" } "get_status": { "layer": "Integer" } "reset_resolution": { "width": "Integer", "height": "Integer", "layer": "Integer" } "vol_num_set": { "chn_num": "Integer", "vol_num": "Integer", "layer": "Integer" } "audio_mute_set": { "chn_num": "Integer", "enable": "Integer" } "stream_type_set": { "chn_num": "Integer", "type": "Integer", "layer": "Integer" } "stream_type_get": { "chn_num": "Integer", "layer": "Integer" } "strategy_set": { "chn_num": "Integer", "strategy": "Integer", "layer": "Integer" } "vol_switch_set": { "chn_num": "Integer", "switch": "Integer", "layer": "Integer" } "adec_switch_set": { "switch": "Integer" } "set_datacontrol": { "interval": "Integer", "layer": "Integer" } "resource_recovery": { "type": "Integer", "layer": "Integer" } "set_operate_screen": { "screen": "Integer" } "down_showframe": { "player": "Integer", "interval": "Integer" } "set_show_original_pic": { "layer": "Integer", "enable": "Integer" } "dump_video": { "player": "Integer", "status": "Integer" } "video_data_get": { "chn_num": "Integer", "layer": "Integer" } "start_talk_mode": { "chn": "Integer", "layer": "Integer" } "stop_talk_mode": { "chn": "Integer", "layer": "Integer" } "set_zerochn_enable": { "on_off": "String" } "set_zerochn_fps": { "zerochn_fps": "Integer" } "set_zerochn_bitrate": { "zerochn_bitrate": "Integer" } "set_zerochn_resolution": { "zerochn_resolution": "String" } "set_zerochn_reset_config": { } "start_talk": { } "stop_talk": { } "refresh_auth": { "chn": "Integer", "auth": "Integer" } "get_video_info": { "chn_id": "Integer", "layer": "Integer" } "set_marker_box_enable": { "enable": "Integer" } "reload_fisheye_capability": { "chn": "Integer", "support": "Integer" } "clear_user_stream": { "channel": "String" } 'record' @49d847cb "memory_pool": { } "rec_plan_reconfig": { } "rec_plan_adv_reconfig": { } "rec_ctrl_reconfig": { } "event_motion_reconfig": { } "event_occlusion_reconfig": { } "event_intrusion_reconfig": { } "event_linecross_reconfig": { } "event_human_reconfig": { } "event_vehicle_reconfig": { } "event_regionenter_reconfig": { } "event_regionexit_reconfig": { } "event_abandonandtaken_reconfig": { } "event_loitering_reconfig": { } "event_scenechange_reconfig": { } "event_audioexception_reconfig": { } "event_face_snapshot_reconfig": { } "event_face_snapshot_reconfig_by_channel": { "channel": "Integer" } "event_motion_reconfig_by_channel": { "channel": "Integer" } "event_occlusion_reconfig_by_channel": { "channel": "Integer" } "event_intrusion_reconfig_by_channel": { "channel": "Integer" } "event_linecross_reconfig_by_channel": { "channel": "Integer" } "event_human_reconfig_by_channel": { "channel": "Integer" } "event_vehicle_reconfig_by_channel": { "channel": "Integer" } "event_regionenter_reconfig_by_channel": { "channel": "Integer" } "event_regionexit_reconfig_by_channel": { "channel": "Integer" } "event_abandonandtaken_reconfig_by_channel": { "channel": "Integer" } "event_loitering_reconfig_by_channel": { "channel": "Integer" } "event_scenechange_reconfig_by_channel": { "channel": "Integer" } "event_audioexception_reconfig_by_channel": { "channel": "Integer" } "event_exception_reconfig": { } "lack_lvm_error_turn_off_buzzer": { } "hd_manage_reconfig": { } "rec_disk_writeback": { } "stg_get_init_status": { } "rec_disk_format": { "hd_id": "Integer" } "get_disk_info": { } "get_quota_info": { } "is_disk_need_format": { } "get_status": { } "get_chn_event": { } "get_exception": { } "get_curr_exception": { } "login_error": { } "stop_record": { } "stop_record_rtc": { } "restart_record": { } "reboot": { } "auto_reboot_reconfig": { } "dump_disk_mgmt_info": { } "debug": { "chn": "Integer" } "event_change": { "chn": "Integer", "type": "Integer", "status": "Integer", "sec_name": "String" } "ip_conflict": { "status": "Integer" } "set_device_on_off_line": { "target": "String", "on_off_line": "String" } "debug_search_smartd": { "chn": "Integer", "start_sec": "Integer", "end_sec": "Integer" } "set_dbg_level": { "dbg_level": "Integer" } "set_stg_dbg_level": { "dbg_level": "Integer" } "set_stg_ai_del_time": { "del_time": "Integer" } "set_stg_dbg_module_status": { "dbg_module": "Integer", "dbg_status": "Integer" } "stg_layout_debug": { "hd_id": "Integer", "chn": "Integer" } "stg_db_debug": { "hd_id": "Integer", "sql_cmd": "String" } "day_event_check": { "date": "String" } "disk_event": { "devname": "String", "event": "String" } "set_disk_status": { "disk_id": "Integer", "enable": "Integer" } "awake_disk": { "hd_id": "Integer", "status": "Integer" } "refresh_hd_password": { } "update_hd_password": { "disk_id": "Integer", "type": "Integer" } "get_hd_password": { "disk_id": "Integer", "type": "Integer" } "stg_migration_get_status": { } "stg_get_usb_disk_info": { } "stg_format_usb_disk": { "ud_id": "Integer" } "stg_migration_start": { "disk_id": "Integer", "ud_id": "Integer", "migration_start_flag": "Integer" } "stg_migration_control": { "ctl_type": "Integer" } "stg_add_ud4rec": { "ud_id": "Integer", "add_ud4rec_flag": "Integer" } "stg_rm_ud4rec": { "ud_id": "Integer" } "stg_get_raid_info": { } "stg_format_raid": { "raid_id": "Integer", "create_raid": "Integer" } "stg_stop_raid": { "raid_id": "Integer" } "stg_create_raid": { "raid_level": "String", "raid_disk_map": "String", "spare_disk_map": "String", "backstage": "String" } "stg_add_raid_disk": { "raid_id": "Integer", "disk_map": "String" } "stg_remove_raid_disk": { "raid_id": "Integer", "disk_map": "String" } "stg_set_raid_single_disk_size": { "raid_single_disk_size": "Integer" } "stg_stop_invalid_raid": { } "stg_stop_all_raid": { } "event_center_reconfig": { "type": "Integer" } "set_event_change": { "type": "Integer", "append": "Integer", "status": "Integer" } "event_center_set_dbg_level": { "dbg_level": "Integer" } "show_cfg": { "type": "Integer" } "event_center_buzzer_onoff_control": { "on_off": "Integer" } "event_center_msgpush_onoff_control": { "on_off": "Integer" } "alarm_output_reconfig": { } "verify_alarm_input_output": { } "init_alarm_input_output": { } "gb28181_record_stop": { "chn": "Integer" } "gb28181_record_start": { "chn": "Integer" } "rec_set_malloc_for_gop_num": { "param": "Integer" } "external_record_union": { "chn_list": "Array", "operation": "String", "event_type": "String" } "set_reading_data_status": { "reading_data_status": "Integer" } "onvif_rec_ctrl_reconfig": { } "get_raid_exception": { } "reload_fisheye_capability": { "chn": "Integer", "support": "Integer" } 'resource' @86ba13c2 "resource_set_dbg_level": { "level": "Integer" } "resource_remain_info": { } 'rtspm' @a973f494 "channel_start": { "channel": "Integer", "username": "String", "password": "String", "main_url": "String", "sub_url": "String", "rtsp_protocol": "String" } "channel_stop": { "channel": "Integer" } "channel_delete": { "channel": "Integer" } "channel_list_delete": { "channel": "String" } "set_debug_level": { "level": "Integer" } "debug": { "channel": "Integer" } "channel_bitrate": { "channel": "Integer" } "channel_framerate": { "channel": "Integer" } "channel_audio_support": { "channel": "Integer" } "bq_debug": { "channel": "Integer" } "rtsp_transport_type_reload": { "channel": "Integer" } "rtsp_transport_type_list_reload": { "channel": "Array" } "bq_dump_switch": { "switch": "Integer" } "notify_streaming_version": { "channel": "Integer", "version": "Integer" } "pal_debug": { } "notify_systime_changed": { } 'tddpServer' @51a45597 "start": { } "cleanTMP": { } "getRadio": { "offset": "Integer", "length": "Integer" } "getInfo": { "infoMask": "Integer", "sep": "String" } "checkDevID": { "status": "Integer" } "setInfo": { "type": "Integer", "data": "String" } "set_dbg_level": { "level": "Integer" } 'vga_to_hdmi' @8895c85d "vth_get_hdmi2_edid": { } 'web_media' @4acbfe0d "get_cal": { "search_year": "Array" } "get_events_extends": { "id": "Integer", "search_video": "String", "dst_type": "Integer" } "get_cal_vms": { "year": "Array", "channel": "Array" } "get_events_extends_vms": { "start_index": "Integer", "end_index": "Integer", "search_time": "String", "channel": "Integer", "dst_type": "Integer" } "get_aes_key": { } "get_cal_util": { "start_date": "String", "end_date": "String", "channel": "Array" } "get_events_util_extends": { "date": "String", "id": "Integer", "channel": "Integer", "start_index": "Integer", "end_index": "Integer", "dst_type": "Integer" } "get_events_app_extends": { "date": "String", "id": "Integer", "channel": "Integer", "start_index": "Integer", "end_index": "Integer", "timestamp": "String" } "set_dbg": { "level": "Integer" } "debug_channel": { "channel": "Integer" } "msg_report": { "media_type": "Integer", "channels": "Array", "file_id": "Integer", "start_time": "Integer" } "get_user_id": { } "bandwidth": { } "dump_bandwidth": { } "preview_ch_status": { } "get_scale_capability": { } "get_media_list": { "channel": "Array", "user_id": "Integer", "start_time": "String", "end_time": "String", "event_type": "Array", "media_type": "Array", "start_index": "Integer", "max_num": "Integer" } "app_get_media_list": { "channel": "Array", "user_id": "Integer", "start_time": "String", "end_time": "String", "event_type": "Array", "media_type": "Array", "start_index": "Integer", "max_num": "Integer" } "show_image_count": { } "listen_gb28181_broadcast": { "enable": "Integer", "audio_type": "Integer" } "gb28181_preview_init": { "trans_type": "String", "ip": "String", "port": "Integer", "channel": "Integer", "stream_type": "Integer", "ssrc": "Integer", "rtpmap": "Integer" } "gb28181_preview_deinit": { "id": "Integer" } "gb28181_preview_start": { "id": "Integer" } "gb28181_preview_stop": { "id": "Integer" } "gb28181_playback_init": { "trans_type": "String", "ip": "String", "port": "Integer", "channel": "Integer", "start_time": "Integer", "end_time": "Integer", "ssrc": "Integer", "rtpmap": "Integer" } "gb28181_playback_deinit": { "id": "Integer" } "gb28181_playback_start": { "id": "Integer" } "gb28181_playback_pause": { "id": "Integer", "pause": "Integer" } "gb28181_playback_set_rate": { "id": "Integer", "deno": "Integer", "nume": "Integer" } "gb28181_playback_set_time": { "id": "Integer", "offset": "Integer" } "gb28181_playback_stop": { "id": "Integer" } "gb28181_download_init": { "trans_type": "String", "ip": "String", "port": "Integer", "channel": "Integer", "start_time": "Integer", "end_time": "Integer", "speed": "Integer", "ssrc": "Integer", "rtpmap": "Integer" } "gb28181_download_deinit": { "id": "Integer" } "gb28181_download_start": { "id": "Integer" } "gb28181_download_stop": { "id": "Integer" } "vms_preview_start": { "session_id": "String", "ip": "String", "port": "Integer", "channel": "Integer", "stream_type": "String" } "vms_preview_stop": { "session_id": "String" } "vms_playback_start": { "session_id": "String", "ip": "String", "port": "Integer", "channel": "Integer", "start_time": "String", "end_time": "String", "video_type": "Integer", "deno": "Integer", "nume": "Integer" } "vms_playback_pause": { "session_id": "String", "suspend": "Integer" } "vms_playback_set_rate": { "session_id": "String", "deno": "Integer", "nume": "Integer" } "vms_playback_set_time": { "session_id": "String", "seconds": "String" } "vms_playback_set_flow_rate": { "session_id": "String", "deno": "Integer", "nume": "Integer" } "vms_playback_stop": { "session_id": "String" } "media_server_user_update": { } "media_encrypt_update": { } "notify_bitrate_changed": { } 'wtd' @8ee02ee9 "vigi_debug_enable": { } "vigi_debug_disable": { } "debug": { } "extend": { } "hw_enable": { } "hw_disable": { } 这些ubus命令如何使用
09-05
# -*- coding: utf-8 -*- """整合气象数据获取与处理系统 功能: 1. 在5分钟整点(0分、5分、10分等)获取实况气象数据 2. 将5分钟数据按月保存到Excel(存储在"5分钟级数据"文件夹) 3. 将5分钟数据插值为分钟级数据 4. 计算每分钟的太阳位置(高度角、方位角)和地外辐照度(保留两位小数) 5. 将分钟级数据按月保存到独立Excel(存储在"分钟级数据"文件夹) """ import urllib, urllib3, sys, uuid import ssl import json from openpyxl import Workbook, load_workbook from datetime import datetime, timedelta import warnings from urllib3.exceptions import InsecureRequestWarning import time import os import pandas as pd import numpy as np from scipy.interpolate import CubicSpline import math import openpyxl from openpyxl.styles import PatternFill, Font, Alignment import traceback # 强制刷新标准输出 - 确保实时输出 sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ if hasattr(sys.stdout, 'reconfigure'): sys.stdout.reconfigure(line_buffering=True) # 确保实时输出 else: # 对于不支持reconfigure的环境 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1) # 禁用SSL警告 warnings.filterwarnings("ignore", category=InsecureRequestWarning) # 创建绕过SSL验证的连接池 http = urllib3.PoolManager(cert_reqs='CERT_NONE') # API配置 host = 'http://aliv18.data.moji.com' condition_path = '/whapi/json/alicityweather/condition' method = 'POST' appcode = '2c642e12da774c918fa78ac56b5b4c50' # 保定地理位置 LOCATION_NAME = "保定" LONGITUDE = 115.480 # 东经 LATITUDE = 38.855 # 北纬 # 定义API请求头 API_HEADERS = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Authorization': 'APPCODE ' + appcode } # 实况数据API参数 CONDITION_TOKEN = '50b53ff8dd7d9fa320d3d3ca32cf8ed1' CITY_ID = '1819' # 保定城市ID # 创建数据存储目录 FIVEMIN_DIR = "5分钟级数据" MINUTELY_DIR = "分钟级数据" os.makedirs(FIVEMIN_DIR, exist_ok=True) os.makedirs(MINUTELY_DIR, exist_ok=True) def log_message(message): """记录日志到屏幕 - 确保实时输出""" timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') log_line = f"[{timestamp}] {message}" # 直接输出到控制台,强制刷新 print(log_line, flush=True) # 同时写入日志文件以便调试 with open("weather_system.log", "a", encoding="utf-8") as log_file: log_file.write(log_line + "\n") log_file.flush() # 立即刷新文件写入 def safe_save(wb, filename): """安全保存Excel文件,避免占用问题""" log_message(f"正在保存文件: {filename}") # 确保目标目录存在 os.makedirs(os.path.dirname(filename), exist_ok=True) for attempt in range(5): # 增加尝试次数 try: # 使用绝对路径避免相对路径问题 abs_filename = os.path.abspath(filename) temp_file = abs_filename.replace(".xlsx", f"_temp_{attempt}.xlsx") log_message(f"尝试保存临时文件: {temp_file}") wb.save(temp_file) # 替换原文件 if os.path.exists(abs_filename): os.remove(abs_filename) os.rename(temp_file, abs_filename) log_message(f"文件保存成功: {abs_filename}") return True except (PermissionError, OSError) as e: log_message(f"文件保存失败 ({attempt+1}/5): {str(e)}") time.sleep(3) except Exception as e: log_message(f"文件保存时发生意外错误: {str(e)}") traceback.print_exc() time.sleep(3) return False def get_condition_data(): """获取实况天气数据""" try: log_message(f"正在获取{LOCATION_NAME}实况天气数据...") condition_bodys = {'token': CONDITION_TOKEN, 'cityId': CITY_ID} post_data_condition = urllib.parse.urlencode(condition_bodys).encode('utf-8') condition_url = host + condition_path response_condition = http.request('POST', condition_url, body=post_data_condition, headers=API_HEADERS) content_condition = response_condition.data.decode('utf-8') condition_data = json.loads(content_condition) log_message(f"API响应内容: {json.dumps(condition_data, ensure_ascii=False)[:200]}...") if condition_data.get('code') != 0: log_message(f"实况API请求失败: 代码 {condition_data.get('code')}, 消息: {condition_data.get('msg')}") return None condition_info = condition_data['data']['condition'] current_time = datetime.now() # 对齐到最近的5分钟 aligned_minute = (current_time.minute // 5) * 5 aligned_time = current_time.replace(minute=aligned_minute, second=0, microsecond=0) time_str = aligned_time.strftime("%Y-%m-%d %H:%M") # 计算风速(m/s)并保留一位小数 raw_wind_speed = condition_info.get('windSpeed', '') wind_speed_mps = '' if raw_wind_speed and raw_wind_speed.replace('.', '', 1).isdigit(): try: wind_speed_mps = round(float(raw_wind_speed) / 3.6, 1) # 保留一位小数 except: wind_speed_mps = '' # 处理温度值,确保保留一位小数 temp_value = condition_info.get('temp', '') if temp_value and temp_value.replace('.', '', 1).isdigit(): try: temp_value = round(float(temp_value), 1) # 温度保留一位小数 except: pass # 构建实况数据行 condition_row = [ time_str, temp_value, # 温度保留一位小数 condition_info.get('condition', ''), condition_info.get('humidity', ''), condition_info.get('windDir', ''), condition_info.get('windLevel', ''), raw_wind_speed, wind_speed_mps, # 风速保留一位小数 condition_info.get('precip', '0.0'), condition_info.get('pressure', '') ] log_message(f"成功获取实况数据: {time_str}") log_message(f" 温度: {temp_value}℃, 天气状况: {condition_info.get('condition', '')}, 湿度: {condition_info.get('humidity', '')}%") return condition_row except Exception as e: log_message(f"获取实况数据时出错: {str(e)}") traceback.print_exc() return None def normalize_time(time_str): """统一时间格式为 YYYY-MM-DD HH:MM""" try: # 如果已经是字符串,尝试解析 if isinstance(time_str, str): # 尝试解析为日期时间 if len(time_str) == 16: # 格式为 "YYYY-MM-DD HH:MM" return time_str elif len(time_str) == 19: # 包含秒数 "YYYY-MM-DD HH:MM:00" return time_str[:16] elif ' ' not in time_str: # 只有日期部分 return time_str + " 00:00" else: # 其他格式,尝试转换 dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") return dt.strftime("%Y-%m-%d %H:%M") # 如果是datetime对象 elif isinstance(time_str, datetime): return time_str.strftime("%Y-%m-%d %H:%M") except Exception: pass # 无法识别的格式,原样返回 return str(time_str) def update_fivemin_excel(condition_row): """更新5分钟级Excel文件""" try: current_month = datetime.now().strftime("%Y%m") # 确保目录存在 os.makedirs(FIVEMIN_DIR, exist_ok=True) filename = os.path.join(os.path.abspath(FIVEMIN_DIR), f"{LOCATION_NAME}_5分钟级数据_{current_month}.xlsx") wb = None ws = None existing_data = {} # 存储时间点 -> 行号的映射 headers = [] log_message(f"正在更新5分钟数据文件: {filename}") if os.path.exists(filename): for attempt in range(3): try: log_message(f"尝试加载现有5分钟数据文件... (尝试 {attempt+1}/3)") wb = load_workbook(filename) ws = wb.active if ws.max_row > 0: headers = [cell.value for cell in ws[1]] # 读取现有数据到字典 (时间 -> 行号) for row_idx, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2): if not row or not row[0]: continue time_key = normalize_time(row[0]) if time_key in existing_data: log_message(f"警告: 发现重复时间点: {time_key} (行 {row_idx})") existing_data[time_key] = row_idx log_message(f"成功加载现有5分钟数据文件: {filename} (共 {len(existing_data)} 条记录)") break except PermissionError: if attempt < 2: log_message(f"文件被占用,等待5秒后重试 ({attempt+1}/3)") time.sleep(5) else: log_message("无法打开文件,创建新工作簿") wb = Workbook() ws = wb.active ws.title = f"{LOCATION_NAME}5分钟级数据" headers = ["时间", "温度(℃)", "天气状况", "湿度(%)", "风向", "风力等级", "原始风速(km/h)", "风速(m/s)", "降水量(mm)", "气压(hPa)"] ws.append(headers) else: wb = Workbook() ws = wb.active ws.title = f"{LOCATION_NAME}5分钟极数据" headers = ["时间", "温度(℃)", "天气状况", "湿度(%)", "风向", "风力等级", "原始风速(km/h)", "风速(m/s)", "降水量(mm)", "气压(hPa)"] ws.append(headers) log_message(f"创建新的5分钟数据文件: {filename}") if not headers: headers = ["时间", "温度(℃)", "天气状况", "湿度(%)", "风向", "风力等级", "原始风速(km/h)", "风速(m/s)", "降水量(mm)", "气压(hPa)"] # 处理实况数据 if condition_row: current_time = condition_row[0] normalized_current = normalize_time(current_time) if normalized_current in existing_data: row_idx = existing_data[normalized_current] # 更新所有字段(覆盖旧数据) for col_idx in range(1, len(condition_row) + 1): new_value = condition_row[col_idx - 1] ws.cell(row=row_idx, column=col_idx, value=new_value) log_message(f"更新5分钟时间点: {normalized_current} (行 {row_idx})") else: ws.append(condition_row) # 更新字典,记录新行号 existing_data[normalized_current] = ws.max_row log_message(f"新增5分钟时间点: {normalized_current} (行 {ws.max_row})") # 保存文件 if safe_save(wb, filename): log_message(f"5分钟数据保存成功: {filename}") return filename else: log_message(f"5分钟数据保存失败") return None except Exception as e: log_message(f"更新5分钟数据文件时出错: {str(e)}") traceback.print_exc() return None def calculate_solar_parameters(dt, longitude, latitude): """计算太阳高度角、方位角和地外辐照度(高度角和方位角保留两位小数)""" try: # 将时间转换为UTC+0 utc_time = dt - timedelta(hours=8) n = utc_time.timetuple().tm_yday # 年中的第几天 # 计算太阳赤纬 (δ) delta = 23.45 * math.sin(math.radians(360 * (284 + n) / 365)) delta_rad = math.radians(delta) # 计算时角 (ω) utc_hour = utc_time.hour + utc_time.minute/60.0 omega = (utc_hour - 12) * 15 + longitude omega_rad = math.radians(omega) # 纬度转弧度 phi_rad = math.radians(latitude) # 计算太阳高度角 (α) sin_alpha = math.sin(phi_rad) * math.sin(delta_rad) + math.cos(phi_rad) * math.cos(delta_rad) * math.cos(omega_rad) alpha = math.degrees(math.asin(sin_alpha)) # 计算太阳方位角 (γ) sin_gamma = -math.cos(delta_rad) * math.sin(omega_rad) / math.cos(math.radians(alpha)) cos_gamma = (math.sin(delta_rad) * math.cos(phi_rad) - math.cos(delta_rad) * math.sin(phi_rad) * math.cos(omega_rad)) / math.cos(math.radians(alpha)) gamma = math.degrees(math.atan2(sin_gamma, cos_gamma)) gamma = (gamma + 360) % 360 # 转换为0-360度范围 # 计算地外辐照度 (W/m²) g0 = 1367 * (1 + 0.033 * math.cos(math.radians(360 * n / 365))) * sin_alpha g0 = max(0, g0) # 确保非负 # 保留两位小数 return round(alpha, 2), round(gamma, 2), round(g0, 1) except Exception as e: log_message(f"计算太阳参数错误: {str(e)}") return None, None, None def process_minutely_data(fivemin_file): """处理分钟级数据并添加太阳参数""" try: log_message("="*50) log_message(f"开始生成分钟级数据...") # 检查文件是否存在 if not os.path.exists(fivemin_file): log_message(f"错误: 5分钟数据文件不存在: {fivemin_file}") return None # 读取5分钟数据 log_message(f"读取5分钟数据文件: {fivemin_file}") try: fivemin_df = pd.read_excel(fivemin_file) log_message(f"读取5分钟数据成功,共 {len(fivemin_df)} 行") except Exception as e: log_message(f"读取5分钟数据文件失败: {str(e)}") return None # 查找时间列 time_col = next((col for col in fivemin_df.columns if '时间' in col), None) if not time_col: log_message("未找到时间列") return None # 转换时间格式并处理重复值 fivemin_df[time_col] = pd.to_datetime(fivemin_df[time_col], errors='coerce') # 删除无效行 original_count = len(fivemin_df) fivemin_df = fivemin_df.dropna(subset=[time_col]) if original_count > len(fivemin_df): log_message(f"删除了 {original_count - len(fivemin_df)} 行无效时间数据") # 处理重复时间点 - 保留最后一个 duplicate_mask = fivemin_df.duplicated(subset=[time_col], keep='last') if duplicate_mask.any(): log_message(f"发现 {duplicate_mask.sum()} 个重复时间点,保留最后一个") fivemin_df = fivemin_df[~duplicate_mask] # 按时间排序 fivemin_df = fivemin_df.sort_values(by=time_col) fivemin_df.set_index(time_col, inplace=True) # 创建分钟级时间索引 start_time = fivemin_df.index.min() end_time = fivemin_df.index.max() log_message(f"时间范围: {start_time} 至 {end_time}") minutely_index = pd.date_range(start=start_time, end=end_time, freq='1min') minutely_df = pd.DataFrame(index=minutely_index) log_message(f"将生成 {len(minutely_index)} 条分钟级数据") # 插值处理 - 确保时间戳严格递增 base_time = start_time fivemin_timestamps = (fivemin_df.index - base_time).total_seconds() # 检查时间戳是否严格递增 if not (np.diff(fivemin_timestamps) > 0).all(): log_message("时间戳不是严格递增,尝试修复...") # 重新排序 fivemin_df = fivemin_df.sort_index() fivemin_timestamps = (fivemin_df.index - base_time).total_seconds() minutely_timestamps = (minutely_df.index - base_time).total_seconds() # 对连续参数进行插值 log_message("\n开始数据插值处理...") for param in ['风速(m/s)', '温度(℃)', '湿度(%)', '气压(hPa)']: if param in fivemin_df.columns: param_data = fivemin_df[param].dropna() if len(param_data) >= 3: log_message(f"对 {param} 使用三次样条插值 (数据点: {len(param_data)})") cs = CubicSpline(fivemin_timestamps, param_data.values) interpolated_values = cs(minutely_timestamps) # 对温度和风速保留一位小数 if param in ['温度(℃)', '风速(m/s)']: interpolated_values = np.round(interpolated_values, 1) minutely_df[param] = interpolated_values else: log_message(f"对 {param} 使用前向填充 (有效点不足: {len(param_data)})") minutely_df[param] = fivemin_df[param].resample('1min').ffill() # 处理降水量 if '降水量(mm)' in fivemin_df.columns: log_message("处理降水量数据") # 将5分钟降水量转换为每分钟降水量 precip_min = fivemin_df['降水量(mm)'].resample('1min').asfreq().ffill() minutely_df['降水量(mm)'] = precip_min / 5.0 # 平均分配到每分钟 # 处理文本数据 for param in ['天气状况', '风向']: if param in fivemin_df.columns: log_message(f"处理 {param} 数据") minutely_df[param] = fivemin_df[param].resample('1min').ffill() # 数值列保留适当的小数位数 # 温度和风速保留一位小数 if '温度(℃)' in minutely_df.columns: minutely_df['温度(℃)'] = minutely_df['温度(℃)'].round(1) if '风速(m/s)' in minutely_df.columns: minutely_df['风速(m/s)'] = minutely_df['风速(m/s)'].round(1) # 其他数值列保留一位小数 other_numeric_cols = ['湿度(%)', '气压(hPa)', '降水量(mm)'] for col in other_numeric_cols: if col in minutely_df.columns: minutely_df[col] = minutely_df[col].round(1) # 计算太阳参数 log_message(f"\n开始计算太阳位置和辐照度...") solar_data = [] total_points = len(minutely_df) last_progress = -1 start_time = time.time() for i, dt in enumerate(minutely_df.index): alpha, gamma, g0 = calculate_solar_parameters(dt, LONGITUDE, LATITUDE) solar_data.append({ '太阳高度角(度)': alpha, '太阳方位角(度)': gamma, '地外辐照度(W/m2)': g0 }) # 显示进度 progress = int((i + 1) / total_points * 100) if progress != last_progress and progress % 10 == 0: elapsed = time.time() - start_time remaining = (total_points - i) * (elapsed / (i+1)) log_message(f"计算进度: {progress}% | 预计剩余时间: {remaining:.1f}秒") last_progress = progress solar_df = pd.DataFrame(solar_data, index=minutely_df.index) minutely_df = pd.concat([minutely_df, solar_df], axis=1) # 生成输出文件名 current_month = datetime.now().strftime("%Y%m") filename = f"{LOCATION_NAME}_分钟级数据_{current_month}.xlsx" filepath = os.path.join(os.path.abspath(MINUTELY_DIR), filename) # 保存分钟级数据 minutely_df.reset_index(inplace=True) minutely_df.rename(columns={'index': '时间'}, inplace=True) # 创建Excel工作簿 wb = openpyxl.Workbook() ws = wb.active ws.title = "分钟级数据" # 写入数据 log_message(f"\n正在写入分钟级数据到Excel...") for col_idx, col_name in enumerate(minutely_df.columns, 1): ws.cell(row=1, column=col_idx, value=col_name) for r_idx, row in enumerate(minutely_df.values, 2): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) # 应用样式 header_fill = PatternFill(start_color="1F4E78", end_color="1F4E78", fill_type="solid") header_font = Font(color="FFFFFF", bold=True) header_alignment = Alignment(horizontal="center", vertical="center") for cell in ws[1]: cell.fill = header_fill cell.font = header_font cell.alignment = header_alignment # 设置列宽 log_message("设置列宽...") for col in ws.columns: max_length = 0 for cell in col: try: if cell.value and len(str(cell.value)) > max_length: max_length = len(str(cell.value)) except: pass adjusted_width = (max_length + 2) * 1.2 ws.column_dimensions[col[0].column_letter].width = min(adjusted_width, 50) # 保存文件 if safe_save(wb, filepath): log_message(f"分钟级数据保存成功: {filepath}") return filepath else: log_message(f"分钟级数据保存失败") return None except Exception as e: log_message(f"处理分钟级数据时出错: {str(e)}") traceback.print_exc() return None def get_weather_data(): """获取天气数据并处理""" log_message(f"\n获取{LOCATION_NAME}实况天气数据...") try: # 获取实况数据 condition_row = get_condition_data() if not condition_row: log_message("获取实况数据失败") return False # 更新5分钟数据文件 fivemin_file = update_fivemin_excel(condition_row) if not fivemin_file: log_message("5分钟数据更新失败") return False # 处理分钟级数据(只在5分钟整点处理) current_minute = datetime.now().minute if current_minute % 5 == 0: # 0分、5分、10分等 log_message(f"当前时间 {datetime.now().strftime('%H:%M')} 是5分钟整点,开始生成分钟级数据") minutely_file = process_minutely_data(fivemin_file) if minutely_file: log_message(f"\n数据处理完成!") log_message(f" 5分钟数据 -> {fivemin_file}") log_message(f" 分钟数据 -> {minutely_file}") else: log_message(f"分钟数据处理失败") else: log_message(f"跳过分钟级数据处理(非5分钟整点)") return True except Exception as e: log_message(f"获取天气数据时出错: {str(e)}") traceback.print_exc() return False # 主程序循环 - 确保实时输出日志 if __name__ == '__main__': try: # 程序启动横幅 - 使用print确保直接输出 print("=" * 70, flush=True) print(f"{LOCATION_NAME}气象数据自动获取与处理系统", flush=True) print(f"系统启动时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", flush=True) print(f"Python版本: {sys.version}", flush=True) print(f"工作目录: {os.getcwd()}", flush=True) print(f"5分钟数据存储目录: {os.path.abspath(FIVEMIN_DIR)}", flush=True) print(f"分钟数据存储目录: {os.path.abspath(MINUTELY_DIR)}", flush=True) print("=" * 70, flush=True) print("按 Ctrl+C 停止程序", flush=True) print("=" * 70, flush=True) # 初始执行一次 log_message("\n执行初始数据获取...") success = get_weather_data() # 主循环 current_month = datetime.now().month while True: try: # 计算到下一个整分钟的时间(确保在0秒执行) now = datetime.now() next_minute = now.replace(second=0, microsecond=0) + timedelta(minutes=1) wait_seconds = (next_minute - now).total_seconds() if wait_seconds > 0: wait_minutes = wait_seconds / 60 log_message(f"\n等待 {wait_seconds:.1f} 秒 ({wait_minutes:.2f} 分钟) 到下一个整分钟") time.sleep(wait_seconds) # 检查月份变化 new_month = datetime.now().month if new_month != current_month: log_message(f"\n月份变更: {current_month} -> {new_month}") current_month = new_month # 获取并处理数据 log_message("\n" + "="*70) log_message(f"开始新一轮数据采集 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')})") success = get_weather_data() except KeyboardInterrupt: log_message("\n程序已停止") break except Exception as e: # 获取详细错误信息 exc_type, exc_value, exc_traceback = sys.exc_info() error_details = traceback.format_exception(exc_type, exc_value, exc_traceback) error_msg = ''.join(error_details) log_message(f"\n主循环错误: {str(e)}") log_message(f"详细错误信息:\n{error_msg}") log_message("5分钟后重试...") time.sleep(300) # 5分钟后重试 # 重新计算下一个整分钟时间 now = datetime.now() next_minute = now.replace(second=0, microsecond=0) + timedelta(minutes=1) current_month = datetime.now().month log_message(f"新的重试时间: {next_minute.strftime('%Y-%m-%d %H:%M:%S')}") except Exception as e: # 启动错误处理 print(f"程序启动失败: {str(e)}", flush=True) traceback.print_exc(file=sys.stdout)把这段程序也用上面那个方法实现在Python程序在运行时在页面显示结果
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值