Octoprint è un server wb di stampa 3d scritto in python, e siccome ultimamente abbiamo tutti abbastanza tempo libero mi sono permesso di provarlo.
Il primo problema è stato, ovviamente, configurare la macchina.
Per prima cosa, bisogna sapere che octoprint supporta solo le stampanti 3d seriali, la mia è una USB, ma ho letto che molte stampanti 3d usb hanno il convertitore dei segnali da usb a seriale e, andando a vedere con lsusb, la mia è così, quindi mi sono buttato nella configurazione.
Per prima cosa bisogna installare python3-pip usando apt, poi bisogna installare octoprint usando pip3.
apt install python3-pip
pip3 install octoprint
Poi bisogna creare sul sistema un utente specifico per avviare il server, e dargli il permesso di leggere le porte seriali (su debian bisogna assegnargli il gruppo secondario tty).
Una volta installato, bisogna aprire il server con
octoprint serve
E bisogna aprire l'interfaccia web andando su http://127.0.0.1:5000
La prima schermata si può cliccare su avanti, la seconda bisogna indicare se si desidera accedere senza alcun controllo (sconsigliato) o se si desidera inserire un utente per il server octoprint.
Poi viene chiesto se si desidera partecipare allo sviluppo del server mandando statistiche anomine (sconsigliato).
Poi viene chiesto se il server deve fare il controllo di connettività, quando deve farlo e a che server deve fare riferimento. La roba di default indica i server di google e quindi va bene.
Poi viene chiesto se abilitare la blacklist dei plugin, ed in seguito viene richiesta la configurazione della stampante.
La prima cosa che viene richiesto è il nome, poi l'area di stampa si possono usare le seguenti schermate come riferimento per la Easythreed Dora.




In seguito vengono richiesti i comandi per riavviare il server octoprint (il programma) e riavviare e spegnere l'intero sistema.
Infine, se si possiede una webcam compatibile, è possibile avviare lo streaming video per vedere la stampa in fase di realizzazione (io non l'ho configurato).
Una volta finita la configurazione, verrà mostrata l'interfaccia principale del programma.
Se tutto è andato a buon fine, si può spuntare autoconnect at server startup e poi cliccare il pulsante connect per connettere il server alla stampante.
Se tutto va bene, non solo comparirà l'interfaccia di connessione, ma il server leggerà pure i files presenti sulla scheda sd.

L'interfaccia in fase di stampa mostra la temperatura, il gcode che si va a inviare, il layer che sta per essere stampato e altre cosucce interessanti, ed è espandibile tramite plugin.
Il mio problema è stato che il file stl di prova è stato correttamente stampato, ma il secondo file, dopo aver concluso la configurazione della macchina no, non mi permetteva proprio di caricarlo, e cercando su internet ho scoperto che c'è stato un aggiornamento che toglie lo slicing dei file stl.
Per cui, usando Prusa Slic3r, mi sono ingegnato per risolvere il problema e ci sono riuscito:
Nella schermata Impostazioni stampante di prusa slic3r, c'è proprio la sezione per l'upload dei file, bisogna indicare l'indirizzo ip della macchina (in questo caso seguito dalla porta che è 5000, perché così è impostato octoprint) e poi la chiave per accedere, che viene trovata cliccando sulla chiave inglese nell'interfaccia web di octoprint e successivamente andando su features > API: si può cliccare sui pulsanti a destra della chiave per copiarla o elaborarne un'altra invalidando tutte le precedenti.
Una volta fatto, ricordatevi di premere invio e di salvare le impostazioni, se no si otterà errore 403 quando si uppa il file.
Fatto questo, aprite l'stl con prusa e generate il gcode normalmente, questa volta comparirà un pulsante aggiuntivo oltre a quello per salvare il file sulla scheda sd che è manda alla stampante: verrà chiesto il nome del file che verrà salvato e verrà automaticamente uploadato su octoprint.
Adesso l'unica cosa da fare è aprire l'interfaccia web di octoprint e cliccare sull'icona di stampa per avviare la stampa.
La stampa sarà più lenta rispetto alla lettura da scheda sd, ma meno rumorosa.
Ci sono plugin per fare lo slicing direttamente sul server.
Infine, aprite un file di testo come root, incollateci il paragrafo seguente dentro, e salvatelo come /lib/systemd/system/octoprint.service
[Unit]
Description=OctoPrint Service
[Service]
ExecStart=/usr/local/bin/octoprint serve
StandardOutput=null
User=octoprint
Group=octoprint
[Install]
WantedBy=multi-user.target
Alias=octoprint.service
In questo modo installate octoprint come servizio (demone) sui sistemi con systemd.
Per avviare octoprint con privilegi dell'utente octoprint e del gruppo octoprint basta digitare
systemctl start octoprint
per avviarlo all'avvio del sistema
systemctl enable octoprint
e per avere il log se non riuscite a collegarvi
systemctl status octoprint
UPDATE 26/03/2020 ore 17.12
Utilizzo del video
Per utilizzare il video, octoprint non fa lo streaming da solo, ma ha bisogno di un server video per poter funzionare.
Il più gettonato è mjpg-streamer, che è installabile tramite snap, oppure installabile da sorgenti.
Prima di cominciare, però bisogna vedere se la webcam che si desidera usare è supportata dal programma, la mia lo è, l'ho compilato dai sorgenti perché non mi piace snap e l'ho avviato con
/usr/local/bin/mjpg_streamer -i "input_uvc.so -r 1280x720 -d /dev/video0 -f 30" -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer
A questo punto, connettendomi col browser su 127.0.0.1:8080 compare l'interfaccia web minimale di mjpg con dentro il video, le istantanee e altre cosucce.
Per configurare la webcam, gli indirizzi sono:
per il video: http://IP_DEL_PC:8080/?action=stream
per lo snapshot: http://IP_DEL_PC:8080/?action=snapshot
E poi bisogna installare ffmpeg con apt per la transcodifica.
Una volta terminata la configurazione e messa la webcam in un punto strategico, la schermata sarà come la seguente:

La parte interessante è che ci sono tutti i controlli per modificare la posizione dell'ugello della stampante, che sono modificabili non in sessione di stampa, in più c'è flow rate che permette di gestire la quantità di filo per secondo usata in tempo reale e feed rate che permette di gestire la velocità dell'estrusore in tempo reale.
Se, per caso, si fa notte e la stampante diventa troppo rumorosa, si imposta feed rate al 40%, la stampa sarà più lenta e quindi meno rumorosa, senza bisogno di interromperla.
Poi c'è il timelapse, che dovrebbe salvare video della stampa per conservarli, per capire cosa è andato storto e quando se la stampa esce male.
E' possibile settare le fotografie ogni tot di tempo o allo spostamento dell'asse z, ma mi permetto di analizzare questa funzionalità in futuro, se decido di farlo.