modulitiz-micro 2.39.0__py311-none-any.whl → 2.41.0__py311-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,9 @@ from datetime import datetime
5
5
  from datetime import time as dt_time
6
6
  from datetime import timedelta
7
7
  from datetime import timezone
8
+ from datetime import tzinfo
9
+
10
+ from suntime import Sun
8
11
 
9
12
 
10
13
  class ModuloDate(object):
@@ -18,6 +21,7 @@ class ModuloDate(object):
18
21
  FORMATO_DATA_ORA_NOMEFILE="%Y-%m-%d_%H-%M-%S"
19
22
  FORMATO_DATA_ORA_NOSPAZI="%Y%m%d%H%M%S"
20
23
  FORMATO_ORA="%H:%M:%S"
24
+ FORMAT_HH_MM="%H:%M"
21
25
 
22
26
 
23
27
  @staticmethod
@@ -268,21 +272,49 @@ class ModuloDate(object):
268
272
  return cls.setTimezoneFromTzInfo(data,timezone.utc)
269
273
 
270
274
  @staticmethod
271
- def setTimezoneFromTzInfo(data:datetime,tz:datetime.tzinfo)->datetime:
275
+ def setTimezoneFromTzInfo(data:datetime,tz:tzinfo)->datetime:
272
276
  """
273
277
  Imposta un fuso orario ad una data completa.
274
278
  """
275
279
  return data.replace(tzinfo=tz)
276
280
 
277
281
  @classmethod
278
- def getTimezoneLocal(cls)->datetime.tzinfo:
282
+ def getTimezoneLocal(cls,dateTime:datetime|None=None)->tzinfo:
279
283
  """
280
- Ritorna il fuso orario locale.
284
+ Ritorna il fuso orario locale + DST.
281
285
  """
282
- return cls.now().astimezone().tzinfo
286
+ if dateTime is None:
287
+ dateTime=cls.now()
288
+ return dateTime.astimezone().tzinfo
289
+
290
+ @staticmethod
291
+ def isDst(dateTime:datetime)->bool:
292
+ return time.localtime(ModuloDate.dateToTimestamp(dateTime)).tm_isdst==1
293
+
294
+ @classmethod
295
+ def getDstSeconds(cls,dateTime:datetime)->int:
296
+ return 3600 if cls.isDst(dateTime) else 0
297
+
298
+ #
299
+ # sunrise / sunset
300
+ #
301
+
302
+ @classmethod
303
+ def getLocalSunrise(cls,lat:float,long:float,dateTime:datetime|None=None)->datetime:
304
+ if dateTime is None:
305
+ dateTime=cls.now()
306
+ sun=Sun(lat,long)
307
+ return sun.get_sunrise_time(dateTime,cls.getTimezoneLocal(dateTime))
308
+
309
+ @classmethod
310
+ def getLocalSunset(cls,lat:float,long:float,dateTime:datetime|None=None)->datetime:
311
+ if dateTime is None:
312
+ dateTime=cls.now()
313
+ sun=Sun(lat,long)
314
+ return sun.get_sunset_time(dateTime,cls.getTimezoneLocal(dateTime))
283
315
 
284
316
  #
285
- # altre funzioni
317
+ # others
286
318
  #
287
319
  @classmethod
288
320
  def calculateElapsedSecs(cls,millisInizio:int)->str:
@@ -24,18 +24,34 @@ class ModuleIotDevice(object):
24
24
  raise EccezioneRuntime("Iot os '%s' not known"%(self.__deviceBean.os,))
25
25
  return ModuloNumeri.intToBool(ModuloNumeri.strToInt(self.__sendRequest(url)))
26
26
 
27
- def setRelayStatus(self, relayNum:int, status:bool):
27
+ def setRelayStatus(self,relayNum: int,status: bool):
28
28
  """
29
29
  @param relayNum: Depending on which OS you choose, can be relative (0, 1, ...) or GPIO
30
30
  @param status: value to set, can only be false or true
31
31
  """
32
+ self.__setRelayStatus(relayNum,status)
33
+
34
+ def setRelayStatusToggle(self,relayNum: int):
35
+ self.__setRelayStatus(relayNum,None)
36
+
37
+ def __setRelayStatus(self, relayNum:int, status:bool|None):
38
+ """
39
+ @param relayNum: Depending on which OS you choose, can be relative (0, 1, ...) or GPIO
40
+ @param status: value to set, can be: false = off, true = on, null/None = toggle
41
+ """
32
42
  if self.__deviceBean.os==IotOSEnum.ESPURNA:
