# -*- coding: utf-8 -*-
from demeter.core import *
import modbus_tk
import modbus_tk.modbus_rtu as modbus_rtu
import modbus_tk.defines as mdef
import time
import random
import struct
import serial

class Rtu(object):

	# 启动客户端
	def start(self):
		while(True):
			self.run()
			time.sleep(100)

	def run(self):
		server = Demeter.service('common').list('setting_server', search={'server_type':3})
		if server:
			modbus = Demeter.path + 'modbus.py'
			for v in server:
				command = 'python3 ' + modbus + ' -m rtu_client -i ' + str(v['id'])

				check = "ps aux|grep '"+command+"'|grep -v entrypoint|grep -v grep|grep -v process|awk '{print $1}'"
				check = Shell.popen(check)
				if not check:
					Shell.popen(command, sub=True, bg=True)

	def client(self, id):
		server = Demeter.service('common').one('setting_server', id=id)
		port,baudrate = self.port(server['server_port'])
		master = modbus_rtu.RtuMaster(serial.Serial(port, baudrate=baudrate, bytesize=8, parity='N', stopbits=1, xonxoff=0))
		Demeter.service('handle', 'modbus').set(master, server)

	def send(self, server, type_info, info, value):
		master = modbus_rtu.RtuMaster(serial.Serial(port, baudrate=baudrate, bytesize=8, parity='N', stopbits=1, xonxoff=0))
		Demeter.service('handle', 'modbus').send(master, server, type_info, info, value)

	def port(self, port):
		baudrate = 4800
		if ':' in port:
			data = port.split(':')
			port = data[0]
			baudrate = int(data[1])
		return (port, baudrate)
