1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672 |
- <?php
- class DpjkIndexAction extends Action {
-
-
- public function getSessionKey( ){
- $username = I('get.username');
- $password = I('get.password');
-
- if(!$username){//用户名参数为空
- $this->errorMsg(\Zndp\Api\ResponseCode::EMPTY_USERNAME);
- }
- //获取用户信息
- $where = array(
- 'UserName'=>$username,
- 'RoleId' => \Zndp\User\RoleEnum::API_CLIENT,
- );
- $userinfo = MM('uc_user')->where($where)->field('ID,UserName,Password')->find();
- if(!$userinfo){//用户名不存在
- $this->errorMsg(\Zndp\Api\ResponseCode::USERNAME_NOT_EXISTS);
- }
-
- //密码错误
- $password = (new \Zndp\User\Util)->encPwd($password);
- if($password != $userinfo['Password']){
- $this->errorMsg(\Zndp\Api\ResponseCode::PASSWORD_ERROR);
- }
- //返回ID(sessionKey)
- $sessionkeyArr = array('sessionkey'=>$userinfo['ID']);
- $sessionkeyJson= json_encode($sessionkeyArr);
- echo $sessionkeyJson;
-
- }
-
-
- public function loginBusiness( ){
- $username = I('businessUsername');
- $password = I('businessPassword');
- //检查用户名
- $userinfo = $this->checkUserName($username);
- //密码错误
- $password = (new \Zndp\User\Util)->encPwd($password);
- if($password != $userinfo['Password']){
- $this->errorMsg(\Zndp\Api\ResponseCode::PASSWORD_ERROR);
- }
- //登录成功 --》 添加登录记录到login表
- $data['UserId'] = $userinfo['ID'];
- $data['LoginTime'] = date('Y-m-d H:i:s');
- $login_id = MM('dpyh_login')->add($data);
- // 返回json数据串
- $cond = array('FarmId'=>$userinfo['OrganizationId']);
- $orginfo = MM('dpsb_group')->where($cond)->field('ID as orgid,OrgName as orgname')->select();
- $dataArr = array(
- 'response' => 'success',
- 'CODE' => '0',
- 'sessionkey' => $userinfo['ID'],
- 'custid' => $userinfo['OrganizationId'],
- 'ysAppkey' => '',
- 'ysSecket' => '',
- 'ysUsername' => '',
- 'ysPassword' => '',
- 'operatorid' => '',
- 'orginfo' => $orginfo,
- 'loginid' => $login_id
- );
- $dataJson = json_encode($dataArr,JSON_UNESCAPED_UNICODE);
- echo $dataJson;
- }
-
-
- public function getRealTimeDeviceDetailData( ){
- //header('Content-type: application/json');
- //单台设备信息,包括5张最新图片(如果有摄像头),传感器值,行程控制值,开关控制值
- $username = I('get.username');
- $device_addr = I('get.addr');
- //检查必填参数
- $this->checkRequiredParam('username,addr');
- //检查用户名
- $userinfo = $this->checkUserName($username,true);
- //检查设备
- $device_info = $this->checkDeviceControlRight($userinfo,$device_addr);
- //设备失去连接
-
- //获取农场名称(顾客名称)
- $where = array('ID'=>$userinfo['FarmId']);
- $custName = MM('uc_organization')->where( $where )->getField('DepartName');
- //获取A类型传感器数据集
- $where = array(
- 'DeviceId'=>$device_info['ID'],
- 'ChType' => array('IN',\Zndp\Device\ChannelType::SENSOR_TYPES)
- );
- $sensors = MM('dpsb_channel')->where($where)->field('ChNumberText as Chx,DisplayName,ChType as channelType,ChValue as chValue,Unit,Flag,ChMan as man')->select();
- $sensorValue = array();
- $channel_type_model = new \Zndp\Device\ChannelType();
- foreach($sensors as $sensor){
- $sensor['workUnitName'] = $device_info['WorkUnitName'];
- $sensor['Unit'] = $channel_type_model->getTypeUnit($sensor['channelType']);
- $sensor['Flag'] = $channel_type_model->getTypeFlag($sensor['channelType']);
- $sensor['channelType'] = $sensor['channelType'];
- array_push($sensorValue,$sensor);
- }
- //获取行程类传感器数据集
- $where = array(
- 'DeviceId'=>$device_info['ID'],
- 'ChType' => array('IN',\Zndp\Device\ChannelType::ITINERARY_SENSOR)
- );
- $travels = MM('dpsb_channel')->where($where)->field('ChNumberText as Chx,DisplayName,ChType as channelType,ChValue as chValue,Unit,Flag,ChMan as man')->select();
- $travelValue = array();
- foreach($travels as $travel){
- $travel['workUnitName'] = $device_info['WorkUnitName'];
- $travel['Unit'] = $channel_type_model->getTypeUnit($travel['channelType']);
- $travel['Flag'] = $channel_type_model->getTypeFlag($travel['channelType']);
- $travel['channelType'] = (int)$travel['channelType'];
- array_push($travelValue,$travel);
- }
- //返回json串
- $arr = array(
- 'Addr' => $device_addr,
- 'custname' => $custName,
- 'custid' => (int)$userinfo['FarmId'],
- 'gatherTime' => $device_info['GatherTime'],
- 'workUnitName' => $device_info['WorkUnitName'],
- 'hikValue' => array(
- 'videosn'=>'',
- 'ysAppkey'=>'',
- //'accessToken'=>''
- ),
- 'imageValue' => array(),
- 'sensorValue' => $sensorValue,
- 'travelValue' => $travelValue,
- 'onoffValue' => array(),
- 'proportionValue' => array()
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
-
- }
-
-
- public function sendControl_test( ){
- //根据设备、通道号控制设备状态,行程量5个(全开,全关,打开运行中,关闭运行中,停止),开关量(打开,停止),返回是否自动控制信息。修改设备后的信息会保存。
- $device_addr = I('get.addr');
- $channel_status = I('get.status');
- $channel_number = I('get.channelNumber');
- $sessionkey = I('get.sessionkey');
- // 检查必填参数
- $this->checkRequiredParam('addr,status,channelNumber,sessionkey');
- // 检查sessionkey
- $userinfo = $this->checkSessionKey();
- // 检查用户对设备权限
- //$device_info = $this->checkDeviceControlRight($userinfo,$device_addr);
- // 对应设备失去连接
-
- // 对应序号传感器不是控制设备
- $channel_info = $this->checkControlChannel($device_addr,$channel_number);
- // 控制参数错误
- if( !in_array($channel_status,[0,1,2]) ){
- $error = array("response"=>"error",
- "error" =>"4",
- "errorinfo"=>"Wrong Status!"
- );
- echo json_encode($error);exit;
- }
- // 设备应答操作失败(应答状态为0)
-
- // 传给信号服务
- $host = '127.0.0.1';
- $port = 10240;
- $socket = new Jms\Network\TcpClient($host,$port);
- $cmd = array(
- "method" => "apiSendControl",
- "Addr" => $device_addr, //设备addr
- "channelNumber" => $channel_number, //通道编号
- "status" => $channel_status
- );
- $res = $socket->send(json_encode($cmd)."\n");
- //修改设备后的保存信息
- if(!$res['success']){//操作失败
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_RESPONSE_FAIL);
- }
- $data_arr = array(
- 'response' => $res['success'] ? 'success' : 'error',
- 'decstate' => $res['data']['decstate'],
- 'isauto' => $res['data']['isauto']
- );
- // 返回json串
- echo json_encode($data_arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getControlInfo( ){
- $device_addr = I('get.addr');
- $channel_number = I('get.channelNumber');
- $sessionkey = I('get.sessionkey');
- // 检查必要的参数
- $this->checkRequiredParam('addr,channelNumber,sessionkey');
- // 检查sessionkey
- $this->checkSessionKey();
- // 检查设备是否存在
- $device_info = $this->checkDevice($device_addr);
- // 对应设备失去连接
-
- // 检查对应序号传感器是否控制设备
- $channel_info = $this->checkControlChannel($device_addr,$channel_number);
- // 设备应答操作失败(应答状态为0)
-
- $where = array(
- 'DeviceId' => $device_info['ID'],
- 'Channel' => $channel_number,
- );
- $channel_config = MM('dpsb_policy')->where($where)->find();
- if(!$channel_config){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- $where = array('DeviceId' => $device_info['ID'],$channel_number);
- $channel_type = MM('dpsb_channel')->where($where)->getField('ChType');
- $model = new \Zndp\Device\ChannelType();
- // 返回json串
- $arr = array(
- 'response' => 'success',
- 'devtype' => $device_info['DeviceType'] ?:'',
- 'devinfojson' => array(
- "channel"=> $channel_config['Channel'], //通道编号值
- "IsUse"=> 1, //传感器?是否使用
- "N"=> $device_info['WorkUnitName'], //名称
- "U"=> $model->getTypeUnit($channel_type), //单位
- //"Bus"=>"", //总线地址
- //"BusAddr"=> '', //总线类型
- "T"=> $channel_type, //通道类型,参见第四章‘设备通道类型字段’
- "Man"=> $channel_config['Man'], //是否自动, 0自动,1手动
- //"MOut"=>"",
- //"Load"=>"",
- "refChannel"=> $channel_config['RefChannel'], //参考通道,此通道指传感器通道(refChannel)
- //"RefAddr"=>"", //参考目标设备地址(暂未启用)
- //"InterLock"=>"", //参考互锁通道编号(暂未启用,此通道指控制通道)
- //"Over_Value"=>"2.5",
- "UpperLimit_Value"=> $channel_config['UpperLimitValue'],//上限值参考值 可通过上线下线参考值 设置扩值(温度范围)
- "UpperLimit_State"=> $channel_config['UpperLimitState'], //上限值参考状态 0关 1开
- "LowerLimit_Value"=> $channel_config['LowerLimitValue'], //下限值参考值 可通过上线下线参考值 设置扩值(温度范围)
- "LowerLimit_State"=> $channel_config['LowerLimitState'], //下限值参考状态 0关 1开
- "TimeEn"=> $channel_config['IsTime'], //定时任务使能 1开启,0关闭
- "OnTime1"=> $channel_config['OnTime1'], //打开时间1
- "OffTime1"=> $channel_config['OffTime1'], //关闭时间1
- "OnTime2"=> $channel_config['OnTime2'], //打开时间2
- "OffTime2"=> $channel_config['OffTime2'], //关闭时间2
- "OnTime3"=> $channel_config['OnTime3'], //打开时间3
- "OffTime3"=> $channel_config['OffTime3'], //关闭时间3
- "OnTime4"=> $channel_config['OnTime4'], //打开时间4
- "OffTime4"=> $channel_config['OffTime4'], //关闭时间4
- "OnTime5"=> $channel_config['OnTime5'], //打开时间5
- "OffTime5"=> $channel_config['OffTime5'], //关闭时间5
- //"Cycle"=>"1",
- //"OpenTime"=>"10",
- //"CloseTime"=>"60"
- )
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function ModifyAutoControlInfo_test( ){
- //设备可通过设置参数进行自动控制,onTime时间单位为分钟,比如8:10对应8*60+10=490 可通过上线下线参考值 设置扩值(温度范围)
- $addr = I('get.addr'); //设备地址
- $channelNumber = I('get.channelNumber'); //设备通道
- $man = I('get.man'); //是否自动,0自动,1手动
- //$RefAddr = I('get.RefAddr'); //参考目标设备地址,暂未启用
- $refChannel = I('get.refChannel'); //参考通道,此通道指传感器通道
- //$InterLock = I('get.InterLock'); //参考互锁通道编号,暂未启用,此通道指控制通道
- $TimeEn = I('get.TimeEn'); //定时任务使能,1开启,0关闭
- $UpperLimit_Value = I('get.UpperLimit_Value'); //上限值参考值,可通过上线下线参考值 设置扩值(温度范围)
- $UpperLimit_State = I('get.UpperLimit_State'); //上限值参考状态,0关 1开
- $LowerLimit_Value = I('get.LowerLimit_Value'); //下限值参考值,可通过上线下线参考值 设置扩值(温度范围)
- $LowerLimit_State = I('get.LowerLimit_State'); //下限值参考状态,0关 1开
- $OnTime1 = I('get.OnTime1'); //打开时间1
- $OffTime1 = I('get.OffTime1'); //关闭时间1
- $OnTime2 = I('get.OnTime2'); //打开时间2
- $OffTime2 = I('get.OffTime2'); //关闭时间2
- $OnTime3 = I('get.OnTime3'); //打开时间3
- $OffTime3 = I('get.OffTime3'); //关闭时间3
- $OnTime4 = I('get.OnTime4'); //打开时间4
- $OffTime4 = I('get.OffTime4'); //关闭时间4
- $OnTime5 = I('get.OnTime5'); //打开时间5
- $OffTime5 = I('get.OffTime5'); //关闭时间5
-
- // 检查必填参数
- $this->checkRequiredParam('addr,channelNumber,man,TimeEn');
- // 检查sessionkey
- $this->checkSessionKey();
- // 检查设备是否存在
- $device_info = $this->checkDevice($addr);
- // 检查是否为控制类传感器
- $channel_infp= $this->checkControlChannel($addr,$channelNumber);
- // 发送给信号服务
- $host = '127.0.0.1';
- $port = 10240;
- $socket = new Jms\Network\TcpClient($host,$port);
- $msg = array(
- 'method' => 'apiModifyAutoControlInfo',
- 'Addr' => $addr,
- 'channelNumber' => $channelNumber,
- 'man' => $man,
- 'refChannel' => $refChannel,
- 'TimeEn' => $TimeEn,
- 'UpperLimit_Value' => $UpperLimit_Value,
- 'UpperLimit_State' => $UpperLimit_State,
- 'LowerLimit_Value' => $LowerLimit_Value,
- 'LowerLimit_State' => $LowerLimit_State,
- 'OnTime1' => $OnTime1 >= 0 ? $OnTime1 : -1,
- 'OffTime1' => $OffTime1 >= 0 ? $OffTime1 : -1,
- 'OnTime2' => $OnTime2 >= 0 ? $OnTime2 : -1,
- 'OffTime2' => $OffTime2 >= 0 ? $OffTime2 : -1,
- 'OnTime3' => $OnTime3 >= 0 ? $OnTime3 : -1,
- 'OffTime3' => $OffTime3 >= 0 ? $OffTime3 : -1,
- 'OnTime4' => $OnTime4 >= 0 ? $OnTime4 : -1,
- 'OffTime4' => $OffTime4 >= 0 ? $OffTime4 : -1,
- 'OnTime5' => $OnTime5 >= 0 ? $OnTime5 : -1,
- 'OffTime5' => $OffTime5 >= 0 ? $OffTime5 : -1,
- );
- //测试是否为字符串
- //$res = $socket->send($msg);
- $res = $socket->send(json_encode($msg)."\n");
- // 对应设备失去连接
-
- // 设备应答操作失败(应答状态为0)
-
- //$arr = array("error"=>"302",'response'=>'success','man'=>1);
- $arr = array(
- 'response' => $res['success'] ? 'success':'error',
- 'man' => $res['data']['man'],
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDeviceSensorDataFromTime( ){
- //获取传感器数据,获取设备指定时间之间的所有数据,如果不传endTime参数,则返回开始时间之后的数据。也可以用该接口返回单个通道的历史数据
- $device_addr = I('get.addr'); //设备
- $startTime = I('get.startTime'); //采集时间开始值,不可为空
- $endTime = I('get.endTime'); //结束时间,如不传该参数,则返回开始时间之后的所有数据
- $channelNumber = I('get.channelNumber'); //通道编号,如果无通道编号参数,则返回所有传感器通道数据
- $sessionkey = I('get.sessionkey');
- // 检查必要的参数
- $this->checkRequiredParam('addr,startTime,sessionkey');
- // 检查sessionkey
- $this->checkSessionKey();
- // 设备不存在
- $device_info = $this->checkDevice($device_addr);
- // 组装查询条件
- $startTime = date('Y-m-d H:i:s',strtotime($startTime));//值为2018会当成当天20:18
- $where = array(
- 'GatherTime' => array('egt',$startTime),
- 'DeviceId' => $device_info['ID']
- );
- //时间格式错误
- if( strtotime($startTime) === false ){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
-
- // 有结束时间
- if($endTime){
- //时间范围错误
- if( strtotime($startTime) > strtotime($endTime) ){//开始时间大于结束时间
- $this->errorMsg(\Zndp\Api\ResponseCode::WRONG_TIME_RANGE);
- }
- //时间格式错误
- if( strtotime($endTime) === false ){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
-
- $endTime = date('Y-m-d H:i:s',strtotime($endTime));
- $where['GatherTime'] = array('between',array($startTime,$endTime));
- }
- // 有通道编号
- if($channelNumber){
- $where['ChNumber'] = $channelNumber;
- }
- // 获取数据集
- $datalist = MM('dpsj_channel')->where($where)->select();
- if( count($datalist) == 0 ){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- $dataArr = array();
- foreach($datalist as $data){
- $dataArr[] = array(
- 'dataid' => $data['ID'],
- 'gatherTime' => $data['GatherTime'],
- 'column_'.$data['ChNumber'] => $data['ChValue']
- );
- }
- //返回json串
- $arr = array(
- "addr" => $device_addr,
- "unitId" => $device_info['ID'],
- "unitName" => $device_info['WorkUnitName'],
- "upperLimit" => null,
- "lowerLimit" => null,
- "startTime" => $startTime,
- "endTime" => $endTime,
- "dataarr" => $dataArr
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getRealTimeDeviceData( ){
- //获取设备的传感器(不包括控制设备)的最新一条数据
- $device_addr = I('get.addr');
- $sessionkey = I('get.sessionkey');
- // 检查必填参数
- $this->checkRequiredParam('addr,sessionkey');
- // 检查sessionkey
- $this->checkSessionKey();
- // 检查设备是否存在
- $device_info = $this->checkDevice($device_addr);
- //获取设备最新数据
- $where = array('DeviceId'=>$device_info['ID']);
- $device_data = MM('dpsj_device')->where($where)->order('GatherTime desc')->find();
- //通过DeviceDataId到通道数据表中取出关联数据
- $where = array('DeviceDataId'=>$device_data['ID']);
- $channel_list = MM('dpsj_channel')->where($where)->field('ChNumber as `column`,DisplayName as `name`,ChValue as `value`,ChType')->select();
- $type_model = new \Zndp\Device\ChannelType();
- $util_model = new \Zndp\Device\Util();
- $channel_arr = array();
- foreach($channel_list as $channel){
- $channel['unit'] = $type_model->getTypeUnit($channel['ChType']);
- unset($channel['ChType']);
- array_push($channel_arr,$channel);
- }
- //返回json串
- $arr = array(
- "id" => $device_data['ID'],
- "addr" => $device_addr,
- "devname" => $device_info['WorkUnitName'],
- "gathertime"=> $device_data['GatherTime'],
- "devValue" => $channel_arr
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDeviceChannel( ){
- $username = I('get.username');
- $sessionkey = I('get.sessionkey');
- // 检查必填参数
- $this->checkRequiredParam('username,sessionkey');
- // 检查用户名
- $userinfo = $this->checkUserName($username);
- // 检查sessionkey
- $this->checkSessionKey();
-
- $where = array('FarmId'=>$userinfo['OrganizationId']);
- $device_group = MM('dpsb_group')->where($where)->select();
- if( empty($device_group) ){//用户名下无授权设备
- $this->errorMsg(\Zndp\Api\ResponseCode::NOT_AUTH_DEVICE);
- }
- $model = new \Zndp\Device\ChannelType();
- $arr = array();
- foreach($device_group as $group){
- $cond1 = array('DeviceGroupId'=>$group['ID']);
- $device_list = MM('dpsb_device')->where($cond1)->field('ID,DeviceAddr')->select();
- foreach($device_list as $device){
- $cond2 = array('DeviceId'=>$device['ID']);
- $channel_list = MM('dpsb_channel')->where($cond2)->field('ChNumber as Chx,DisplayName,ChValue as chValue,ChMan as chMan,ChType')->select();
- $device_arr = array();
- foreach($channel_list as $channel){
- $channel['Unit'] = $model->getTypeUnit($channel['ChType']);
- $channel['Flag'] = $model->getTypeFlag($channel['ChType']);
- unset($channel['ChType']);
- $device_arr[] = array_merge(array('Addr'=>$device['DeviceAddr']),$channel);
- }
- $group_arr = array( $group['OrgName'] => $device_arr);
- array_push($arr,$group_arr);
- }
- }
- //返回json串
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDeviceChannelState( ){
- $device_addr = I('get.addr');
- $channel_number = I('get.channelNumber');
- $sessionkey = I('get.sessionkey');
- //检查必填参数
- $this->checkRequiredParam('addr,channelNumber,sessionkey');
- //检查sessionkey
- $userinfo = $this->checkSessionKey();
- //检查用户对设备的权限
- //$this->checkDeviceControlRight($userinfo,$device_addr);
- //获取设备信息
- $device_info = $this->checkDevice($device_addr);
- //获取通道信息
- $where = array('ChNumber'=>$channel_number,'DeviceId'=>$device_info['ID']);
- $field = 'ChNumberText as Chx,DisplayName,ChValue as chValue,ChMan as chMan,ChType';
- $channel_info = MM('dpsb_channel')->where($where)->field($field)->find();
- if( !$channel_info ){ // 通道号不存在,返回暂无数据
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- $model = new \Zndp\Device\ChannelType();
- $channel_info['Unit'] = $model->getTypeUnit($channel_info['ChType']);
- $channel_info['Flag'] = $model->getTypeFlag($channel_info['ChType']);
- $channel_info['Addr'] = $device_addr;
- unset($channel_info['ChType']);
-
- $where = array('ID'=>$device_info['DeviceGroupId']);
- $group_name = MM('dpsb_group')->where($where)->getField('OrgName');
- //返回json串
- $arr = array( $group_name => array($channel_info) );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getCamImageFromTime ( ){
- $arr = array('error'=>401);
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getCamRealTimeImage( ){
- $arr = array('error'=>401);
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getRealTimeDeviceChannelData( ){
- //根据前台账号名获取账号下所有设备信息
- $username = I('get.username'); //前台用户名
- $workUnitName = I('get.workUnitName'); //设备名称,用于模糊查询
- $pageNumber = I('get.pageNumber'); //页码 从1开始,默认为1
- $pageSize = I('get.pageSize'); //每页的数据记录条数 默认为50
- $sessionkey = I('get.sessionkey');
- //检查用户名
- $userinfo = $this->checkUserName($username);
- //检查sessionkey
- $this->checkSessionKey();
- //获取用户所有设备组,设备,通道信息
- $where = array('FarmId'=>$userinfo['OrganizationId']);
- $group_list = MM('dpsb_group')->where($where)->select();
- if(!$group_list){//无授权设备
- $this->errorMsg(\Zndp\Api\ResponseCode::NOT_AUTH_DEVICE);
- }
- $device_arr = array();
- foreach($group_list as $group){
- $where = array('DeviceGroupId'=>$group['ID']);
- $device_list = MM('dpsb_device')->where($where)->select();
-
- foreach($device_list as $device){
- $where = array('DeviceId'=>$device['ID']);
- $field = 'ChType as ChannelType,ChNumberText as Chx,DisplayName,ChValue as chValue,ChType';
- $channel_list = MM('dpsb_channel')->where($where)->field($field)->select();
- $model = new \Zndp\Device\ChannelType();
- foreach($channel_list as $channel){
- $channel['Unit'] = $model->getTypeUnit($channel['ChType']);
- $channel['Flag'] = $model->getTypeFlag($channel['ChType']);
- unset($channel['ChType']);
- }
- $channel_list = $channel_list ?: [];
- $device_arr[] = array(
- 'gatherTime'=> $device['GatherTime'],
- 'Addr' => $device['DeviceAddr'],
- 'workUnitName' => $device['WorkUnitName'],
- 'latestImagePath' => '',
- 'latestImagePathWhole' => '',
- 'devValue' => $channel_list
- );
- }
- }
-
- //返回json串格式
- echo json_encode($device_arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDeviceByFarmId ( ){
- $farmid = I('get.custId');
- $sessionkey = I('get.sessionkey');
- //检查必填参数
- $this->checkRequiredParam('custId,sessionkey');
- //检查农场是否存在
- //$where = array('FarmId'=>$farmid);
- $where = array('OrganizationId'=>$farmid);//新流程
- $count = MM('uc_user')->where($where)->count();
- if( $count == 0 ){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- //检查农场基地是否属于sessionkey用户所在公司
- $where = array('ID'=>$sessionkey);
- $depart_id= MM('uc_user')->where($where)->getField('OrganizationId');
- $farm_ids = \Zndp\User\Util::get_depart_farm($depart_id);
- if( !in_array($farmid,$farm_ids) ){
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }
- /*$where = array('FarmId'=>$farmid,'ID'=>$sessionkey);
- $userinfo = MM('uc_user')->where($where)->find();
- if(!$userinfo){
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }*/
- //组装返回数据
- //获取农场下用户组
- $where = array('FarmId'=>$farmid);
- $group_list = MM('dpsb_group')->where($where)->select();
-
- $arr = array();
- foreach($group_list as $group){
- $where = array('ID'=>$group['FarmId']);
- $address = MM('dpyh_farm')->where($where)->getField('Address');
- $where = array('DeviceGroupId'=>$group['ID']);
- $device_list = MM('dpsb_device')->where($where)->select();
- $device_arr = array();
- foreach($device_list as $device){
- $devarr = array(
- 'unitid' => $device['ID'],
- 'unitname'=> $device['WorkUnitName'],
- 'unittype'=> $device['DeviceType']?:'',
- 'address' => $address,
- 'geom' => array(),
- 'addr' => $device['DeviceAddr'],
- 'devtype' => $device['DeviceType']?:'',
- );
- array_push($device_arr,$devarr);
- }
- $arr[] = array(
- 'orgid' => $group['ID'],
- 'orgname' => $group['OrgName'],
- 'devarr' => $device_arr
- );
-
- }
-
- //返回json串
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDeviceByUsername ( ){
- //获取内容包括设备组、设备、通道、摄像头信息
- $sessionkey = I('get.sessionkey');
- $username = I('get.businessUsername'); //客户账号名称
- $havechannel = I('get.havechannel'); //是否包含通道 0不包含 1包含 默认为1
- //检查用户名
- $userinfo = $this->checkUserName($username);
- //检查sessionKey
- $this->checkSessionKey();
- //获取用户设备组
- $where = array('FarmId'=>$userinfo['OrganizationId']);
- $group_list = MM('dpsb_group')->where($where)->select();
- //获取farm地址
- $where = array('ID'=>$userinfo['OrganizationId']);
- $FarmAddr = MM('uc_organization')->where($where)->getField('Address');
- //组装返回数据
- $arr = array();
- foreach($group_list as $group){
- $where = array('DeviceGroupId'=>$group['ID']);
- $device_list = MM('dpsb_device')->where($where)->select();
- $device_arr = array();
- foreach($device_list as $device){
- $devarr = array(
- 'unitid' => $device['ID'],
- 'unitname'=> $device['WorkUnitName'],
- 'unittype'=> $device['DeviceType']?:'',
- 'address' => $FarmAddr,
- 'geom' => array(),
- 'addr' => $device['DeviceAddr'],
- 'devtype' => $device['DeviceType']?:'',
- );
- if($havechannel){//如果需要通道信息
- //获取设备最新一条数据
- $where = array('DeviceId'=>$device['ID']);
- $device_data = MM('dpsj_device')->where($where)->order('GatherTime desc')->limit(1)->find();
- //根据设备数据ID查找关联通道数据
- $where = array('DeviceDataId'=>$device_data['ID']);
- $fields= "ChNumber as Chx,DisplayName,ChType as channelType,ChValue as chValue,Unit,Flag";
- $channel_data = MM('dpsj_channel')->where($where)->field($field)->select();
-
- $devarr['gathertime'] = $device_data['GatherTime'];
- $devarr['channelarr'] = $channel_data ?: [];//Chx是 column_x方式的
- }
- array_push($device_arr,$devarr);
- }
- $arr[] = array(
- 'orgid' => $group['ID'],
- 'orgname' => $group['OrgName'],
- 'devarr' => $device_arr
- );
-
- }
- //返回json串
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getHistoryData( ){
- //根据设备设备号、开始时间、结束时间、页号、页数获取传感器历史记录。
- $device_addr = I('get.addr');
- $sessionkey = I('get.sessionkey');
- $startTime = I('get.startTime');
- $endTime = I('get.endTime');
- $orderby = strtolower(I('get.orderby')); //排序方式 Asc desc
- $pageSize = I('get.pageSize'); //单页返回记录数量 不能大于500
- $pageNumber = I('get.pageNumber'); //页数 从1开始
- //检查必填参数
- $this->checkRequiredParam('addr,sessionkey,startTime,endTime,orderby,pageSize,pageNumber');
- //检查设备是否存在
- $device_info = $this->checkDevice($device_addr);
- //检查设备是不是sessionkey用户的
- $userinfo = $this->checkSessionKey();
- $where = array('ID'=>$device_info['DeviceGroupId']);
- $farmid= MM('dpsb_group')->where($where)->getField('FarmId');
- /*
- if( $userinfo['FarmId'] != $farmid ){
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }*/
- //开始时间格式错误
- if( strtotime($startTime) === false){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- if( $endTime ){//存在结束时间
- //时间范围错误
- if( strtotime($startTime) > strtotime($endTime) ){//开始时间大于结束时间
- $this->errorMsg(\Zndp\Api\ResponseCode::WRONG_TIME_RANGE);
- }
- //时间格式错误
- if( strtotime($endTime) === false ){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- }else{
- $endTime = date('Y-m-d H:i:s');
- }
-
-
- if( !is_numeric($pageSize) || $pageSize <= 0 ){//默认一页给几条数据还是返回错误信息?
- $pageSize = 5;
- // $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }elseif( $pageSize > 300 ){
- $pageSize = 300;
- }
- if( !is_numeric($pageNumber) ){//默认页
- $pageNumber = 1;
- //$this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- $orderArr = array('asc','desc');
- if( !in_array($orderby,$orderArr) ){//默认排序
- $orderby = 'desc';
- }
- $startTime = date('Y-m-d H:i:s',strtotime($startTime));//值为2018会当成当天20:18
- $endTime = date('Y-m-d H:i:s',strtotime($endTime));
- //组装返回数据
- $where = array(
- 'DeviceId' => $device_info['ID'],
- 'GatherTime' => array('between',array($startTime,$endTime)),
- );
- $device_list = MM('dpsj_device')->where($where)->order('GatherTime '.$orderby)->limit($pageNumber,$pageSize)->select();
- if(!$device_list){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- //组装返回数据
- $data_arr = array();
- foreach($device_list as $device){
- $where = array('DeviceDataId' => $device['ID']);
- $channel_info = MM('dpsj_channel')->where($where)->select();
- $data['id'] = $device['ID'];
- $data['设备编号'] = $device_addr;
- $data['设备名称'] = $device_info['WorkUnitName'];
- $data['工作单元ID'] = $device_info['ID'];
- $data['工作单元名称'] = $device_addr;
- $data['采集数据时间'] = $device['GatherTime'];
- foreach($channel_info as $channel_sj){
- $data['插入数据库时间'] = $channel_sj['GatherTime'];
- $data[$channel_sj['DisplayName']] = $channel_sj['ChValue'];
- }
- array_push($data_arr,$data);
- }
-
- echo json_encode($data_arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getSystemNoticeList ( ){
- $userid = I('get.operatorid'); //前台用户ID
- $sessionkey = I('get.sessionkey'); //sessionkey
- $pageNumber = I('get.pageNumber'); //页码 从1开始,默认为1
- $pageSize = I('get.pageSize'); //每页的数据记录条数 默认为10,不能大于300
-
- $this->checkSessionKey();
- //返回json串
- $arr = array(
- "notice"=>[
- [
- "msgid"=>6166,
- "title"=>"报警提示",
- "msgtype"=>1,
- "content"=>"设备:854715的传感器:温度超出上限:45.0目前为:46.4 时间:2018-05-28 12:38:20",
- "time"=>"2018-05-28 12:38:20",
- "state"=>0
- ]
- ],
- "unreadcount"=>"0"
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function setSystemNoticeState( ){
- $this->checkSessionKey();
- $arr = array('response'=>'success');
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getHealthState( ){
- $device_addr = I('get.addr');
- $sessionkey = I('get.sessionkey');
- //检查必填字段
- $this->checkRequiredParam('addr,sessionkey');
- //检查设备
- $device_info = $this->checkDevice($device_addr);
- //检查sessionkey
- $userinfo = $this->checkSessionKey();
- $where = array('ID'=>$device_info['DeviceGroupId']);
- $farmid = MM('dpsb_group')->where($where)->getField('FarmId');
- /*
- if( $userinfo['FarmId'] != $farmid ){//检查设备是否属于该sessionKey用户
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }
- */
- $where = array('DeviceId'=>$device_info['ID']);
- $device_sj = MM('dpsj_device')->where($where)->order('GatherTime desc')->find();
- //返回json串
- $arr = array(
- "msgid"=> $device_sj['ID'],
- "addr"=> $device_addr,
- "voltage"=> $device_sj['Voltage'],
- "signal"=> $device_sj['Signal'],
- "worktemp"=> $device_sj['WorkTemp'],
- "gathertime"=> $device_sj['GatherTime'],
- "pwrstate"=> $device_sj['PwrState'],
- "custId"=> $farmid
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function getDevHealthList( ){
- $device_addr = I('get.addr');
- $startTime = I('get.startTime'); //采集时间开始值 不可为空
- $endTime = I('get.endTime'); //结束时间 如不传该参数,则返回开始时间之后的所有数据
- $pageSize = I('get.pageSize');
- $pageNumber = I('get.pageNumber');
- $sessionkey = I('get.sessionkey');
- //检查必填参数
- $this->checkRequiredParam('addr,startTime,sessionkey');
- //检查设备
- $device_info = $this->checkDevice($device_addr);
- //检查sessionKey
- $userinfo = $this->checkSessionKey();
- //检查设备是否属于该sessionkey用户
- $where = array('ID'=>$device_info['DeviceGroupId']);
- $farmid = MM('dpsb_group')->where($where)->getField('FarmId');
- /*
- if($userinfo['FarmId'] != $farmid){
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }
- */
- //开始时间格式错误
- if( strtotime($startTime) === false){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- if( $endTime ){//存在结束时间
- //时间范围错误
- if( strtotime($startTime) > strtotime($endTime) ){//开始时间大于结束时间
- $this->errorMsg(\Zndp\Api\ResponseCode::WRONG_TIME_RANGE);
- }
- //时间格式错误
- if( strtotime($endTime) === false ){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- }else{
- $endTime = date('Y-m-d H:i:s');
- }
-
-
- if( !is_numeric($pageSize) || $pageSize <= 0 ){//默认一页给几条数据还是返回错误信息?
- $pageSize = 5;
- // $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }elseif( $pageSize > 30 ){
- $pageSize = 30;
- }
- if( !is_numeric($pageNumber) ){//默认页
- $pageNumber = 1;
- //$this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
-
-
- $startTime = date('Y-m-d H:i:s',strtotime($startTime));//值为2018会当成当天20:18
- $endTime = date('Y-m-d H:i:s',strtotime($endTime));
- //组装返回数据
- $where = array(
- 'DeviceId' => $device_info['ID'],
- 'GatherTime' => array('between',array($startTime,$endTime)),
- );
- $device_data = MM('dpsj_device')->where($where)->order('GatherTime desc')->limit($pageNumber,$pageSize)->select();
- if(!$device_data){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- $device_arr = array();
- foreach($device_data as $data){
- $device_sj["msgid"] = $data['ID'];
- $device_sj["addr"]= $device_addr;
- $device_sj["devname"] = $device_info['WorkUnitName'];
- $device_sj["voltage"]= $data['Voltage'];
- $device_sj["signal"]= $data['Signal'];
- $device_sj["worktemp"] = $data['WorkTemp'];
- $device_sj["gathertime"] = $data['GatherTime'];
- $device_sj["pwrstate"] = $data['PwrState'];
- $device_sj["custId"] = $farmid;
- array_push($device_arr,$device_sj);
- }
- //返回json串
- /*
- $arr = array(
- [
- "msgid"=>10600110,
- "addr"=>"854715",
- "devname"=>"测试设备",
- "voltage"=>5.298,
- "signal"=>"31",
- "worktemp"=>31.943,
- "gathertime"=>"2018-05-26 23:14:00",
- "pwrstate"=>1
- ],
- );*/
- echo json_encode($device_arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function index( ){
- $method = I('get.method');
- if(!$method){//方法为空
- $this->errorMsg(\Zndp\Api\ResponseCode::EMPTY_METHOD);
- }
- if(!method_exists($this,$method)){//方法不存在
- $this->errorMsg(\Zndp\Api\ResponseCode::METHOD_NOT_EXISTS);
- }
- $this->$method();
- }
-
-
- private function errorMsg( $code ){
- $code = str_pad($code,3,0,STR_PAD_LEFT );
- $dataArray = array('response'=>'error','error'=>$code);
- $dataJson = json_encode($dataArray);
- echo $dataJson;
- exit;
- }
-
-
- private function checkRequiredParam( $fields ){
- $fields = explode(',',$fields);
- foreach($fields as $field){
- if(! isset($_GET[$field]) ){
- $this->errorMsg(\Zndp\Api\ResponseCode::PARAM_LACK);
- }
- }
- }
-
-
- private function checkSessionKey( $username = '' ){
- $where = array(
- 'ID'=>I('get.sessionkey'),
- //'AssocId' => I('get.sessionkey'),
- //'RoleId' => ['eq',\Zndp\User\RoleEnum::API_CLIENT],
- );
- if( $username ){
- $where['UserName'] = $username;
- }
- $userinfo = MM('uc_user')->where($where)->find();
- if(!$userinfo){
- $this->errorMsg(\Zndp\Api\ResponseCode::SESSIONKEY_ERROR);
- }
- return $userinfo;
- }
-
-
- private function checkUserName( $username, $checkDev = false ){
- if(!$username){//用户名参数为空
- $this->errorMsg(\Zndp\Api\ResponseCode::EMPTY_USERNAME);
- }
- $where = array(
- 'UserName'=>$username,
- 'RoleId' => ['neq',\Zndp\User\RoleEnum::API_CLIENT],
- );
- $userinfo = MM('uc_user')->where($where)->find();
- if(!$userinfo){//用户名不存在
- $this->errorMsg(\Zndp\Api\ResponseCode::USERNAME_NOT_EXISTS);
- }
- if($checkDev){
- $where = array('FarmId'=>$userinfo['OrganizationId']);
- $count = MM('dpsb_group')->where($where)->count();
- if( $count == 0 ){
- $this->errorMsg(\Zndp\Api\ResponseCode::NOT_AUTH_DEVICE);
- }
- }
- return $userinfo;
- }
-
-
- private function checkDeviceControlRight( $userinfo, $addr = '' ){
- //所有浏览员都不行
- $role_arr = array(
- //\Zndp\User\RoleEnum::FARM_ADMINISTRATOR,//农场管理员
- //\Zndp\User\RoleEnum::FARM_OPERATOR,//农场操作员
- \Zndp\User\RoleEnum::BASE_ADMINISTRATOR,//基地管理员
- \Zndp\User\RoleEnum::BASE_LEADER,//基地负责人
- );
- //检查是否是自己农场的设备
- $cond = array('DeviceAddr'=>$addr);
- $device_info = MM('dpsb_device')->where($cond)->find();
- if( !$device_info ){//设备不存在
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_NOT_EXISTS);
- }
- if( !in_array($userinfo['RoleId'],$role_arr) ){ //仅限农场管理员,农场操作员
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_OPRATE_DISALLOWED);
- }
-
- $cond = array('ID'=>$device_info['DeviceGroupId']);
- $group_info = MM('dpsb_group')->where($cond)->find();
- if($group_info['FarmId'] != $userinfo['OrganizationId']){
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_OPRATE_DISALLOWED);//不允许操作该设备
- }
- //检查是否是农场操作员控制的设备(???要问客户)
-
- return $device_info;
- }
-
-
- private function checkDevice( $device_addr ){
- $where = array('DeviceAddr'=>$device_addr);
- $device_info = MM('dpsb_device')->where($where)->find();
- if( !$device_info ){//设备不存在
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_NOT_EXISTS);
- }
- return $device_info;
- }
-
-
- private function checkControlChannel( $device_addr, $channel_number ){
- $where = array('DeviceAddr'=>$device_addr);
- $device_id = MM('dpsb_device')->where($where)->getField('ID');
- $where = array('ChNumber'=>$channel_number,'DeviceId'=>$device_id);
- $channel_info = MM('dpsb_channel')->where($where)->find();
- //通道号不存在,返回暂无数据错误码401
- if( !$channel_info ){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- //通道不是控制类型
- $control_sensor = \Zndp\Device\ChannelType::CONTROL_SENSOR;
- if( !in_array($channel_info['ChType'],$control_sensor) ){
- $this->errorMsg(\Zndp\Api\ResponseCode::NOT_CONTROLLABLE_SENSOR);
- }
- return $channel_info;
- }
-
-
- private function getUserDeviceGroup( $farmid ){
- $where = array('FarmId'=>$farmid);
- $group_list = MM('dpsb_group')->where($where)->select();
- }
-
-
- private function getDeviceNewlyGatherData( $addr ){
-
- }
-
-
- public function appLogin( ){
- $username = I('get.username');
- $password = I('get.password');
- //检查账号密码
- $password = (new \Zndp\User\Util)->encPwd($password);
- $where = array('UserName'=>$username,'Password'=>$password);
- $roleid = MM('uc_user')->where($where)->getField('RoleId');
- if( !$roleid ){
- json_fail('用户名或密码错误!');
- }
- // 管理员,操作员可登录
- //$roleArr = array(\Zndp\User\RoleEnum::FARM_ADMINISTRATOR,\Zndp\User\RoleEnum::FARM_OPERATOR);
- $roleArr = array(
- \Zndp\User\RoleEnum::BASE_ADMINISTRATOR,//基地管理员
- \Zndp\User\RoleEnum::BASE_LEADER,//基地负责人
- );
- if( !in_array($roleid,$roleArr) ){
- json_fail('没有权限!');
- }
- json_success('登陆成功!');
- }
-
-
- private function checkDateQueryParam( $params ){
- //参数需要重新设计:考虑pageSize最大值
- if( !is_array($params) ){
- exit("<script>alert('params must be array!')</script>");
- }
- $startTime = $params['startTime'];
- $endTime = $params['endTime'];
- $pageSize = $params['pageSize'];
- $pageNumber = $params['pageNumber'];
- $order = $params['order'] ?: 'desc';
- //开始时间格式错误
- if( strtotime($startTime) === false){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- if( $endTime ){//存在结束时间
- //时间范围错误
- if( strtotime($startTime) > strtotime($endTime) ){//开始时间大于结束时间
- $this->errorMsg(\Zndp\Api\ResponseCode::WRONG_TIME_RANGE);
- }
- //时间格式错误
- if( strtotime($endTime) === false ){
- $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- }else{
- $endTime = date('Y-m-d H:i:s');
- }
-
- if( !is_numeric($pageSize) || $pageSize <= 0 ){//默认一页给几条数据还是返回错误信息?
- $pageSize = 5;
- // $this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }elseif( $pageSize > 300 ){
- $pageSize = 300;
- }
- if( !is_numeric($pageNumber) ){//默认页
- $pageNumber = 1;
- //$this->errorMsg(\Zndp\Api\ResponseCode::TIME_FORMAT_ERROR);
- }
- //返回处理好的参数
- $params['startTime'] = $startTime;
- $params['endTime'] = $endTime;
- $params['pageSize'] = $pageSize;
- $params['pageNumber']= $pageNumber;
- $params['order'] = $order;
- return $params;
- }
-
-
- public function upgradeAppVersion( ){
- $fields = 'AppVersionCode as versionCode,AppVersion as versionName,AppPath as url,UpdateMessage as updateMessage,Md5Hash as md5';
- $type = I('get.type');
- $type = $type ? $type : 'zndp'; // 默认智能大棚APP
- $where = array('AppName' => $type);
- $appData = MM('dpyh_app_version')->where($where)->order('AddTime desc')->field($fields)->find();
- if(!$appData['url']){
- json_fail('没有App文件!');
- }
- $data = array(
- 'success' => true,
- 'message' => '',
- 'data' => $appData,
- );
- echo json_encode($data,JSON_UNESCAPED_UNICODE);
-
- /*
- //区分农用通和大棚app
- $type = I('get.type');
-
- if($type == 'nyt'){
- $appname = '农用通';
- }else{
- $appname = '智能大棚';
- $type = 'zndp';
- }
- $where = array('AppName'=>$appname);
- $appData = MM('dpyh_app_version')->where($where)->order('AddTime desc')->field($fields)->find();
- if(!$appData['url']){
- json_fail('文件不存在!');
- }
- // 拼接文件绝对路径,校验时不用下载
- $apk_name = substr($appData['url'], strrpos($appData['url'],'/'));
- $root_path = getcwd();
- $realpath = $root_path .'/apk/'. $type . $apk_name;
- $appData['md5'] = md5_file($realpath);
- */
-
-
- }
-
-
- public function appLog( ){
- //$message = '['.date('Y-m-d H:i:s') . ']' . htmlspecialchars_decode(I('post.message')). PHP_EOL;
- $dir_path = SOLUTION_DATA_PATH . "app";
- if(!is_dir($dir_path)){
- mkdir($dir_path,0777,1);
- }
- //file_put_contents(SOLUTION_RUNTIME_PATH."../app/app_old.log",$message,FILE_APPEND);
-
- if (!function_exists('gzdecode')) {
-
- function gzdecode ($data) {
- $flags = ord(substr($data, 3, 1));
- $headerlen = 10;
- $extralen = 0;
- $filenamelen = 0;
- if ($flags & 4) {
- $extralen = unpack('v' ,substr($data, 10, 2));
- $extralen = $extralen[1];
- $headerlen += 2 + $extralen;
- }
- if ($flags & 8) // Filename
- $headerlen = strpos($data, chr(0), $headerlen) + 1;
- if ($flags & 16) // Comment
- $headerlen = strpos($data, chr(0), $headerlen) + 1;
- if ($flags & 2) // CRC at end of file
- $headerlen += 2;
- $unpacked = @gzinflate(substr($data, $headerlen));
- if ($unpacked === FALSE)
- $unpacked = $data;
- return $unpacked;
- }
- }
-
- if(!empty($GLOBALS['HTTP_RAW_POST_DATA']) && strlen($GLOBALS['HTTP_RAW_POST_DATA'])>0)
- {
- // 解压
- $message = gzdecode($GLOBALS['HTTP_RAW_POST_DATA']);
- // 倒序
- $msg_arr = explode("\n",$message);
- krsort($msg_arr);
- $final_msg = implode("\n",$msg_arr);
- }
- $file_path = $dir_path ."/app.log";
- // 检查文件大小,超过20M不处理
- $file_size = filesize($file_path);
- if( $file_size >= 1024*1024*20 ){
- json_fail('File size: '.$file_size.'Byte');
- }
- clearstatcache();
- file_put_contents($file_path,$final_msg."\n".file_get_contents($file_path));
-
- }
-
-
- public function sendControl( ){
- //根据设备、通道号控制设备状态,行程量5个(全开,全关,打开运行中,关闭运行中,停止),开关量(打开,停止),返回是否自动控制信息。修改设备后的信息会保存。
- $device_addr = I('get.addr');
- $channel_status = I('get.status');
- $channel_number = I('get.channelNumber');
- $sessionkey = I('get.sessionkey');
- // 检查必填参数
- $this->checkRequiredParam('addr,status,channelNumber,sessionkey');
- // 检查sessionkey
- $userinfo = $this->checkSessionKey();
- // 检查用户对设备权限
- //$device_info = $this->checkDeviceControlRight($userinfo,$device_addr);
- // 对应设备失去连接
-
- // 转换中科通道号
- $channel_number = \Zndp\Device\Util::MapChannelNumber($channel_number);
- if(!$channel_number){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- // 对应序号传感器不是控制设备
- $channel_info = $this->checkControlChannel($device_addr,$channel_number);
- // 控制参数错误
- if( !in_array($channel_status,[0,1,2]) ){
- $error = array("response"=>"error",
- "error" =>"4",
- "errorinfo"=>"Wrong Status!"
- );
- echo json_encode($error);exit;
- }
- // 设备应答操作失败(应答状态为0)
-
- // 传给信号服务
- $host = '127.0.0.1';
- $port = 10240;
- $socket = new Jms\Network\TcpClient($host,$port);
- $cmd = array(
- "method" => "apiSendControl",
- "Addr" => $device_addr, //设备addr
- "channelNumber" => $channel_number, //通道编号
- "status" => $channel_status
- );
- $res = $socket->send(json_encode($cmd)."\n");
- //修改设备后的保存信息
- if(!$res['success']){//操作失败
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_RESPONSE_FAIL);
- }
- $data_arr = array(
- 'response' => $res['success'] ? 'success' : 'error',
- 'decstate' => $res['data']['decstate'],
- 'isauto' => $res['data']['isauto']
- );
- // 返回json串
- echo json_encode($data_arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function ModifyAutoControlInfo( ){
- //设备可通过设置参数进行自动控制,onTime时间单位为分钟,比如8:10对应8*60+10=490 可通过上限下限参考值 设置扩值(温度范围)
- $addr = I('get.addr'); //设备地址
- $channelNumber = I('get.channelNumber'); //设备通道
- $man = I('get.man'); //是否自动,0自动,1手动
- //$RefAddr = I('get.RefAddr'); //参考目标设备地址,暂未启用
- $refChannel = I('get.refChannel'); //参考通道,此通道指传感器通道
- //$InterLock = I('get.InterLock'); //参考互锁通道编号,暂未启用,此通道指控制通道
- $TimeEn = I('get.TimeEn'); //定时任务使能,1开启,0关闭
- $UpperLimit_Value = I('get.UpperLimit_Value'); //上限值参考值,可通过上限下限参考值 设置扩值(温度范围)
- $UpperLimit_State = I('get.UpperLimit_State'); //上限值参考状态,0关 1开
- $LowerLimit_Value = I('get.LowerLimit_Value'); //下限值参考值,可通过上限下限参考值 设置扩值(温度范围)
- $LowerLimit_State = I('get.LowerLimit_State'); //下限值参考状态,0关 1开
- $OnTime1 = I('get.OnTime1'); //打开时间1
- $OffTime1 = I('get.OffTime1'); //关闭时间1
- $OnTime2 = I('get.OnTime2'); //打开时间2
- $OffTime2 = I('get.OffTime2'); //关闭时间2
- $OnTime3 = I('get.OnTime3'); //打开时间3
- $OffTime3 = I('get.OffTime3'); //关闭时间3
- $OnTime4 = I('get.OnTime4'); //打开时间4
- $OffTime4 = I('get.OffTime4'); //关闭时间4
- $OnTime5 = I('get.OnTime5'); //打开时间5
- $OffTime5 = I('get.OffTime5'); //关闭时间5
-
- // 检查必填参数
- $this->checkRequiredParam('addr,channelNumber,man,TimeEn');
- // 检查sessionkey
- $this->checkSessionKey();
- // 检查设备是否存在
- $device_info = $this->checkDevice($addr);
- // 转换中科通道号
- $channelNumber = \Zndp\Device\Util::MapChannelNumber($channelNumber);
- if(!$channelNumber){
- $this->errorMsg(\Zndp\Api\ResponseCode::NO_DATA);
- }
- // 检查是否为控制类传感器
- $channel_infp= $this->checkControlChannel($addr,$channelNumber);
- // 发送给信号服务
- $host = '127.0.0.1';
- $port = 10240;
- $socket = new Jms\Network\TcpClient($host,$port);
- $msg = array(
- 'method' => 'apiModifyAutoControlInfo',
- 'Addr' => $addr,
- 'channelNumber' => $channelNumber,
- 'man' => $man,
- 'refChannel' => $refChannel,
- 'TimeEn' => $TimeEn,
- 'UpperLimit_Value' => $UpperLimit_Value,
- 'UpperLimit_State' => $UpperLimit_State,
- 'LowerLimit_Value' => $LowerLimit_Value,
- 'LowerLimit_State' => $LowerLimit_State,
- 'OnTime1' => $OnTime1 >= 0 ? $OnTime1 : -1,
- 'OffTime1' => $OffTime1 >= 0 ? $OffTime1 : -1,
- 'OnTime2' => $OnTime2 >= 0 ? $OnTime2 : -1,
- 'OffTime2' => $OffTime2 >= 0 ? $OffTime2 : -1,
- 'OnTime3' => $OnTime3 >= 0 ? $OnTime3 : -1,
- 'OffTime3' => $OffTime3 >= 0 ? $OffTime3 : -1,
- 'OnTime4' => $OnTime4 >= 0 ? $OnTime4 : -1,
- 'OffTime4' => $OffTime4 >= 0 ? $OffTime4 : -1,
- 'OnTime5' => $OnTime5 >= 0 ? $OnTime5 : -1,
- 'OffTime5' => $OffTime5 >= 0 ? $OffTime5 : -1,
- );
- //测试是否为字符串
- //$res = $socket->send($msg);
- $res = $socket->send(json_encode($msg)."\n");
- // 对应设备失去连接
-
- // 设备应答操作失败(应答状态为0)
- if(!$res['success']){
- $this->errorMsg(\Zndp\Api\ResponseCode::DEVICE_RESPONSE_FAIL);
- }
-
- $arr = array(
- 'response' => $res['success'] ? 'success':'error',
- 'man' => $res['data']['man'],
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
- }
-
-
- public function activityRestart( ){
- $dir_path = SOLUTION_LOG_PATH."../test/";
- if(!is_dir(dir_path)){
- mkdir($dir_path,0777);
- }
- $log_path = $dir_path.'test_'.time() .".log";
- file_put_contents($log_path,'');
- }
-
-
- public function getRealTimeDeviceDetailDataInner( ){
- header('Content-type: application/json');
- //单台设备信息,包括5张最新图片(如果有摄像头),传感器值,行程控制值,开关控制值
- $username = I('get.username');
- $device_addr = I('get.addr');
- //检查必填参数
- $this->checkRequiredParam('username,addr');
- //检查用户名
- $userinfo = $this->checkUserName($username,true);
- //检查设备
- $device_info = $this->checkDeviceControlRight($userinfo,$device_addr);
- //设备失去连接
-
- //获取农场名称(顾客名称)
- $where = array('ID'=>$userinfo['FarmId']);
- $custName = MM('dpyh_farm')->where($where)->getField('FarmName');
- //获取A类型传感器数据集
- $where = array(
- 'DeviceId'=>$device_info['ID'],
- 'ChType' => array('IN',\Zndp\Device\ChannelType::SENSOR_TYPES)
- );
- $sensors = MM('dpsb_channel')->where($where)->field('ChNumberText as Chx,DisplayName,ChType as channelType,ChValue,Unit,Flag,ChMan as man')->select();
- $sensorValue = array();
- $channel_type_model = new \Zndp\Device\ChannelType();
- foreach($sensors as $sensor){
- $sensor['workUnitName'] = $device_info['WorkUnitName'];
- $sensor['Unit'] = $channel_type_model->getTypeUnit($sensor['channelType']);
- $sensor['Flag'] = $channel_type_model->getTypeFlag($sensor['channelType']);
- $sensor['channelType'] = (int)$sensor['channelType'];
- array_push($sensorValue,$sensor);
- }
- //获取行程类传感器数据集
- $where = array(
- 'DeviceId'=>$device_info['ID'],
- 'ChType' => array('IN',\Zndp\Device\ChannelType::ITINERARY_SENSOR)
- );
- $travels = MM('dpsb_channel')->where($where)->field('ChNumberText as Chx,DisplayName,ChType as channelType,ChValue,Unit,Flag,ChMan as man')->select();
- $travelValue = array();
- foreach($travels as $travel){
- $travel['workUnitName'] = $device_info['WorkUnitName'];
- $travel['Unit'] = $channel_type_model->getTypeUnit($travel['channelType']);
- $travel['Flag'] = $channel_type_model->getTypeFlag($travel['channelType']);
- $travel['channelType'] = (int)$travel['channelType'];
- array_push($travelValue,$travel);
- }
- //返回json串
- $arr = array(
- 'Addr' => $device_addr,
- 'custname' => $custName,
- 'custid' => (int)$userinfo['FarmId'],
- 'gatherTime' => $device_info['GatherTime'],
- 'workUnitName' => $device_info['WorkUnitName'],
- 'hikValue' => array(
- 'videosn'=>'',
- 'ysAppkey'=>'',
- //'accessToken'=>''
- ),
- 'imageValue' => array(),
- 'sensorValue' => $sensorValue,
- 'travelValue' => $travelValue,
- 'onoffValue' => array(),
- 'proportionValue' => array()
- );
- echo json_encode($arr,JSON_UNESCAPED_UNICODE);
-
- }
-
-
- public function store_invalid_data( ){
- $addr = I('get.addr'); //设备编号
- $temp = I('get.temp'); //温度
- $damp = I('get.damp'); //湿度
-
- $device_data = json_encode(array('temp'=>$temp,'damp'=>$damp));
- $data = array(
- 'Addr' => $addr,
- 'DeviceData' => $device_data,
- 'AddTime' => date('Y-m-d H:i:s')
- );
- MM('dpsj_invalid')->createAdd($data);
-
-
- }
-
-
- public function catch_data( ){
- //header('Content-Type:application/json');
- function getNearlyData($temp,$damp){ //获取处理后的相近温湿度数据
- //获取数据库中最后一次采集温湿度数据
- $where = array('DeviceId'=>34);
- $device_dataid = MM('dpsj_device')->where($where)->order('GatherTime desc')->getField('ID');
- $where = array('DeviceDataId'=> $device_dataid);
- $channel_data = MM('dpsj_channel')->where($where)->select();
- $data = array();
- foreach($channel_data as $v){
- if($v['ChNumber'] == 2){ //温度
- if($v['ChValue'] - $temp > 1){
- $data['temp'] = (string)round($v['ChValue'] - ($v['ChValue'] - $temp)*0.3 ,1);
- }elseif($temp - $v['ChValue'] > 1){
- $data['temp'] = (string)round($temp - ($temp - $v['ChValue'])*0.3 ,1);
- }else{
- $data['temp'] = (string)$temp + rand(1,3)/10;
- }
- }
- if($v['ChNumber'] == 3){ //湿度
- if($v['ChValue'] - $damp > 10){
- $data['damp'] = (string)($v['ChValue'] - rand(3,8));
- }elseif($damp - $v['ChValue'] > 10){
- $data['damp'] = (string)($damp - rand(3,8) );
- }else{
- $data['damp'] = (string)$damp - rand(1,5);
- }
- }
-
- }
- $data['qishuo'] = false;
- return json_encode($data);
- }
- function method1(){
- $url = "http://api.nongyongtong.com:8081/qfls/api?method=getRealTimeDeviceDetailData&addr=44045632&username=wannanyanye&sessionkey=82BA0712C75800201C177AD425107EA2";
- $json_data = file_get_contents($url);
- $data_arr = iconv('GBK','UTF-8',$json_data);
- $data_arr = json_decode($data_arr,true);
- if(!$data_arr){ //没有抓取到数据则返回false
- return false;
- }
- $temp = $data_arr['sensorValue'][1]['chValue']; //抓取到的温度
- $damp = $data_arr['sensorValue'][2]['chValue']; //抓取到的湿度
- //获取处理后的相近温湿度数据
- $json_data = getNearlyData($temp,$damp);
- echo $json_data;
- //记录访问api日志
- $message = '['.date('Y-m-d H:i:s') . '] method1:'.$json_data .PHP_EOL;
- if(!is_dir(SOLUTION_RUNTIME_PATH . "../app")){
- mkdir('app',0777);
- }
- file_put_contents(SOLUTION_RUNTIME_PATH."../app/catch.log",$message,FILE_APPEND);
-
- return true;
- }
- function method2(){
- $url = "http://www.seniverse.com/weather/weather.aspx?uid=U6C673001E&cid=CHAH130000&l=zh-CHS&p=SMART&a=0&u=C&s=1&m=2&x=1&d=3&fc=&bgc=&bc=&ti=0&in=0&li=";
- $html = file_get_contents($url);
- //"now":{"text":"多云","code":"4","temperature":"30","humidity":"62","wind_direction":"东","wind_speed":"12.24","wind_scale":"3"}
- preg_match('/temperature(.{1,30})/i',$html,$match);
- preg_match_all('/\d+/',$match[0],$data_arr);
- if(!$data_arr){
- return false;
- }
-
- $temp = $data_arr[0][0];
- $damp = $data_arr[0][1];
- $json_data = getNearlyData($temp,$damp);
- echo $json_data;
- //记录访问api日志
- $message = '['.date('Y-m-d H:i:s') . '] method2:'.$json_data .PHP_EOL;
- if(!is_dir(SOLUTION_RUNTIME_PATH . "../app")){
- mkdir('app',0777);
- }
- file_put_contents(SOLUTION_RUNTIME_PATH."../app/catch.log",$message,FILE_APPEND);
-
- return true;
- }
-
-
- //
- $data = method1();
- if($data){
-
- return;
- }
- $data = method2();
- if($data){
-
- return;
- }
- json_fail("获取数据失败");
- }
-
-
- public function getCropsInfo( ){
- $addr = I('get.addr');
- if(!$addr){
- json_fail('addr param not exists!');
- }
- // 通过设备编号addr获取作物信息
- $where = array('DeviceAddr'=>$addr);
- $fields = "FirstCrop,SecondCrop,ThirdCrop,FourthCrop";
- $crops = MM('dpsb_device')->field($fields)->where($where)->find();
- $crops = array_values($crops);
- /*
- //组装信息
- $unit_array = array('g'=>'斤','kg'=>'公斤','t'=>'吨');
- for($i=0; $i<count($crops); $i++){
- $crops[$i] = json_decode($crops[$i],true);
- $crops[$i] = $crops[$i]['num'.($i+1)] .'号大棚:种植品种:'. $crops[$i]['variety'.($i+1)] .',种植农户:'.$crops[$i]['farmer'.($i+1)].',预计产量:'.$crops[$i]['output'.($i+1)] . $unit_array[$crops[$i]['unit'.($i+1)]] .'。';
- }*/
- $data = array('data'=>$crops);
- echo json_encode($data,JSON_UNESCAPED_UNICODE);
-
- }
-
-
- public function setScreenMsg( ){
- // 设备编号,几号棚,信息内容,token
- $addr = I('get.addr');
- $num = I('get.num');
- $msg = urldecode( I('get.msg') );
- $token = I('get.token');
- //检查必填参数
- if(!$addr || !$num || !$msg || !$token){
- json_fail('Missing parame!');
- }
- //检查token
- if($token != 'zndp'){
- json_fail('Unauthorized token!');
- }
- //大棚信息对应字段(一、二、三、四组)
- $shed = array(1=>'FirstCrop','SecondCrop','ThirdCrop','FourthCrop');
- if(!$shed[$num]){
- json_fail('Undefind number!');
- }
- //存入大棚设备dpsb_device表中
- $where = array('DeviceAddr'=>$addr);
- //$data = array($shed[$num] => $msg);
- // 设置点阵屏信息(新)
- $shed_data = json_decode(htmlspecialchars_decode($msg),true);
- if( !$shed_data['num'] || !$shed_data['variety'] || !$shed_data['farmer'] || !$shed_data['output'] || !$shed_data['unit']){
- json_fail('msg格式:{"num":"大棚编号","variety":"种植品种","farmer":"种植农户","output":"预计产量","unit":"单位"}');
- }
- $save_msg = array(
- 'num'.$num => $shed_data['num'],
- 'variety'.$num => $shed_data['variety'],
- 'farmer'.$num => $shed_data['farmer'],
- 'output'.$num => $shed_data['output'],
- 'unit'.$num => $shed_data['unit'],
- );
- $data = array($shed[$num] => json_encode($save_msg, JSON_UNESCAPED_UNICODE));
-
- $result = MM('dpsb_device')->createSave($where,$data);
- if($result === false){
- json_fail('Set failed,Please try again later!');
- }
- // 重启控制台APP
- $host = '127.0.0.1';
- $port = 10240;
- $socket = new Jms\Network\TcpClient($host,$port);
- $cmd = array(
- "method" => "apiReboot",
- "Addr"=>$addr,
- );
- $res = $socket->send(json_encode($cmd));
- if(!$res['success']){
- json_fail($res['message']);
- }
- json_success('Set successfully!');
- }
-
-
- public function syncFarmlandId2Redis( ){
- //获取所有已绑定设备的大棚
- $where = array(
- 'FarmlandId' => array('NEQ',-1),
- );
- $fields = 'DeviceId,ChGroup,FarmlandId';
- $farmland_list = MM('dpsb_chgroup')->field($fields)->where($where)->select();
- if( empty($farmland_list) ){
- json_fail('no data');
- }
- $redis = Redis("dpsb_farmland_list","hash");
- foreach($farmland_list as $farmland){
- // 添加到Redis
- $key = 'DeviceId-'.$farmland['DeviceId'] .'-ChGroup-'.$farmland['ChGroup'];
- $val = $farmland['FarmlandId'];
- $hash = array($key => $val);
- $result = $redis->add($hash);
- var_dump($result);
- }
- }
-
- }
|