33
- statusStr=str(ModuloNumeri.boolToInt(status))# TODO check if works or if u have to use value 2 (toggle)
43
+ if status is not None:
44
+ statusStr=str(ModuloNumeri.boolToInt(status))
45
+ else:
46
+ statusStr=2
34
47
  url=ModuleEspurna.URL_SET_RELAY.format(ip=self.__deviceBean.ip,relayNum=relayNum,apiKey=self.__deviceBean.key,status=statusStr)
35
48
  else:
36
49
  raise EccezioneRuntime("Iot os '%s' not known"%(self.__deviceBean.os,))
37
- # TODO: check output
38
- self.__sendRequest(url)
50
+ # check output
51
+ statusOutput=ModuloNumeri.intToBool(int(self.__sendRequest(url)))
52
+ if status is None or status==statusOutput:
53
+ return
54
+ raise EccezioneRuntime("Wrong expected status: %d != %d"%(status,statusOutput))
39
55
 
40
56
  def __sendRequest(self, url:str)->str:
41
57
  http=ModuloHttp(url,self.__logger,False)
@@ -1,15 +1,9 @@
1
- from abc import ABC
2
-
3
1
  import schedule
4
2
 
5
3
  from modulitiz_micro.ModuloListe import ModuloListe
6
4
 
7
5
 
8
- class AbstractScheduler(ABC):
9
-
10
- def __init__(self):
11
- super().__init__()
12
-
6
+ class ModuleScheduler(object):
13
7
  @staticmethod
14
8
  def cancelJobByTag(tag:str):
15
9
  schedule.clear(tag)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modulitiz_micro
3
- Version: 2.39.0
3
+ Version: 2.41.0
4
4
  Summary: Raccolta dei miei moduli - versione micro
5
5
  Author-email: tiz <sderfo1234@altervista.org>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -25,6 +25,7 @@ Requires-Dist: pypyodbc>=1.3
25
25
  Requires-Dist: pyserial>=3.5
26
26
  Requires-Dist: requests>=2.31
27
27
  Requires-Dist: schedule>=1.2
28
+ Requires-Dist: suntime==1.3.2
28
29
  Requires-Dist: telethon>=1.33
29
30
  Requires-Dist: webcolors>=1.13
30
31
 
@@ -1,7 +1,7 @@
1
1
  modulitiz_micro/ModuleEnum.py,sha256=1HVhYspeTyE8nEuYSDkQXuRUISEggR_Cejqn3uGMOPQ,159
2
2
  modulitiz_micro/ModuloBase64.py,sha256=dW1TP8TkIuOqAbbJcvTAo4xEurHl8NBs8lQTuHY_HaU,1866
3
3
  modulitiz_micro/ModuloColorText.py,sha256=_sMSh9xZ-qbpa35oaSGdzQJKpFiGLsCHtM4P1HQWcTE,828
4
- modulitiz_micro/ModuloDate.py,sha256=niDdyhWUkRNOfxK7G-RkvvuGJdPCCJRpL3-TFZiuUOE,7997
4
+ modulitiz_micro/ModuloDate.py,sha256=9SbLsonm3PAobbLB-KLnOcGej9Eze7yLQTWXMb82BHY,8894
5
5
  modulitiz_micro/ModuloFunzioni.py,sha256=n2wNRCLg-l2EvUtZu2K2yT-oE9XJN8nYSDjzECYVqNw,1977
6
6
  modulitiz_micro/ModuloListe.py,sha256=aWqnJX2JAk_LApUQvObkc6P89qXJzFviljJeKa39KC8,3581
7
7
  modulitiz_micro/ModuloMeteo.py,sha256=uiENrmpkRVFX-qaFoxH5BfuEkob-1KqiVmXd734qeCk,2324
@@ -48,7 +48,7 @@ modulitiz_micro/files/git/exceptions/EccezioneGit.py,sha256=SfBBBvfo7XXJeUYpF61I
48
48
  modulitiz_micro/gestionedom/GestioneDom.py,sha256=LjmFKiBLNc0yn9m7Z27u2rpU4UcF9778Ljm8aYhdBcY,1350
49
49
  modulitiz_micro/init/AbstractBasicInit.py,sha256=hp2U5ZSIaWtwMuohlsk2WHjPRKxJrQyavPsLPlbejtQ,582
50
50
  modulitiz_micro/init/AbstractInit.py,sha256=0dxk2o6Sx3Ii4UzYvIMeWOClxdbmctO3M4XoMpk2v7k,228
51
- modulitiz_micro/iot/ModuleIotDevice.py,sha256=O9rciBfaE7ImrbCoCvJfEampwK7J_ntKuxIkf40DW70,2108
51
+ modulitiz_micro/iot/ModuleIotDevice.py,sha256=tDh76kq_lOCGnb_7sF2QZbjbba8p1o8XJZ1YOgTaMmA,2650
52
52
  modulitiz_micro/iot/beans/IotDeviceBean.py,sha256=lSxK80JW3PmhlbKMNX8-U1fjwciFp_MaxH8jYtJLGas,374
