×ðÁú¿­Ê±

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌ

Äã¿ÉÄÜÐèÒªÒ»¸öÊ÷Ý®ÅɵÄÒDZíÅÌ£¬ÒÔÏàʶÆäÐÔÄÜÇéÐÎ ¡£ÔÚ±¾ÎÄÖУ¬ÎÒ½«ÑÝʾÔõÑù¿ìËÙ¹¹½¨Ò»¸ö°´Ðè¼à¿ØÒDZíÅÌ£¬ÒÔʵʱÉó²éÄãµÄÊ÷Ý®ÅÉµÄ cpu ÐÔÄÜ¡¢ÄÚ´æºÍ´ÅÅÌʹÓÃÇéÐΣ¬²¢Æ¾Ö¤ÐèÒªËæʱÌí¼Ó¸ü¶àÊÓͼºÍ²Ù×÷ ¡£

ÈôÊÇÄãÒѾ­Ê¹Óà Appsmith£¬Ä㻹¿ÉÒÔÖ±½Óµ¼Èë Ê¾ÀýÓ¦ÓóÌÐò ²¢×îÏÈʹÓà ¡£

Appsmith

Appsmith ÊÇÒ»¸ö¿ªÔ´µÄ µÍ´úÂë Ó¦Óù¹½¨¹¤¾ß£¬×ÊÖú¿ª·¢Ö°Ô±ÇáËÉ¿ìËٵع¹½¨ÄÚ²¿Ó¦Óã¬ÈçÒDZíÅ̺ÍÖÎÀíÃæ°å ¡£ËüÊÇÒ»¸öÓÃÓÚÒDZíÅ̵ĺܺÃÑ¡Ôñ£¬²¢ïÔÌ­Á˹Űå±àÂëÒªÁìËùÐèµÄʱ¼äºÍÖØ´óÐÔ ¡£

ÔÚ´ËʾÀýµÄÒDZíÅÌÖУ¬ÎÒÏÔʾÒÔÏÂͳ¼ÆÐÅÏ¢£º

CPU

Õ¼ÓðٷֱÈ

ƵÂÊ»òʱÖÓËÙÂÊ

¼ÆÊý

ζÈ

ÄÚ´æ

Õ¼ÓðٷֱÈ

¿ÉÓÃÄÚ´æ°Ù·Ö±È

×ÜÄÚ´æ

¿ÕÏÐÄÚ´æ

´ÅÅÌ

´ÅÅÌʹÓðٷֱÈ

¾ø¶Ô´ÅÅÌ¿Õ¼äʹÓÃÁ¿

¿ÉÓôÅÅÌ¿Õ¼ä

×Ü´ÅÅÌ¿Õ¼ä

½¨ÉèÒ»¸ö¶Ëµã

ÄãÐèÒªÒ»ÖÖ´ÓÊ÷Ý®ÅÉ»ñÈ¡ÕâЩÊý¾Ý²¢×ª´ï¸ø Appsmith µÄÒªÁì ¡£psutil ÊÇÒ»¸öÓÃÓÚ¼à¿ØºÍÆÊÎöµÄ Python ¿â£¬¶ø Flask-RESTful ÊÇÒ»¸ö½¨Éè REST API µÄ Flask À©Õ¹ ¡£

Appsmith ÿ¸ô¼¸ÃëÖÓŲÓà REST API ÒÔ×Ô¶¯Ë¢ÐÂÊý¾Ý£¬²¢ÒÔ JSON ¹¤¾ß×÷ΪÏìÓ¦£¬ÆäÖаüÀ¨ËùÓÐËùÐèµÄͳ¼ÆÐÅÏ¢£¬ÈçÏÂËùʾ£º

{ "cpu_count": 4,"cpu_freq": [600.0,600.0,1200.0 ],"cpu_mem_avail": 463953920,"cpu_mem_free": 115789824,"cpu_mem_total": 971063296,"cpu_mem_used": 436252672,"cpu_percent": 1.8,"disk_usage_free": 24678121472,"disk_usage_percent": 17.7,"disk_usage_total": 31307206656,"disk_usage_used": 5292728320,"sensor_temperatures": 52.616 }

µÇ¼ºó¸´ÖÆ

1¡¢ÉèÖà REST API

ÈôÊÇÄãµÄÊ÷Ý®ÅÉÉÐδװÖà Python£¬ÇëÔÚÊ÷Ý®ÅÉÉÏ·­¿ªÖն˲¢ÔËÐдË×°ÖÃÏÂÁ

$ sudo apt install python3

µÇ¼ºó¸´ÖÆ

ÏÖÔÚΪÄãµÄ¿ª·¢ÉèÖÃÒ»¸ö Python ÐéÄâÇéÐΣº

$ python -m venv PiData

µÇ¼ºó¸´ÖÆ

½ÓÏÂÀ´£¬¼¤»î¸ÃÇéÐÎ ¡£Äã±ØÐèÔÚÖØÐÂÆô¶¯Ê÷Ý®ÅɺóÖ´Ðд˲Ù×÷ ¡£

$ source PiData/bin/activate$ cd PiData

µÇ¼ºó¸´ÖÆ

