src/eric7/MicroPython/Devices/RP2040Devices.py

branch
mpy_network
changeset 9868
467288cffee2
parent 9843
72e8270a5940
child 9870
0399d3607829
--- a/src/eric7/MicroPython/Devices/RP2040Devices.py	Thu Mar 09 16:59:39 2023 +0100
+++ b/src/eric7/MicroPython/Devices/RP2040Devices.py	Fri Mar 10 18:04:06 2023 +0100
@@ -1174,6 +1174,92 @@
         clientsList = ast.literal_eval(out.decode("utf-8"))
         return clientsList, ""
 
+    ##################################################################
+    ## Methods below implement NTP related methods
+    ##################################################################
+
+    def hasNetworkTime(self):
+        """
+        Public method to check the availability of network time functions.
+
+        @return flag indicating the availability of network time functions
+        @rtype bool
+        """
+        command = """
+def has_ntp():
+    try:
+        import ntptime
+        return True
+    except ImportError:
+        return False
+
+print(has_ntp())
+del has_ntp
+"""
+        out, err = self._interface.execute(command, mode=self._submitMode)
+        if err:
+            raise OSError(self._shortError(err))
+        return out.strip() == b"True"
+
+    def setNetworkTime(self, server="0.pool.ntp.org", tzOffset=0, timeout=10):
+        """
+        Public method to set the time to the network time retrieved from an
+        NTP server.
+
+        @param server name of the NTP server to get the network time from
+            (defaults to "0.pool.ntp.org")
+        @type str (optional)
+        @param tzOffset offset with respect to UTC (defaults to 0)
+        @type int (optional)
+        @param timeout maximum time to wait for a server response in seconds
+            (defaults to 10)
+        @type int
+        @return tuple containing a flag indicating success and an error string
+        @rtype tuple of (bool, str)
+        """
+        command = """
+def set_ntp_time(server, tz_offset, timeout):
+    import network
+    import ntptime
+    import machine
+
+    if not network.WLAN(network.STA_IF).isconnected():
+        return False
+
+    ntptime.host = server
+    ntptime.timeout = timeout
+    ntptime.settime()
+
+    rtc = machine.RTC()
+    t = list(rtc.datetime())
+    t[4] += tz_offset
+    rtc.datetime(t)
+
+    return True
+
+try:
+    print({{
+        'result': set_ntp_time({0}, {1}, {2}),
+        'error': '',
+    }})
+except Exception as err:
+    print({{
+        'result': False,
+        'error': str(err),
+    }})
+del set_ntp_time
+""".format(
+            repr(server), tzOffset, timeout
+        )
+        out, err = self._interface.execute(
+            command, mode=self._submitMode, timeout=(timeout + 2) * 1000
+        )
+        if err:
+            return False, err
+        else:
+            res = ast.literal_eval(out.decode("utf-8"))
+            return res["result"], res["error"]
+
     ############################################################################
     ## RP2 only methods below
     ############################################################################

eric ide

mercurial