NEWS
Adapter Klipper-Moonraker
-
@sushibomba sagte in Adapter Klipper-Moonraker:
@dutchman sagte in Adapter Klipper-Moonraker:
dedicaties
Weiß zwar nicht wie das geht aber bekommen wir bestimmt hin.
Vielleicht weiß ja jemand anderes hier auch wie das mit den Dedicated Servern oder VPN läuft und ich kann was anderes testen.VPN einrichten oder Portofreigabe kriegen wir schon hin
-
Beim Testen kann ich auch gerne helfen. Hab jetzt auch ne Klipper Installation
-
@merlin123 Top
-
Bekomme ich aus dem aktuellen Adapter irgendwie Infos über den Fortschritt oder wann der Druck fertig ist? Finde aktuell nur die vergangene Druckzeit.
-
@merlin123
@Dutchman Muss ihn erst wieder zum laufen bringen. Dann bekommen wir hoffentlich wieder die Werte
Aktuell ist es so, dass wenn du einen Druck am laufen hast, du den Adapter erst neu starten musst und dann siehst du die Werte.
Da es so aber ziemlich bescheiden ist, würde ich dir empfehlen erst auf den FIX vom Adapter zu warten. -
@sushibomba ich seh einige Werte aktuell. Nur keinen DP, der mir irgendwas über den Fortschritt erzählt...
Wenn es jetzt einen gibt wäre das genial, egal ob das bald geändert wird -
@merlin123
Also bei mir wurde es unter progress angezeigt. -
@sushibomba Also unter Display Status hatte ich glaub ich nicht geschaut.... Dachte, da wird der Status eines Displays angezeigt
Danke für den Tipp. Schau ich mir beim nächsten Druck an. Danke -
@sushibomba Grad mal geschaut. Print Status ist auf complete und der Fortschritt auf 1%..... Komisch....
EDIT: Ah OK... Das ist nicht Prozent sondern der Dezimalwert 1 = 100%
-
@merlin123 Ja genau.
Startest du jetzt allerdings nen neun druck aktualisiert er die Werte nicht mehr.
Erst nach einem Neustart des Adapters wieder. -
@sushibomba Hab den auf autorestart alle 10 Minuten gesetzt Das ,löst das Problem
-
@merlin123 kann aber nicht die lösung sein.
leider hab ich meinen sapphire pro mit den 2209ern mit klipper noch nicht zum laufen bekommen. würde da gerne mit testen. irgendwas stimmt in der printer.cfg nicht...
den ender v2 werd ich nicht umfummeln, der tut im moment absolut perfekt. -
@merlin123
Sehe ich auch so wie @da_Woody
Vorrübergehend geht das zwar so aber ich hoffe @Dutchman findet dafür schnell eine Lösung -
Kann dir leider da nicht helfen. Aber schau auf jeden Fall beim CRYD Team auf dem Discord vorbei. Die lösen dein Problem auf jeden Fall. Da bin ich mir sicher.
-
@da_woody sagte in Adapter Klipper-Moonraker:
@merlin123 kann aber nicht die lösung sein.
Natürlich ist das keine Lösung. Aber zumindest bekomme ich damit erstmal die Werte, die ich brauche. Da ist mir ein Quick&Dirty Workaround lieber als nix zu haben
-
Ja das stimmt
Hoffentlich kommt @Dutchman bald dazu.
Schönes WE euch allen. -
Moin zusammen, ich habe mir ein Script geschrieben, welches periodisch die moonraker api nach den wichtigsten Infos abfragt und in iobroker Javascript States schreibt. Das wäre mit Hilfe der moonraker API-Dokumentation auch recht einfach erweiterbar.
Falls es jemand gebrauchen kann (ohne Gewähr):const printerName = 'VORON'; // Replace with your actual printer name const printerBaseUrl = 'http://192.168.2.32'; // Replace with your actual moonraker ip const updateInterval = 20000; // 20 seconds // Function to make an HTTP request and return a promise function getPrinterStatus(url) { return new Promise((resolve, reject) => { const request = require('request'); request(url, { json: true }, (err, res, body) => { if (err) { reject(err); } else { resolve(body); } }); }); } // Function to get metadata for the given filename function getFileMetadata(filename) { const metadataUrl = printerBaseUrl + `/server/files/metadata?filename=${encodeURIComponent(filename)}`; return getPrinterStatus(metadataUrl); // Reusing the HTTP request function } // Function to convert seconds to HH:MM:SS function toHHMMSS(seconds) { const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const sec = Math.floor(seconds % 60); return [hours, minutes, sec] .map(v => v < 10 ? "0" + v : v) .join(":"); } // Function to update the online status of the printer function updatePrinterOnlineStatus(isOnline) { const onlineStateName = `${printerName}.onlineStatus`; createOrUpdateState(onlineStateName, isOnline); } // Function to create or update ioBroker states function createOrUpdateState(fullStateName, value, key='') { // Check if the key contains 'duration' and format it if it does if (key.includes('duration')) { value = toHHMMSS(value); } // Check if the key contains 'progress' and multiply by 100 and round it if it does if (key.includes('progress')) { value = Math.round(value * 100); // Converts to percentage and rounds to the nearest integer } if (!existsState(fullStateName)) { createState(fullStateName, { type: typeof value, read: true, write: false, desc: 'Printer status value' }, () => { setState(fullStateName, value, true); }); } else { setState(fullStateName, value, true); } } // Function to process the printer status and update the ioBroker states function processPrinterStatus(printerData, parentKey = '') { Object.keys(printerData).forEach(key => { const value = printerData[key]; let fullStateName = `${printerName}`; if (parentKey) { fullStateName += `.${parentKey}`; } fullStateName += `.${key}`; if (value !== null && typeof value === 'object' && !(value instanceof Array)) { // It's a nested object, so we need to recurse processPrinterStatus(value, key); } else { // It's a value, so we create or update the state createOrUpdateState(fullStateName, value, key); } }); } // Function to nullify file metadata states in ioBroker function nullifyFileMetadataStates() { var states = $(`*.${printerName}.file_metadata.*`/*Printer file metadata*/); states.each(function(id, i){ setState(id, {val: null, ack: true}); }); } // Polling function function startPolling() { setInterval(() => { getPrinterStatus(printerBaseUrl + '/printer/objects/query?display_status&print_stats&extruder&heater_bed&system_stats') .then(response => { if (response && response.result) { const printStats = response.result.status.print_stats || {}; const filename = printStats.filename; // Update printer status processPrinterStatus(response.result); // If there is a filename, get and process the file metadata if (filename) { getFileMetadata(filename).then(metadataResponse => { if (metadataResponse && metadataResponse.result) { processPrinterStatus(metadataResponse.result, 'file_metadata'); } }).catch(error => { console.error('Error fetching file metadata:', error); }); } else { // If filename is empty, nullify all file_metadata states nullifyFileMetadataStates(); } updatePrinterOnlineStatus(true); // Printer is online } }) .catch(error => { console.log('Error fetching printer status... setting Printer offline'); updatePrinterOnlineStatus(false); // Printer is offline }); }, updateInterval); } // Start the polling process startPolling();
-
Erstmal Danke für das Script! Das ist ja klasse!
Beim ersten Versuch kam nix. Hab dann aber gemerkt, dass beim Creatlity K1 Moonraker auf Port 7125 läuft. Zum Glück schluckt Dein Script auch nen Port hinter der IPMal schauen, was ich damit alles machen kann. Auch jeden Fall ne tolle Arbeit!
Wie man Man die voraussichtliche Zeit oder den Fortschritt rausbekommt, weißt Du nicht zufällig? Das fehlt mir hier leider auch noch.
Vielleicht kannst Du ja mit @Dutchman zusammenarbeiten, damit das wieder ein lauffähiger Adapter wird.
-
@merlin123 sagte in Adapter Klipper-Moonraker:
Erstmal Danke für das Script! Das ist ja klasse!
Beim ersten Versuch kam nix. Hab dann aber gemerkt, dass beim Creatlity K1 Moonraker auf Port 7125 läuft. Zum Glück schluckt Dein Script auch nen Port hinter der IPMal schauen, was ich damit alles machen kann. Auch jeden Fall ne tolle Arbeit!
Wie man Man die voraussichtliche Zeit oder den Fortschritt rausbekommt, weißt Du nicht zufällig? Das fehlt mir hier leider auch noch.
Vielleicht kannst Du ja mit @Dutchman zusammenarbeiten, damit das wieder ein lauffähiger Adapter wird.
Würde da gerne den Adapter weitermachen, das Problem ist das ich keine Klipper Installation haben
Der Adapter arbeitet bereits über websocket was effizienter ist aber ich kan nur schwierig blind programmieren
Also wen jemand Zeit/bock hat da zusammen drüber zu schauen oder mir einen Zugang geben kann kümmere ich mich sehr gerne darum!
-
@dutchman gebe ich dir. Muss nur schauen, wie es zeitlich passt. Wireguard ist vorhanden