ΪÁË×°Öà Flask¡¢Flask-RESTful ºÍÒÔºóÐèÒªµÄÒÀÀµÏÇëÔÚÄãµÄ Python ÐéÄâÇéÐÎÖн¨ÉèÒ»¸öÃûΪ requirements.txt µÄÎļþ£¬²¢½«ÒÔÏÂÄÚÈÝÌí¼Óµ½ÆäÖУº

flaskflask-restfulgunicorn

µÇ¼ºó¸´ÖÆ

ÉúÑÄÎļþ£¬È»ºóʹÓàpip Ò»´ÎÐÔ×°ÖÃËüÃÇ ¡£Äã±ØÐèÔÚÖØÐÂÆô¶¯Ê÷Ý®ÅɺóÖ´Ðд˲Ù×÷ ¡£

(PyData)$ python -m pip install -r requirements.txt

µÇ¼ºó¸´ÖÆ

½ÓÏÂÀ´£¬½¨ÉèÒ»¸öÃûΪ pi_stats.py µÄÎļþÀ´´æ·ÅʹÓàpsutil ¼ìË÷Ê÷Ý®ÅÉϵһÇмÆÐÅÏ¢µÄÂß¼­ ¡£½«ÒÔÏ´úÂëÕ³Ìùµ½ pi_stats.py ÎļþÖУº

from flask import Flaskfrom flask_restful import Resource, Apiimport psutilapp = Flask(__name__)api = Api(app)class PiData(Resource):def get(self):return "RPI Stat dashboard"api.add_resource(PiData, '/get-stats')if __name__ == '__main__':app.run(debug=True)

µÇ¼ºó¸´ÖÆ

Õâ¶Î´úÂëµÄ×÷ÓÃÈçÏ£º

ʹÓàapp = Flask(name) À´½ç˵ǶÌ× API ¹¤¾ßµÄÓ¦ÓóÌÐò ¡£

ʹÓà Flask-RESTful µÄ API ÒªÁì À´½ç˵ API ¹¤¾ß ¡£

ÔÚ Flask-RESTful Öн« PiData ½ç˵ΪÏêϸµÄ Resource Àà £¬ÒÔ¹ûÕæÿ¸öÖ§³ÖµÄ HTTP ÒªÁì ¡£

ʹÓàapi.add_resource(PiData, ‘/get-stats’) ½«×ÊÔ´ PiData ¸½¼Óµ½ API ¹¤¾ß api ¡£

ÿµ±Äã»á¼û URL /get-stats Ê±£¬½«·µ»Ø PiData ×÷ΪÏìÓ¦ ¡£

2¡¢Ê¹Óà psutil ¶Áȡͳ¼ÆÐÅÏ¢

Òª´ÓÄãµÄÊ÷Ý®ÅÉ»ñȡͳ¼ÆÐÅÏ¢£¬Äã¿ÉÒÔʹÓàpsutil ÌṩµÄÕâЩÄÚÖú¯Êý£º

cpu_percentage¡¢cpu_count¡¢cpu_freq ºÍ sensors_temperatures º¯Êý»®·ÖÓÃÓÚ»ñÈ¡ CPU µÄÕ¼Óðٷֱȡ¢¼ÆÊý¡¢Ê±ÖÓËÙÂʺÍζÈ ¡£sensors_temperatures ±¨¸æÁËÓëÊ÷Ý®ÅÉÅþÁ¬µÄËùÓÐ×°±¸µÄζÈ ¡£Òª½ö»ñÈ¡ CPU µÄζÈ£¬ÇëʹÓüü cpu-thermal ¡£

virtual_memory º¯Êý¿É·µ»Ø×ÜÄÚ´æ¡¢¿ÉÓÃÄÚ´æ¡¢ÒÑʹÓÃÄÚ´æºÍ¿ÕÏÐÄÚ´æµÄͳ¼ÆÐÅÏ¢£¨ÒÔ×Ö½ÚΪµ¥Î»£© ¡£

disk_usage º¯Êý¿É·µ»Ø×Ü´ÅÅ̿ռ䡢ÒÑʹÓÿռäºÍ¿ÉÓÿռäµÄͳ¼ÆÐÅÏ¢£¨ÒÔ×Ö½ÚΪµ¥Î»£© ¡£

½«ËùÓк¯Êý×éºÏµ½Ò»¸ö Python ×ÖµäÖеÄʾÀýÈçÏ£º

