봄날은 갔다. 이제 그 정신으로 공부하자

[php] MQTT client 설치 및 샘플 코드 본문

카테고리 없음

[php] MQTT client 설치 및 샘플 코드

길재의 그 정신으로 공부하자 2025. 1. 28. 10:10
해당 글은 php용 MQTT client에 관련해 정리한 글로 아래 내용들을 포함하고 있습니다.
  • local PC에 mac용 mosquitto broker를 설치
  • mac용 composer 설치 (php 의존성 관리도구)
  • php-mqtt 설치 (php용 mqtt client)
  • 샘플 코드 구현
 
1. mosquitto broker를 설치
CLI에 아래 명령어를 입력해 Mosquitto를 설치합니다.
   >> brew update >> brew install mosquitto
 
2. composer 설치 (php 의존성 관리 도구) CLI에 아래 명령어를 차례대로 실행해 php 의존성 관리도구인 composer를 설치합니다.
아래와 같이 보여지면 정상적으로 설치된 것 입니다.
  // 임의 경로에서 아래 명령어 실행
  php -r "copy ( 'https://getcomposer.org/installer', 'composer-setup.php');"
  php -r "if (hash_file ( 'sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3'; 설정 해제 else {echo '설치 프로그램 손상됨';}. php ');} echo PHP_EOL; "
  php composer-setup.php
  php -r "unlink ( 'composer-setup.php');”

 

위 명령어 실행 폴더에 composer.phar이 생성되었으면 정상적으로 설치된 것 입니다.

composer를 실행하기 위해 항상 <설치 경로>/composer.phar 이렇게 입력하는 것은 불편함으로 경로에 상관없이 사용 가능하도록 아래와 같은 명령어 실행 (권한이 필요하므로 sudo를 사용합니다.)

  >> sudo mv composer.phar /usr/local/bin/composer

 

아래 명령어로 설치 확인

  >> composer -v

 

아래와 같이 보여지면 정상적으로 설치된 것 입니다.

 

3. php-mqtt 설치
composer가 설치되었으므로 composer를 사용하여 프로젝트에 php-mqtt를 설치합니다.
php-mqtt를 설치하고자 하는 프로젝트 폴더로 이동한 후 아래 composer 명령어로 php용 mqtt client를 설치합니다.
  >> composer require php-mqtt/client 2.0.0
  • 2.0.0와 같이 뒤에 버전을 명시하면 해당 버전 설치가 가능합니다.
 
mqtt client가 정상적으로 설치되었으면 프로젝트 폴더에 “vendor“ 폴더 하위에 "php-mqtt"폴더가 생성된 것을 확인할 수 있습니다.

 

 
4.  샘플코드 구현 1 - mosquitto
이번 단락에서는 간단하게 local PC에서 mosquitto broker를 실행 시키고 정해진 TOPIC으로 메시지를 주고 받는 기능을 간단히 구현해보도록 하겠습니다.
 
1. mosquitto broker start
CLI에 아래와 같이 명령어를 입력해 mosquitto broker를 실행합니다.
  >> brew services start mosquitto
 
2. TOPIC subscribe
CLI를 하나 더 실행해 아래 명령어를 입력해 TOPIC을 구독합니다.
  >> mosquitto_sub -h localhost -p 1883 -t <TOPIC>/#
 
3. php 코드에서 TOPIC publish
php 파일을 아래와 같이 작성해 TOPIC을 publish합니다.
<?php
include_once('../config.php');
// 아래 줄 추가
require_once (__DIR__ . '/../../vendor/autoload.php');
use PhpMqtt\Client\MQTTClient;
define('MQTT_BROKER_HOST', 'localhost');
define('MQTT_BROKER_PORT', 1883); // 기본 포트
// 인증서 관련 부분 추가 
define('MQTT_BROKER_TLS_PORT', 8883);  // 인증서 사용시 사용되는 포트
define('TLS_CLIENT_CERTIFICATE_FILE', '/인증서 경로/iot-dev-certificate.pem.crt');
define('TLS_CLIENT_CERTIFICATE_KEY_FILE', '/인증서 경로/iot-dev-private.pem.key');
 

임의의 함수에 아래와 같이 TOPIC을 publish하는 코드를 추가합니다.

// 일반 호출
public function mqtt_publish_nomal() {
    // mqtt 코드 추가
    $server   = MQTT_BROKER_HOST;
    $port     = MQTT_BROKER_PORT;
    $clientId = 'MY_MQTT_CLIENTID-OE511D794F2';
    $mqtt = new MqttClient($server, $port, $clientId);
    $mqtt->connect();
    $mqtt->publish('<TOPIC>/3', 'Hello World! 2024-01-09-003', 0);
    $mqtt->close();
}

public function mqtt_publish_auth() {
    // mqtt 코드 추가
    $server   = MQTT_BROKER_HOST;
    $port     = MQTT_BROKER_TLS_PORT;
    $clientId = 'MY_MQTT_CLIENTID-OE511D794F2';
    $mqtt = new MqttClient($server, $port, $clientId);
    // Create and configure the connection settings as required.
    $connectionSettings = new ConnectionSettings(0,
        false,
        false,
        5,
        10,
        10,
        null,
        null,
        true,
        true,
        true,
        TLS_CLIENT_CERTIFICATE_FILE,
        TLS_CLIENT_CERTIFICATE_KEY_FILE,
        null);
    // Connect to the broker with the configured connection settings and with a clean session.
    $mqtt->connect(null, null, $connectionSettings, true);
    $mqtt->publish('<TOPIC>/3', 'Hello World! 2024-01-09-005', 0);
    $mqtt->close();
}

 

4. CLI가 TOPIC 수신하는 부분 확인
위 함수를 호출하면 아래와 같이 해당 TOPIC을 subscribe되는 것을 확인할 수 있습니다.

 

Comments