diff --git a/jsonparse.py b/jsonparse.py
index d236b67da86b4cad4a5faf87733f971e14521e9c..da67a028209e05c07a18c4906b1ac0609c75040c 100644
--- a/jsonparse.py
+++ b/jsonparse.py
@@ -8,9 +8,15 @@ from collections import namedtuple
 def measurementJsonDecod(measurementdict):
     return namedtuple('Measurement', measurementdict.keys())(*measurementdict.values())
 
+
 def parameterJsonDecod(parameterdict):
     return namedtuple('Parameter', parameterdict.keys())(*parameterdict.values())
 
+
+def functionJsonDecod(functiondict):
+    return namedtuple('Function', functiondict.keys())(*functiondict.values())
+
+
 class Measurement:
     def __init__(self, name, description, datatype, value, dimension, unit=None, range=None):
         self.name = name
@@ -61,6 +67,14 @@ class Parameter:
         # else:
         #     self.value = self.datatype(default)
 
+class Function:
+    def __init__(self, name, description, inargsdatatypes = None, outargsdatatypes = None):
+        self.name = name
+        self.description = description
+        self.inargsdatatypes = inargsdatatypes
+        self.outargsdatatypes = outargsdatatypes
+
+
 def dimensionchange(string):
     dimarr = string["dimension"]
     if dimarr:
@@ -71,6 +85,16 @@ def dimensionchange(string):
     string.update(newdimension)
 
 
+def getdatatypes(argarray):
+    returnarr = []
+    if len(argarray) > 0:
+        for i in argarray:
+            returnarr.append(i["datatype"])
+        return returnarr
+    else:
+        return None
+
+
 def changerange(string):
     #print(type(string["range"][0]))
     if string["range"] != "[None, None]":
@@ -108,7 +132,7 @@ def main():
                 dimensionchange(obj)
                 #if i["range"]:
                 changerange(obj)
-                obj = json.dumps(i)
+                obj = json.dumps(obj)
                 measurementobji = json.loads(obj, object_hook=measurementJsonDecod)
                 measurementobj.append(measurementobji)
 
@@ -124,10 +148,27 @@ def main():
                 dimensionchange(obj)
                 if i["range"]:
                     changerange(obj)
-                obj = json.dumps(i)
+                obj = json.dumps(obj)
                 parameterobji = json.loads(obj, object_hook=parameterJsonDecod)
                 parameterobj.append(parameterobji)
 
+        functions = robotload["functions"]
+
+        if len(functions) > 0:
+            functionobj = []
+            for i in functions:
+                obj = i
+                # del obj["value"]
+                obj["inargsdatatypes"] = getdatatypes(obj["arguments"])
+                obj["outargsdatatypes"] = getdatatypes(obj["returns"])
+                del obj["uuid"]
+                del obj["arguments"]
+                del obj["returns"]
+                obj = json.dumps(obj)
+                functionobji = json.loads(obj, object_hook=functionJsonDecod)
+                functionobj.append(functionobji)
+
+        print(functionobj)
         print(parameterobj)
 
 
diff --git a/robot.py b/robot.py
index 720b90ba328e6d2daf68a3e57479218b23d8a5b1..780690d737a98f0a4f38e1d9114f3e3eafa87d83 100644
--- a/robot.py
+++ b/robot.py
@@ -142,6 +142,7 @@ async def main():
             await unitprop.set_modelling_rule(True)
         description = await para.add_property(idx, "Description", a.description)
         await description.set_modelling_rule(True)
+
       
 
     #gripper als componente
@@ -164,6 +165,8 @@ async def main():
     positionrobot = await mobilerobot.get_child([robotposname])
     await positionrobot.set_writable(True)
 
+
+
     @uamethod
     def goTo(parent, position):
         positionrobot.set_value(position)
@@ -178,6 +181,7 @@ async def main():
 
     # tcprobmeas = await robot.get_child([tcpvarname])
 
+
     #adding function goTo to robot
     goTofunc = await mobilerobot.add_method(idx, "goTo", goTo, [ua.VariantType.Float], [ua.VariantType.Float])
 
@@ -222,6 +226,11 @@ async def main():
                 await batterywarninggen.trigger(message = "Battery level is below 20%. Load shortly.")
             if batteryload < 10:
                 await batteryerrorgen.trigger(message = "Battery level is below 10%. Please load the battery immediately.")
+            if batteryload <= 2:
+                #server.get_event_generator()
+                await server.stop()
+
+               # await batteryerror.response_params[idx].StatusCode.is_good()
             await asyncio.sleep(1)
             time += 1
             batterysave = batteryload - 1