123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 |
- <?php
- require('../vendor/autoload.php');
- use \PhpMqtt\Client\MqttClient;
- use \PhpMqtt\Client\ConnectionSettings;
- use think\facade\Cache;
- define('HOST', 'r-bp1eebab79320044pd.redis.rds.aliyuncs.com');
- define('PORT', '6379');
- define('PASSWORD', '7e2b5c91e438be3c!');
- define('DATABASE', 4);
- function app_redis()
- {
- static $redis = null;
- static $conn = false;
- if (!$conn) {
- connect:
- $redis = new Redis();
- try {
-
- $conn = $redis->connect(HOST, PORT);
- $conn = $redis->auth(PASSWORD);
- $conn = $redis->select(DATABASE);
-
- return ($conn === true) ? $redis : false;
- } catch (Exception $e) {
- return false;
- }
- } else {
-
-
- if (php_sapi_name() === 'cli') {
- try {
-
-
-
-
-
- @$redis->ping();
- if (!$redis->ping()) {
- goto connect;
- }
- } catch (Exception $e) {
-
- echo $e->getMessage();
- echo 'Redis 连接失败 重新连接:' . PHP_EOL;
-
- goto connect;
- }
- }
- return $redis;
- }
- }
- function sendConfig($topic,$config)
- {
- $server = '116.62.220.88';
- $port = 1883;
- $clientId = 'local_mqtt_pump_config';
- $username = 'rl517';
- $password = "rlian2022";
- $clean_session = false;
- $connectionSettings = new ConnectionSettings();
- $connectionSettings = $connectionSettings
- ->setUsername($username)
- ->setPassword($password)
- ->setKeepAliveInterval(60)
-
-
-
-
- ;
- $mqtt = new MqttClient($server, $port, $clientId);
- $mqtt->connect($connectionSettings, $clean_session);
- echo 'connect OK'.PHP_EOL;
- echo 'topic:'.$topic.PHP_EOL;
- echo 'config:'.$config.PHP_EOL;
- $res=$mqtt->publish(
- $topic,
- $config,
- 1
- );
- echo 'publish end'.PHP_EOL;
- $mqtt->loop(true,true);
- $mqtt->disconnect();
- return $res;
- }
- function updateSendResult($msgid){
- $conn = new mysqli('rm-bp1h3uqkzy66ckt8y125010.mysql.rds.aliyuncs.com', 'dev', '711e7D69f9d0c3f1', 'catch_pump');
-
- if ($conn -> connect_errno) {
- printf("Connect failed: %s\n", $conn->connect_error);
- exit();
- }
- $sql = "UPDATE send_config_log SET result='1',updated_at=".time()." WHERE id=".$msgid;
- if ($conn->query($sql) === TRUE) {
- echo "send_config_log update success";
- } else {
- echo "更新失败: " . $conn->error;
- }
- }
- function rlog(...$args)
- {
-
-
- $args = func_get_args();
- static $LOG_CONSOLE = true;
- if (!empty(getenv('PM2_HOME'))) {
- $LOG_CONSOLE = false;
- } else if (PHP_SAPI == 'fpm-fcgi') {
- $LOG_CONSOLE = false;
- } else if (PHP_SAPI == 'cgi') {
- $LOG_CONSOLE = true;
- } else if (PHP_SAPI == 'cli-server') {
- $LOG_CONSOLE = false;
- } else {
- $LOG_CONSOLE = true;
- }
- static $LOG_NAME = "./pubsub_tcp_iiot.log";
- if (stripos(PHP_OS, 'WIN') !== false) {
- $LOG_NAME = "C:\Windows\Temp\php.log";
- }
- static $LOG_SIZE = 128 * 1024 * 1024;
- static $LOG_CACHE = false;
- static $CACHE_DURATION = 10;
- static $CACHE_SIZE = 1024;
- static $cacheStartTime = 0;
- static $cacheBuf = '';
- static $LOG_TIMES = 10;
- static $logCount = 0;
- static $MAX_LEN = 1024 * 4;
- $sync = false;
- $implicit0 = ['imsync', 'imtrace', 'imlog'];
- $buf = '';
- if (count($args) == 1 && $args[0] === "\n") {
- $buf = "\n";
- } else {
- $sync = is_string($args[0]) && strtolower($args[0]) == $implicit0[0];
- if (is_string($args[0]) && strpos($args[0], $implicit0[2]) === 0) {
- $LOG_NAME = str_replace($implicit0[2], '', $args[0]);
- } else {
- }
- $pid = '';
- if (function_exists('posix_getpid')) {
- $pid = ' ' . posix_getpid() . ' ';
- }
- $fileLine = '';
- {
- $debug = debug_backtrace();
- $backtrace = 0;
- if (is_string($args[0]) && strpos($args[0], $implicit0[1]) === 0) {
- $backtrace = intval(str_replace($implicit0[1], '', $args[0]));
- unset($args[0]);
- } else if ($sync) {
- unset($args[0]);
- }
- $fileLine = ($pid == '' ? ' ' : '') . str_replace(".php", '', basename($debug[$backtrace]['file']))
- . ':' . $debug[$backtrace]['line'] . '';
- }
- $allPara = '';
- foreach ($args as $para) {
- if (is_array($para)) {
- $allPara .= json_encode($para) . ' ';
- } else if (is_object($para)) {
- if (method_exists($para, '__toString')) {
- $allPara .= $para . ' ';
- } else {
- $allPara .= get_class($para) . json_encode($para) . ' ';
- }
- } else if (is_bool($para)) {
- $allPara .= $para ? 'true ' : 'false ';
- } else if (is_null($para)) {
- $allPara .= 'null ';
- } else {
- $allPara .= $para . ' ';
- }
- }
- $len = strlen($allPara);
- if ($len > $MAX_LEN) {
- $allPara = substr($allPara, 0, $MAX_LEN) . "({$len})......";
- }
- $buf = "[" . date("y-m-d H:i:s.") . substr(microtime(FALSE), 2, 3) . "{$pid}{$fileLine}]" . $allPara . "\n";
- }
- $logCount++;
- if (!empty($LOG_NAME)) {
- if ($LOG_CACHE) {
- if ($cacheBuf == '') {
- $cacheStartTime = time();
- }
- $cacheBuf .= $buf;
-
- if (strlen($cacheBuf) > $CACHE_SIZE || time() - $cacheStartTime > $CACHE_DURATION) {
- $cacheStartTime = time();
- goto write;
- } else {
- if ($sync) {
- goto write;
- } else {
- goto skipWrite;
- }
- }
- } else {
- $cacheBuf = $buf;
- }
- write: {
- if ($logCount > 100) {
- clearstatcache();
- }
-
- if (($logCount == 1 || $logCount > $LOG_TIMES)
- && file_exists($LOG_NAME) && filesize($LOG_NAME) > $LOG_SIZE) {
-
- $fp = fopen($LOG_NAME . '.lock', 'a');
- $k = 0;
- do {
- $isLock = flocK($fp, LOCK_EX);
- $k++;
- if (!$isLock && $k > 1000) {
- echo "lock 1000\n";
- goto PUT;
- }
- } while (!$isLock);
-
- clearstatcache();
- if (filesize($LOG_NAME) <= $LOG_SIZE) {
- goto UN;
- }
-
- $oldLogName = $LOG_NAME . '.old';
- if (file_exists($oldLogName)) {
- if (!unlink($oldLogName)) {
- echo "unlink err\n";
- }
- }
- if (!rename($LOG_NAME, $oldLogName)) {
- echo "rename err\n";
- }
-
- UN:
- flock($fp, LOCK_UN);
- fclose($fp);
- $logCount = 0;
- }
- PUT:
- if (!file_put_contents($LOG_NAME, $cacheBuf, FILE_APPEND)) {
- echo "file_put_contents err," . getcwd() . "/{$LOG_NAME} \n";
- }
- $cacheBuf = '';
- }
- skipWrite:{
- }
- }
- if ($LOG_CONSOLE) {
- echo $buf;
- }
- }
- function printChars($str) {
- $result = '';
- $length = strlen($str);
- for ($i = 0; $i < $length; $i++) {
- $char = $str[$i];
- $ordValue = ord($char);
-
- if ($ordValue >= 32 && $ordValue <= 126) {
- $result .= $char;
- } else {
-
- $result .= '.';
- }
- }
- return $result;
- }
- class MQTT_TYPE {
- public static $PUB_MEASURE = 'a';
- public static $SUB_ALARM = 'b';
- public static $SUB_ALARM_REPLAY = 'c';
- public static $GET_ALARM = 'd';
-
- public static $PUB_UPPER_ALARM_START_EVENT = 'e';
- public static $PUB_UPPER_ALARM_STOP_EVENT = 'f';
- public static $PUB_LOWER_ALARM_START_EVENT = 'g';
- public static $PUB_LOWER_ALARM_STOP_EVENT = 'h';
- public static $PUB_UPPER_ALARM_SETTING_CHANGE = 'i';
- public static $PUB_LOWER_ALARM_SETTING_CHANGE = 'j';
- public static $UP_ALARM = 'k';
-
- public static $PUB_CALIBRATION_ZERO = 'l';
-
- public static $PUB_CALIBRATION_ZERO_REPLAY = 'm';
- public static $DISPLAY_UNIT_CHANGE = 'n';
- public static $DISPLAY_RATIO_CHANGE = 'o';
- public static $LIQUID_ALARM = 'p';
- public static $LIQUID_ALARM_REPLAY = 'q';
- public static $SET_DAMPING_TIME = 'r';
- public static $GET_DAMPING_TIME = 's';
- }
- define("ALTER_SEP", ",");
- function buildMqttData($mqttType, $msgId, $data) {
-
-
- rlog("build", $mqttType, $msgId, $data);
- $msgId = intval($msgId);
- if ($msgId < 0 || $msgId > 0xffffffff) {
- rlog("err msgId");
- return false;
- }
- $MIN = 0;
- $MAX = 39.99;
- $ALERT_LEN = 6;
- $bin = pack("C1N1", ord($mqttType), $msgId );
- if ($mqttType == MQTT_TYPE::$SUB_ALARM) {
-
- if (!isset($data['lower']) || strlen($data['lower']) >= $ALERT_LEN) {
- rlog("lower val err, max len " . $ALERT_LEN);
- return false;
- }
- if (!isset($data['upper']) || strlen($data['upper']) >= $ALERT_LEN) {
- rlog("upper val err, max len " . $ALERT_LEN);
- return false;
- }
- $data['lower'] = trim($data['lower']);
- $data['upper'] = trim($data['upper']);
- if ($data['lower'] == '' && $data['upper'] == '') {
- rlog("val empty");
- return false;
- }
-
-
-
-
- if ($data['lower'] == '') {
- $data['lower'] = ' ';
- } else {
- if (!preg_match('/^-?\d+(\.\d+)?$/', $data['lower'])) {
- rlog("err lower " . $data['lower']);
- return false;
- } else {
- if (floatval($data['lower']) < $MIN || floatval($data['lower']) > $MAX) {
- rlog("err lower range " . $data['lower']);
- return false;
- }
- }
- }
- if (!empty($data['upper'])) {
- if (!preg_match('/^-?\d+(\.\d+)?$/', $data['upper'])) {
- rlog("err upper " . $data['upper']);
- return false;
- } else {
- if (floatval($data['upper']) < $MIN || floatval($data['upper']) > $MAX) {
- rlog("err upper range " . $data['upper']);
- return false;
- }
- }
- }
- $buff = $data['lower'] . ALTER_SEP . $data['upper'];
- $bin = $bin . $buff . chr(0);
- } else if ($mqttType == MQTT_TYPE::$GET_ALARM) {
- } else if ($mqttType == MQTT_TYPE::$SET_DAMPING_TIME) {
- $num = floatval($data);
- if ($num < 0.00 || $num > 60.00) {
- rlog("err damping time " . $data);
- return false;
- }
- $buff = $data;
- $bin = $bin . $buff . chr(0);
- } else if ($mqttType == MQTT_TYPE::$GET_DAMPING_TIME) {
- }else if ($mqttType == MQTT_TYPE::$PUB_CALIBRATION_ZERO) {
- } else {
- rlog("warn unknown type " . ord($mqttType));
- return false;
- }
- rlog('build ' . bin2hex($bin) . '(' . printChars($bin) . ')');
- return $bin;
- }
-
- while (1) {
- $jsonData= app_redis()->rpop("pump_mqtt_config_list");
- if(!$jsonData){
- sleep(3);
- continue;
- }
- $data=json_decode($jsonData,true);
- var_dump($data);
- $topic="DEV/DATA/".$data['mac'];
- $config_json=$data['config'];
- $sendData=false;
- if($data['type']=='config'){
- $sendData = buildMqttData(MQTT_TYPE::$SUB_ALARM, $config_json['msgId'], ['lower' =>$config_json['lower'], 'upper' =>$config_json['upper']]);
- }elseif($data['type']=='alarm'){
- $sendData = buildMqttData(MQTT_TYPE::$GET_ALARM, $config_json['msgId'], null);
- }elseif($data['type']=='calibration'){
- $sendData = buildMqttData(MQTT_TYPE::$PUB_CALIBRATION_ZERO, $config_json['msgId'], null);
- }elseif($data['type']=='set_damping'){
- $sendData = buildMqttData(MQTT_TYPE::$SET_DAMPING_TIME, $config_json['msgId'], $config_json['damping_time']);
- }elseif($data['type']=='get_damping'){
- $sendData = buildMqttData(MQTT_TYPE::$GET_DAMPING_TIME, $config_json['msgId'], null);
- }else{
- }
- var_dump($sendData);
-
- if($sendData){
- updateSendResult($config_json['msgId']);
- $res=sendConfig($topic,$sendData);
- }
-
-
-
-
- }
|