Jump to content
Ultimaker Community of 3D Printing Experts

Cura, script request


jumbo125
 Share

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
     Share

    • Our picks

      • New here? Get ahead with a free onboarding course
        Hi,
         
        Often getting started is the most difficult part of any process. A good start sets you up for success and saves you time and energy that could be spent elsewhere. That is why we have a onboarding course ready for
        Ultimaker S5 Pro Bundle, Ultimaker S5, Ultimaker S3 Ultimaker 2+ Connect.   
        They're ready for you on the Ultimaker Academy platform. All you need to do to gain access is to register your product to gain free access. 
        Ready? Register your product here in just 60 seconds.
          • Like
        • 11 replies
    ×
    ×
    • Create New...