Наборчик для общения между несколькими mpd и openhab через mqtt.
[openhab-process.git] / mqtt-mpd / mqmpd
diff --git a/mqtt-mpd/mqmpd b/mqtt-mpd/mqmpd
new file mode 100755 (executable)
index 0000000..9867146
--- /dev/null
@@ -0,0 +1,112 @@
+#!/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