Ubiquiti의 UniFi 네트워크 애플리케이션 API에 대한 액세스를 제공하는 PHP 클래스입니다.
이 클래스는 여기에서 찾을 수 있는 API 브라우저 도구에서 사용됩니다.
패키지는 수동으로 설치하거나 프로젝트에 쉽게 포함할 수 있도록 작곡가/패키지스트를 사용하여 설치할 수 있습니다. 자세한 내용은 아래 설치 지침을 참조하세요.
소프트웨어 | 버전 |
---|---|
UniFi 네트워크 애플리케이션/컨트롤러 | 5.XX, 6.XX, 7.XX, 8.XX ( 8.5.6이 확인됨 ) |
유니파이 OS | 3.X, 4.X ( 4.1.15가 확인됨 ) |
다음을 갖춘 서버:
PHP 7.4.0 이상(PHP 7.3.x 이하의 경우 버전 1.1.83 사용)
PHP json 및 PHP cURL 모듈
PHP 7.4.27 및 cURL 7.60.0과 PHP 8.3.11 및 cURL 7.81.0을 사용하여 Apache 2.4에서 테스트되었습니다.
이 서버와 UniFi 컨트롤러가 실행되는 호스트 및 포트(일반적으로 UniFi OS의 경우 TCP 포트 8443 또는 포트 443) 간의 직접 네트워크 연결
이 클래스를 통해 UniFi 컨트롤러 API에 접근하려면 로컬 접근 권한이 있는 계정을 사용해야 합니다 .
UniFi 클라우드 계정을 사용하지 말고 이 수업에서 사용하는 계정에 대해 2FA를 활성화하지 마세요
UniFi OS 기반 컨트롤러에 대한 지원이 버전 1.1.47부터 추가되었습니다. 다음 장치/서비스는 작동하는 것으로 확인되었습니다.
UniFi 드림 라우터(UDR)
UniFi 드림 머신(UDM)
UniFi 드림 머신 프로 (UDM PRO)
UniFi Cloud Key Gen2(UCK G2), 펌웨어 버전 2.0.24 이상
UniFi Cloud Key Gen2 Plus (UCK G2 Plus), 펌웨어 버전 2.0.24 이상
유니파이 익스프레스(UX)
UniFi 드림 월(UDW)
UniFi 클라우드 게이트웨이 울트라(UCG-Ultra)
UniFi CloudKey Enterprise (CK-Enterprise)
UniFi 엔터프라이즈 포트리스 게이트웨이(EFG)
공식 UniFi 호스팅, 자세한 내용은 여기를 참조하세요.
클래스는 UniFi OS 콘솔을 자동으로 감지하고 이에 따라 URL과 여러 기능/메서드를 조정합니다.
UniFi OS 기반 컨트롤러는 "소프트웨어 기반" 컨트롤러에 사용되는 8443 대신 포트 443을 사용하여 연결해야 합니다. 자신의 코드가 생성자에 전달된 URL의 엄격한 유효성 검사를 구현하는 경우 UniFi OS 기반 컨트롤러로 작업할 때 포트 접미사가 없거나 포트 443이 있는 URL을 허용하도록 논리를 조정하십시오.
WAN 인터페이스를 통해 UniFi OS 기반 게이트웨이에 연결할 때 이를 허용하는 특정 방화벽 규칙을 만들어야 합니다. 자세한 내용은 Art of WiFi 웹사이트의 블로그 게시물(https://artofwifi.net/blog/how-to-access-the-unifi-controller-by-wan-ip-or-hostname-on-a-)을 참조하세요. udm-프로
여기에 설명된 "사용자 정의 방화벽 규칙" 접근 방식이 권장되는 방법입니다.
1.1.84 이전 버전에서 업그레이드하는 경우 다음을 수행하십시오.
PHP 7.4 이상을 사용하고 있는지 확인하세요
주요 변경 사항이 있는지 코드로 클라이언트를 테스트합니다. 이제 클래스 메소드에는 잘못된 유형이 전달되거나 다른 응답 유형이 예상되는 특정 경우에 코드를 손상시킬 수 있는 엄격한 매개변수 유형 힌트 및 응답 유형이 있습니다.
Composer, Git을 사용하거나 간단히 릴리스를 다운로드하여 API 클라이언트 클래스를 설치하세요.
선호하는 설치 방법은 작곡가를 이용하는 것입니다. 아직 작곡가가 설치되어 있지 않은 경우 다음 설치 지침을 따르십시오.
작곡가가 설치되면 프로젝트 디렉터리의 셸에서 다음 명령을 실행하면 됩니다.
작곡가는 art-of-wifi/unifi-api-client가 필요합니다.
또는 작곡가.json 파일에 패키지를 수동으로 추가합니다.
{"require": {"art-of-wifi/unifi-api-client": "^1.1"}}
마지막으로 프레임워크에서 아직 이 작업을 수행하지 않은 경우 코드에 작성기 자동 로더를 포함해야 합니다.
/** * 작성기 오토로더를 사용하여 클래스 로드 */require_once 'vendor/autoload.php';
프로젝트 디렉터리의 셸에서 다음 git
명령을 실행합니다.
자식 클론 https://github.com/Art-of-WiFi/UniFi-API-client.git
git 복제가 완료되면 다음과 같이 클래스가 포함된 파일을 코드에 포함시킵니다.
/** * 작성기 오토로더를 사용하는 대신 클래스를 직접 로드합니다. */require_once 'path/to/src/Client.php';
작곡가나 git을 사용하지 않으려면 패키지를 다운로드하고 zip 파일의 압축을 푼 다음 코드에 클래스가 포함된 파일을 다음과 같이 포함하세요.
/** * 작성기 오토로더를 사용하는 대신 클래스를 직접 로드합니다. */require_once 'path/to/src/Client.php';
클래스를 사용하는 방법의 기본 예:
/** * 컴포저 오토로더를 사용하여 클래스 로드 */require_once 'vendor/autoload.php';/** * UniFi API 연결 클래스를 초기화하고 컨트롤러에 로그인한 후 알람 컬렉션을 요청합니다 * (이 예에서는 이미 사용된 변수에 올바른 값이 할당되었습니다) */$unifi_connection = new UniFi_APIClient($controller_user, $controller_password, $controller_url, $site_id, $controller_version, true);$login = $unifi_connection->login();$results = $unifi_connection->list_alarms(); // 알람 객체가 포함된 PHP 배열을 반환합니다.
자신의 PHP 코드를 위한 시작점으로 사용할 수 있는 좀 더 자세한 예제는 examples/
디렉토리를 참조하세요.
위의 예에서 $site_id
UniFi 네트워크 컨트롤러에서 사이트를 관리할 때 URL에 표시되는 짧은 사이트 "이름"(보통 8자 길이)입니다. 예를 들어 다음 URL은 다음과 같습니다.
https://<controller IP address or FQDN>:8443/manage/site/jl3z2shm/dashboard
jl3z2shm
은 짧은 사이트 "이름"이며 $site_id에 할당할 값입니다.
위 예제에서 생성자에 전달된 6번째 선택적 매개변수( true
)는 기본적으로 비활성화 되어 있는 컨트롤러의 SSL 인증서 유효성 검사를 활성화합니다. controller_url
매개변수의 FQDN과 연결된 UniFi 컨트롤러에 유효한 SSL 인증서가 설치된 프로덕션 환경에서 이 기능을 활성화하는 것이 좋습니다 . 이 옵션은 API 클라이언트 버전 1.1.16에 추가되었습니다.
읽기 전용 권한이 있는 관리자 계정(위 예에서는 $controller_user
)을 사용하면 특정 컬렉션/객체 속성에 대한 가시성을 제한할 수 있습니다. 읽기 전용 관리자 계정에 WPA2 비밀번호가 표시되지 않는 예는 이 문제 및 이 문제를 참조하세요.
이 클래스는 현재 UniFi 컨트롤러 API에 접근하기 위해 다음과 같은 함수/메서드를 지원합니다. 이 목록은 알파벳순으로 정렬되어 있습니다. 각 함수/메서드, 목적, 해당 매개변수에 대한 자세한 내용은 소스 코드의 설명을 참조하세요.
채택_장치()
고급_채택_장치()
아카이브_알람()
할당_기존_관리자()
승인_게스트()
block_sta()
cancel_rolling_upgrade()
check_controller_update()
check_firmware_update()
cmd_stat()
count_alarms()
create_apgroup()
create_dynamicdns()
create_firewallgroup()
create_hotspotop()
create_network()
create_radius_account()
create_user()
create_usergroup()
create_voucher()
create_wlan()
custom_api_request()
delete_apgroup()
delete_device()
delete_firewallgroup()
delete_network()
delete_radius_account()
delete_site()
delete_usergroup()
delete_wlan()
비활성화_ap()
비활성화_wlan()
edit_apgroup()
edit_client_fixedip()
편집_클라이언트_이름()
edit_firewallgroup()
edit_usergroup()
연장_게스트_유효성()
잊어버리세요()
generate_backup()
generate_backup_site()
get_class_version()
get_cookie()
get_cookies()
get_curl_connection_timeout()
get_curl_http_version()
get_curl_method()
get_curl_request_timeout()
get_curl_request_timeout()
get_curl_ssl_verify_host()
get_curl_ssl_verify_peer()
get_debug()
get_is_unifi_os()
get_last_error_message()
get_last_results_raw()
get_site()
초대_관리자()
led_override()
목록_관리자()
목록_모든_관리자()
목록_알람()
목록_aps()
목록_백업()
목록_클라이언트()
목록_국가_코드()
목록_현재_채널()
목록_대시보드()
목록_장치_이름_매핑()
목록_장치_상태()
목록_장치()
목록_장치_기본()
목록_동적DNS()
목록_이벤트()
목록_확장()
목록_방화벽그룹()
목록_펌웨어()
list_guests()
목록_건강()
list_hotspotop()
list_known_rogueaps()
list_networkconf()
list_portconf()
list_portforward_stats()
목록_포트포워딩()
목록_반경_계정()
목록_반경_프로필()
목록_자기()
목록_설정()
목록_사이트()
목록_태그()
목록_사용자()
list_wlan_groups()
list_wlanconf()
위치_ap()
로그인()
로그아웃()
move_device()
power_cycle_switch_port()
재부팅_클라우드키()
이름 바꾸기_ap()
취소_관리자()
취소_바우처()
set_ap_radiosettings()
set_ap_wlangroup()
set_connection_timeout()
set_cookies()
set_curl_http_version()
set_curl_request_timeout()
set_curl_ssl_verify_host()
set_curl_ssl_verify_peer()
set_debug()
set_device_settings_base()
set_dynamicdns()
set_element_adoption()
set_guestlogin_settings()
set_guestlogin_settings_base()
set_ips_settings_base()
set_is_unifi_os()
set_locate_ap() (더 이상 사용되지 않지만 여전히 별칭으로 사용 가능)
set_networksettings_base()
set_radius_account_base()
set_request_method()
set_request_timeout()
set_site()
set_site_connectivity()
set_site_country()
set_site_guest_access()
set_site_locale()
set_site_mgmt()
set_site_name()
set_site_ntp()
set_site_snmp()
set_sta_name()
set_sta_note()
set_super_identity_settings_base()
set_super_mgmt_settings_base()
set_super_smtp_settings_base()
set_usergroup()
set_wlan_mac_filter()
set_wlansettings()
set_wlansettings_base()
사이트_LED()
스펙트럼_스캔()
스펙트럼_스캔_상태()
start_rolling_upgrade()
stat_5분_aps()
stat_5분_게이트웨이()
stat_5분_사이트()
stat_5분_사용자()
stat_allusers()
통계_인증()
통계_클라이언트()
stat_daily_aps()
stat_daily_gateway()
통계_일일_사이트()
통계_일일_사용자()
stat_full_status()
stat_hourly_aps()
stat_hourly_gateway()
통계_시간별_사이트()
통계_시간별_사용자()
stat_ips_events()
stat_monthly_aps()
stat_monthly_gateway()
통계_월간_사이트()
통계_월별_사용자()
통계_지불()
통계_세션()
통계 사이트()
stat_speedtest_results()
stat_sta_sessions_latest()
상태_상태()
stat_sysinfo()
통계_바우처()
unauthorize_guest()
unblock_sta()
unset_locate_ap() (더 이상 사용되지 않지만 여전히 별칭으로 사용 가능)
업그레이드_장치()
업그레이드_장치_외부()
기능을 추가하고 이 클래스의 유용성을 더욱 향상시키기 위한 작업이 아직 남아 있으므로 모든 제안/의견을 환영합니다. GitHub 문제 섹션이나 Ubiquiti 커뮤니티 포럼(https://community.ubnt.com/t5/UniFi-Wireless/PHP-class-to-access-the-UniFi-controller-API-updates-and/td-)을 이용하세요. p/1512870)을 통해 제안사항과 질문을 공유해 주세요.
다른 라이브러리, cURL 또는 Postman을 사용하여 UniFi API에 문제가 발생하면 문제를 열지 마십시오 . 이러한 문제는 즉시 종료됩니다. 대신 토론 섹션을 사용하세요.
코드(개선)에 기여하고 싶다면 이슈를 열고 거기에 코드를 포함하거나 끌어오기 요청을 작성하세요.
이 클래스는 다음 개발자의 초기 작업을 기반으로 합니다.
돔워: https://community.ui.com/questions/little-php-class-for-unifi-api/933d3fb3-b401-4499-993a-f9af079a4a3a
fbagnol: https://github.com/fbagnol/class.unifi.php
Ubiquiti에서 게시한 API:
https://dl.ui.com/unifi/8.0.26/unifi_sh_api
이 API 클라이언트 클래스의 많은 기능은 Ubiquiti에서 공식적으로 지원되지 않으므로 UniFi 컨트롤러 API의 향후 버전에서는 지원되지 않을 수 있습니다.