需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒

思路:

Redis  key 设为:插座编号+user户编号  value: 出现大于3A的次数 ;

心跳每分钟,心跳包数据含有 。判断电流:电流值 <3 清空对应key的次数  电流>=3  次数不为零小于5  次数加一 发送过高提醒,次数为5时发送结束服务提醒,清空对应key的次数;

先申请模板消息,获取模板ID(一搜一大把,此处不赘述了)

上代码:(Ci框架)

心跳包中拿到电流值 $i

if($i > 3){
checkMeterCurrentUp($meter_id); }else{
//清空redis电流超限记录
deleteAbnormalCurrentCache($meter_id);
}

function checkMeterCurrentUp($meter_id)
             //加载redis 
        $up_count  = $this->redisclient->get('down_'.$user_id.$meter_id);
        if($up_count < 5){//设备号 value加一  发送模板消息
$this->redisclient->save($user_id.$meter_id,$up_count+1,600);//给用户消息通知
            //获取access_token
 lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token); if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token); lm('users_model');
$user = $this->users_model->r(pw('id',$user_id)); lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
                 //获取微信模板消息ID
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率超限,连续五次超限后将停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请及时查看',
"color" => "#173177"
),
)
));
                 //发送 发送模板消息请求
$resp = http_post($url,$postdata);
} }else{
//结束订单
//发送模板消息
$this->redisclient->delete($user_id.$meter_id);
//给用户消息通知
lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token); if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token); lm('users_model');
$user = $this->users_model->r(pw('id',$user_id)); lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
                 
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率连续五次超限,已停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请知悉',
"color" => "#173177"
),
)
));
$resp = http_post($url,$postdata);
}
//停止订单             //关闭设备
}
function deleteAbnormalCurrentCache($meter_id){
$user_id = 99;
//加载Redis
    if($this->redisclient->is_supported() === TRUE){
$this->redisclient->delete($user_id.$meter_id);
$this->redisclient->delete('down_'.$user_id.$meter_id);
}
}

5分钟连续出现某现象+微信模板消息提醒 PHP的更多相关文章

  1. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  2. C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...

  3. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  4. java开发微信模板消息推送

    发布时间:2018-12-12   技术:springboot+maven   概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...

  5. PHP实现微信模板消息发送给指定用户

    使用公众号的模板消息功能,必须是认证过的服务号,需要发送微信号的openid,同一微信号在不同公众号下的openid是不同的,在公众号下是唯一的,获取不到微信号 进入公众平台  功能->模板消息 ...

  6. PHP微信模板消息发送

    <?php class Wxtemplate extends Base { function __construct() { $this->appid = config('WXAPP_AP ...

  7. qhfl-9 微信模板消息推送

    开发中用的是测试号 微信公众号认证流程 用户登陆 <!DOCTYPE html> <html lang="en"> <head> <met ...

  8. 应用jfinal发送微信模板消息的一个bug

    严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...

  9. 微信模板消息php

    微信的模板消息需要认证的公众号后台申请 申请通过后就可以用平台定义的消息模板了 define('IN_ECS', true); require(dirname(__FILE__) . '/includ ...

随机推荐

  1. 41. First Missing Positive (JAVA)

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  2. 企业网站的SSL签证生产测试以及https配置方法

    这一次要做企业网站怎么获得安全的数字证书,没有数字证书的话,在浏览器访问网站的时候会跳出不安全界面,而且钓鱼网站也会让用户进去个假网站,一般企业可以去阿里云去买数字证书,买好之后浏览器便会加载这个数字 ...

  3. 【转】Linux下的磁盘分区方法

    转自:https://www.cnblogs.com/lbole/p/8904298.html 一.硬盘接口类型 硬盘的接口主要有IDE.SATA.SCSI .SAS和光纤通道等五种类型.其中IDE和 ...

  4. IP电话的配置

    内容描述:IP电话配置 问题描述: IP电话站点为8203,IP地址为10.11.6.3,电话状态为空心(不正常). 处理过程: 1.在浏览器中打开输入原先已经配置正常的IP话机的IP地址访问其配置, ...

  5. 牛客练习赛14 E - 无向图中的最短距离 (bfs+bitset)

    一个链接:https://ac.nowcoder.com/acm/contest/82/E来源:牛客网 无向图中的最短距离 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144 ...

  6. js 调试接口

    在我们做完前端的工作后,很多情况下需要把我们的数据与后端得接口进行对接,说以我们就得掌握调试接口的方法 一.建立对象数组(一般是后端的工作) 代码如下: [ {"name":&qu ...

  7. MySQL常见的三种存储引擎

    原文链接:https://www.cnblogs.com/yuxiuyan/p/6511837.html 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点 ...

  8. mysql DELETE语句 语法

    mysql DELETE语句 语法 作用:用于删除表中的行.广东大理石构件 语法:DELETE FROM 表名称 WHERE 列名称 = 值 mysql DELETE语句 示例 //删除person表 ...

  9. Bugku 杂项 猜

    猜 说flag是一个人名字的全拼,直接搜图片

  10. 黑客代码HTML

    Crash firefox, chrome, safari browsers, and also restart iPhone using this javascript code. #dos #0d ...