+++ /dev/null
-#!/usr/bin/python
-
-import MySQLdb
-import ConfigParser
-
-from pprint import pprint
-import datetime
-
-import numpy as np
-
-import scipy.signal
-
-global database
-
-def GetTables(name):
- if database:
- c = database.cursor()
- c.execute("SELECT * FROM Items WHERE ItemName like %s",[name])
- return c.fetchall()
- else:
- print "No connection to DB"
- exit()
-
-def Today():
- dt = datetime.datetime.now()
- d_truncated = datetime.date(dt.year, dt.month, dt.day)
- return d_truncated
-
-def Tomorrow():
- dt = Today()
- return dt + datetime.timedelta(days=1)
-
-def Yesterday():
- dt = Today()
- return dt - datetime.timedelta(days=1)
-
-def GetData(id,fromDate=Yesterday(),toDate=Today()):
- if database:
- c = database.cursor()
- c.execute("SELECT * FROM Item"+str(id).strip()+" WHERE Time>=%s AND Time<%s",[fromDate.strftime('%Y-%m-%d %H:%M:%S'),toDate.strftime('%Y-%m-%d %H:%M:%S')])
- return c.fetchall()
- else:
- print "No connection to DB"
- exit()
-
-def FixRecord(id,date,value):
- if database:
- c = database.cursor()
- command="UPDATE Item"+str(id).strip()+" SET Value={} WHERE Time='{}'".format(value,date.strftime('%Y-%m-%d %H:%M:%S'))
- print command
- c.execute(command)
- else:
- print "No connection to DB"
- exit()
-
-try:
-
- cfg = ConfigParser.RawConfigParser(allow_no_value=True)
- cfg.readfp(open('/etc/openhab-db.conf'))
- dbhost = cfg.get("mysql","host")
- dbuser = cfg.get("mysql","user")
- dbpasswd = cfg.get("mysql","passwd")
- dbdb = cfg.get("mysql","db")
-
- itemTemplate = cfg.get("openhab","template")
-
- filterWindow = int(cfg.get("filter","window"))
- filterThreshold = float(cfg.get("filter","threshold"))
-
-except:
-
- print "Error reading configuration file"
- exit()
-
-try:
-
- database = MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpasswd,db=dbdb,use_unicode=True)
- database.set_character_set('utf8')
- c = database.cursor()
- c.execute('SET NAMES utf8;')
-
- print "Connected..."
-
-except:
-
- print "Error connecting database"
- exit()
-
-tables = GetTables(itemTemplate)
-
-for id,name in tables:
-
- print "Processing: "+name
-
- data=GetData(id)
- sTime=[]
- sValue=[]
- for rec in data:
- sTime.append(rec[0])
- sValue.append(rec[1])
- sValue=np.array(sValue)
-
- sValueFilt=scipy.signal.medfilt(sValue,5)
-
- sValueDiff=abs(sValue-sValueFilt)
-
- avg=np.mean(sValueDiff)
-
- for i in range(0,len(sTime)-1):
- if sValueDiff[i]>avg*filterThreshold:
- print "fixing %s : %5.2f %5.2f %5.2f" % (sTime[i],sValue[i],sValueFilt[i],sValueDiff[i])
- FixRecord(id,sTime[i],sValueFilt[i])
-
- database.commit()
-
-print "Processed "
-
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+if [ "$1" = "stop" ]
+then
+
+ for i in `pgrep -f "/bin/bash /opt/mqtt-mpd/mqmpdj"`
+ do
+ killtree $i 9
+ done
+
+ exit 0
+
+fi
+
+. /opt/mqtt-mpd/mqmpd.cfg
+
+# запускаем процессы, мониторящие состояние
+
+i=0
+while [ "x${hosts[i]}" != "x" ]
+do
+
+ /opt/mqtt-mpd/mqmpdj ${hosts[i]} ${passwd[i]} &
+
+ i=$(( $i + 1 ))
+
+done
+
+# сами остаемся слушать команды
+
+mosquitto_sub -v -h $mqhost -p $mqport -t "$mqcmd/#" -u $mquser -P $mqpassword | while read line
+do
+
+ template="s!$mqcmd/!!"
+ addr=`echo $line | cut -f 1 -d " " | sed $template`
+ arg=`echo $line | cut -f 2 -d " "`
+ echo $addr $arg
+
+ host=`echo $addr | cut -f 1 -d "/"`
+ cmd=`echo $addr | cut -f 2 -d "/"`
+
+ i=0
+ while [ "x${hosts[i]}" != "x" ]
+ do
+ if [ "${hosts[i]}" = "$host" ]
+ then
+ mpdpass=${passwd[i]}
+ if [ "$mpdpass" = "-" ]
+ then
+ mpccmd="mpc -h $host"
+ else
+ mpccmd="mpc -h $host -P $mpdpass"
+ fi
+ break
+ fi
+ i=$(( $i + 1 ))
+ done
+
+ arg=`printf "%q" $arg`
+ if [[ "$arg" =~ [A-Za-z0-9]+ ]]
+ then
+
+ case $cmd in
+
+ volume)
+ reply=( `$mpccmd volume`)
+ currvolume=`echo ${reply[1]} | sed 's/%//'`
+ if [ "$currvolume" ]
+ then
+ if [ "$arg" -gt "$currvolume" ]
+ then
+ delta=$(( $arg - $currvolume ))
+ $mpccmd volume +$delta
+ fi
+ if [ "$arg" -lt "$currvolume" ]
+ then
+ delta=$(( $currvolume - $arg ))
+ $mpccmd volume -$delta
+ fi
+ fi
+ ;;
+ status)
+ case $arg in
+ playing)
+ $mpccmd play
+ ;;
+ stopped)
+ $mpccmd stop
+ ;;
+ paused)
+ $mpccmd pause
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ repeat|random|single|consume)
+ $mpccmd $cmd $arg
+ ;;
+ *)
+ echo "Неизвестная команда $cmd"
+ ;;
+
+ esac
+
+ else
+
+ echo "Недопустимый аргумент $arg"
+
+ fi
+
+done
--- /dev/null
+mqhost=localhost
+mqport=1883
+mquser="mpd"
+mqpassword="mypassword"
+mqtopic="mpd/out"
+mqcmd="mpd/in"
+hosts=("host1" "host2" "host3")
+passwd=("password1" "-" "password3")
--- /dev/null
+mqhost=localhost
+mqport=1883
+mquser="mpd"
+mqpassword="wsufytcvtldtltv"
+mqtopic="mpd/out"
+mqcmd="mpd/in"
+hosts=("estia" "nefele" "orpheus")
+passwd=("gdetotamdaleko" "11093008" "malenkayakorobka")
--- /dev/null
+#!/bin/bash
+
+. /opt/mqtt-mpd/mqmpd.cfg
+
+host=$1
+passwd=$2
+
+if [ "$passwd" = "-" ]
+then
+
+ command="mpc -h $host"
+
+else
+
+ command="mpc -h $host -P $passwd"
+
+fi
+
+while :
+do
+ $command idle
+ if [ $? = 0 ]
+ then
+# current=`mpc -h $host -P $passwd current | sed 's/"/\"/g'`
+# volume=`mpc -h $host -P $passwd volume | cut -d: -f2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'`
+
+ mapfile -t array < <( $command )
+ if [ ${#array[@]} = 3 ]
+ then
+ current=${array[0]}
+ str2=( ${array[1]})
+ str3=( ${array[2]})
+ status=`echo ${str2[0]} | sed 's/^\[//' | sed 's/\]$//'`
+ current_track_num=`echo ${str2[1]} | cut -d '/' -f 1 | sed 's/^#//'`
+ tracks_in_list=`echo ${str2[1]} | cut -d '/' -f 2`
+ current_pos=`echo ${str2[2]} | cut -d '/' -f 1`
+ track_length=`echo ${str2[2]} | cut -d '/' -f 2`
+ volume=`echo ${str3[1]} | sed 's/%//'`
+ repeat=${str3[3]}
+ random=${str3[5]}
+ single=${str3[7]}
+ consume=${str3[9]}
+ else
+ current='-'
+ status='stopped'
+ current_track_num='0'
+ tracks_in_list='0'
+ current_pos='-'
+ track_length='-'
+ str3=( ${array[0]})
+ volume=`echo ${str3[1]} | sed 's/%//'`
+ if [ "$volume" = "n/a" ]
+ then
+ volume="0"
+ fi
+ repeat=${str3[3]}
+ random=${str3[5]}
+ single=${str3[7]}
+ consume=${str3[9]}
+ fi
+
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/nowplaying -m "$current" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/volume -m "$volume" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/status -m "$status" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/currentnum -m "$current_track_num" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/tracks -m "$tracks_in_list" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/currentpos -m "$current_pos" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/tracklen -m "$track_length" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/repeat -m "$repeat" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/random -m "$random" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/single -m "$single" -u $mquser -P $mqpassword
+ mosquitto_pub -h $mqhost -p $mqport -t $mqtopic/$host/consume -m "$consume" -u $mquser -P $mqpassword
+
+ else
+ sleep 30
+ fi
+done
--- /dev/null
+#!/usr/bin/python
+
+import MySQLdb
+import ConfigParser
+import sys
+
+from pprint import pprint
+import datetime
+
+import numpy as np
+
+import scipy.signal
+
+global database
+
+def GetTables(name):
+ if database:
+ c = database.cursor()
+ c.execute("SELECT * FROM Items WHERE ItemName like %s",[name])
+ return c.fetchall()
+ else:
+ print "No connection to DB"
+ exit()
+
+def Today():
+ dt = datetime.datetime.now()
+ d_truncated = datetime.date(dt.year, dt.month, dt.day)
+ return d_truncated
+
+def Tomorrow():
+ dt = Today()
+ return dt + datetime.timedelta(days=1)
+
+def Yesterday():
+ dt = Today()
+ return dt - datetime.timedelta(days=1)
+
+def GetData(id,fromDate=Yesterday(),toDate=Today()):
+ if database:
+ c = database.cursor()
+ c.execute("SELECT * FROM Item"+str(id).strip()+" WHERE Time>=%s AND Time<%s",[fromDate.strftime('%Y-%m-%d %H:%M:%S'),toDate.strftime('%Y-%m-%d %H:%M:%S')])
+ return c.fetchall()
+ else:
+ print "No connection to DB"
+ exit()
+
+def FixRecord(id,date,value):
+ if database:
+ c = database.cursor()
+ command="UPDATE Item"+str(id).strip()+" SET Value={} WHERE Time='{}'".format(value,date.strftime('%Y-%m-%d %H:%M:%S'))
+ print command
+ c.execute(command)
+ else:
+ print "No connection to DB"
+ exit()
+
+def ProcessTable(id):
+
+ if not current:
+ data=GetData(id)
+ else:
+ data=GetData(id,Today(),Tomorrow())
+ sTime=[]
+ sValue=[]
+ for rec in data:
+ sTime.append(rec[0])
+ sValue.append(rec[1])
+ sValue=np.array(sValue)
+
+ sValueFilt=scipy.signal.medfilt(sValue,5)
+
+ sValueDiff=abs(sValue-sValueFilt)
+
+ avg=np.mean(sValueDiff)
+
+ for i in range(0,len(sTime)-1):
+ if sValueDiff[i]>avg*filterThreshold:
+ print "fixing %s : %5.2f %5.2f %5.2f" % (sTime[i],sValue[i],sValueFilt[i],sValueDiff[i])
+ FixRecord(id,sTime[i],sValueFilt[i])
+
+ database.commit()
+
+if len(sys.argv)==2 and sys.argv[1]=='current':
+ current=True
+else:
+ current=False
+
+
+try:
+
+ cfg = ConfigParser.RawConfigParser(allow_no_value=True)
+ cfg.readfp(open('/etc/openhab-db.conf'))
+ dbhost = cfg.get("mysql","host")
+ dbuser = cfg.get("mysql","user")
+ dbpasswd = cfg.get("mysql","passwd")
+ dbdb = cfg.get("mysql","db")
+
+ itemTemplate = cfg.get("openhab","template")
+
+ filterWindow = int(cfg.get("filter","window"))
+ filterThreshold = float(cfg.get("filter","threshold"))
+
+except:
+
+ print "Error reading configuration file"
+ exit()
+
+try:
+
+ database = MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpasswd,db=dbdb,use_unicode=True)
+ database.set_character_set('utf8')
+ c = database.cursor()
+ c.execute('SET NAMES utf8;')
+
+ print "Connected..."
+
+except:
+
+ print "Error connecting database"
+ exit()
+
+tables = GetTables(itemTemplate)
+
+for id,name in tables:
+
+ print "Processing: "+name
+
+ ProcessTable(id)
+
+print "Processed "
+
\ No newline at end of file