nothing_fr Posté(e) Mars 1, 2016 Posté(e) Mars 1, 2016 Coucou tout le monde... Juste un petit topic pour partager un truc avec lequel j'ai fait un peu mumuse aujourd'hui sur mon Raspberry. J'ai commandé des matrices de led Max7219 et j'ai fait un pti script python rapidos pour interroger octoprint et afficher les infos dessus. Si ça vous intéresse, il faut juste un prérequis pour interroger l'url octo : pip install requests et voilà mon script : #! /usr/bin/env python import json import requests import time import math from random import randrange # Import library import multilineMAX7219 as LEDMatrix # Import fonts from multilineMAX7219_fonts import CP437_FONT, SINCLAIRS_FONT, LCD_FONT, TINY_FONT # The following imported variables make it easier to feed parameters to the library functions from multilineMAX7219 import DIR_L, DIR_R, DIR_U, DIR_D from multilineMAX7219 import DIR_LU, DIR_RU, DIR_LD, DIR_RD from multilineMAX7219 import DISSOLVE, GFX_ON, GFX_OFF, GFX_INVERT # Initialise the library and the MAX7219/8x8LED arrays LEDMatrix.init() #### A MODIFIER #### octo_api_url = 'http://monurlocto/api' api_key = 'maclefapi' #################### job_url = "{}/job?apikey={}".format(octo_api_url, api_key) reponse = requests.get(job_url, verify=False) data = reponse.json() print "-------------" print data print "-------------" state = data['state'] completion = data['progress']['completion'] time_left = data['progress']['printTimeLeft'] print_time = data['progress']['printTime'] printed_object = data['job']['file']['name'] msg_state = "@:{}".format(state) if msg_state == "@:Printing": if type(completion) == int or type(completion) == float: msg_completion = "%:{}".format(round(completion, 2)) else: msg_completion = "%:{}".format(completion) if type(print_time) == int or type(print_time) == float: msg_printtime = "PT~:{}".format(print_time/60) else: msg_printtime = "PT~:{}".format(print_time) if type(time_left) == int or type(time_left) == float: msg_timeleft = "~ETA:{}".format(time_left/60) else: msg_timeleft = "~ETA~:{}".format(time_left) msg_matrix = " " + msg_state + " (" + printed_object + ") - " + msg_completion + " - " + msg_printtime + " - " + msg_timeleft LEDMatrix.brightness(0) LEDMatrix.scroll_message_horiz([msg_matrix], 4.5//3, 4.5, DIR_L) else: exit(0) Il faut d'abord récupérer le projet multilineMAX7219 ici -> https://github.com/tutRPi/multilineMAX7219 en faisant un pti : git clone https://github.com/tutRPi/multilineMAX7219.git -- ATTENTION A BIEN LIRE LA DOC DU FICHIER multilineMAX7219.py -- Il y a des choses a changer en fonction de votre setup de matrices LED -- puis copier mon script dans le dossier, et l'éditer pour modifier l'url et la clé API avec les lignes : octo_api_url = 'http://monurlocto/api' api_key = 'maclefapi' puis pour le tester le script : python octoprint.py ATTENTION, par défaut, mon script n'affiche quelque chose que si un print est en cours... Une fois que vous êtes sur qu'il fonctionne, vous pouvez le mettre en crontab toutes les 5min dans le style : */5 * * * * /home/pi/multilineMAX7219/octoprint.py Normalement ça doit donner un truc du genre : 5
Heisenberg Posté(e) Mars 1, 2016 Posté(e) Mars 1, 2016 Super boulot et belles explications @nothing_fr ! Encore un ptit script et ça pourra faire le café
nothing_fr Posté(e) Mars 1, 2016 Auteur Posté(e) Mars 1, 2016 (modifié) Faut que je me fasse un pti boitier pour tout ça un peu sympa et ça sera encore mieux Je dois aussi voir pour afficher des pictos a la place du texte, genre un sablier, une montre etc... (mais j'ai pas encore pris le temps pour ça) Modifié (le) Mars 1, 2016 par nothing_fr
spore Posté(e) Mars 2, 2016 Posté(e) Mars 2, 2016 Excellent, merci Nothing. Je me demandais comment interroger Octoprint. C'est juste pile poil ce que je cherchais!
LeBress Posté(e) Mars 2, 2016 Posté(e) Mars 2, 2016 @nothing_fr , je suppose que ton autre projet d'écran tombe à l'eau ?
nothing_fr Posté(e) Mars 2, 2016 Auteur Posté(e) Mars 2, 2016 (modifié) non, pas du tout, mais je ne l'ai pas encore Dès que je le reçois je m'y colle... la c'était plus en attendant pour m'amuser... En plus, ça a l'avantage d'être visible de loin. Modifié (le) Mars 2, 2016 par nothing_fr
nothing_fr Posté(e) Mars 2, 2016 Auteur Posté(e) Mars 2, 2016 Ptite update, pas grand chose de changé, juste le texte + effacement de la matrice en cas d'interrupt au clavier... #! /usr/bin/env python import json import requests import time import math from random import randrange # Import library import multilineMAX7219 as LEDMatrix # Import fonts from multilineMAX7219_fonts import CP437_FONT, SINCLAIRS_FONT, LCD_FONT, TINY_FONT # The following imported variables make it easier to feed parameters to the library functions from multilineMAX7219 import DIR_L, DIR_R, DIR_U, DIR_D from multilineMAX7219 import DIR_LU, DIR_RU, DIR_LD, DIR_RD from multilineMAX7219 import DISSOLVE, GFX_ON, GFX_OFF, GFX_INVERT # Initialise the library and the MAX7219/8x8LED arrays LEDMatrix.init() #### A MODIFIER #### octo_api_url = 'http://monurlocto/api' api_key = 'maclefapi' #################### job_url = "{}/job?apikey={}".format(octo_api_url, api_key) reponse = requests.get(job_url, verify=False) data = reponse.json() print "-------------" print data print "-------------" state = data['state'] completion = data['progress']['completion'] time_left = data['progress']['printTimeLeft'] print_time = data['progress']['printTime'] printed_object = data['job']['file']['name'] msg_state = "{}".format(state) try: if msg_state == "Printing": if type(completion) == int or type(completion) == float: msg_completion = "Completed:{}%".format(round(completion, 2)) else: msg_completion = "Completed:{}%".format(completion) if type(print_time) == int or type(print_time) == float: msg_printtime = "Elapsed Time:{}min".format(print_time/60) else: msg_printtime = "Elapsed Time:{}".format(print_time) if type(time_left) == int or type(time_left) == float: msg_timeleft = "~ETA:{}min".format(time_left/60) else: msg_timeleft = "~ETA~:{}".format(time_left) msg_matrix = " " + msg_state + " (" + printed_object + ") - " + msg_completion + " - " + msg_printtime + " - " + msg_timeleft LEDMatrix.brightness(0) LEDMatrix.scroll_message_horiz([msg_matrix], 4.8//3, 4.8, DIR_L) else: exit(0) except KeyboardInterrupt: LEDMatrix.clear_all()
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant