12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001 |
- <?php
- /*
- ** 通用函数helper
- */
- function set_log($file,$data){
- $file = fopen('../upload/'.$file, 'a+');
- fwrite($file, $data.'---'.date('Y-m-d H:i:s',time()).'
- ');
- fclose($file);
- }
- //移除空参数
- function remove_null_params($data = array()) {
- foreach ($data as $key => $value) {
- if ($value === NULL || $value === '') {
- unset($data[$key]);
- }
- }
- return $data;
- }
- // 通过pm2.5获取aqi的值
- function get_aqi_and_level_by_pm25($pm25){
- if ($pm25 < 35) { // 很好
- $aqi = 50 / 35 * $pm25;
- }elseif ($pm25 >= 35 && $pm25 < 75) { // 好
- $aqi = 50 / 40 * ($pm25 - 35) + 50;
- }elseif ($pm25 >= 75 && $pm25 < 115) { // 一般
- $aqi = 50 / 40 * ($pm25 - 75) + 100;
- }elseif ($pm25 >= 115 && $pm25 < 150) { // 较差
- $aqi = 50 / 35 * ($pm25 - 115) + 150;
- }elseif ($pm25 >= 150 && $pm25 < 250) { // 差
- $aqi = 100 / 100 * ($pm25 - 150) + 200;
- }elseif ($pm25 >= 250 && $pm25 < 350) { // 很差
- $aqi = 100 / 100 * ($pm25 - 250) + 300;
- }elseif ($pm25 >= 350) { // 非常差
- $aqi = 100 / 150 * ($pm25 - 350) + 400;
- }
- $level = get_aqi_str($aqi);
-
- return array('aqi'=>round($aqi),'level'=>$level);
- }
- function get_aqi_str($aqi){
- if ($aqi < 50) { // 很好
- $level = 'Very good';
- }elseif ($aqi >= 50 && $aqi < 100) { // 好
- $level = 'Good';
- }elseif ($aqi >= 100 && $aqi < 150) { // 一般
- $level = 'Commonly';
- }elseif ($aqi >= 150 && $aqi < 200) { // 较差
- $level = 'Poor';
- }elseif ($aqi >= 200 && $aqi < 300) { // 差
- $level = 'Difference';
- }elseif ($aqi >= 300 && $aqi < 400) { // 很差
- $level = 'Very bad';
- }elseif ($aqi >= 400) { // 非常差
- $level = 'Very bad';
- }
- return $level;
- }
- // modbus crc 16 校验码计算
- function crc16($string) {
- $crc = 0xFFFF;
- for ($x = 0; $x < strlen ($string); $x++) {
- $crc = $crc ^ ord($string[$x]);
- for ($y = 0; $y < 8; $y++) {
- if (($crc & 0x0001) == 0x0001) {
- $crc = (($crc >> 1) ^ 0xA001);
- } else { $crc = $crc >> 1; }
- }
- }
- $crc = strval(base_convert($crc, 10, 16));
- $crc = substr('0000'.$crc, -4);
- return substr($crc, -2).substr($crc, 0,2);
- }
- function crc_result($cmd){
- $begin = pack('H*',substr($cmd, 0,2));
- for ($i=0; $i < intval(strlen($cmd) / 2) - 1; $i++) {
- $begin = $begin ^ pack('H*',substr($cmd, $i*2+2,2));
- }
- $begin = unpack('H*', $begin);
- return substr('00'.$begin[1], -2);
- }
- function lampMqttCmd($sendTopic,$backTopic,$sendData,$timeout = 5,$seq = ''){
- require_once './application/libraries/Mqtt.php';
- // 订阅信息,接收一个信息后退出
- $CI =& get_instance();
- $server = $CI->config->item('WIFIMqttServer');
- $port = $CI->config->item('WIFIMqttPort');
- $username = $CI->config->item('WIFIMqttUsername');
- $password = $CI->config->item('WIFIMqttPassword');
- $client_id = time().rand(100000,999999); // 设置你的连接客户端id
- $mqtt = new Mqtt($server, $port, $client_id);
- if($mqtt->connect(true, NULL, $username, $password)) { //链接不成功再重复执行监听连接
- $mqtt->publish($sendTopic, $sendData, 2);
- // $mqtt->publish('/WEGW/ReadIn/865860046894466', pack('H*','010AA00B'), 2);
- }else{
- return '';
- }
- $topics[$backTopic] = array("qos" => 2,"function" => "procmsg");
- // $topics['/WEGW/ReadOut/865860046894466'] = array("qos" => 2, "function" => "procmsg");
- // 订阅主题
- $mqtt->subscribe($topics, 2);
- $true = 1;
- $t = time();
- while($true == 1){
- $true = $mqtt->proc();
- if (!empty($seq) && $true != 1){
- $res = unpack('H*', substr($true['msg'],2));
- if (substr($res[1], 0,2) != strtolower($seq)) $true = 1;
- }
- if (time() - $t >= $timeout) {
- return '';
- }
- }
- $mqtt->close();
- $true['msg'] = substr($true['msg'], 2);
- return $true;
- }
- function get_seq(){
- $seq = rand(0,255);
- $seq = base_convert($seq, 10, 16);
- return substr('00'.$seq, -2);
- }
- function get_check_sum($data){
- $sum = 0;
- for ($i=0; $i < strlen($data)/2; $i++) {
- $sum += base_convert(substr($data, $i*2,2), 16, 10);
- }
- $sum = base_convert($sum, 10, 16);
- $sum = substr('00'.$sum, -2);
- return $sum;
- }
- // 设置时区
- function set_timezone($date,$timezone){
- $time = strtotime($date) + $timezone*3600;
- return date('Y-m-d H:i:s',$time);
- }
- //小时数
- function secToTime($times){
- $result = '00';
- if ($times>0) {
- $hour = floor($times/3600);
- $minute = floor(($times-3600 * $hour)/60);
- $second = floor((($times-3600 * $hour) - 60 * $minute) % 60);
- $result = $hour;
- }
- return $result;
- }
- // 发送邮件
- function send_email($to,$msg,$title = '维修通知'){
- // $this->load->library('Smtp');
- require_once FCPATH.'application/libraries/Smtp.php';
- //******************** 配置信息 ********************************
- $CI =& get_instance();
- $config = $CI->config->config['email'];
- $smtpserver = $config['smtp_host'];//SMTP服务器
- $smtpserverport = $config['smtp_port'];//SMTP服务器端口
- $smtpusermail = $config['user_email'];//SMTP服务器的用户邮箱
- $smtpemailto = $to;//发送给谁
- $smtpuser = $config['smtp_user'];//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名
- $smtppass = $config['smtp_pass'];//SMTP服务器的用户密码
- $mailtitle = $title;//邮件主题
- $mailcontent = $msg;//邮件内容
- $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件
- //************************ 配置信息 ****************************
- $smtp = new Smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.
- $smtp->debug = false;//是否显示发送的调试信息
- return $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);
- }
- /**
- * 获取密码安全等级
- * @param string $password 密码
- * @return int 0:低,1:中,2:高
- */
- function get_password_level($password){
- if(preg_match('/^([0-9]{6,16})$/',$password)){
- return 0;
- } else if (preg_match('/^[0-9 a-z]{6,16}$/',$password)){
- return 1;
- } else if (preg_match('/^[0-9 a-z A-Z !@#$%^&*]{6,16}$/',$password)) {
- return 2;
- }
- return 0;
- }
- // 天气信息翻译
- function weather_translate_en($code){
- $data = array(
- '100' => 'Sunny/Clear',
- '101' => 'Cloudy',
- '102' => 'Few Clouds',
- '103' => 'Partly Cloudy',
- '104' => 'Overcast',
- '200' => 'Windy',
- '201' => 'Calm',
- '202' => 'Light Breeze',
- '203' => 'Moderate/Gentle Breeze',
- '204' => 'Fresh Breeze',
- '205' => 'Strong Breeze',
- '206' => 'High Wind, Near Gale',
- '207' => 'Gale',
- '208' => 'Strong Gale',
- '209' => 'Storm',
- '210' => 'Violent Storm',
- '211' => 'Hurricane',
- '212' => 'Tornado',
- '213' => 'Tropical Storm',
- '300' => 'Shower Rain',
- '301' => 'Heavy Shower Rain',
- '302' => 'Thundershower',
- '303' => 'Heavy Thunderstorm',
- '304' => 'Thundershower with hail',
- '305' => 'Light Rain',
- '306' => 'Moderate Rain',
- '307' => 'Heavy Rain',
- '308' => 'Extreme Rain',
- '309' => 'Drizzle Rain',
- '310' => 'Storm',
- '311' => 'Heavy Storm',
- '312' => 'Severe Storm',
- '313' => 'Freezing Rain',
- '314' => 'Light to moderate rain',
- '315' => 'Moderate to heavy rain',
- '316' => 'Heavy rain to storm',
- '317' => 'Storm to heavy storm',
- '318' => 'Heavy to severe storm',
- '399' => 'Rain',
- '400' => 'Light Snow',
- '401' => 'Moderate Snow',
- '402' => 'Heavy Snow',
- '403' => 'Snowstorm',
- '404' => 'Sleet',
- '405' => 'Rain And Snow',
- '406' => 'Shower Snow',
- '407' => 'Snow Flurry',
- '408' => 'Light to moderate snow',
- '409' => 'Moderate to heavy snow',
- '410' => 'Heavy snow to snowstorm',
- '499' => 'Snow',
- '500' => 'Mist',
- '501' => 'Foggy',
- '502' => 'Haze',
- '503' => 'Sand',
- '504' => 'Dust',
- '507' => 'Duststorm',
- '508' => 'Sandstorm',
- '509' => 'Dense fog',
- '510' => 'Strong fog',
- '511' => 'Moderate haze',
- '512' => 'Heavy haze',
- '513' => 'Severe haze',
- '514' => 'Heavy fog',
- '515' => 'Extra heavy fog',
- '900' => 'Hot',
- '901' => 'Cold',
- '999' => 'Unknown',
- );
- return isset($data[$code]) ? $data[$code] : '';
- }
- function weather_translate_cn($code){
- $data = array(
- '100' => '晴',
- '101' => '多云',
- '102' => '少云',
- '103' => '晴间多云',
- '104' => '阴',
- '200' => '有风',
- '201' => '平静',
- '202' => '微风',
- '203' => '和风',
- '204' => '清风',
- '205' => '强风/劲风',
- '206' => '疾风',
- '207' => '大风',
- '208' => '烈风',
- '209' => '风暴',
- '210' => '狂爆风',
- '211' => '飓风',
- '212' => '龙卷风',
- '213' => '热带风暴',
- '300' => '阵雨',
- '301' => '强阵雨',
- '302' => '雷阵雨',
- '303' => '强雷阵雨',
- '304' => '雷阵雨伴有冰雹',
- '305' => '小雨',
- '306' => '中雨',
- '307' => '大雨',
- '308' => '极端降雨',
- '309' => '毛毛雨/细雨',
- '310' => '暴雨',
- '311' => '大暴雨',
- '312' => '特大暴雨',
- '313' => '冻雨',
- '314' => '小到中雨',
- '315' => '中到大雨',
- '316' => '大到暴雨',
- '317' => '暴雨到大暴雨',
- '318' => '大暴雨到特大暴雨',
- '399' => '雨',
- '400' => '小雪',
- '401' => '中雪',
- '402' => '大雪',
- '403' => '暴雪',
- '404' => '雨夹雪',
- '405' => '雨雪天气',
- '406' => '阵雨夹雪',
- '407' => '阵雪',
- '408' => '小到中雪',
- '409' => '中到大雪',
- '410' => '大到暴雪',
- '499' => '雪',
- '500' => '薄雾',
- '501' => '雾',
- '502' => '霾',
- '503' => '扬沙',
- '504' => '浮尘',
- '507' => '沙尘暴',
- '508' => '强沙尘暴',
- '509' => '浓雾',
- '510' => '强浓雾',
- '511' => '中度霾',
- '512' => '重度霾',
- '513' => '严重霾',
- '514' => '大雾',
- '515' => '特强浓雾',
- '900' => '热',
- '901' => '冷',
- '999' => '未知',
- );
- return isset($data[$code]) ? $data[$code] : '';
- }
- function weather_translate_ru($code){
- $data = array(
- '100' => 'чинг',
- '101' => 'облачно',
- '102' => 'Меньше облако',
- '103' => 'Ясная и облачная',
- '104' => 'инь',
- '200' => 'дует',
- '201' => 'спокойствие',
- '202' => 'ветерок',
- '203' => 'зефир',
- '204' => 'Свежий ветер',
- '205' => 'Сильный ветер/сильный ветер',
- '206' => 'шквал',
- '207' => 'ветер',
- '208' => 'шторм',
- '209' => 'шторм',
- '210' => 'Сильный ветер',
- '211' => 'ураган',
- '212' => 'Торнадо',
- '213' => 'Тропический шторм',
- '300' => 'ливень',
- '301' => 'Сильный душ',
- '302' => 'Грозовой дождь',
- '303' => 'Сильный грозовой дождь',
- '304' => 'Ливень сопровождается градом',
- '305' => 'дождик',
- '306' => 'Средний дождь',
- '307' => 'дождь',
- '308' => 'Экстремальный дождь',
- '309' => 'Дождик/мелкий дождь',
- '310' => 'Проливной дождь',
- '311' => 'Сильный дождь',
- '312' => 'Сильный ливень',
- '313' => 'Ледяной дождь',
- '314' => 'Немного дождя',
- '315' => 'Под дождём',
- '316' => 'Большой до грозы',
- '317' => 'От грозы до грозы',
- '318' => 'Сильные ливни, сильные ливни',
- '399' => 'дождь',
- '400' => 'Мелкий снежок',
- '401' => 'средний снег',
- '402' => 'снегопад',
- '403' => 'Снежная буря',
- '404' => 'Дождь и снег',
- '405' => 'Дождливая и снежная погода',
- '406' => 'Дождь и снег',
- '407' => 'снежный',
- '408' => 'Маленький до снега',
- '409' => 'Прямо в снег',
- '410' => 'От большой до снежной бури',
- '499' => 'снег',
- '500' => 'дымка',
- '501' => 'туман',
- '502' => 'мгла',
- '503' => 'янша',
- '504' => 'пыль',
- '507' => 'Песчаная буря',
- '508' => 'Сильная песчаная буря',
- '509' => 'Густой туман',
- '510' => 'Сильный густой туман',
- '511' => 'Умеренный туман',
- '512' => 'Тяжелая смола',
- '513' => 'Туман',
- '514' => 'Сильный туман',
- '515' => 'Густой туман',
- '900' => 'горячая',
- '901' => 'холодно',
- '999' => 'неизвестный',
- );
- return isset($data[$code]) ? $data[$code] : '';
- }
- //输出json
- // function json_result($code, $msg, $data = array()) {
- function json_result($code, $msg, $data = array(),$resType = 0) {
- $data = empty($data) && $resType == 0? new stdClass() : $data;
- $res = array('code' => $code,'msg' => $msg,'data' => $data);
- $CI =& get_instance();
- $clientId = $CI->input->post('clientId',true);
- if (!empty($clientId)) {
- if (is_array($res['data']) && !isset($res['data']['status'])) {
- $res['data']['status'] = 2;
- }else{
- $res['data'] = array('status'=>2);
- }
- exit(send_websocket($clientId,$res));
- }else{
- echo json_encode($res);
- }
-
- }
- // 获取jwt的token值
- function get_jwt_token(){
- $CI =& get_instance();
- $CI->load->library('Jwt');
- $payload=array("iss"=>"chirpstack-application-server","aud"=>"chirpstack-application-server","nbf"=>time()-60, "exp"=>time()+7200,'sub'=>'user','username'=>'admin');
- return $CI->jwt->getToken($payload);
- }
- //发送命令到server
- function send_cmd($cmd, $timeout = 30, $ms_timeout = 200) {
- return false;
- $CI =& get_instance();
- $host = $CI->config->item('cmd_server');
- $ip = $host['ip'];
- $port = $host['port'];
- $client = @stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr, 30);
- if ($client) {
- fwrite($client, $cmd);
- stream_set_timeout($client, $timeout, $ms_timeout);
- $result = fread($client, 8196);
- fclose($client);
- return $result;
- } else {
- return false;
- }
- }
- /**
- * 模拟post进行url请求
- * @param string $url
- * @param string $param
- */
- function request_post($url = '', $data = '',$header=array(),$timeout = 30) {
- $tuCurl = curl_init();
- //参数
- curl_setopt($tuCurl, CURLOPT_URL,$url);
- curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data);
- curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, false);
- // curl_setopt($tuCurl, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($tuCurl, CURLOPT_SSLVERSION, 1);
- curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($tuCurl, CURLOPT_TIMEOUT, $timeout);
- if (!empty($header)) {
- curl_setopt($tuCurl, CURLOPT_HTTPHEADER, $header);
- }
- $tuData = curl_exec($tuCurl);
- curl_close($tuCurl);
- return $tuData;
- }
- // 通过时区获取当地时间
- function get_time_by_timezone($timezone){
- $time = strtotime(gmdate("Y-m-d H:i:s"));
- return date('Y-m-d H:i:s',$time + $timezone*3600);
- }
- // 给定时间、时区计算目标时区时间
- function date_change($date,$start,$end){
- $H = intval(date('H',strtotime($date)));
- $d = intval(date('d',strtotime($date)));
- $m = intval(date('m',strtotime($date)));
- $Y = intval(date('Y',strtotime($date)));
- if ($m <= 1) {
- $beginDateMonth = date(($Y-1).'-12-01', strtotime($date));
- }else{
- $beginDateMonth = date($Y.'-'.($m-1).'-01', strtotime($date));
- }
- $day = intval(date('d', strtotime("$beginDateMonth +1 month -1 day")));
- $day1 = intval(date('d', strtotime(date('Y-m-01',strtotime($date))." +1 month -1 day")));
- $H1 = $H-($start - $end);
- if ($H1 < 0) {
- $H1 += 24;
- if ($d <= 1) {
- $d = $day;
- if ($m <= 1) {
- $Y -= 1;
- $m = 12;
- }else{
- $m -= 1;
- }
- }else{
- $d -= 1;
- }
- }elseif ($H1 >= 24) {
- $H1 -= 24;
- if ($d >= $day1) {
- $d = 1;
- if ($m >= 12) {
- $m = 1;
- $Y += 1;
- }else{
- $m += 1;
- }
- }else{
- $d += 1;
- }
- }
- if ($m < 10) $m = '0'.$m;
- if ($d < 10) $d = '0'.$d;
- if ($H1 < 10) $H1 = '0'.$H1;
- return date("{$Y}-{$m}-{$d} {$H1}:i:s",strtotime($date));
- }
- // 文件下载
- function file_download($filePath){
- $file_name = basename($filePath); //下载文件名
- //检查文件是否存在
- if (! file_exists ( $filePath )) {
- exit (json_result('0012','找不到文件',array()));
- } else {
- //打开文件
- $file = fopen ( $filePath, "r" );
- //输入文件标签
- Header ( "Content-type: application/octet-stream" );
- Header ( "Accept-Ranges: bytes" );
- Header ( "Accept-Length: " . filesize ( $filePath) );
- Header ( "Content-Disposition: attachment; filename=" . $file_name );
- //输出文件内容
- //读取文件内容并直接输出到浏览器
- echo fread ( $file, filesize ( $filePath ) );
- fclose ( $file );
- exit ();
- }
- }
- /**
- * 模拟get进行url请求
- * @param string $url
- */
- function http_get($url,$header = array()) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- if (!empty($header)) {
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- }
- // curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
- $result = curl_exec($ch);
- curl_close($ch);
- return $result;
- }
- //截取字符串
- function cut_str($string, $length, $append=true) {
- if(strlen($string) <= $length ) {
- return $string;
- } else {
- $i = 0;
- while ($i < $length) {
- $stringTMP = substr($string,$i,1);
- if ( ord($stringTMP) >=224 ) {
- $stringTMP = substr($string,$i,3);
- $i = $i + 3;
- } elseif( ord($stringTMP) >=192 ) {
- $stringTMP = substr($string,$i,2);
- $i = $i + 2;
- } else {
- $i = $i + 1;
- }
- $stringLast[] = $stringTMP;
- }
- $stringLast = implode("",$stringLast);
- if($append) {
- $stringLast .= "...";
- }
- return $stringLast;
- }
- }
- //填充数组不存在的键值对
- function fillUnsetData($array, $length) {
- for ($i=1; $i <= $length; $i++) {
- if (!isset($array[$i])) {
- $array[$i] = '';
- }
- }
- return $array;
- }
- //查找数组第一个元素的key
- function findFirstKey($array) {
- foreach ($array as $k => $v){
- return $k;
- }
- }
- function doAsyncRequest($url, $param=array()){
- $urlinfo = parse_url($url);
- $host = $urlinfo['host'];
- $path = $urlinfo['path'];
- $query = isset($param)? http_build_query($param) : '';
- $port = 80;
- $errno = 0;
- $errstr = '';
- $timeout = 10;
- $fp = fsockopen($host, $port, $errno, $errstr, $timeout);
- $out = "POST ".$path." HTTP/1.1\r\n";
- $out .= "host:".$host."\r\n";
- $out .= "content-length:".strlen($query)."\r\n";
- $out .= "content-type:application/x-www-form-urlencoded\r\n";
- $out .= "connection:close\r\n\r\n";
- $out .= $query;
- fputs($fp, $out);
- fclose($fp);
- }
- function send_websocket($clientid,$data = array(),$resType='cmd')
- {
- if (!empty($clientid)) {
- $CI =& get_instance();
- if (isset($data['data'])) $data['data']['status'] = 2;
- $CI->db->insert('message',['client'=>$clientid,'msg'=>json_encode($data)]);
- }
-
- }
- //token生成算法
- function generate_token($username, $password, $client_key) {
- $CI =& get_instance();
- $salt = $CI->config->config['encryption_key'];
- return md5($username.$password.$client_key.$salt);
- // return md5($username.$password.date('yyyy').date('mm').$client_key.$salt);
- }
- //获取汉字拼音的第一个字母
- function get_first_char($str) {
- $firstchar_ord = ord(strtoupper($str{0}));
- if (($firstchar_ord >= 65 and $firstchar_ord <= 91) or ($firstchar_ord >= 48 and $firstchar_ord <= 57)) return $str{0};
- $s = iconv("UTF-8", "GBK//TRANSLIT//IGNORE", $str);
- $asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
- if ($asc >= - 20319 and $asc <= - 20284) return "A";
- if ($asc >= - 20283 and $asc <= - 19776) return "B";
- if ($asc >= - 19775 and $asc <= - 19219) return "C";
- if ($asc >= - 19218 and $asc <= - 18711) return "D";
- if ($asc >= - 18710 and $asc <= - 18527) return "E";
- if ($asc >= - 18526 and $asc <= - 18240) return "F";
- if ($asc >= - 18239 and $asc <= - 17923) return "G";
- if ($asc >= - 17922 and $asc <= - 17418) return "H";
- if ($asc >= - 17417 and $asc <= - 16475) return "J";
- if ($asc >= - 16474 and $asc <= - 16213) return "K";
- if ($asc >= - 16212 and $asc <= - 15641) return "L";
- if ($asc >= - 15640 and $asc <= - 15166) return "M";
- if ($asc >= - 15165 and $asc <= - 14923) return "N";
- if ($asc >= - 14922 and $asc <= - 14915) return "O";
- if ($asc >= - 14914 and $asc <= - 14631) return "P";
- if ($asc >= - 14630 and $asc <= - 14150) return "Q";
- if ($asc >= - 14149 and $asc <= - 14091) return "R";
- if ($asc >= - 14090 and $asc <= - 13319) return "S";
- if ($asc >= - 13318 and $asc <= - 12839) return "T";
- if ($asc >= - 12838 and $asc <= - 12557) return "W";
- if ($asc >= - 12556 and $asc <= - 11848) return "X";
- if ($asc >= - 11847 and $asc <= - 11056) return "Y";
- if ($asc >= - 11055 and $asc <= - 10247) return "Z";
- return '~';
- }
- //翻译错误
- function transfer_error_tips($msg) {
- if(strpos($msg,'project not existed') !== false) {
- return '项目不存在';
- } else if(strpos($msg,'all of networks in this project are not online') !== false) {
- return '当前项目下所有网络都不在线';
- } else if(strpos($msg,'error check_code') !== false) {
- return '路灯发生未知错误';
- } else if(strpos($msg,'cmd not existed') !== false) {
- return '未知命令';
- } else if(strpos($msg,'address not correct') !== false) {
- return '无线模块地址不正确';
- } else if(strpos($msg,'current address not online') !== false) {
- return '无线模块不在线';
- } else if(strpos($msg,'time out no response') !== false) {
- return '超时未响应';
- } else if(strpos($msg,'PDU error') !== false) {
- return 'PDU错误';
- } else if(strpos($msg,'not online') !== false) {
- return '网络不在线';
- } else if(strpos($msg,'send command timeout') !== false) {
- return '下发指令超时';
- } else if(strpos($msg,'The file you are attempting to upload is larger than the permitted size.') !== false) {
- return '上传文件过大';
- } else if(strpos($msg,'The filetype you are attempting to upload is not allowed.') !== false) {
- return '上传文件类型错误';
- }else if($msg == '') {
- return '未知错误';
- } else {
- return '未知错误';
- }
- }
- //俄语翻译错误
- function transfer_error_tips_ru($msg) {
- if(strpos($msg,'project not existed') !== false) {
- return 'Проект не существует';
- } else if(strpos($msg,'all of networks in this project are not online') !== false) {
- return 'Все сети в рамках текущего проекта не подключены';
- } else if(strpos($msg,'error check_code') !== false) {
- return 'Неизвестная ошибка уличных фонарей';
- } else if(strpos($msg,'cmd not existed') !== false) {
- return 'Неизвестная команда';
- } else if(strpos($msg,'address not correct') !== false) {
- return 'Неверный адрес модуля';
- } else if(strpos($msg,'current address not online') !== false) {
- return 'беспроводной модуль не подключен';
- } else if(strpos($msg,'time out no response') !== false) {
- return 'задержка без ответа';
- } else if(strpos($msg,'PDU error') !== false) {
- return 'ошибка PDU';
- } else if(strpos($msg,'not online') !== false) {
- return 'сеть не работает';
- } else if(strpos($msg,'send command timeout') !== false) {
- return 'время ожидания следующей команды';
- } else if(strpos($msg,'The file you are attempting to upload is larger than the permitted size.') !== false) {
- return 'загружать слишком большой файл';
- } else if(strpos($msg,'The filetype you are attempting to upload is not allowed.') !== false) {
- return 'Ошибка загрузки типа файла';
- }else if($msg == '') {
- return 'Неизвестная ошибка';
- } else {
- return 'Неизвестная ошибка';
- }
- }
- /**
- * 把返回的数据集转换成Tree
- * @param array $list 要转换的数据集
- * @param string $pid parent标记字段
- * @param string $level level标记字段
- * @return array
- * @author 麦当苗儿 <zuojiazi@vip.qq.com>
- */
- function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
- // 创建Tree
- $tree = array();
- if(is_array($list)) {
- // 创建基于主键的数组引用
- $refer = array();
- foreach ($list as $key => $data) {
- $refer[$data[$pk]] =& $list[$key];
- }
- foreach ($list as $key => $data) {
- // 判断是否存在parent
- $parentId = $data[$pid];
- if ($root == $parentId) {
- $tree[] =& $list[$key];
- }else{
- if (isset($refer[$parentId])) {
- $parent =& $refer[$parentId];
- $parent[$child][] =& $list[$key];
- }
- }
- }
- }
- return $tree;
- }
- function getTree($data, $pId)
- {
- $tree = [];
- foreach($data as $k => $v)
- {
- if($v['pid'] == $pId)
- {
- $v['subList'] = getTree($data, $v['id']);
- $tree[] = $v;
- unset($data[$k]);
- }
- }
- return $tree;
- }
- // 编号设置
- function set_number($n){
- $n = intval($n);
- $res = $n + 1000000;
- return substr($res, 1);
- }
- function get_fields_by_type($fileds,$type){
- // 系统默认
- $data = array(
- 'number' => array('name'=>'路灯编号','enname'=>'Lamp number'),
- 'section' => array('name'=>'路段','enname'=>'Road'),
- 'lampstatus' => array('name'=>'路灯状态','enname'=>'Lamp status'),
- 'status' => array('name'=>'信号状态','enname'=>'Network status'),
- 'updatetime' => array('name'=>'更新时间','enname'=>'Update time'),
- 'lighteness' => array('name'=>'路灯亮度(%)','enname'=>'Brightness(%)'),
- 'address' => array('name'=>'无线模块地址','enname'=>'Wireless module address'),
- 'loadpower' => array('name'=>'负载功率(W)','enname'=>'load power(W)'),
- 'chargestage' => array('name'=>'蓄电池充电阶段','enname'=>'Charging stage'),
- 'battvoltage' => array('name'=>'蓄电池电压(V)','enname'=>'Battery voltage(V)'),
- 'overtimes' => array('name'=>'蓄电池总过放次数','enname'=>'Over discharge times'),
- 'solarpower' => array('name'=>'太阳能板功率(W)','enname'=>'Solar panel power(W)'),
- 'isfaulted' => array('name'=>'是否故障','enname'=>'Fault'),
- 'id' => array('name'=>'路灯id','enname'=>'Lamp ID'),
- 'networkname' => array('name'=>'网络名称','enname'=>'Network name'),
- 'projectname' => array('name'=>'项目名称','enname'=>'Project name'),
- 'longitude' => array('name'=>'经度','enname'=>'Longitude'),
- 'latitude' => array('name'=>'纬度','enname'=>'Latitude'),
- 'simid' => array('name'=>'sim卡号','enname'=>'SIM card number'),
- 'packageSurplus' => array('name'=>'套餐剩余','enname'=>'Package surplus'),
- 'poleheight' => array('name'=>'灯杆高度(m)','enname'=>'Lamp-post length(m)'),
- 'polediameter' => array('name'=>'灯杆直径(m)','enname'=>'Lamp-post diameter(m)'),
- 'polematerial' => array('name'=>'灯杆材质','enname'=>'Lamp-post materials'),
- 'lighttype' => array('name'=>'灯具类型','enname'=>'Light type'),
- 'lamptype' => array('name'=>'路灯类型','enname'=>'Lamp type'),
- 'boardtype' => array('name'=>'太阳能板类型','enname'=>'Solar panel type'),
- 'boardpower' => array('name'=>'太阳能板功率(W)','enname'=>'Solar panel power(W)'),
- 'batterytype' => array('name'=>'蓄电池类型','enname'=>'Battery type'),
- 'batteryah' => array('name'=>'蓄电池AH数(ah)','enname'=>'Battery capacity(ah)'),
- 'loadpower' => array('name'=>'负载功率(W)','enname'=>'LED power(W)'),
- 'electricleft' => array('name'=>'蓄电池剩余电量','enname'=>'Remaining battery capacity(Ah)'),
- 'lampvoltage' => array('name'=>'路灯电压(V)','enname'=>'Lamp voltage(V)'),
- 'lampcurrent' => array('name'=>'路灯电流(A)','enname'=>'Lamp current(A)'),
- 'temper' => array('name'=>'灯头温度(℃)','enname'=>'Lamp temperature(℃)'),
- 'solarvoltage' => array('name'=>'太阳能板电压(V)','enname'=>'Solar panel voltage(V)'),
- 'solarcurrent' => array('name'=>'太阳能板电流(A)','enname'=>'Solar panel current(A)'),
- 'battstatus' => array('name'=>'蓄电池状态','enname'=>'Battery status'),
- 'chargecurrent' => array('name'=>'蓄电池充电电流(A)','enname'=>'Charging current(A)'),
- 'discharcurrent' => array('name'=>'蓄电池放电电流(A)','enname'=>'Discharging current(A)'),
- 'chargepower' => array('name'=>'蓄电池充电功率(w)','enname'=>'Charging power(w)'),
- 'dischargepower' => array('name'=>'蓄电池放电功率(w)','enname'=>'Discharging power(w)'),
- 'batttemper' => array('name'=>'蓄电池表面温度(℃)','enname'=>'Battery surface temperature(℃)'),
- 'electrictotal' => array('name'=>'蓄电池总电量','enname'=>'Total battery capacity(Ah)'),
- 'electricSOC' => array('name'=>'蓄电池电量SOC(%)','enname'=>'Battery SOC(%)'),
- 'voltagedaymin' => array('name'=>'当天最低电压(V)','enname'=>'Minimum voltage(V)'),
- 'voltagedaymax' => array('name'=>'当天最高电压(V)','enname'=>'Highest voltage(V)'),
- 'daychargeah' => array('name'=>'当天充电安时数(ah)','enname'=>'Charging AH(ah)'),
- 'daydischarah' => array('name'=>'当天放电安时数(ah)','enname'=>'Discharging AH(ah)'),
- 'daychargemaxpow' => array('name'=>'当天充电最大功率(W)','enname'=>'Charging max-power(W)'),
- 'daydischarmaxpow' => array('name'=>'当天放电最大功率(W)','enname'=>'Discharging max-power(W)'),
- 'daychargemincurrent' => array('name'=>'当天灯亮时间(hh:mm)','enname'=>'Turn-on duration'),
- 'daycharmaxcurrent' => array('name'=>'当天充电最大电流(A)','enname'=>'Highest charging current(A)'),
- 'daydischargemincurrent' => array('name'=>'当天充电时间(hh:mm)','enname'=>'Charging duration'),
- 'daydischarmaxcurrent' => array('name'=>'当天放电最大电流(A)','enname'=>'Highest discharging current(A)'),
- 'daybattmintemper' => array('name'=>'当天蓄电池最低温度(℃)','enname'=>'Battery min-temperature(℃)'),
- 'daybattmaxtemper' => array('name'=>'当天蓄电池最高温度(℃)','enname'=>'Battery max-temperature(℃)'),
- 'daygeneration' => array('name'=>'当天发电量(W)','enname'=>'Power generation(W)'),
- 'dayconsumption' => array('name'=>'当天用电量(W)','enname'=>'Power consumption(W)'),
- 'totalgeneration' => array('name'=>'累计发电量(W)','enname'=>'Cumulative power generation(W)'),
- 'totalconsumption' => array('name'=>'累计用电量(W)','enname'=>'Cumulative power consumption(W)'),
- 'sysvoltage' => array('name'=>'系统电压(V)','enname'=>'System voltage(V)'),
- 'syscurrent' => array('name'=>'系统电流(A)','enname'=>'System current(A)'),
- 'controlTemper' => array('name'=>'控制器温度(℃)','enname'=>'Controller temperature(℃)'),
- 'rundays' => array('name'=>'运行天数','enname'=>'Running duration'),
- 'fulltimes' => array('name'=>'蓄电池总充满次数','enname'=>'Full charge times'),
- 'totalchargeah' => array('name'=>'蓄电池总充电安时数(ah)','enname'=>'Total charge AH(ah)'),
- 'totaldischarah' => array('name'=>'蓄电池总放电安时数(ah)','enname'=>'Total discharge AH(ah)'),
- 'policyid' => array('name'=>'当前策略','enname'=>'Current strategy'),
- );
- $temp = [];
- $filedArr = explode(',', $fileds);
- if ($type == 0) {
- foreach ($filedArr as $f) {
- if (!empty($data[$f])) {
- $temp[] = $data[$f]['name'];
- }
- }
- }else{
- foreach ($filedArr as $f) {
- if (!empty($data[$f])) {
- $temp[] = $data[$f]['enname'];
- }
- }
- }
- return $temp;
- }
- // 翻译故障信息
- function alarm_translate($msg){
- $data = array(
- '过放' => 'over release',
- '超压' => 'overpressure',
- '负载短路' => 'load short circuit',
- '电池故障' => 'Error display',
- '内部超温' => 'internal overtemperature',
- '外部超温' => 'external overtemperature',
- '负载开路' => 'load opening',
- '输出电容超压保护' => 'output capacitance overvoltage protection',
- '电池板过流' => 'panel overcurrent',
- '电池板短路' => 'panel short circuit',
- '电池板超压' => 'panel overpressure',
- '充电逆流' => 'charging current',
- '锂电池低温关闭充电' => 'the lithium battery is turned off and charged at low temperature',
- '电池电压异常' => 'Abnormal battery voltage'
- );
- return isset($data[$msg]) ? $data[$msg] : 'unknown error';
- }
- // 新控制器翻译故障信息
- function modbus_alarm_translate($msg){
- $data = array(
- 'BMS过充保护' => 'BMS Overcharge Protection',
- '电池低温保护,停止充电' => 'Battery Low Temperature Protection, Stop Charging',
- '电池反接' => 'Battery reverse connection',
- '电容超压' => 'Capacitance overpressure',
- '感应探头损坏' => 'Damage of induction probe',
- '负载开路' => 'Load open circuit',
- '蓄电池过放' => 'Battery Overdischarge',
- '蓄电池超压' => 'Battery overvoltage',
- '欠压警告' => 'Undervoltage warning',
- '负载短路' => 'Load short circuit',
- '负载功率过大或负载过流' => 'Excessive Load Power or Overcurrent',
- '控制器温度过高' => 'Controller temperature is too high',
- '外部环境温度过高' => 'External ambient temperature is too high',
- '光伏输入功率过大' => 'Excessive input power of photovoltaic',
- '光伏输入端短路' => 'Photovoltaic Input Short Circuit',
- '光伏输入端超压' => 'Photovoltaic Input Overvoltage',
- '太阳板逆流' => 'Solar plate countercurrent',
- '太阳板工作点超压' => 'Operating point overpressure of solar panel',
- '太阳板反接' => 'Solar Plate Reverse Connection'
- );
- return isset($data[$msg]) ? $data[$msg] : 'unknown error';
- }
- function alarm_translate_ch($msg){
- $data = array(
- 'over release' => '过放',
- 'overpressure' => '超压',
- 'load short circuit' => '负载短路',
- 'battery failure' => '电池故障',
- 'internal overtemperature' => '内部超温',
- 'external overtemperature' => '外部超温',
- 'load opening' => '负载开路',
- 'output capacitance overvoltage protection' => '输出电容超压保护',
- 'panel overcurrent' => '电池板过流',
- 'panel short circuit' => '电池板短路',
- 'panel overpressure' => '电池板超压',
- 'charging current' => '充电逆流',
- 'the lithium battery is turned off and charged at low temperature' => '锂电池低温关闭充电',
- 'BMS Overcharge Protection'=>'BMS过充保护',
- 'Battery Low Temperature Protection, Stop Charging'=>'电池低温保护,停止充电',
- 'Battery reverse connection'=>'电池反接',
- 'Capacitance overpressure'=>'电容超压',
- 'Damage of induction probe'=>'感应探头损坏',
- 'Undervoltage warning'=>'欠压警告',
- 'Excessive Load Power or Overcurrent'=>'负载功率过大或负载过流',
- 'Controller temperature is too high'=>'控制器温度过高',
- 'External ambient temperature is too high'=>'外部环境温度过高',
- 'Excessive input power of photovoltaic'=>'光伏输入功率过大',
- 'Photovoltaic Input Short Circuit'=>'光伏输入端短路',
- 'Photovoltaic Input Overvoltage'=>'光伏输入端超压',
- 'Solar plate countercurrent'=>'太阳板逆流',
- 'Operating point overpressure of solar panel'=>'太阳板工作点超压',
- 'Solar Plate Reverse Connection'=>'太阳板反接',
- );
- return isset($data[$msg]) ? $data[$msg] : '';
- }
- ?>
|