Jump to content

Cura, script request


jumbo125

Recommended Posts

Posted · Cura, script request

Bei meinem Script komme ich leider nicht weiter......

es soll einfach eine Anfrage an meinen PHP-Server senden und einen wert zurückbekommen....

hier mal mein script:

 

from ..Script import Script


import urllib
import json
import sys
from urllib.request import Request, urlopen
from urllib.parse import urlencode
from UM.Logger import Logger

class CNCconvert(Script):

    def __init__(self):
        super().__init__()

    def getSettingDataString(self):
        return """{
            "name":"CNC-Convert",
            "key": "CNCconvert",
            "metadata": {},
            "version": 2,
            "settings":
            {
                "nerster_eintrag":
                {
                    "label": "erster eintrag",
                    "description": "info",
                    "type": "str",
                    "default_value": ""
                },
                "zweiter_eintrag":
                {
                    "label": "zweiter eintrage",
                    "description": "info",
                    "type": "str",
                    "default_value": ""
                },
                "dritter_eintrag":
                {
                    "label": "dritter eintrag",
                    "description": "info",
                    "type": "str",
                    "default_value": ""
                },
                "vierter_eintrag":
                {
                    "label": "vierter eintrag",
                    "description": "infos",
                    "type": "str",
                    "default_value": ""
                }
            }
        }"""

    def execute(self, data):


        config_url = 'http://meinserver/test.php'
        headers = {}
        headers['Content-type'] = 'application/json'
        data = data.encode('ascii')
        req = Request(config_url, data=data, method='POST')
        resp = request.urlopen(req)
        #Abfrgae ob der Request zum Server durgeführt werden kann
        #Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
        if resp.getcode() == 200:
            new_gcode = resp.read().decode('ascii')
        else:
            #Wenn der request nicht 200 ist und kein zugriff gewährt wird
            error_msg = "Could not fetch script config from internet"
            Logger.log("d", error_msg)
            raise Exception(error_msg)

        resp.close()
		Logger.log("d", "test")
        return data

leider wird das "test" auch nicht angezeigt....

