SDSM-for-SDI / experiment-scripts / serverCoAP.py-clientside
serverCoAP.py-clientside
Raw
from coapthon.server.coap import CoAP
from coapthon.exampleresources import BasicResource
from coapthon.resources.resource import Resource
import os
import time


def run_command(accesspoint:str) -> None:
    retry = True
    try:
        while retry:
            os.system("nmcli device wifi rescan")
            time.sleep(0.1)
            ret = os.system("nmcli device wifi connect {}".format(accesspoint))
            if ret == 0:
                retry = False
        print("After while loop")
        if accesspoint == "oem-default-string-2" or accesspoint == "oem-default-string-2 ":
            #to overcome the temporary problem of dhcp server on AP2
            print("Inside if")
            os.system("ifconfig wlx742f6809a73b 192.168.3.76")
            print("before setting default gateway")
            os.system("ip route add default via 192.168.3.1")
    except Exception as e:
        print("Could not change access point: " +e)

class BasicResource(Resource):
    def __init__(self, name="BasicResource", coap_server=None):
        super(BasicResource, self).__init__(name, coap_server, visible=True,observable=True, allow_children=True)
        self.payload = "Basic Resource"

    def render_GET(self, request):
        return self

    def render_PUT(self, request):
        info = request.payload
        run_command(info)
        self.payload = "OK"
        return self

    def render_POST(self, request):
        res = BasicResource()
        res.location_query = request.uri_query
        res.payload = request.payload
        return res

    def render_DELETE(self, request):
        return True


class CoAPServer(CoAP):
    def __init__(self, host, port):
        CoAP.__init__(self, (host, port))
        self.add_resource('basic/', BasicResource())

def main():
    server = CoAPServer("0.0.0.0", 5683)
    try:
        server.listen(10)
    except KeyboardInterrupt:
        print("Server Shutdown")
        server.close()
        print("Exiting...")

if __name__ == '__main__':
    main()