air initial script added
This commit is contained in:
commit
34574ad57a
|
@ -0,0 +1,139 @@
|
||||||
|
# use glob syntax
|
||||||
|
syntax: glob
|
||||||
|
|
||||||
|
|
||||||
|
# Packages #
|
||||||
|
############
|
||||||
|
# it's better to unpack these files and commit the raw source
|
||||||
|
# git has its own built in compression methods
|
||||||
|
*.7z
|
||||||
|
*.dmg
|
||||||
|
*.gz
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
*.apk
|
||||||
|
*.ipa
|
||||||
|
*.mgl
|
||||||
|
|
||||||
|
# Logs and databases #
|
||||||
|
######################
|
||||||
|
*.log
|
||||||
|
*.sql
|
||||||
|
*.sqlite
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
._.DS_Store
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
Icon?
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
#Ignore files build by Visual Studio
|
||||||
|
# Compiled source #
|
||||||
|
###################
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.obj
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.user
|
||||||
|
*.aps
|
||||||
|
*.pch
|
||||||
|
*.vspscc
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*.ncb
|
||||||
|
*.suo
|
||||||
|
*.tlb
|
||||||
|
*.tlh
|
||||||
|
*.bak
|
||||||
|
*.cache
|
||||||
|
*.ilk
|
||||||
|
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.lib
|
||||||
|
*.sbr
|
||||||
|
*.scc
|
||||||
|
*.sdf
|
||||||
|
*.opensdf
|
||||||
|
[Bb]in
|
||||||
|
[Dd]ebug*/
|
||||||
|
obj/
|
||||||
|
[Rr]elease*/
|
||||||
|
_ReSharper*/
|
||||||
|
[Tt]est[Rr]esult*
|
||||||
|
ipch/
|
||||||
|
doc/
|
||||||
|
moglue/settings/__init__.py
|
||||||
|
########daniel added
|
||||||
|
.orig
|
||||||
|
.hg*
|
||||||
|
*.tmproj
|
||||||
|
*.ser
|
||||||
|
#vim
|
||||||
|
*.swn
|
||||||
|
*.swo
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
tags
|
||||||
|
.rvmrc
|
||||||
|
*.rdb
|
||||||
|
#vimend
|
||||||
|
|
||||||
|
#python
|
||||||
|
*.py[cod]
|
||||||
|
#python packages
|
||||||
|
*.egg
|
||||||
|
*.egg-info
|
||||||
|
dist
|
||||||
|
build
|
||||||
|
eggs
|
||||||
|
parts
|
||||||
|
bin
|
||||||
|
var
|
||||||
|
sdist
|
||||||
|
develop-eggs
|
||||||
|
.installed.cfg
|
||||||
|
lib
|
||||||
|
lib64
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
.coverage
|
||||||
|
.tox
|
||||||
|
nosetests.xml
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
|
||||||
|
# Mr Developer
|
||||||
|
.mr.developer.cfg
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
.idea
|
||||||
|
|
||||||
|
#misc
|
||||||
|
*.pid
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*.iml
|
||||||
|
/out
|
||||||
|
/venv
|
||||||
|
.history
|
||||||
|
.vscode
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Maintainer: surefire@cryptomile.net
|
||||||
|
pkgname=air_monitor
|
||||||
|
pkgver=0+1f41c24+
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="Air monitering Service"
|
||||||
|
arch=('i686' 'x86_64')
|
||||||
|
url="https://amuz.es/src/infra/air"
|
||||||
|
license=('GPL')
|
||||||
|
conflicts=('air')
|
||||||
|
provides=('air')
|
||||||
|
replaces=('air')
|
||||||
|
options=('!buildflags')
|
||||||
|
depends=('python')
|
||||||
|
makedepends=('python' 'git')
|
||||||
|
source=('git+https://amuz.es/src/infra/air.git')
|
||||||
|
md5sums=('SKIP')
|
||||||
|
|
||||||
|
|
||||||
|
pkgver() {
|
||||||
|
cd "${srcdir}/${pkgname}"
|
||||||
|
printf '%s+%s+%s' \
|
||||||
|
$(sed -e 's,/,+,g; s, ,,g' templates/.VERSION) \
|
||||||
|
$(git rev-list --count HEAD...$(git log --pretty=format:%H -n 1 -- templates/.VERSION)) \
|
||||||
|
$(git rev-parse --short HEAD) \
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
mkdir -p "${pkgdir}/opt/air"
|
||||||
|
|
||||||
|
cd "srcdir/${pkgname}"
|
||||||
|
git archive master | tar -x -C "$pkgdir/opt/air"
|
||||||
|
cd "${pkgdir}/opt/air"
|
||||||
|
python -m venv --clear --symlinks venv
|
||||||
|
"${pkgdir}/opt/air/bin/pip" install -r requirements.txt
|
||||||
|
|
||||||
|
install -Dm0644 -t "$pkgdir/usr/lib/systemd/system" "$srcdir/${pkgname}/air.service"
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Air monitering Service
|
||||||
|
After=syslog.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/air
|
||||||
|
ExecStart=/opt/air/venv/bin/python run.py
|
||||||
|
TimeoutStartSec=5
|
||||||
|
User=nobody
|
||||||
|
Group=nobody
|
||||||
|
Restart=on-failure
|
||||||
|
KillSignal=SIGQUIT
|
||||||
|
Type=notify
|
||||||
|
StandardError=syslog
|
||||||
|
NotifyAccess=all
|
||||||
|
PrivateDevices=yes
|
||||||
|
PrivateTmp=yes
|
||||||
|
ProtectSystem=full
|
||||||
|
ReadWriteDirectories=/opt/air
|
||||||
|
#ProtectHome=yes
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,49 @@
|
||||||
|
from mirobo.airpurifier import AirPurifier, OperationMode, LedBrightness
|
||||||
|
from collections import namedtuple
|
||||||
|
from datetime import datetime
|
||||||
|
import time
|
||||||
|
from influxdb import InfluxDBClient
|
||||||
|
import json
|
||||||
|
from systemd import daemon
|
||||||
|
|
||||||
|
|
||||||
|
class Message(namedtuple('Message', ('measurement', 'time', 'tags', 'fields'))):
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
|
||||||
|
class Atmosphere(namedtuple('Atmosphere', ('purifier_activated', 'purifier_fan_rpm', 'temperature', 'aqi', 'humidity'))):
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
def __new__(cls, status):
|
||||||
|
return super(Atmosphere, cls).__new__(cls,
|
||||||
|
status.power == 'on',
|
||||||
|
int(status.motor_speed),
|
||||||
|
float(status.temperature),
|
||||||
|
int(status.aqi),
|
||||||
|
status.humidity / 100.0
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def getStat(dev):
|
||||||
|
while True:
|
||||||
|
time.sleep(1)
|
||||||
|
yield time.time(), Atmosphere(dev.status())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
metric = InfluxDBClient('db', database='core',
|
||||||
|
use_udp=True, udp_port=8089)
|
||||||
|
|
||||||
|
dev = AirPurifier('10.0.1.13', '7e538c9fb31f6f6bfcc3354f46c421ca')
|
||||||
|
tags = {
|
||||||
|
'source': 'mi_air_2',
|
||||||
|
'position': 'center_room',
|
||||||
|
}
|
||||||
|
daemon.notify('READY=1')
|
||||||
|
for at, info in getStat(dev):
|
||||||
|
message = Message('air', int(at*1000000000), tags, info._asdict())
|
||||||
|
print(json.dumps([message._asdict()]))
|
||||||
|
metric.write_points([message._asdict()])
|
||||||
|
finally:
|
||||||
|
daemon.notify('STOPPING=1')
|
|
@ -0,0 +1,3 @@
|
||||||
|
https://github.com/rytilahti/python-mirobo/archive/master.zip
|
||||||
|
influxdb
|
||||||
|
git+https://github.com/systemd/python-systemd.git#egg=systemd
|
Loading…
Reference in New Issue