diff --git a/jsonparse.py b/jsonparse.py
index 47ec08971c022e11ef37d00062ecaab247ca5246..8027d92d2aef3300892e47d3ec9081ead120aec6 100644
--- a/jsonparse.py
+++ b/jsonparse.py
@@ -108,6 +108,16 @@ def changerange(string):
     print(string)
 
 
+def getobjnames(argarray):
+    returnarr = []
+    if len(argarray) > 0:
+        for i in argarray:
+            name = (i["name"].lower()).replace(" ", "")
+            returnarr.append(name)
+        return returnarr
+    else:
+        return None
+
 def main():
     try:
         JSON_MODEL = sys.argv[1][:-5]
@@ -159,6 +169,8 @@ def main():
             for i in functions:
                 obj = i
                 # del obj["value"]
+                obj["inargsnames"] = getobjnames(obj["arguments"])
+                obj["outargsnames"] = getobjnames(obj["returns"])
                 obj["inargsdatatypes"] = getdatatypes(obj["arguments"])
                 obj["outargsdatatypes"] = getdatatypes(obj["returns"])
                 del obj["uuid"]
@@ -171,7 +183,7 @@ def main():
         print(functionobj)
         print(parameterobj)
         #exec(open("writefile.py").read())
-        wf.write(measurementobj, parameterobj)
+        wf.write(measurementobj, parameterobj, functionobj)
 
 
 
diff --git a/writefile.py b/writefile.py
index 6ba12b7c94e4b80590eccc91063c8ee6d5b2a1a8..cc0ac5ce3f00af68d663eb30c54318590b6ed93f 100644
--- a/writefile.py
+++ b/writefile.py
@@ -1,13 +1,31 @@
 import jsonparse
 import os
 
-def defFunction(functionname, file, indent, contents = None):
+def defFunction(functionname, file, indent, inargs):
     writeindent = ""
     for i in range(indent):
-        writeindent = writeindent + "\t"
-    file.write(indent + "async def " + functionname + ":")
-
-def write(measurementobj, parameterobj):
+        writeindent = writeindent + "    "
+    file.write(writeindent + "async def " + functionname + "(parent, ")
+    for i in range (len(inargs)):
+        if i < (len(inargs) - 1):
+            file.write(inargs[i] + ", ")
+        else:
+            file.write(inargs[i])
+    file.write("):\n")
+    writeindent = writeindent + "    "
+    file.write(writeindent + """#ToDo: Write an algorithm that fits the description of the function.
+        pass
+    """)
+
+def getVariantType(datatype):
+    varianttype = "ua.VariantType.Int64"
+    if datatype == "float" or datatype == "double":
+        varianttype = "ua.VariantType.Double"
+    elif datatype == "Boolean":
+        varianttype = "ua.VariantType.Boolean"
+    return varianttype
+
+def write(measurementobj, parameterobj, functionobj):
     if os.path.exists("opcua-server.py"):
         os.remove("opcua-server.py")
     server = open("opcua-server.py", "a")
@@ -51,19 +69,17 @@ _logger = logging.getLogger('asyncua')
 
     server.write("\n" + writeindent + "# creating all measurements with their properterties\n")
 
+    measurementdict = {}
     for i in measurementobj:
-        varianttype = "ua.VariantType.Int64"
-        if i.datatype == "float" or i.datatype == "double":
-            varianttype = "ua.VariantType.Double"
-        elif i.datatype == "Boolean":
-            varianttype = "ua.VariantType.Boolean"
+        varianttype = getVariantType(i.datatype)
         datatype = "measurementtype.nodeid"
         varname = ((i.name).lower()).replace(" ", "") + "var"
+        measurementdict[i.name] = varname
         server.write(writeindent + varname + " = " + "await myobjtype.add_variable(idx, \"" + str(i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n")
         server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n")
         if i.range is not None and i.range is not [None, None]:
             rangename = "rangeprop"
-            server.write(writeindent + rangename + " = await " + varname + ".add_property(idx, range, ua.Range(" + str(i.range[0]) + "," + str(i.range[1]) + "))\n")
+            server.write(writeindent + rangename + " = await " + varname + ".add_property(idx, \"range\", ua.Range(" + str(i.range[0]) + "," + str(i.range[1]) + "))\n")
             server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
         if i.unit is not None:
             unitname = "unitprop"
@@ -75,19 +91,17 @@ _logger = logging.getLogger('asyncua')
 
     server.write("\n" + writeindent + "#creating all parameters with their properties\n")
 
+    parameterdict = {}
     for i in parameterobj:
-        varianttype = "ua.VariantType.Int64"
-        if i.datatype == "float" or i.datatype == "double":
-            varianttype = "ua.VariantType.Double"
-        elif i.datatype == "Boolean":
-            varianttype = "ua.VariantType.Boolean"
+        varianttype = getVariantType(i.datatype)
         datatype = "parametertype.nodeid"
         varname = ((i.name).lower()).replace(" ", "") + "var"
+        parameterdict[i.name] = varname
         server.write(writeindent + varname + " = " + "await myobjtype.add_variable(idx, \"" + str(i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n")
         server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n")
         if i.range is not None and i.range is not [None, None]:
             rangename = "rangeprop"
-            server.write(writeindent + rangename + " = await " + varname + ".add_property(idx, range, ua.Range(" + str(i.range[0]) + "," + str(i.range[1]) + "))\n")
+            server.write(writeindent + rangename + " = await " + varname + ".add_property(idx, \"range\", ua.Range(" + str(i.range[0]) + "," + str(i.range[1]) + "))\n")
             server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
         if i.unit is not None:
             unitname = "unitprop"
@@ -97,6 +111,23 @@ _logger = logging.getLogger('asyncua')
         server.write(writeindent + "description = await " + varname + ".add_property(idx, \"Description\", " + "\"" + i.description + "\")" + "\n")
         server.write(writeindent + "await description.set_modelling_rule(True)\n\n")
 
+    server.write(writeindent + "mobilerobot = await server.nodes.objects.add_object(idx, \"Mobile Robot \", myobjtype.nodeid)\n")
+
+    server.write(writeindent + "#adding functions to our robot\n")
+
+    for i in functionobj:
+        functionname = (i.name.lower()).replace(" ", "")
+        defFunction(functionname, server, indent, i.inargsnames)
+        server.write("\n")
+        inargslist = []
+        if i.inargsdatatypes != 0:
+            for j in i.inargsdatatypes:
+                inargslist.append(getVariantType(j))
+        outargslist = []
+        if i.outargsdatatypes != None:
+            for j in i.outargsdataypes:
+                inargslist.append(getVariantType(j))
+        server.write(writeindent + "await mobilerobot.add_method(idx, \"" + i.name +"\", " + functionname + ", " + str(inargslist) + ", "+ str(outargslist) + ")\n\n")
 
     server.write("""
     async with server:
@@ -105,7 +136,7 @@ _logger = logging.getLogger('asyncua')
         while True:
             await asyncio.sleep(1)
     
-if __name__ == 'main':
+if __name__ == '__main__':
     asyncio.run(main())""")