system_info_data = {'cpu_percent': psutil.cpu_percent(1),'cpu_count': psutil.cpu_count(),'cpu_freq': psutil.cpu_freq(),'cpu_mem_total': memory.total,'cpu_mem_avail': memory.available,'cpu_mem_used': memory.used,'cpu_mem_free': memory.free,'disk_usage_total': disk.total,'disk_usage_used': disk.used,'disk_usage_free': disk.free,'disk_usage_percent': disk.percent,'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current,}

µÇ¼ºó¸´ÖÆ

ÏÂÒ»½Ú½«Ê¹ÓøÃ×Öµä ¡£

3¡¢´Ó Flask-RESTful API »ñÈ¡Êý¾Ý

ΪÁËÔÚ API ÏìÓ¦Öп´µ½À´×ÔÊ÷Ý®ÅɵÄÊý¾Ý£¬Çë¸üРpi_stats.py Îļþ£¬½«×Öµä system_info_data °üÀ¨ÔÚ PiData ÀàÖУº

from flask import Flaskfrom flask_restful import Resource, Apiimport psutilapp = Flask(__name__)api = Api(app)class PiData(Resource):def get(self):memory = psutil.virtual_memory()disk = psutil.disk_usage('/')system_info_data = {'cpu_percent': psutil.cpu_percent(1),'cpu_count': psutil.cpu_count(),'cpu_freq': psutil.cpu_freq(),'cpu_mem_total': memory.total,'cpu_mem_avail': memory.available,'cpu_mem_used': memory.used,'cpu_mem_free': memory.free,'disk_usage_total': disk.total,'disk_usage_used': disk.used,'disk_usage_free': disk.free,'disk_usage_percent': disk.percent,'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current, }return system_info_dataapi.add_resource(PiData, '/get-stats')if __name__ == '__main__':app.run(debug=True)

µÇ¼ºó¸´ÖÆ

ÄãµÄ¾ç±¾ÒѾ­Í£µ±£¬ÏÂÃæÔËÐРPiData.py£º

$ python PyData.py * Serving Flask app "PiData" (lazy loading) * Environment: production WARNING: This is a development server. Do not run this in a production environment. * Debug mode: on * Running on http://127.0.0.1:5000 (Press CTRL+C to quit) * Restarting with stat * Debugger is active!

µÇ¼ºó¸´ÖÆ

ÄãÓÐÁËÒ»¸ö¿ÉÒÔÊÂÇéµÄ API ¡£

4¡¢½« API ÌṩӦ»¥ÁªÍø

Äã¿ÉÒÔÔÚÍâµØÍøÂçÖÐÓë API ¾ÙÐн»»¥ ¡£È»¶ø£¬ÒªÔÚ»¥ÁªÍøÉÏ»á¼ûËü£¬Äã±ØÐèÔÚ·À»ðǽÖз­¿ªÒ»¸ö¶Ë¿Ú£¬²¢½«´«ÈëµÄÁ÷Á¿×ª·¢µ½ÓÉ Flask ÌṩµÄ¶Ë¿Ú ¡£È»¶ø£¬ÕýÈçÄãµÄ²âÊÔÊä³ö½¨ÒéµÄÄÇÑù£¬ÔÚ Flask ÖÐÔËÐÐ Flask Ó¦ÓóÌÐò½öÊÊÓÃÓÚ¿ª·¢£¬¶ø²»ÊÊÓÃÓÚÉú²ú ¡£ÎªÁËÇå¾²µØ½« API ÌṩӦ»¥ÁªÍø£¬Äã¿ÉÒÔʹÓÃ×°ÖÃÀú³ÌÖÐ×°ÖõĠgunicorn Éú²úЧÀÍÆ÷ ¡£

ÏÖÔÚ£¬Äã¿ÉÒÔÆô¶¯ Flask API ¡£Ã¿´ÎÖØÐÂÆô¶¯Ê÷Ý®ÅÉʱ¶¼ÐèÒªÖ´Ðд˲Ù×÷ ¡£

$ gunicorn -w 4 'PyData:app'Serving on http://0.0.0.0:8000

µÇ¼ºó¸´ÖÆ

Òª´ÓÍⲿÌìÏ»á¼ûÄãµÄÊ÷Ý®ÅÉ£¬ÇëÔÚÍøÂç·À»ðǽÖз­¿ªÒ»¸ö¶Ë¿Ú£¬²¢½«Á÷Á¿¶¨Ïòµ½ÄãÊ÷Ý®ÅÉµÄ IP µØµã£¬¶Ë¿ÚΪ 8000 ¡£

Ê×ÏÈ£¬»ñÈ¡Ê÷Ý®ÅɵÄÄÚ²¿ IP µØµã£º

$ ip addr show | grep inet

µÇ¼ºó¸´ÖÆ

ÄÚ²¿ IP µØµãͨ³£ÒÔ 10 »ò 192 »ò 172 ¿ªÍ· ¡£

½ÓÏÂÀ´£¬Äã±ØÐèÉèÖ÷À»ðǽ ¡£Í¨³££¬Äã´Ó»¥ÁªÍøЧÀÍÌṩÉÌ£¨ISP£©»ñÈ¡µÄ·ÓÉÆ÷ÖÐǶÈëÁË·À»ðǽ ¡£Í¨³££¬Äã¿ÉÒÔͨ¹ýÍøÂçä¯ÀÀÆ÷»á¼û¼ÒÓ÷ÓÉÆ÷ ¡£Â·ÓÉÆ÷µÄµØµãÓÐʱ»á´òÓ¡ÔÚ·ÓÉÆ÷µÄµ×²¿£¬ËüÒÔ 192.168 »ò 10 ¿ªÍ· ¡£²»¹ý£¬Ã¿¸ö×°±¸¶¼²î±ð£¬Òò´ËÎÒÎÞ·¨¸æËßÄãÐèÒªµã»÷ÄÄЩѡÏîÀ´µ÷½âÉèÖà ¡£¹ØÓÚÔõÑùÉèÖ÷À»ðǽµÄÍêÕûÐÎò£¬ÇëÔĶÁ Seth Kenlon µÄÎÄÕ ¡¶´òÆðÔ´¿Ú²¢Í¨¹ýÄãµÄ·À»ðǽ·ÓÉÁ÷Á¿¡· ¡£

»òÕߣ¬Äã¿ÉÒÔʹÓàlocaltunnel À´Ê¹Óö¯Ì¬¶Ë¿Úת·¢Ð§ÀÍ ¡£

Ò»µ©ÄãµÄÁ÷Á¿µÖ´ïÊ÷Ý®ÅÉ£¬Äã¾Í¿ÉÒÔÅÌÎÊÄãµÄ API£º

$ curl https://example.com/get-stats{ "cpu_count": 4, "cpu_freq": [600.0,600.0,1200.0 ], "cpu_mem_avail": 386273280, ...

µÇ¼ºó¸´ÖÆ

ÈôÊÇÄãÒѾ­Ö´Ðе½ÕâÒ»²½£¬ÄÇô×îÄÑÌâµÄ²¿·ÖÒѾ­ÒÑÍùÁË ¡£

5¡¢Öظ´°ì·¨

ÈôÊÇÄãÖØÐÂÆô¶¯ÁËÊ÷Ý®ÅÉ£¬Äã±ØÐèƾ֤ÒÔÏ°취¾ÙÐвÙ×÷£º

ʹÓàsource ÖØ줻î Python ÇéÐÎ

ʹÓàpip Ë¢ÐÂÓ¦ÓóÌÐòµÄÒÀÀµÏî

ʹÓàgunicorn Æô¶¯ Flask Ó¦ÓóÌÐò

ÄãµÄ·À»ðǽÉèÖÃÊdz¤Æڵģ¬µ«ÈôÊÇÄãʹÓÃÁË localtunnel£¬Ôò±ØÐèÔÚÖØÐÂÆô¶¯ºóÆô¶¯ÐµÄËíµÀ ¡£

ÈôÊÇÄãÔ¸Ò⣬¿ÉÒÔ×Ô¶¯»¯ÕâЩʹÃü£¬µ«ÄÇÊÇÁíÒ»¸ö½Ì³ÌµÄÄÚÈÝ ¡£±¾½Ì³ÌµÄ×îºóÒ»²¿·ÖÊÇÔÚ Appsmith ÉϹ¹½¨Ò»¸öÓû§½çÃ棬ʹÓÃÍÏ·ÅʽС²¿¼þºÍһЩ JavaScript£¬½«ÄãµÄÊ÷Ý®ÅÉÊý¾Ý°ó¶¨µ½Óû§½çÃæ ¡£ÐÅÍÐÎÒ£¬´ÓÏÖÔÚ×îÏȺÜÈÝÒ×£¡

ÔÚ Appsmith ÉϹ¹½¨ÒDZíÅÌ

Ó²¼þ¼à¿ØÒDZíÅÌ

ÒªÖÆ×÷Ò»¸öÏñÕâÑùµÄÒDZíÅÌ£¬ÄãÐèÒª½«¹ûÕæµÄ API ¶ËµãÅþÁ¬µ½ Appsmith£¬Ê¹Óà Appsmith µÄС²¿¼þ¿â¹¹½¨Óû§½çÃ棬²¢½« API µÄÏìÓ¦°ó¶¨µ½Ð¡²¿¼þÉÏ ¡£ÈôÊÇÄãÒѾ­Ê¹Óà Appsmith£¬Äã¿ÉÒÔÖ±½Óµ¼Èë Ê¾ÀýÓ¦ÓóÌÐò ²¢×îÏÈʹÓà ¡£

ÈôÊÇÄ㻹ûÓУ¬Çë ×¢²á Ò»¸öÃâ·ÑµÄ Appsmith ÕÊ»§ ¡ £»òÕߣ¬Äã¿ÉÒÔÑ¡Ôñ ×ÔÍÐ¹Ü Appsmith ¡£

½« API ×÷Ϊ Appsmith Êý¾ÝÔ´ÅþÁ¬

µÇ¼µ½ÄãµÄ Appsmith ÕÊ»§ ¡£

ÔÚ×ó²àµ¼º½À¸ÖÐÕÒµ½²¢µã»÷ ¡°ÅÌÎÊ»ò JSQUERIES/JS¡± ÅÔ±ßµÄ ¡°+¡± °´Å¥ ¡£

µã»÷ ¡°½¨ÉèÒ»¸ö¿Õȱ APICreate a blank API¡± ¡£

ÔÚÒ³Ã涥²¿£¬½«ÄãµÄÏîÄ¿ÃüÃûΪ ¡°PiData¡± ¡£

»ñÈ¡ÄãµÄ API µÄ URL ¡£ÈôÊÇÄãʹÓõÄÊÇ localtunnel£¬ÔòÊÇÒ»¸ö localtunnel.me µØµã£¬×ÜÊÇÔÚĩβÌí¼Ó /get-stats ÒÔ»ñȡͳ¼ÆÊý¾Ý ¡£½«ÆäÕ³Ìùµ½Ò³ÃæµÄµÚÒ»¸ö¿Õȱ×Ö¶ÎÖУ¬È»ºóµã»÷ ¡°RUN¡± °´Å¥ ¡£

È·±£ÔÚ ¡°ÏìÓ¦Response¡± Ãæ°åÖп´µ½ÀֳɵÄÏìÓ¦ ¡£

Appsmith ½çÃæ

¹¹½¨Óû§½çÃæ

Appsmith µÄ½çÃæºÜÊÇÖ±¹Û£¬µ«ÈôÊÇÄã¸ÐÓ¦ÃÔʧ£¬ÎÒ½¨ÒéÄãÉó²é ÔÚ Appsmith ÉϹ¹½¨ÄãµÄµÚÒ»¸öÓ¦ÓóÌÐò ½Ì³Ì ¡£

ÔÚ»­²¼ÉÏÍ϶¯”Îı¾Text”¡¢”ͼÏñImage”ºÍ”ÍÑÀëÏßDivider”С²¿¼þ×÷ΪÎÊÌâ ¡£½«ËüÃÇÅÅÁÐÈçÏ£º

ÉèÖÃÏîÄ¿µÄÌâ

¡°Îı¾Text¡± С²¿¼þ°üÀ¨ÄãÒ³ÃæµÄÏÖʵÎÊÌâ ¡£¼üÈë±È¡°Raspberry Pi Stats¡±¸ü¿áµÄÄÚÈÝ ¡£

¡°Í¼ÏñImage¡± С²¿¼þÓÃÓÚչʾÒDZíÅ̵ÄÆæÒì±ê¼Ç ¡£Äã¿ÉÒÔʹÓÃÄãϲ»¶µÄÈκαê¼Ç ¡£

ʹÓà ¡°¿ª¹ØSwitch¡± С²¿¼þÀÍÆÈ´»ÊµÊ±Êý¾Ýģʽ ¡£´ÓÄã¹¹½¨µÄ API »ñÈ¡Êý¾Ý£¬ÐèÒªÔÚ “ÊôÐÔProperty” Ãæ°å¾ÙÐÐÉèÖà ¡£

¹ØÓÚÖ÷Ì岿·Ö£¬Ê¹ÓÃÀ´×Ô×ó²àµÄС²¿¼þ¿âµÄÒÔÏÂС²¿¼þ½¨ÉèÒ»¸ö CPU ͳ¼ÆÐÅÏ¢ÇøÓò£¬Ê¹ÓÃÒÔÏÂС²¿¼þ£º

½ø¶ÈÌõProgress Bar

ͳ¼Æ¿òStat Box

ͼ±íChart

¹ØÓÚÄÚ´æºÍ´ÅÅÌͳ¼ÆÐÅÏ¢²¿·Ö£¬Öظ´ÏàͬµÄ°ì·¨ ¡£´ÅÅÌͳ¼ÆÐÅÏ¢²¿·Ö²»ÐèҪͼ±í£¬µ«ÈôÊÇÄãÄÜÕÒµ½ÓÃ;£¬ÄÇÒ²¿ÉÒÔʹÓÃËü ¡£

ÄãµÄ×îÖÕС²¿¼þ½á¹¹Ó¦¸ÃÀàËÆÓÚÒÔÏ£º

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌAppsmith ÖеÄÊôÐÔÉèÖÃ

×îºóÒ»²½Êǽ« API µÄÊý¾Ý°ó¶¨µ½ÄãµÄС²¿¼þÉÏ ¡£

½«Êý¾Ý°ó¶¨µ½Ð¡²¿¼þÉÏ

·µ»Øµ½»­²¼£¬²¢ÔÚÈý¸öÀà±ðµÄ²¿·ÖÖÐÕÒµ½ÄãµÄС²¿¼þ ¡£Ê×ÏÈÉèÖà CPU ͳ¼ÆÐÅÏ¢ ¡£

Òª½«Êý¾Ý°ó¶¨µ½ ¡°½ø¶ÈÌõProgress Bar¡± С²¿¼þ£º

µ¥»÷ ¡°½ø¶ÈÌõProgress Bar¡± С²¿¼þ£¬ÒÔ·­¿ªÓÒ²àµÄ ¡°ÊôÐÔProperty¡± Ãæ°å ¡£

²éÕÒ ¡°½ø¶ÈProgress¡± ÊôÐÔ ¡£

µ¥»÷ ¡°JS¡± °´Å¥ÒÔ¼¤»î JavaScript ¡£

ÔÚ ¡°½ø¶ÈProgress¡± ×Ö¶ÎÖÐÕ³Ìù {{PiData.data.cpu_percent ?? 0}} ¡£´Ë´úÂëÒýÓÃÁËÄãµÄ API µÄÊý¾ÝÁ÷£¬ÃûΪ PiData ¡£Appsmith ½«ÏìÓ¦Êý¾Ý»º±£´æ PiData µÄ .data ÔËËã·ûÄÚ ¡£¼ü cpu_percent °üÀ¨ÁË Appsmith ÓÃÀ´ÏÔʾ CPU ʹÓÃÂʰٷֱȵÄÊý¾Ý ¡£

ÔÚ ¡°½ø¶ÈÌõProgress Bar¡± С²¿¼þÏ·½Ìí¼ÓÒ»¸ö ¡°Îı¾Text¡± С²¿¼þ×÷Ϊ±êÇ© ¡£

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌÔÚÉèÖÃÆÁÄ»Öаó¶¨Ãü¾Ý

ÔÚ CPU ²¿·ÖÓÐÈý¸ö ¡°Í³¼Æ¿òStat Box¡± С²¿¼þ ¡£½«Êý¾Ý°ó¶¨µ½Ã¿¸öС²¿¼þµÄ°ì·¨Óë°ó¶¨ ¡°½ø¶ÈÌõProgress Bar¡± С²¿¼þµÄ°ì·¨ÍêÈ«Ïàͬ£¬Ö»ÊÇÄãÐèÒª´Ó .data ÔËËã·ûÖа󶨲î±ðµÄÊý¾ÝÊôÐÔ ¡£Æ¾Ö¤ÏàͬµÄ°ì·¨¾ÙÐвÙ×÷£¬µ«ÓÐÒÔÏÂÆÆÀý£º

ʹÓà{{${PiData.data.cpu_freq[0]} ?? 0 }} À´ÏÔʾʱÖÓËÙÂÊ ¡£

ʹÓà{{${PiData.data.cpu_count} ?? 0 }} À´ÏÔʾ CPU ¼ÆÊý ¡£

ʹÓà{{${(PiData.data.sensor_temperatures).toPrecision(3)} ?? 0 }} À´ÏÔʾ CPU ζÈÊý¾Ý ¡£

ÈôÊÇÒ»ÇÐ˳Ë죬Ä㽫»ñµÃÒ»¸öƯÁÁµÄÒDZíÅÌ£¬ÈçÏÂËùʾ£º

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌÊ÷Ý®ÅɵÄÒDZíÅÌ

CPU ʹÓÃÂÊÇ÷ÊÆͼ

Äã¿ÉÒÔʹÓà ¡°Í¼±íChart¡± С²¿¼þ½« CPU ʹÓÃÂÊÏÔʾΪÇ÷ÊÆÏߣ¬²¢Ê¹ÆäËæʱ¼ä×Ô¶¯¸üР¡£

Ê×ÏÈ£¬µ¥»÷С²¿¼þ£¬ÔÚÓÒ²àÕÒµ½ ¡°Í¼±íÀàÐÍChart Type¡± ÊôÐÔ£¬²¢½«Æä¸ü¸ÄΪ ¡°ÕÛÏßͼLINE CHART¡± ¡£ÎªÁËÏÔʾÇ÷ÊÆÏߣ¬ÐèÒª½« cpu_percent ´æ´¢ÔÚÊý¾ÝµãÊý×éÖÐ ¡£ÄãµÄ API ÏÖÔÚ½«Æä×÷Ϊµ¥¸öʱ¼äÊý¾Ýµã·µ»Ø£¬Òò´Ë¿ÉÒÔʹÓà Appsmith µÄ storeValue º¯Êý£¨Appsmith ÄÚÖõĠsetItem ÒªÁìµÄÒ»¸öÔ­ÉúʵÏÖ£©À´»ñÈ¡Ò»¸öÊý×é ¡£

ÔÚ ¡°ÅÌÎÊ»ò JSQUERIES/JS¡± ÅԱߵ¥»÷ ¡°+¡± °´Å¥£¬²¢½«ÆäÃüÃûΪ ¡°utils¡± ¡£

½«ÒÔÏ JavaScript ´úÂëÕ³Ìùµ½ ¡°´úÂëCode¡± ×Ö¶ÎÖУº

export default {getLiveData: () => {//When switch is on:if (Switch1.isSwitchedOn) {setInterval(() => {let utilData = appsmith.store.cpu_util_data;PiData.run()storeValue("cpu_util_data", [...utilData, {x: PiData.data.cpu_percent,y: PiData.data.cpu_percent}]); }, 1500, 'timerId')} else {clearInterval('timerId');}},initialOnPageLoad: () => {storeValue("cpu_util_data", []);}}

µÇ¼ºó¸´ÖÆ

ΪÁ˳õʼ»¯ Store£¬ÄãÔÚ initialOnPageLoad ¹¤¾ßÖн¨ÉèÁËÒ»¸ö JavaScript º¯Êý£¬²¢½« storeValue º¯Êý·ÅÔÚÆäÖÐ ¡£

ÄãʹÓàstoreValue(“cpu_util_data”, []); ½« cpu_util_data ÖеÄÖµ´æ´¢µ½ storeValue º¯ÊýÖÐ ¡£´Ëº¯ÊýÔÚÒ³Ãæ¼ÓÔØʱÔËÐÐ ¡£

µ½ÏÖÔÚΪֹ£¬Ã¿´ÎË¢ÐÂÒ³Ãæʱ£¬´úÂ붼»á½« cpu_util_data ÖеÄÒ»¸öÊý¾Ýµã´æ´¢µ½ Store ÖÐ ¡£ÎªÁË´æ´¢Ò»¸öÊý×飬ÄãʹÓÃÁË x ºÍ y µÄϱê±äÁ¿£¬Á½Õ߶¼´æ´¢ÁËÀ´×Ô cpu_percent Êý¾ÝÊôÐÔµÄÖµ ¡£

Ä㻹ϣÍûͨ¹ýÉ趨´æ´¢ÖµÖ®¼äµÄÀο¿Ê±¼ä¾àÀëÀ´×Ô¶¯´æ´¢ÕâЩÊý¾Ý ¡£µ±Ö´ÐРsetInterval º¯Êýʱ£º

»ñÈ¡´æ´¢ÔÚ cpu_util_data ÖеÄÖµ ¡£

ŲÓà API PiData ¡£

ʹÓ÷µ»ØµÄ×îРcpu_percent Êý¾Ý½« cpu_util_data ¸üÐÂΪ x ºÍ y ±äÁ¿ ¡£

½« cpu_util_data µÄÖµ´æ´¢ÔÚ¼ü utilData ÖÐ ¡£

½öµ±ÉèÖÃΪ×Ô¶¯Ö´Ðк¯Êýʱ£¬²ÅÖظ´Ö´Ðа취 1 µ½ 4 ¡£ÄãʹÓà Switch С²¿¼þ½«ÆäÉèÖÃΪ×Ô¶¯Ö´ÐУ¬Õâ¾ÍÚ¹ÊÍÁËΪʲôÓÐÒ»¸ö getLiveData ¸¸º¯Êý ¡£

ÔÚ ¡°ÉèÖÃSettings¡± Ñ¡ÏÖУ¬ÕÒµ½¹¤¾ßÖеÄËùÓи¸º¯Êý£¬²¢ÔÚ ¡°Ò³Ãæ¼ÓÔØʱÔËÐÐRUN ON PAGE LOAD¡± Ñ¡ÏîÖн« initialOnPageLoad ÉèÖÃΪ ¡°Yes£¨ÊÇ£©¡± ¡£

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌÉèÖÃÒ³Ãæ¼ÓÔØʱҪִÐеĺ¯Êý

ÏÖÔÚË¢ÐÂÒ³Ãæ¾ÙÐÐÈ·ÈÏ ¡£

·µ»Øµ½»­²¼ ¡£µ¥»÷ ¡°Í¼±íChart¡± С²¿¼þ£¬²¢ÕÒµ½ ¡°Í¼±íÊý¾ÝChart Data¡± ÊôÐÔ ¡£½«°ó¶¨ {{ appsmith.store.disk_util_data }} Õ³Ìùµ½ÆäÖÐ ¡£ÕâÑù£¬ÈôÊÇÄã×Ô¼º¶à´ÎÔËÐй¤¾ß utils£¬¾Í¿ÉÒÔ»ñµÃͼ±íÊý¾Ý ¡£Òª×Ô¶¯ÔËÐд˲Ù×÷£º

²éÕÒ²¢µ¥»÷ÒDZíÅÌÎÊÌâÖÐµÄ ¡°ÊµÊ±Êý¾Ý¿ª¹ØLive Data Switch¡± С²¿¼þ ¡£

²éÕÒ onChange ÊÂÎñ ¡£

½«Æä°ó¶¨µ½ {{ utils.getLiveData() }} ¡£JavaScript ¹¤¾ßÊÇ utils£¬¶ø getLiveData ÊÇÔÚÄãÇл»¿ª¹Øʱ¼¤»îµÄº¯Êý£¬Ëü»á´ÓÄãµÄÊ÷Ý®ÅÉ»ñȡʵʱÊý¾Ý ¡£¿ÉÊÇÉÐÓÐÆäËûʵʱÊý¾Ý£¬Òò´Ëͳһ¿ª¹ØÒ²ÊÊÓÃÓÚËüÃÇ ¡£¼ÌÐøÔĶÁÒÔÏàʶÏêÇé ¡£

½«Êý¾Ý°ó¶¨µ½ÄÚ´æºÍ´ÅÅ̲¿·ÖµÄС²¿¼þÓëÄãÔÚ CPU ͳ¼ÆÐÅÏ¢²¿·ÖËù×öµÄ·½·¨ÀàËÆ ¡£

¹ØÓÚÄڴ沿·Ö£¬°ó¶¨ÈçÏÂËùʾ£º

½ø¶ÈÌõÖеİó¶¨Îª£º{{( PiData.data.cpu_mem_avail/1000000000).toPrecision(2) * 100 ?? 0 }} ¡£

Èý¸öͳ¼Æ¿òС²¿¼þµÄ°ó¶¨»®·ÖΪ£º{{ ${(PiData.data.cpu_mem_used/1000000000).toPrecision(2)} ?? 0 }} GB¡¢{{ ${(PiData.data.cpu_mem_free/1000000000).toPrecision(2)} ?? 0}} GB ºÍ {{ ${(PiData.data.cpu_mem_total/1000000000).toPrecision(2)} ?? 0 }} GB ¡£

¹ØÓÚ´ÅÅ̲¿·Ö£¬½ø¶ÈÌõºÍͳ¼Æ¿òС²¿¼þµÄ°ó¶¨»®·Ö±äΪ£º

½ø¶ÈÌõµÄ°ó¶¨Îª£º{{ PiData.data.disk_usage_percent ?? 0 }} ¡£

Èý¸öͳ¼Æ¿òС²¿¼þµÄ°ó¶¨»®·ÖΪ£º{{ ${(PiData.data.disk_usage_used/1000000000).toPrecision(2)} ?? 0 }} GB¡¢{{ ${(PiData.data.disk_usage_free/1000000000).toPrecision(2)} ?? 0 }} GB ºÍ {{ ${(PiData.data.disk_usage_total/1000000000).toPrecision(2)} ?? 0 }} GB ¡£

ÕâÀïµÄͼ±íÐèÒª¸üÐÂÄãΪ CPU ͳ¼ÆÐÅÏ¢½¨ÉèµÄ utils ¹¤¾ß£¬Ê¹ÓàstoreValue ¼üÃûΪ disk_util_data£¬Ç¶Ì×ÔÚ getLiveData ÏÂÃ棬ÆäÂß¼­Óë cpu_util_data ÀàËÆ ¡£¹ØÓÚ´ÅÅÌʹÓÃÂÊͼ±í£¬ÎÒÃÇ´æ´¢µÄ disk_util_data µÄÂß¼­Óë CPU ʹÓÃÂÊÇ÷ÊÆͼµÄÂß¼­Ïàͬ ¡£

export default {getLiveData: () => {//When switch is on:if (Switch1.isSwitchedOn) {setInterval(() => { const cpuUtilData = appsmith.store.cpu_util_data; const diskUtilData = appsmith.store.disk_util_data;  PiData.run();  storeValue("cpu_util_data", [...cpuUtilData, { x: PiData.data.cpu_percent,y: PiData.data.cpu_percent }]); storeValue("disk_util_data", [...diskUtilData, { x: PiData.data.disk_usage_percent,y: PiData.data.disk_usage_percent }]);}, 1500, 'timerId')} else {clearInterval('timerId');}},initialOnPageLoad: () => {storeValue("cpu_util_data", []);storeValue("disk_util_data", []);}}

µÇ¼ºó¸´ÖÆ

ͨ¹ýʹÓàutils JavaScript ¹¤¾ßÔÚ·­¿ªºÍ¹Ø±ÕÕæʵÊý¾Ý¿ª¹Øʱ´¥·¢µÄÊý¾ÝÁ÷¿ÉÊÓ»¯ÈçÏÂËùʾ£º

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌÇл»

ÔÚ·­¿ªÊµÊ±Êý¾Ý¿ª¹Øʱ£¬Í¼±í»áÄð³ÉÕâÑù£º

ÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅÌÏÔʾʵʱÊý¾Ý

ÕûÌåÉÏ£¬Ëü¼ÈƯÁÁ£¬ÓÖ¼òÔ¼£¬²¢ÇÒºÜÊÇÓÐÓà ¡£

×£ÄãʹÓÃÓä¿ì£¡

µ±Äã¶Ô psutils¡¢JavaScript ºÍ Appsmith Ô½·¢ÊìϤʱ£¬ÎÒÐÅÍÐÄã»á·¢Ã÷¿ÉÒÔÇáËÉÎÞÏ޵ص÷½âÄãµÄÒDZí°å£¬ÊµÏַdz£¿áµÄ¹¦Ð§£¬ÀýÈ磺

Éó²éÏÈÇ°Ò»ÖÜ¡¢Ò»¸öÔ¡¢Ò»¸ö¼¾¶È¡¢Ò»Äê»òƾ֤ÄãµÄÊ÷Ý®ÅÉÊý¾ÝÔÊÐíµÄÈκÎ×Ô½ç˵¹æÄ£µÄÇ÷ÊÆ

ΪÈκÎͳ¼ÆÊý¾ÝµÄãÐֵΥ¹æ¹¹½¨±¨¾¯»úÖÆ

¼à¿ØÅþÁ¬µ½ÄãµÄÊ÷Ý®ÅɵÄÆäËû×°±¸

½« psutils À©Õ¹µ½Áíһ̨װÖÃÓÐ Python µÄÅÌËã»úÉÏ

ʹÓÃÆäËû¿â¼à¿ØÄã¼ÒÍ¥»ò°ì¹«ÊÒµÄÍøÂç

¼à¿ØÄãµÄ»¨Ô°

¸ú×ÙÄã×Ô¼ºµÄÉúÑÄÏ°¹ß

ÔÚÏÂÒ»¸öÁîÈËÐ˷ܵÄÏîÄ¿ÖУ¬×£ÄãÍæµÃÓä¿ì£¡

ÒÔÉϾÍÊÇÔÚ²»µ½ 30 ·ÖÖÓÄÚ¹¹½¨Ò»¸öÊ÷Ý®Åɼà¿ØÒDZíÅ̵ÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼ ¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±ÊµÊ±ÐÞÕý»òɾ³ý ¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
¡¾ÍøÕ¾µØͼ¡¿¡¾sitemap¡¿