53
53
  modulitiz_micro/iot/enums/IotOSEnum.py,sha256=jMGWbPo0gafFdog7f9VBX_vJQ86XiXYUcxVg-RM9-s8,191
54
54
  modulitiz_micro/iot/espurna/ModuleEspurna.py,sha256=ueL-hDpaGzmU7mUvpLmu3YerJCJqrfTzATfOVeasD9I,142
@@ -88,7 +88,7 @@ modulitiz_micro/util/beans/globalvar/AbstractGlobalVarBean.py,sha256=YrjrR2Ao86y
88
88
  modulitiz_micro/util/decorators/noAwait.py,sha256=O9g_-4jSoLUjISslDRMlcvE91OtY2EkqcJKDDZxckDg,536
89
89
  modulitiz_micro/util/pip/AbstractModuloPip.py,sha256=JwdRmKMBIk28QctAf8OKR6SrgFfEfacGw3aQMFT-5XM,1254
90
90
  modulitiz_micro/util/pip/ModuloPip.py,sha256=PhgOdO_jZPJW0J2-Js9fQ3rVFbAks4ZD1oazhx9p1Os,1983
91
- modulitiz_micro/util/scheduler/AbstractScheduler.py,sha256=JTX39slhcaigiZUUUXKdUed4y0Vhom2Ldi61Zt0LSSE,668
91
+ modulitiz_micro/util/scheduler/ModuleScheduler.py,sha256=QPlvdLYXMhywxXRmEOoztLd5j2MbBpbxmptDF7Eu7CI,596
92
92
  modulitiz_micro/util/spooler/AbstractSpooler.py,sha256=suJSAdevgZYErqwOTmM9b_fQEZSyJwD2Y11grCFpf5I,295
93
93
  modulitiz_micro/util/spooler/Spooler.py,sha256=pAqm-L3KyR7LRuw10RTVqf8DZNiEFS1KeA9q9wuqbz4,430
94
94
  modulitiz_micro/util/spooler/beans/QueueBean.py,sha256=HjfK17XpyUUYYXTNS5q56iyBdqGoFQeP_DcQadtZJFY,150
@@ -102,8 +102,8 @@ modulitiz_micro/util/wheel/ModuloBuildWheel.py,sha256=OtZdKTiiU0XhrIjWaFlBx8denZ
102
102
  modulitiz_micro/util/wheel/ModuloCheckTestNamingConvention.py,sha256=ZGwMtVexRscwVEtiwxgU5ENsItcfsV2NEAcyclcLFgA,3885
103
103
  modulitiz_micro/util/wheel/ModuloToml.py,sha256=774GQ8y6lyhOrT0edJPlLq4TBU7Nq4699q74deGlFW4,1205
104
104
  modulitiz_micro/util/wheel/ModuloWheel.py,sha256=VRS_6kSt62qubBYzkGm91_GWzcIiD0KlSnaqhM_aQnE,338
105
- modulitiz_micro-2.39.0.dist-info/LICENSE,sha256=b-Ia9Hv3N_FviXoFAXG44lDGbk4tCC0fBdduccm8nl0,1086
106
- modulitiz_micro-2.39.0.dist-info/METADATA,sha256=nWExoZuR-JAq9R53bpezFLNMOe86Mktd2P0MNxbAF0I,1690
107
- modulitiz_micro-2.39.0.dist-info/WHEEL,sha256=2aRSX09k7pmd4gPs96VOQ860h0v0t30ka6JGHtpC3BY,94
108
- modulitiz_micro-2.39.0.dist-info/top_level.txt,sha256=ESJE0qtNJp3tbKPrffbFVjH511NSjJHxscfpdLjTpA8,16
109
- modulitiz_micro-2.39.0.dist-info/RECORD,,
105
+ modulitiz_micro-2.41.0.dist-info/LICENSE,sha256=b-Ia9Hv3N_FviXoFAXG44lDGbk4tCC0fBdduccm8nl0,1086
106
+ modulitiz_micro-2.41.0.dist-info/METADATA,sha256=ESKfsw1ErqgtcNju2Ul_1QQKlhudIZ4AGS__GoM4tv0,1721
107
+ modulitiz_micro-2.41.0.dist-info/WHEEL,sha256=2aRSX09k7pmd4gPs96VOQ860h0v0t30ka6JGHtpC3BY,94
108
+ modulitiz_micro-2.41.0.dist-info/top_level.txt,sha256=ESJE0qtNJp3tbKPrffbFVjH511NSjJHxscfpdLjTpA8,16
109
+ modulitiz_micro-2.41.0.dist-info/RECORD,,