Jusqu'à la dernière fois, la mesure automatique est devenue possible en tenant compte des erreurs. Cette fois, nous utiliserons l'API de slack pour notifier à slack la fin de la mesure. Même avec d'autres outils de chat (Discord, Line, etc.), le flux d'acquisition de jetons et d'envoi de requêtes à l'API est le même, je pense donc qu'il peut être utilisé à diverses fins.
Conda install
pySerial dans (2)Le package python slackclient ne fonctionnait pas dans mon environnement
En référence à
Vous pouvez envoyer n'importe quel message à n'importe quel canal à l'aide de l'API slack. Ce qui doit être changé dans le code ci-dessous
Vous devriez pouvoir l'envoyer uniquement
Comment ajouter une mention
Veuillez consulter ce site
import serial
import time
import pandas as pd
##Spécification constante
MAX = 40000
COMampere = "COM10"
COMpulse = "COM9"
bitRate = 9600
##Initialisation variable
pulse = 0
ampere_list = []
pulse_list = []
ampere_average_list =[]
##Mouvement d'origine du dos(Initialisation)
ser = serial.Serial(COMsigma, bitRate, timeout=0.1)
ser.write(b"H:2-\r\n")
# time.sleep(0.1)
# print(ser.read_all())
ser.close()
import requests
class SlackDriver:
def __init__(self, _token):
self._token = _token # api_token
self._headers = {'Content-Type': 'application/json'}
def send_message(self, message, channel):
params = {"token": self._token, "channel": channel, "text": message}
r = requests.get('https://slack.com/api/chat.postMessage',
headers=self._headers,
params=params)
print("return ", r.json())
token = 'xxxx-oooooooooooo-000000000000-hogehoge' #Veuillez utiliser le jeton que vous avez obtenu cette partie
slack = SlackDriver(token)
#Commencer la mesure
try:
while 1:
if pulse >= MAX:
##Termine l'instruction while lorsque la position atteint MAX
break
if pulse ==2000:
slack.send_message("<@IDhogehoge>1000 c'est fini", "#bot-test") #L'ID obtenu est<>Veuillez joindre
if pulse ==30000:
slack.send_message("<@IDhogehoge>15000 c'est fini", "#bot-test")
##Enregistrer les informations de localisation actuelles
pulse_list.append(pulse/2)
##Mesurer le courant(La valeur à cette position est la moyenne de 5 fois.)
for i in range(5):
ser = serial.Serial(COMampere,bitRate,timeout=0.1)
ser.write(b"F5, R0,PR2\r\n")
time.sleep(1)
ser.write(b"MD?\r\n")
time.sleep(1)
tmp = ser.read_all()
#Ignorer s'il n'y a pas de courant
if len(tmp)== 0:
ser.close()
continue
ampere = float(tmp.split()[2])
ampere_average_list.append(ampere)
time.sleep(1)
ser.close()
##Courant et impulsion(position)Lister
ampere_list.append(sum(ampere_average_list)/len(ampere_average_list))
ampere_average_list = []
##Déplacer la table optique
pulse += 1000
position = "A:2+P"+str(pulse)+"\r\n"
ser = serial.Serial(COMpulse,bitRate,timeout=0.1)
ser.write(bytes(position, 'UTF-8'))
time.sleep(1)
ser.write(b"G:\r\n")
ser.close()
##Transformez la liste en un dataframe
print(ampere_list)
print(pulse_list)
df = pd.DataFrame({'ampere(A)':ampere_list,'pulse':pulse_list})
def pulseToMilliMeter(pulse):
return pulse*0.006
df["position(mm)"] = df["pulse"].map(pulseToMilliMeter)
df.to_csv('./csv/result.csv',index=False)
plt.figure()
df.plot(x='position(mm)',y='ampere(A)',marker='o')
plt.savefig('./img/sample.png')
plt.close('all')
except IndexError:
ser.close()
slack.send_message("<@IDhogehoge>La mesure a échoué", "#bot-test")
#Je veux avertir Slack
slack.send_message("<@IDhogehoge>La mesure est terminée", "#bot-test")
##Initialisation variable
pulse = 0
ampere_list = []
pulse_list = []
ampere_average_list =[]
##Mouvement d'origine du dos(Initialisation)
ser = serial.Serial(COMpulse, bitRate, timeout=0.1)
ser.write(b"H:2-\r\n")
time.sleep(0.1)
print(ser.read_all())
ser.close()
Recommended Posts