Aller au contenu

Ici on pourrait réunir tout ce qui permettrait de domotiser les QIDI ou simplement de pouvoir les intérroger ou les faire agir par n'importe quel programme.


Messages recommandés

Posté(e) (modifié)

J'en ai déjà parlé, mais je ne peux pas m'empêcher de tenter d'automatiser les choses (à mon niveau qui est assez bas).

Première étape : faire en sorte que quand je suis sous FreeCAD, en appuyant sur un bouton, ça génère un stl assez fin (pas de facettes) puis ça allume l'imprimante, puis ça lance QIDIStudio.

Si ça intéresse quelqu'un, je peux donner plus de détails, mais rien de difficile et je ne suis pas le premier à le faire :

  • La macro (python) FreeCAD que j'ai faite envoie un ordre d'allumage par MQTT via Jeedom à une prise connectée (en wifi) ( pour moi comme j'ai jeedom, c'est plus centralisateur de passer par jeedom, mais on peut très facilement s'en passer)
  • La même macro lance l'exe de QIDISlicer en passant le nom du fichier stl qui a été généré par freeCAD en paramètre afin que le Slicer s'ouvre avec le bon stl chargé.

Rien de bien sorcier et il y a plein de façons de le faire. Si ça intéresse quelqu'un, on fonction de sa configuration, je peux l'aider.

Bon, ça s'est fait.
Après, j'ai voulu voir si on pouvait aller plus loin. Par exemple relancer une impression ou connaitre en temps réel la température de la buse (histoire de couper à la fin le courant via une prise connecté qu'une fois que non seulement l'impression est fini, mais aussi que  la ou les températures soient suffisamment basses (en particulier la buse).

J'ai avancé sur le sujet, et vous pouvez en faire l'expérience pour vous amuser.

En fait, QIDI ou plutôt moonRaker met à disposition des API Rest. Concrètement un mode de dialogue avec l'imprimante dans les deux sens.

Faites l'expérience suivante imprimante allumée :
Si vous êtes en windows, ouvrez une fenêtre de commande

. Capturedcran2024-12-28172316.png.c4688b29b92c48dd750d394eb9dc9de6.png

Pour le trouver, vous tapez invite dans cette recherche
Capturedcran2024-12-28172350.png.951894a3b95861f8a1a30f2a0d9cb2ec.png

Puis, dans la fenêtre de commande vous tapez :

curl -X GET http://192.168.1.4:7125/printer/info

Après bien sûr avoir remplacé l'adresse ip par l'adresse ip de votre imprimante.

Et là, miracle, vous obtenez un truc du genre

{"result": {"state_message": "Printer is ready", "klipper_path": "/home/mks/klipper", "config_file": "/home/mks/klipper_config/printer.cfg", "software_version": "v0.10.0-530-g3387a9c2-dirty", "hostname": "mkspi", "cpu_info": "4 core ?", "state": "ready", "python_path": "/home/mks/klippy-env/bin/python", "log_file": "/home/mks/klipper_logs/klippy.log"}}

On voit que l'imprimante est prête. Je suppose qu'ainsi on peut savoir si elle est en train d'imprimer.
Un autre exemple : pour obtenir les températures :

Vous tapez (ou recopiez)
curl -X GET http://192.168.1.4:7125/printer/objects/query?heater_bed

et on obtient

{"result": {"status": {"heater_bed": {"temperature": 17.43, "power": 0.0, "target": 0.0}}, "eventtime": 355.354429168}}

Pour la température de l'extrudeur :
curl -X GET "http://192.168.1.4:7125/printer/objects/query?extruder"

{"result": {"status": {"extruder": {"pressure_advance": 0.032, "target": 0.0, "power": 0.0, "can_extrude": false, "smooth_time": 0.03, "temperature": 19.0}}, "eventtime": 491.743618525}}

On peut aussi demander plusieurs paramètres à la fois :
...../printer/objects/query?heater_bed&extruder

On peut aussi donner des ordres à l'imprimante. Par exemple lui envoyer des gcodes

Faire chauffer le plateau à 20°C

curl -X POST "http://192.168.1.4:7125/printer/gcode/script" -H "Content-Type: application/json" -d "{\"script\": \"M140 S20\"}"

Et pour arrêter la chauffe

curl -X POST "http://192.168.1.4:7125/printer/gcode/script" -H "Content-Type: application/json" -d "{\"script\": \"M140 S0\"}"

 

 

A noter quand même que ça veut dire que n'importe qui sur le réseau peut déclencher des actions sur l'imprimante ! Il va falloir que je recherche coté sécurité.

Etape suivante, mais pas avant 15 jours : faire pareil mais en MQTT. A priori, c'est possible.

Modifié (le) par 2cv001
Posté(e)

La gestion des prises de courant peut se faire directement via Moonraker (section [power]). Si tu gères déjà ta prise via MQTT, c'est cette section.

Ensuite, pour éteindre l'imprimante après avoir attendu que des températures soient descendues au-dessous de telle valeur, c'est via des macros Gcode qu'habituellement ça se fait.

Exemple avec ma XM3 (ce sont des prises Tasmota et HomeAssistant possède une intégration de Moonraker donc de nombreux paramètres pourraient être automatisés (ce que je ne fais pas parce que mes imprimantes sont dans mon bureau… à portée de main… j'ai beau être un procrastinateur né, faut pas exagérer non plus 😄 ).

- macros Klipper :

#=====================================================
# Power Operations / HA Plug
#=====================================================
[gcode_macro POWER_ON_KS]
gcode:
  {action_call_remote_method("set_device_power", device="Klipperscreen", state="on")}
							 
[gcode_macro POWER_OFF_KS]
gcode:
  {action_call_remote_method("set_device_power", device="Klipperscreen", state="off")}
  
[gcode_macro POWER_OFF_PRINTER]
gcode:
  {action_call_remote_method("set_device_power", device="Qidi_XMax3", state="off")}
  
[gcode_macro POWER_OFF_ALL]
gcode:
  KS_LAN_HALT
  #G4 P10000 # wait 10 seconds to shutdown RPi0V2
  #POWER_OFF_KS
  # Find a way, if ever possible to shutdown filesystem before power off
  POWER_OFF_PRINTER

[delayed_gcode delayed_printer_off]
initial_duration: 0  # Set 0 to interrupt the delayed macro
# use UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=300 in START_PRINTER macro with the time wanted
gcode:
  {% if printer.extruder.target > 50 or printer.extruder.temperature > 50 or printer.heater_bed.temperature > 55 or printer.idle_timeout.state| upper == "PRINTING" or printer.pause_resume.is_paused %}
    UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=300    
  {% else %}
    POWER_OFF_ALL
  {% endif %} 
  # alternative mode
  #{% if printer.idle_timeout.state == "Idle" or printer.idle_timeout.state == "Ready" %}
    #{% if printer.extruder.target == 0.0 and printer.heater_bed.target == 0.0 %}
    # Target Temp = 0
      #{% if printer.extruder.temperature < 60.0 %}
        #UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=0 # DURATION=0 don't re-execute
        #POWER_OFF
        #{% else %}  # Extruder Temp > 60
        #UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=10 # Waiting Cooling Heater
        #{% endif %}
    #{% else %}   # Target Temp > 0
      #UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=600  # Not Printing + Heating...
    #{% endif %}
	#{% else %}
    #UPDATE_DELAYED_GCODE IDdelayed_printer_off DURATION=600	# Printing
  #{% endif %}  
    
[delayed_gcode ks_on]
initial_duration: 5.0
gcode:
  POWER_ON_KS

- gestion des prises Tasmota (moonraker.conf) :

## Gestion prise électrique via Tasmota
[power Qidi_XMax3]
# athom-sp2
type: tasmota
address: 192.168.1.186
locked_while_printing: true
restart_klipper_when_powered: True
restart_delay: 5.
off_when_shutdown: False # Set to True to power off the device when Klipper enters "shutdown" state
#off_when_shutdown_delay: 5

[power Klipperscreen]
# athom-sp1
type: tasmota
address: 192.168.1.185
#locked_while_printing: true
#restart_klipper_when_powered: True
#restart_delay: 5.

🙂

  • J'aime 2
Posté(e) (modifié)

@fran6p
Tout ce que tu dis est à ajouter danss le fichier moonraker.conf non ?
Si j'ai bien compris, pour le mqtt, il faut aussi ajouter dans ce même fichier un truc du style
 

[mqtt]
enabled: true
host: localhost
port: 1883
topic_prefix: klipper
client_id: qidi_q1pro

Question bête, il y a plusieurs fichiers moonraker.conf :

Capturedcran2024-12-28182434.png.c1f515896a9b9a473a323c6cba9d62b5.png

C'est celui qui est dans klipper_config/ qu'il faut éditer ?
 

Modifié (le) par 2cv001
Posté(e) (modifié)
il y a 15 minutes, 2cv001 a dit :

C'est celui qui est dans klipper_config/ qu'il faut éditer ?

C'est le seul. Les trois premiers sont des sauvegardes effectuées par KIAUH. Avec le Klipper de Qidi, les fichiers utilisés pour les configurations sont uniquement dans ~/klipper_config (~ est le raccourci de l'emplacement du dossier utilisateur (/home/mks/)).

il y a 15 minutes, 2cv001 a dit :

Tout ce que tu dis est à ajouter danss le fichier moonraker.conf non ?

Non, seulement les sections [power …].

Les autres [gcode_macro XXXX], [delayed_gcode ZZZZ] sont des macros à ajouter dans le fichier printer.cfg ou dans leur propre fichier de configuration «configurationdemesprisesdalimentation.conf]» (enregistré dans ~/klipper_config) puis en ajoutant dans printer.cfg une section [include configurationdemesprisesdalimentation.conf] (par exemple 😉 ).

🙂

Modifié (le) par fran6p
  • Merci ! 1
  • 1 month later...
Posté(e) (modifié)

Je ne crois pas avoir mis le lien ici :

Pour le MQTT, ça ce passe ici :

 

Modifié (le) par 2cv001
  • Merci ! 1

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...