hat jemand eine lösung?

  • Link to post
    Share on other sites

    Posted · Cura, script request
    11 minutes ago, jumbo125 said:
            resp.close()
    		Logger.log("d", "test")
            return data

     

    Ich weiß nicht ob es nur am Forum liegt und das in Wirklichkeit vielleicht eh nicht so aussieht, aber die Einrückung ist falsch  und Python ist da sehr pingelig, da müssen die Einrückungen stimmen.

     

  • Link to post
    Share on other sites

    Posted · Cura, script request

    zusätzlich zu den was Smithy geschrieben hat:

     

    data = data.encode('ascii')

     

    Das will python/Cura auch nicht weil data ja eine Liste ist, wie ich es in den anderen Thread erwähnt hatte.

    2021-11-12 19:45:11,348 - ERROR - [MainThread] UM.Logger.logException [117]:   File "C:\Program Files\Ultimaker Cura master\plugins\PostProcessingPlugin\scripts\CNCconvert.py", line 58, in execute
    2021-11-12 19:45:11,349 - ERROR - [MainThread] UM.Logger.logException [117]:     data = data.encode('ascii')
    2021-11-12 19:45:11,350 - ERROR - [MainThread] UM.Logger.logException [117]: AttributeError: 'list' object has no attribute 'encode'

    Und wie schon in anderen Thread erwähnt würde ich den Test log am Anfang deines Scriptes setzen, wenn in deinen Code ein Fehler drin ist (und da sind welche), wird dein Script abgebrochen also wird dein Test log nie gelesen

     

    Weiteres sind hier noch Fehler drin, weiter läuft es garnicht:

     

    req = Request(config_url, data=data, method='POST')
    resp = request.urlopen(req)

     

    Diese werden schon in meinen Editor falsch angezeigt

     

    Cura gibt folgendes aus:

    2021-11-12 20:11:29,036 - ERROR - [MainThread] UM.Logger.logException [117]:   File "C:\Program Files\Ultimaker Cura master\plugins\PostProcessingPlugin\scripts\CNCconvert.py", line 60, in execute
    2021-11-12 20:11:29,038 - ERROR - [MainThread] UM.Logger.logException [117]:     resp = req.urlopen(req)
    2021-11-12 20:11:29,039 - ERROR - [MainThread] UM.Logger.logException [117]: AttributeError: 'Request' object has no attribute 'urlopen'

     

    Aktuell habe ich dein Skript so umgeschrieben:

     

    from ..Script import Script
    import urllib
    import json
    import sys
    from urllib.request import Request, urlopen
    from urllib.parse import urlencode
    from UM.Logger import Logger
    
    class CNCconvert(Script):
    
        def __init__(self):
            super().__init__()
    
        def getSettingDataString(self):
            return """{
                "name":"CNC-Convert",
                "key": "CNCconvert",
                "metadata": {},
                "version": 2,
                "settings":
                {
                    "nerster_eintrag":
                    {
                        "label": "erster eintrag",
                        "description": "info",
                        "type": "str",
                        "default_value": ""
                    },
                    "zweiter_eintrag":
                    {
                        "label": "zweiter eintrage",
                        "description": "info",
                        "type": "str",
                        "default_value": ""
                    },
                    "dritter_eintrag":
                    {
                        "label": "dritter eintrag",
                        "description": "info",
                        "type": "str",
                        "default_value": ""
                    },
                    "vierter_eintrag":
                    {
                        "label": "vierter eintrag",
                        "description": "infos",
                        "type": "str",
                        "default_value": ""
                    }
                }
            }"""
    
        def execute(self, data):
            Logger.log("d", "CNCconvert Plugin")
            config_url = 'http://meinserver/test.php'
            headers = {}
            headers['Content-type'] = 'application/json'
            # data = data.encode('ascii')
            req = Request(config_url, data=data, method='POST')
            resp = req.urlopen(req)
            # Abfrgae ob der Request zum Server durgeführt werden kann
            # Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
            if resp.getcode() == 200:
                Logger.log("d", "if Status 200")
                new_gcode = resp.read().decode('ascii')
            else:
                # Wenn der request nicht 200 ist und kein zugriff gewährt wird
                Logger.log("d", "else")
                error_msg = "Could not fetch script config from internet"
                Logger.log("d", error_msg)
                raise Exception(error_msg)
    
            resp.close()
            return data

     

  • Link to post
    Share on other sites

    Posted (edited) · Cura, script request

    Verzeihung zerspanner_gerd. du warst schneller.

     

    ich bin mal weg von den api, da dies zu umständlich ist.

    hier mal mein request code:

    def execute(self, data):
                    Logger.log("d", "test1")
                    config_url = 'http://myserver.com/test.php'
                    headers = {}
                    headers['Content-type'] = 'application/json'
                    values = {}
                    values['gcocde'] = "test"
                    data = urlencode(values).encode('ascii')
                    req = Request(config_url, data=data, method='POST')
                    resp = urlopen(req)
                    #Abfrgae ob der Request zum Server durgeführt werden kann
                    #Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
                    if resp.getcode() == 200:
                        settings = resp.read().decode('ascii')
                    else:
                        #Wenn der request nicht 200 ist und kein zugriff gewährt wird
                        error_msg = "Could not fetch script config from internet"
                        Logger.log("d", error_msg)
                        raise Exception(error_msg)
    
                    return data

    ich probier deinen code gleich aus. weshalb zeigen meine log files keine fehler 😞

    Edited by jumbo125
  • Link to post
    Share on other sites

    Posted · Cura, script request
    13 minutes ago, jumbo125 said:

    ich probier deinen code gleich aus. weshalb zeigen meine log files keine fehler

     

    Naja du wirst es halt nicht gefunden haben, weil keiner deiner log ausgaben gelesen wurde bzw. geschrieben wurde.

     

    Hast du mal ein Link wo du deine Infos her hast.

    Die Info wo ich finde wenn ich nach "urllib.request" google haben einen anderen aufbau.

  • Link to post
    Share on other sites

    Posted (edited) · Cura, script request

    die idee kam durch dieses script

    https://github.com/csabag/BoostedGcodeCuraPlugin/blob/BoostedGcodeCuraPlugin/BoostedGcode.py

     

    Mein code, welcher keinen Fehler ausgibt:

     

    # Description:  This plugin conver 3d-printing gcode to milling CNC-gcode
    from ..Script import Script
    
    import urllib
    import json
    import sys
    from urllib.request import Request, urlopen
    from urllib.parse import urlencode
    
    from UM.Logger import Logger
    
    class CNCconvert(Script):
    
        def __init__(self):
            super().__init__()
    
        def getSettingDataString(self):
            return """{
                    "name":"CNC-Convert",
                    "key": "CNCconvert",
                    "metadata": {},
                    "version": 2,
                    "settings":
                    {
                        "nerster_eintrag":
                        {
                            "label": "erster eintrag",
                            "description": "info",
                            "type": "str",
                            "default_value": ""
                        },
                        "zweiter_eintrag":
                        {
                            "label": "zweiter eintrage",
                            "description": "info",
                            "type": "str",
                            "default_value": ""
                        },
                        "dritter_eintrag":
                        {
                            "label": "dritter eintrag",
                            "description": "info",
                            "type": "str",
                            "default_value": ""
                        },
                        "vierter_eintrag":
                        {
                            "label": "vierter eintrag",
                            "description": "infos",
                            "type": "str",
                            "default_value": ""
                        }
                    }
            }"""
    
            def execute(self, data):
                Logger.log("d", "CNCconvert Plugin")
                config_url = 'http://meinserver.com/test.php'
                headers = {}
                headers['Content-type'] = 'application/json'
                values['gcocde'] = "test"
                data = urlencode(values).encode('ascii')
                req = Request(config_url, data=data, method='POST')
                resp = req.urlopen(req)
                # Abfrgae ob der Request zum Server durgeführt werden kann
                # Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
                if resp.getcode() == 200:
                    Logger.log("d", "if Status 200")
                    new_gcode = resp.read().decode('ascii')
                else:
                # Wenn der request nicht 200 ist und kein zugriff gewährt wird
                    Logger.log("d", "else")
                    error_msg = "Could not fetch script config from internet"
                    Logger.log("d", error_msg)
                    raise Exception(error_msg)
                return data

     

     

     

    Edited by jumbo125
  • Link to post
    Share on other sites

    Posted (edited) · Cura, script request

    Bitte lösche deine cura.log wieder, das gescrolle ist nicht schön und macht alles unübersichtlich

    Falls du die Cura.log Teilen willst lade die ganze Datei hoch, so kann ich es Downloaden und mit meinen Text Editor durchsuchen

     

    Vielleicht ist es auch besser die scripte komplett hoch zuladen, ohne das rein Kopiere.

    Bei mir ist alles rot weil das "def execute(self, data):" zu weit nach rechts eingezogen ist

     

    image.thumb.png.d3e33f5b279f957d48ed2e0de3920fcb.png

     

    glaub du solltest mal dein Python editor wechseln, wenn das bei dir auch so ist ist es kein wunder das du keine Fehler in der log findest weil dort höchstwahrscheinlich wieder nichts läuft.

     

    Bei mir werden noch mehr Fehler angezeigt

     

    Weiteres bin ich mal direkt auf Python gegangen ohne den Cura zeug, da werden gleich 45 Zeilen Fehler ausgegeben.

    Also glaub da stimmt was mit der schreibweise ganz und garnicht.

    Da du das aus einen Cura Plugin (API hattest du das glaub genannt), vielleicht ist da Cura mit Python gemischt, muss ich mir mal vergleichen

    Edited by zerspaner_gerd
  • Link to post
    Share on other sites

    Posted · Cura, script request

    Okay danke!

    Halt dich nicht zu lange auf! 

    Ich wechsle morgen den Editor.

  • Link to post
    Share on other sites

    Posted (edited) · Cura, script request
    39 minutes ago, jumbo125 said:

    Mein code, welcher keinen Fehler ausgibt:

     

    Da wird aber gar kein log ausgegeben daher findest du höchstwahrscheinlich die Position wieder nicht.

    Also es läuft garnicht daher auch keine Fehler

     

    Habe mir deine Cura.log runter kopiert

    Edited by zerspaner_gerd
  • Link to post
    Share on other sites

    Posted · Cura, script request

     Also bin jetzt außerhalb von Cura.

     

    Habe nach den Fehler gegoogelt:

    urllib.error.URLError: <urlopen error [Errno 11002] getaddrinfo failed>

     

    Das stand das es die URL ist

    Habe jetzt dann meine URL von meiner NAS eingegeben dann wurde ein ganzer Haufen Code ausgegeben ohne Fehler.

     

    Bei meinen 3D Drucker kahm wieder viele Fehler, zum Schluss stand dieses:

    urllib.error.HTTPError: HTTP Error 500: only rr_upload is supported for POST requests

     

    Also irgendwie funktioniert da die Fehler abfrage nicht, den wenn so ein Fehler in Cura Script auch ist wird das ganze Skript abgebrochen.

     

    Habe jetzt folgender maßen getestet und den Fehler mit try und except abgefangen:

     

    Hier ist der Code (reiner Python Code) zum testen würde ich dir das auch empfehlen

     

    import urllib
    import json
    import sys
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError
    from urllib.parse import urlencode
    
    
    
    def execute():
        print("CNCconvert Plugin")
        config_url = 'http://meinserver.com/test.php'
        headers = {}
        headers['Content-type'] = 'application/json'
        values = {}
        values['gcocde'] = "test"
        data = urlencode(values).encode('ascii')
        req = Request(config_url, data=data, method='POST')
        # resp = ""
        try:
            resp = urlopen(req)
        except HTTPError as e:
            print("gelaufen except", e)
            return
        # Abfrgae ob der Request zum Server durgeführt werden kann
        # Der Statuscode 200 gibt Server gefunden an, sonst 404, 401, 403 etc. HTTP-Error-Code
        if resp.getcode() == 200:
            print("d", "if Status 200", resp)
            settings = resp.read().decode('ascii')
            print("read", settings)
        else:
            # Wenn der request nicht 200 ist und kein zugriff gewährt wird
            print("else")
            error_msg = "Could not fetch script config from internet"
            print(error_msg)
    
    
    execute()

     

    Da drückt man Play und in der Konsole wird das Ergebnis gleich ausgegeben:

     

    image.thumb.png.524a36695f24ad0f3ff69702bfb0bddc.png

     

    Bin jetzt nur drüber geblieben da ein wenig Übung nie schadet, bin jetzt kein python Profi der täglich damit arbeitet.

    Hatte auch kurz gedacht ich hätte da ein Anwendung Einsatz, aber bis man sich da wieder durchgelesen hat um das zu erreichen was man will wäre das wieder sehr viel aufwand

     

    Halt mich auf den laufenden

     

    Gruß

  • Link to post
    Share on other sites

    Posted (edited) · Cura, script request

    ALLES AUF ANFANG.

    Das script funktionierte bereits gestern schon.... 

     

    Ich vollidiot bin erst jetzt draufgekommen, wann der prozess startet.

    nämlich nicht mit dem slicen, sondern mit dem speichern!

     

    wenn ich auf speichern drücke, funktioniert alles.... 

    Es tut mir sehr leid, dass ich eure Zeit in Anspruch genommen habe und teilweise Fehler gefunden habe, wo es keine Fehler gibt..... jetzt weiß ich auch, weshalb der logger.log nichts ausgegeben hat. habe ein script von gestern hergenommen und auch slicen UND SPEICHERN geklickt. Da läufts schon...

    ich ärgere mich in Grund und Boden...

    Edited by jumbo125
  • Link to post
    Share on other sites

    Posted · Cura, script request
    19 hours ago, zerspaner_gerd said:

     

    Naja du wirst es halt nicht gefunden haben, weil keiner deiner log ausgaben gelesen wurde bzw. geschrieben wurde.

     

    Hast du mal ein Link wo du deine Infos her hast.

    Die Info wo ich finde wenn ich nach "urllib.request" google haben einen anderen aufbau.

    Falls jemand den Threa liest. 

    Das hier war meine Unwissenheit. Der Codebeispiele zum Schreiben der Log daten funktionieren alle, so wie es die Forenmitglieder empfohlen haben, nur wusste ich nicht, dass ich slicen und speichern musste.

  • Link to post
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now
    • Our picks

      • UltiMaker Cura 5.7 stable released
        Cura 5.7 is here and it brings a handy new workflow improvement when using Thingiverse and Cura together, as well as additional capabilities for Method series printers, and a powerful way of sharing print settings using new printer-agnostic project files! Read on to find out about all of these improvements and more. 
         
          • Like
        • 7 replies
      • S-Line Firmware 8.3.0 was released Nov. 20th on the "Latest" firmware branch.
        (Sorry, was out of office when this released)

        This update is for...
        All UltiMaker S series  
        New features
         
        Temperature status. During print preparation, the temperatures of the print cores and build plate will be shown on the display. This gives a better indication of the progress and remaining wait time. Save log files in paused state. It is now possible to save the printer's log files to USB if the currently active print job is paused. Previously, the Dump logs to USB option was only enabled if the printer was in idle state. Confirm print removal via Digital Factory. If the printer is connected to the Digital Factory, it is now possible to confirm the removal of a previous print job via the Digital Factory interface. This is useful in situations where the build plate is clear, but the operator forgot to select Confirm removal on the printer’s display. Visit this page for more information about this feature.
          • Like
        • 0 replies
    ×
    ×
    • Create New...