airQ空气质量监测数据(印度)采集系统,用Python3编写。

airQ的Python项目详细描述


airQ v0.3.3版

近实时空气质量指示数据收集服务(适用于印度),由:心脏:

考虑将:star:放在“表示爱和支持”

Companion repo位于:airQ-insight,用于增强可视化

它有什么作用?在

  • 空气质量数据采集器,收集自180+地面监测站(遍布印度)
  • 不可靠的JSON数据集是从here获取的,该数据集提供来自所有监测站的当前小时污染物统计数据,分布在India,然后将其对象化、清理、处理和重组为正确的格式,并将其推送到*.JSON文件中
  • minimmax&;max$max&;average给出的空气质量数据,给出的空气质量数据由^{{},^{{PM10,CONH3OZONE,{{}&{{{{{em1}$timesta戳提供,与{em1}$timeStamp提供,与{em1}$timesta戳提供,在{{em1}$(从那里收集的)
  • 使用systemd(每小时)

安装

airQ可以使用pip从PyPI轻松安装。在

$ pip install airQ --user # or may be use pip3
$ python3 -m pip install airQ --user # if previous one doesn't work

使用

安装airQ之后,使用以下命令运行它

^{pr2}$

自动化

  • 我的计划是自动化这个数据收集服务,这样它就可以保持每小时运行一次,并不断刷新数据集
  • 为此,我使用了systemd,它将使用systemd.timer每小时触发一次{str 1}$airQ的执行,即在延迟1h之后,周期性地执行airQ
  • 为此,我们需要添加两个文件,*.service&;*.timer(放在./systemd/

在航空服务

我们的服务不应该一直运行,只有当计时器触发器要求它运行时,它才会运行。所以在[Unit]部分,它声明了它WantsairQ.timer

[Unit]
Description=Air Quality Data collection service
Wants=airQ.timer

您需要在[Service]单元声明的WorkingDirectory字段中设置当前工作目录的绝对路径

ExecStart是在airQ.timer调用此服务单元时要执行的命令,因此需要airQ的绝对安装路径和绝对sink路径(*.json)

确保根据您的系统更新User字段,以正确反映更改。在

如果您只需在[Service]单元下添加一个Restart字段,并给它一个值always,我们可以使这个脚本始终运行,这对运行服务器很有帮助,但是我们将使用systemd.timer来触发脚本的执行,这与cron非常相似,但在几乎所有基于linux的发行版中使用和支持的更多

[Service]
User=anjan
WorkingDirectory=/absolute-path-to-current-working-directory/
ExecStart=/absolute-path-to-airQ /home/user/data/data.json

此声明使此服务成为multi-user.target的必需依赖项

[Install]
WantedBy=multi-user.target

在空气定时器

airQ.service非常相同,只有需要airQ.service作为一个强依赖项,因为这是在该计时器过期时要运行的服务

[Unit]
Description=Air Quality Data collection service
Requires=airQ.service

Unit字段指定计时器过期时要执行的服务文件。 如果您创建了一个与./systemd/*.timer同名的./systemd/*.service文件,则可以跳过此字段

因为我们希望每隔1h(相对于上一次执行航空服务),我们将OnUnitActiveSec字段指定为1h

[Timer]
Unit=airQ.service
OnUnitActiveSec=1h

使其成为timers.target的依赖项,以便可以安装此计时器

[Install]
WantedBy=timers.target

自动化运行

需要将当前文件./systemd/*放入/etc/systemd/system/,以便systemd可以轻松找到这些服务和计时器。在

$ sudo cp ./systemd/* /etc/systemd/system/

我们需要重新加载systemddaemon,让它探索新添加的服务和计时器单元。在

$ sudo systemctl daemon-reload

让我们启动定时器我会确保我们的计时器即使在系统重新启动后也能继续运行

$ sudo systemctl enable airQ.timer

开始计时的时间到了

$ sudo systemctl start airQ.timer

所以要立即执行我们的脚本,并且在完成So之后,它将在1h之后再次执行,这样我们就得到了刷新的数据集。在

检查此计时器的状态

$ sudo systemctl status airQ.timer

检查此服务的状态

$ sudo systemctl status airQ.service

考虑在云上运行airQ的实例,我的实例运行在AWS LightSail

可视化

这个服务应该只收集数据并正确地构造它,但是可视化部分是在airQ-insight完成的

希望它有帮助:眨眼:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有办法使多个对象初始化更紧凑?   java确保BUnit包和测试包不包含在生产代码中   java如何使JTextField更小,而不是填满整个空间?   javaawt的矩形交点   用户连续登录应用程序的java条纹(Android)   maven如何在服务器上运行java项目,并将其作为jar添加到EAR项目中   java如何在jar/war的资源文件夹中创建png?   swing在Java中未选择列表项时禁用按钮   java GridView x BaseAdapter并在onItemClick中重新加载   java Apache POI未应用某些颜色索引   java创建URL使用uri有什么区别。解析/uri。生成器/连接字符串?   java JavaFX jfoenix运行时错误(JFXDatePicker)   右旋转二叉搜索树   在Java标准版中运行Java移动应用程序   java为什么要为每个实例创建静态hashmap?   java如何使用RTC唤醒和报警意图   java获取对象中的JSON表达式   (Java)服务器不接受多个连接   java为什么我的目的地为null?   java使用多个参数执行存储过程,并使用spring数据jpa将结果集映射到非实体类