├── flash ├── autoconfig │ ├── etc │ │ ├── network │ │ │ ├── interfaces │ │ │ └── interfaces.d │ │ │ │ └── wlan0 │ │ ├── init.d │ │ │ ├── S00resetbtn │ │ │ ├── S00autoled │ │ │ └── S96autonight │ │ └── majestic.yaml │ ├── usr │ │ ├── bin │ │ │ ├── jsonfilter │ │ │ ├── mosquitto_pub │ │ │ └── mosquitto_sub │ │ ├── lib │ │ │ ├── libubox.so │ │ │ ├── libhive_ANR.so │ │ │ ├── libhive_HPF.so │ │ │ ├── libhive_RES.so │ │ │ ├── libhive_common.so │ │ │ └── libmosquitto.so.1 │ │ ├── share │ │ │ └── fonts │ │ │ │ └── truetype │ │ │ │ └── UbuntuMono-Regular.ttf │ │ └── sbin │ │ │ ├── led_control.sh │ │ │ ├── autonight.sh │ │ │ └── autoled.sh │ └── lib │ │ └── modules │ │ └── 4.9.37 │ │ └── external │ │ └── 8189fs.ko └── autoconfig.sh ├── usb-burn.xml ├── LICENSE └── README.md /flash/autoconfig/etc/network/interfaces: -------------------------------------------------------------------------------- 1 | auto lo 2 | iface lo inet loopback 3 | 4 | source-dir /etc/network/interfaces.d 5 | -------------------------------------------------------------------------------- /flash/autoconfig/usr/bin/jsonfilter: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/jsonfilter -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libubox.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libubox.so -------------------------------------------------------------------------------- /flash/autoconfig/usr/bin/mosquitto_pub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/mosquitto_pub -------------------------------------------------------------------------------- /flash/autoconfig/usr/bin/mosquitto_sub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/bin/mosquitto_sub -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libhive_ANR.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_ANR.so -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libhive_HPF.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_HPF.so -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libhive_RES.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_RES.so -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libhive_common.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libhive_common.so -------------------------------------------------------------------------------- /flash/autoconfig/usr/lib/libmosquitto.so.1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/lib/libmosquitto.so.1 -------------------------------------------------------------------------------- /flash/autoconfig/lib/modules/4.9.37/external/8189fs.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/lib/modules/4.9.37/external/8189fs.ko -------------------------------------------------------------------------------- /flash/autoconfig/usr/share/fonts/truetype/UbuntuMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/flash/autoconfig/usr/share/fonts/truetype/UbuntuMono-Regular.ttf -------------------------------------------------------------------------------- /flash/autoconfig.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # First boot 4 | # 5 | 6 | # Set environments (mmz memory = 64 - osmem) 7 | fw_setenv bootargs 'mem=${osmem} console=ttyAMA0,115200 panic=20 rootfstype=squashfs root=/dev/mtdblock3 init=/init mtdparts=${mtdparts} mmz_allocator=hisi' 8 | fw_setenv osmem 35M 9 | 10 | # Enable white LED 11 | $(dirname $0)/autoconfig/usr/sbin/led_control.sh -o 1 -b 1 12 | 13 | # Wipe overlay partition and reboot 14 | flash_eraseall -j /dev/mtd4 15 | reboot 16 | -------------------------------------------------------------------------------- /usb-burn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /flash/autoconfig/etc/init.d/S00resetbtn: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | case "$1" in 4 | start | restart | reload) 5 | if [ ! -d /sys/class/gpio/gpio0/ ]; then 6 | echo 0 > /sys/class/gpio/export 7 | echo in > /sys/class/gpio/gpio0/direction 8 | fi 9 | printf "Checking the reset button: " 10 | if [ $(cat /sys/class/gpio/gpio0/value) -eq 0 ]; then 11 | echo "PRESSED" 12 | # Wipe overlay partition and reboot 13 | echo "Let's start wipe overlay partition (/dev/mtd4)" 14 | /usr/sbin/sysupgrade -n -z 15 | else 16 | echo "NOT PRESSED" 17 | fi 18 | exit $? 19 | ;; 20 | stop) 21 | exit 0 22 | ;; 23 | *) 24 | echo "Usage: $0 {start|stop|restart}" 25 | exit 1 26 | ;; 27 | esac 28 | 29 | -------------------------------------------------------------------------------- /flash/autoconfig/etc/network/interfaces.d/wlan0: -------------------------------------------------------------------------------- 1 | auto wlan0 2 | iface wlan0 inet dhcp 3 | pre-up devmem 0x112C0048 32 0x1D54 4 | pre-up devmem 0x112C004C 32 0x1174 5 | pre-up devmem 0x112C0064 32 0x1174 6 | pre-up devmem 0x112C0060 32 0x1174 7 | pre-up devmem 0x112C005C 32 0x1174 8 | pre-up devmem 0x112C0058 32 0x1174 9 | pre-up devmem 0x10020028 32 0x28000000 10 | pre-up devmem 0x10020028 32 0x20000000 11 | pre-up modprobe cfg80211 12 | pre-up sleep 2 13 | pre-up insmod /lib/modules/4.9.37/external/8189fs.ko 14 | pre-up wpa_passphrase "myssid" "mypassword" >/tmp/wpa_supplicant.conf 15 | pre-up sed -i '2i \\tscan_ssid=1' /tmp/wpa_supplicant.conf 16 | pre-up sleep 3 17 | pre-up wpa_supplicant -B -D nl80211 -i wlan0 -c/tmp/wpa_supplicant.conf 18 | post-down killall -q wpa_supplicant 19 | -------------------------------------------------------------------------------- /flash/autoconfig/etc/init.d/S00autoled: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | AUTOLED_ARGS="" 4 | AUTOLED_PID_FILE=/var/run/autoled.pid 5 | 6 | start() { 7 | printf "Starting automatic LED control: " 8 | umask 077 9 | start-stop-daemon -b -m -S -q -p $AUTOLED_PID_FILE \ 10 | --exec /usr/sbin/autoled.sh -- $AUTOLED_ARGS 11 | [ $? = 0 ] && echo "OK" || echo "FAIL" 12 | } 13 | 14 | stop() { 15 | printf "Stopping automatic LED control: " 16 | start-stop-daemon -K -q -p $AUTOLED_PID_FILE 17 | [ $? = 0 ] && echo "OK" || echo "FAIL" 18 | } 19 | 20 | restart() { 21 | stop 22 | start 23 | } 24 | 25 | case "$1" in 26 | start) 27 | start 28 | ;; 29 | stop) 30 | stop 31 | ;; 32 | restart | reload) 33 | restart 34 | ;; 35 | *) 36 | echo "Usage: $0 {start|stop|restart}" 37 | exit 1 38 | ;; 39 | esac 40 | 41 | exit $? 42 | -------------------------------------------------------------------------------- /flash/autoconfig/etc/init.d/S96autonight: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | AUTONIGHT_ARGS="" 4 | AUTONIGHT_PID_FILE=/var/run/autonight.pid 5 | 6 | start() { 7 | printf "Starting automatic night mode changer: " 8 | umask 077 9 | start-stop-daemon -b -m -S -q -p $AUTONIGHT_PID_FILE \ 10 | --exec /usr/sbin/autonight.sh -- $AUTONIGHT_ARGS 11 | [ $? = 0 ] && echo "OK" || echo "FAIL" 12 | } 13 | 14 | stop() { 15 | printf "Stopping automatic night mode changer: " 16 | start-stop-daemon -K -q -p $AUTONIGHT_PID_FILE 17 | [ $? = 0 ] && echo "OK" || echo "FAIL" 18 | } 19 | 20 | restart() { 21 | stop 22 | start 23 | } 24 | 25 | case "$1" in 26 | start) 27 | start 28 | ;; 29 | stop) 30 | stop 31 | ;; 32 | restart | reload) 33 | restart 34 | ;; 35 | *) 36 | echo "Usage: $0 {start|stop|restart}" 37 | exit 1 38 | ;; 39 | esac 40 | 41 | exit $? 42 | -------------------------------------------------------------------------------- /flash/autoconfig/usr/sbin/led_control.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # LED control for Xiaomi MJSXJ02HL 4 | 5 | show_help() { 6 | echo "Usage: $0 [-o <0|1>] [-b <0|1>] 7 | -o <0|1> Switch state for orange LED. 8 | -b <0|1> Switch state for blue LED." 9 | exit 0 10 | } 11 | 12 | led_control() { 13 | echo "Switching LED with GPIO${1} to state ${2}" 14 | if [ ! -d /sys/class/gpio/gpio${1}/ ]; then 15 | echo ${1} > /sys/class/gpio/export 16 | echo out > /sys/class/gpio/gpio${1}/direction 17 | fi 18 | echo ${2} > /sys/class/gpio/gpio${1}/value 19 | } 20 | 21 | if [ $# -eq 0 ]; then show_help; fi 22 | while getopts o:b: flag; do 23 | case ${flag} in 24 | o) 25 | [ ${OPTARG} -eq 0 -o ${OPTARG} -eq 1 ] || show_help 26 | led_control 52 ${OPTARG} 27 | ;; 28 | b) 29 | [ ${OPTARG} -eq 0 -o ${OPTARG} -eq 1 ] || show_help 30 | led_control 53 ${OPTARG} 31 | ;; 32 | *) show_help ;; 33 | esac 34 | done 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 OpenIPC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /flash/autoconfig/etc/majestic.yaml: -------------------------------------------------------------------------------- 1 | system: 2 | buffer: 1024 3 | staticDir: /var/www/majestic 4 | isp: 5 | iqProfile: /etc/sensors/iq/f23.ini 6 | image: 7 | mirror: true 8 | flip: true 9 | rotate: none 10 | contrast: 50 11 | hue: 50 12 | saturation: 50 13 | luminance: 50 14 | osd: 15 | enabled: false 16 | template: "OpenIPC v.2.2 | %F %T %Z" 17 | nightMode: 18 | enabled: true 19 | irCutPin1: 70 20 | irCutPin2: 68 21 | backlightPin: 54 22 | dncDelay: 10 23 | records: 24 | enabled: false 25 | path: /mnt/mmcblk0p1/%Y/%m/%d/%H/%M.mp4 26 | maxUsage: 95 27 | video0: 28 | enabled: true 29 | codec: h264 30 | video1: 31 | enabled: false 32 | jpeg: 33 | enabled: true 34 | mjpeg: 35 | size: 640x360 36 | fps: 5 37 | bitrate: 2048 38 | audio: 39 | enabled: true 40 | volume: 70 41 | srate: 8000 42 | codec: pcm 43 | outputEnabled: true 44 | speakerPin: 55 45 | speakerPinInvert: false 46 | voiceEqualizer: common 47 | rtsp: 48 | enabled: true 49 | port: 554 50 | hls: 51 | enabled: false 52 | youtube: 53 | enabled: false 54 | motionDetect: 55 | enabled: false 56 | visualize: true 57 | debug: true 58 | ipeye: 59 | enabled: false 60 | netip: 61 | enabled: false 62 | user: admin 63 | password: 12345 64 | port: 34567 65 | snapshots: true 66 | ignoreSetTime: false 67 | onvif: 68 | enabled: false 69 | watchdog: 70 | enabled: true 71 | timeout: 30 72 | -------------------------------------------------------------------------------- /flash/autoconfig/usr/sbin/autonight.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Majestic settinfs for Xiaomi MJSXJ02HL 4 | # 5 | # nightMode: 6 | # enabled: true 7 | # irCutPin1: 70 8 | # irCutPin2: 68 9 | # backlightPin: 54 10 | 11 | again_high_target=14000 12 | again_low_target=2000 13 | pollingInterval=5 14 | 15 | show_help() { 16 | echo "Usage: $0 [-H value] [-L value] [-i value] [-h] 17 | -H value Again high target (default = ${again_high_target}). 18 | -L value Again low target (default = ${again_low_target}). 19 | -i value Polling interval (default = ${pollingInterval}). 20 | -h Show this help." 21 | exit 0 22 | } 23 | 24 | while getopts H:L:i:h flag; do 25 | case ${flag} in 26 | H) again_high_target=${OPTARG} ;; 27 | L) again_low_target=${OPTARG} ;; 28 | i) pollingInterval=${OPTARG} ;; 29 | h | *) show_help ;; 30 | esac 31 | done 32 | 33 | echo "...................." 34 | echo "Watching at isp_again > ${again_high_target} to enable night mode" 35 | echo "Watching at isp_again < ${again_low_target} to disable night mode" 36 | echo "Polling interval: ${pollingInterval} sec" 37 | echo "...................." 38 | 39 | login=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f2) 40 | pass=$(cat /etc/httpd.conf | grep cgi-bin | cut -d':' -f3) 41 | 42 | while true; do 43 | metrics=$(curl -s http://localhost/metrics) 44 | isp_again=$(echo "${metrics}" | awk '/^isp_again/ {print $2}' | grep . || echo 0) 45 | night_enabled=$(echo "${metrics}" | awk '/^night_enabled/ {print $2}' | grep . || echo 0) 46 | 47 | if [ $night_enabled -ne 1 ] && [ $isp_again -gt $again_high_target ]; then 48 | curl -s -u $login:$pass http://localhost/night/on 49 | echo "Condition isp_again > ${again_high_target} was met (current value is ${isp_again}), turn on the night mode" 50 | elif [ $night_enabled -ne 0 ] && [ $isp_again -lt $again_low_target ]; then 51 | curl -s -u $login:$pass http://localhost/night/off 52 | echo "Condition isp_again < ${again_low_target} was met (current value is ${isp_again}), turn off the night mode" 53 | fi 54 | 55 | sleep $pollingInterval 56 | done 57 | -------------------------------------------------------------------------------- /flash/autoconfig/usr/sbin/autoled.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Automatic LED control for Xiaomi MJSXJ02HL 4 | 5 | streamerProcess="majestic" 6 | serviceProcess="sysupgrade" 7 | pollingInterval=1 8 | 9 | show_help() { 10 | echo "Usage: $0 [-p process] [-s process] [-i value] [-h] 11 | -p process Name of the monitored streamer process (default = ${streamerProcess}). 12 | -s process Name of the monitored service process (default = ${serviceProcess}). 13 | -i value Polling interval in seconds (default = ${pollingInterval}). 14 | -h Show this help." 15 | exit 0 16 | } 17 | 18 | # override config values with command line arguments 19 | while getopts H:L:i:h flag; do 20 | case ${flag} in 21 | p) streamerProcess=${OPTARG} ;; 22 | s) serviceProcess=${OPTARG} ;; 23 | i) pollingInterval=${OPTARG} ;; 24 | h | *) show_help ;; 25 | esac 26 | done 27 | 28 | echo "...................." 29 | echo "Name of the monitored streamer process: ${streamerProcess}" 30 | echo "Name of the monitored service process: ${serviceProcess}" 31 | echo "Polling interval: ${pollingInterval} sec" 32 | echo "...................." 33 | 34 | led_state=0 35 | /usr/sbin/led_control.sh -o 0 -b 0 36 | echo "...................." 37 | 38 | while true; do 39 | if killall -q -0 $serviceProcess; then 40 | if [ $led_state -ne 3 ]; then 41 | echo "Process $serviceProcess is running, turn on the white LED" 42 | /usr/sbin/led_control.sh -o 1 -b 1 43 | led_state=3 44 | echo "...................." 45 | fi 46 | else 47 | if [ $led_state -ne 1 ] && ! killall -q -0 $streamerProcess; then 48 | echo "Process $streamerProcess is not running, turn on the orange LED" 49 | /usr/sbin/led_control.sh -o 1 -b 0 50 | led_state=1 51 | echo "...................." 52 | elif [ $led_state -ne 2 ] && killall -q -0 $streamerProcess; then 53 | echo "Process $streamerProcess is running, turn on the blue LED" 54 | /usr/sbin/led_control.sh -o 0 -b 1 55 | led_state=2 56 | echo "...................." 57 | fi 58 | fi 59 | sleep $pollingInterval 60 | done 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## OpenIPC for Xiaomi MJSXJ02HL 2 | 3 | 4 | ### Installation 5 | 6 | 1. Download the latest version of the [Zadig](https://zadig.akeo.ie) program. Run it and turn on the full list of devices (`Settings -> List of all devices`). 7 | 2. Connect the camera to the USB port of the computer (the wire that comes with the kit will not work - there are no data contacts in it) with the Reset button pressed, select the `HiUSBBurn` device from the list as quickly as possible and install the `libusbK` driver for it. Most likely you will not succeed the first time (the device disappears after a few seconds, you need to do everything very quickly). 8 | 3. Download the [HiTool](http://www.hihope.org/en/download/download.aspx?mtt=36) program. After its launch, select the `Hi3518EV300` chip. Having opened the HiBurn tool, select the [partition table file](https://raw.githubusercontent.com/OpenIPC/device-mjsxj02hl/master/usb-burn.xml) and specify the path to the [fastboot](https://github.com/OpenIPC/firmware/releases/download/latest/u-boot-hi3518ev300-universal.bin), [kernel and rootfs](https://github.com/OpenIPC/firmware/releases/download/latest/openipc.hi3518ev300-nor-lite.tgz) files. 9 | 4. Press `Burn` button, agree that some sections will be erased and connect the camera to USB with the Reset button pressed. If everything was done correctly, then the flashing process will begin. This usually takes about a minute and ends with an informational success message. 10 | 11 | 12 | ### Configuration 13 | 14 | 1. Create two `VFAT` partitions on your SD card (disable the quick format option). 15 | 2. [Download](https://github.com/OpenIPC/device-mjsxj02hl/archive/refs/heads/master.zip) this repository and extract the contents of directory `flash` to the root of the first partition of your SD card. 16 | 3. Using [Notepad++](https://notepad-plus-plus.org), open file `autoconfig/etc/network/interfaces.d/wlan0` and change the [SSID and password](https://github.com/OpenIPC/device-mjsxj02hl/blob/master/flash/autoconfig/etc/network/interfaces.d/wlan0#L14) of the Wi-Fi access point to your own (by default, these are `myssid` and `mypassword`). 17 | 4. Turn off the camera's power, insert the SD card and turn it on again. If you did everything correctly, after a while (1-2 minutes) you will hear a shutter click and the camera will connect to your Wi-Fi network. 18 | 5. Remove the SD card and reboot the device. 19 | 20 | 21 | ### Using 22 | 23 | * Status of the built-in LEDs: 24 | * *Orange* - The system is not loaded or Majestic is not running. 25 | * *Blue* - The system is loaded and Majestic is running. 26 | * *White* - The sysupgrade utility is running (install updates or wipe overlay partition). 27 | * Web Interface is available on port 85 as http://camera-ip:85. 28 | * Default login and password are `admin` and `12345`, respectively. 29 | * SSH access available as `ssh root@`, there is no password by default. 30 | * After changing the password in the web, it also changes for the console. 31 | * Majestic Endpoints here - https://openipc.org/majestic-endpoints 32 | * Disable built-in LEDs `chmod -x /etc/init.d/S00autoled` and `chmod +x /etc/init.d/S00autoled` for enable it. 33 | * Disable automatic night mode `chmod -x /etc/init.d/S96autonight` and `chmod +x /etc/init.d/S96autonight` for enable it. 34 | * To reset the settings, hold down the Reset button, turn on the camera and wait for the white LED to light up. 35 | * You can find more information about using OpenIPC in our [Wiki](https://wiki.openipc.org). 36 | 37 | 38 | ### Bug reports 39 | 40 | * OpenIPC (firmware, packages, hardware): [https://github.com/OpenIPC/firmware/issues](https://github.com/OpenIPC/firmware/issues) 41 | * Majestic (streamer - sound, video, etc.): [https://github.com/OpenIPC/majestic/issues](https://github.com/OpenIPC/majestic/issues) 42 | * Microbe (web interface): [https://github.com/OpenIPC/microbe-web/issues](https://github.com/OpenIPC/microbe-web/issues) 43 | 44 | 45 | ### References to the previous project 46 | 47 | * [MJSXJ02HL application](https://github.com/kasitoru/mjsxj02hl_application) 48 | * [Build tools for mjsxj02hl firmware](https://github.com/kasitoru/mjsxj02hl_firmware) 49 | * [WEB interface for mjsxj02hl firmware](https://github.com/kasitoru/mjsxj02hl_web) 50 | * [mjsxj02hl_uboot](https://github.com/kasitoru/mjsxj02hl_uboot) 51 | * [Прошивка для IP-камеры MJSXJ02HL с поддержкой RTSP и MQTT](https://kasito.ru/mjsxj02hl_firmware/) 52 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью CH341A](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-ch341a/) 53 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью USB](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-usb/) 54 | * [Прошивка загрузчика IP-камеры MJSXJ02HL с помощью MicroSD карты](https://kasito.ru/proshivka-zagruzchika-ip-kamery-mjsxj02hl-s-pomoshhyu-microsd-karty/) 55 | 56 | --------------------------------------------------------------------------------