not1mm 24.9.9__tar.gz → 24.9.10.1__tar.gz

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.
Files changed (166) hide show
  1. {not1mm-24.9.9 → not1mm-24.9.10.1}/PKG-INFO +8 -6
  2. {not1mm-24.9.9 → not1mm-24.9.10.1}/README.md +7 -5
  3. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/__main__.py +9 -1
  4. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/ft8_watcher.py +15 -2
  5. not1mm-24.9.10.1/not1mm/lib/version.py +3 -0
  6. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_vhf_jan.py +102 -2
  7. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_vhf_jun.py +102 -2
  8. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_vhf_sep.py +102 -2
  9. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/PKG-INFO +8 -6
  10. {not1mm-24.9.9 → not1mm-24.9.10.1}/pyproject.toml +1 -1
  11. not1mm-24.9.9/not1mm/lib/version.py +0 -3
  12. {not1mm-24.9.9 → not1mm-24.9.10.1}/LICENSE +0 -0
  13. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/__init__.py +0 -0
  14. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/bandmap.py +0 -0
  15. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/checkwindow.py +0 -0
  16. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  17. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/about.ui +0 -0
  19. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/check.png +0 -0
  22. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/configuration.ui +0 -0
  24. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/contests.sql +0 -0
  25. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/cty.json +0 -0
  26. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/cwmacros.txt +0 -0
  27. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/donors.html +0 -0
  28. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/editcontact.ui +0 -0
  29. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/editmacro.ui +0 -0
  30. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/greendot.png +0 -0
  31. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
  32. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
  33. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
  34. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
  35. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/logwindow.ui +0 -0
  36. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/logwindowx.ui +0 -0
  37. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/main.ui +0 -0
  38. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/new_contest.ui +0 -0
  39. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/not1mm.html +0 -0
  40. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/opon.ui +0 -0
  41. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/0.wav +0 -0
  42. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/1.wav +0 -0
  43. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/2.wav +0 -0
  44. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/3.wav +0 -0
  45. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/4.wav +0 -0
  46. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/5.wav +0 -0
  47. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/6.wav +0 -0
  48. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/7.wav +0 -0
  49. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/73.wav +0 -0
  50. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/8.wav +0 -0
  51. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/9.wav +0 -0
  52. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/a.wav +0 -0
  53. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/again.wav +0 -0
  54. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/b.wav +0 -0
  55. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/c.wav +0 -0
  56. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/contest.wav +0 -0
  57. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/cq.wav +0 -0
  58. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/d.wav +0 -0
  59. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/e.wav +0 -0
  60. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/f.wav +0 -0
  61. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/g.wav +0 -0
  62. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/h.wav +0 -0
  63. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/i.wav +0 -0
  64. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/j.wav +0 -0
  65. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/k.wav +0 -0
  66. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/k6gte.wav +0 -0
  67. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/l.wav +0 -0
  68. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/m.wav +0 -0
  69. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/mynumber.wav +0 -0
  70. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/n.wav +0 -0
  71. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/nil.wav +0 -0
  72. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/o.wav +0 -0
  73. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/p.wav +0 -0
  74. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/q.wav +0 -0
  75. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/r.wav +0 -0
  76. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/roger.wav +0 -0
  77. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/s.wav +0 -0
  78. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/space.wav +0 -0
  79. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/t.wav +0 -0
  80. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/thankyou.wav +0 -0
  81. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  82. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/u.wav +0 -0
  83. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/v.wav +0 -0
  84. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/w.wav +0 -0
  85. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/x.wav +0 -0
  86. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/y.wav +0 -0
  87. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/yourcall.wav +0 -0
  88. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/phonetics/z.wav +0 -0
  89. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/pickcontest.ui +0 -0
  90. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/radio_green.png +0 -0
  91. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/radio_grey.png +0 -0
  92. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/radio_red.png +0 -0
  93. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/reddot.png +0 -0
  94. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/settings.ui +0 -0
  95. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/splash.png +0 -0
  96. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/ssbmacros.txt +0 -0
  97. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/data/vfo.ui +0 -0
  98. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/fsutils.py +0 -0
  99. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/__init__.py +0 -0
  100. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/about.py +0 -0
  101. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/cat_interface.py +0 -0
  102. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/cwinterface.py +0 -0
  103. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/database.py +0 -0
  104. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/edit_contact.py +0 -0
  105. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/edit_macro.py +0 -0
  106. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/edit_opon.py +0 -0
  107. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/edit_station.py +0 -0
  108. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/fldigi_watcher.py +0 -0
  109. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/ham_utility.py +0 -0
  110. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/lookup.py +0 -0
  111. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/multicast.py +0 -0
  112. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/n1mm.py +0 -0
  113. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/new_contest.py +0 -0
  114. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/playsound.py +0 -0
  115. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/plugin_common.py +0 -0
  116. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/select_contest.py +0 -0
  117. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/settings.py +0 -0
  118. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/super_check_partial.py +0 -0
  119. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/lib/versiontest.py +0 -0
  120. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/logwindow.py +0 -0
  121. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/10_10_fall_cw.py +0 -0
  122. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/10_10_spring_cw.py +0 -0
  123. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/10_10_summer_phone.py +0 -0
  124. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/10_10_winter_phone.py +0 -0
  125. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/__init__.py +0 -0
  126. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_10m.py +0 -0
  127. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_dx_cw.py +0 -0
  128. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  129. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_field_day.py +0 -0
  130. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  131. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_ss_cw.py +0 -0
  132. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/arrl_ss_phone.py +0 -0
  133. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/canada_day.py +0 -0
  134. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_160_cw.py +0 -0
  135. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_160_ssb.py +0 -0
  136. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_wpx_cw.py +0 -0
  137. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  138. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_ww_cw.py +0 -0
  139. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cq_ww_ssb.py +0 -0
  140. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/cwt.py +0 -0
  141. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/general_logging.py +0 -0
  142. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/helvetia.py +0 -0
  143. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  144. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  145. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/iaru_hf.py +0 -0
  146. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/icwc_mst.py +0 -0
  147. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/jidx_cw.py +0 -0
  148. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/jidx_ph.py +0 -0
  149. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/k1usn_sst.py +0 -0
  150. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/naqp_cw.py +0 -0
  151. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/naqp_ssb.py +0 -0
  152. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/phone_weekly_test.py +0 -0
  153. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/ref_cw.py +0 -0
  154. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/stew_perry_topband.py +0 -0
  155. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/weekly_rtty.py +0 -0
  156. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/plugins/winter_field_day.py +0 -0
  157. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/radio.py +0 -0
  158. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/test.py +0 -0
  159. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/vfo.py +0 -0
  160. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm/voice_keying.py +0 -0
  161. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/SOURCES.txt +0 -0
  162. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/dependency_links.txt +0 -0
  163. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/entry_points.txt +0 -0
  164. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/requires.txt +0 -0
  165. {not1mm-24.9.9 → not1mm-24.9.10.1}/not1mm.egg-info/top_level.txt +0 -0
  166. {not1mm-24.9.9 → not1mm-24.9.10.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.9.9
3
+ Version: 24.9.10.1
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -171,7 +171,7 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
171
171
 
172
172
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
173
173
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
174
- Day. Praying that it works. I'll add more details later.
174
+ Day and ARRL VHF. Praying that it works. I'll add more details later.
175
175
 
176
176
  ### Other not so supported contests
177
177
 
@@ -229,9 +229,11 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
229
229
 
230
230
  ## Recent Changes
231
231
 
232
- - [24-9-9] Add IARU R1 Fieldday CW and SSB
232
+ - [24-9-10-1] ft8_watcher now used default WSJT-X Multicast address and port.
233
+ - [24-9-10] Add WSJT FT8/4 and fldigi support to ARRL VHF.
234
+ - [24-9-9] Add IARU R1 Fieldday CW and SSB.
233
235
  - [24-9-8] Correct n1mm contact packet info.
234
- - [24-9-6] Added the Weekly RTTY
236
+ - [24-9-6] Added the Weekly RTTY.
235
237
  - [24-9-5] Added FlDigi support for Field Day.
236
238
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
237
239
 
@@ -614,8 +616,8 @@ appear. Those without will not.
614
616
 
615
617
  **FT8/FT4 Currently only working for ARRL Field Day.**
616
618
 
617
- not1mm listens for WSJT-X UDP traffic on the default localhost:2237. No setup is
618
- needed to be done on not1mm's side. That's good because I'm lazy.
619
+ not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
620
+ No setup is needed to be done on not1mm's side. That's good because I'm lazy.
619
621
 
620
622
  not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
621
623
  way. It just keeps asking what was the last QSO and compares it to the previous response.
@@ -140,7 +140,7 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
140
140
 
141
141
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
142
142
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
143
- Day. Praying that it works. I'll add more details later.
143
+ Day and ARRL VHF. Praying that it works. I'll add more details later.
144
144
 
145
145
  ### Other not so supported contests
146
146
 
@@ -198,9 +198,11 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
198
198
 
199
199
  ## Recent Changes
200
200
 
201
- - [24-9-9] Add IARU R1 Fieldday CW and SSB
201
+ - [24-9-10-1] ft8_watcher now used default WSJT-X Multicast address and port.
202
+ - [24-9-10] Add WSJT FT8/4 and fldigi support to ARRL VHF.
203
+ - [24-9-9] Add IARU R1 Fieldday CW and SSB.
202
204
  - [24-9-8] Correct n1mm contact packet info.
203
- - [24-9-6] Added the Weekly RTTY
205
+ - [24-9-6] Added the Weekly RTTY.
204
206
  - [24-9-5] Added FlDigi support for Field Day.
205
207
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
206
208
 
@@ -583,8 +585,8 @@ appear. Those without will not.
583
585
 
584
586
  **FT8/FT4 Currently only working for ARRL Field Day.**
585
587
 
586
- not1mm listens for WSJT-X UDP traffic on the default localhost:2237. No setup is
587
- needed to be done on not1mm's side. That's good because I'm lazy.
588
+ not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
589
+ No setup is needed to be done on not1mm's side. That's good because I'm lazy.
588
590
 
589
591
  not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
590
592
  way. It just keeps asking what was the last QSO and compares it to the previous response.
@@ -1936,7 +1936,15 @@ class MainWindow(QtWidgets.QMainWindow):
1936
1936
  " "
1937
1937
  )[:19]
1938
1938
  self.contact["Call"] = self.callsign.text()
1939
- if self.contact.get("Mode") not in ("FT8", "FT4", "RTTY"):
1939
+ if self.contact.get("Mode") not in (
1940
+ "FT8",
1941
+ "FT4",
1942
+ "RTTY",
1943
+ "PSK31",
1944
+ "FSK441",
1945
+ "MSK144",
1946
+ "JT65",
1947
+ ):
1940
1948
  self.contact["Freq"] = round(
1941
1949
  float(self.radio_state.get("vfoa", 0.0)) / 1000, 2
1942
1950
  )
@@ -23,9 +23,22 @@ class FT8Watcher:
23
23
  def __init__(self, *args, **kwargs):
24
24
  """Initialize"""
25
25
  super().__init__(*args, **kwargs)
26
- self.callback = None
26
+ self.multicast_group = "224.0.0.1"
27
+ self.multicast_port = 2237
28
+ self.interface_ip = "0.0.0.0"
27
29
  self.udp_socket = QtNetwork.QUdpSocket()
28
- self.udp_socket.bind(QtNetwork.QHostAddress.SpecialAddress.LocalHost, 2237)
30
+ b_result = self.udp_socket.bind(
31
+ QtNetwork.QHostAddress.SpecialAddress.AnyIPv4,
32
+ int(self.multicast_port),
33
+ QtNetwork.QAbstractSocket.BindFlag.ReuseAddressHint,
34
+ )
35
+ logger.info(f"multicast bind {b_result}")
36
+ join_result = self.udp_socket.joinMulticastGroup(
37
+ QtNetwork.QHostAddress(self.multicast_group)
38
+ )
39
+ logger.info(f"joinMulticastGroup result {join_result}")
40
+
41
+ self.callback = None
29
42
  self.udp_socket.readyRead.connect(self.on_udp_socket_ready_read)
30
43
 
31
44
  def set_callback(self, callback):
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.9.10.1"
@@ -43,11 +43,13 @@ import logging
43
43
  from pathlib import Path
44
44
  from PyQt6 import QtWidgets
45
45
 
46
+ from not1mm.lib.ham_utility import get_logged_band
46
47
  from not1mm.lib.plugin_common import gen_adif, get_points
47
48
  from not1mm.lib.version import __version__
48
49
 
49
50
  logger = logging.getLogger(__name__)
50
51
 
52
+ ALTEREGO = None
51
53
  EXCHANGE_HINT = "4-character grid square"
52
54
 
53
55
  name = "ARRL VHF JAN"
@@ -58,6 +60,7 @@ columns = [
58
60
  "YYYY-MM-DD HH:MM:SS",
59
61
  "Call",
60
62
  "Freq",
63
+ "Mode",
61
64
  "SentNr",
62
65
  "RcvNr",
63
66
  "PTS",
@@ -376,9 +379,21 @@ def cabrillo(self):
376
379
  for contact in log:
377
380
  the_date_and_time = contact.get("TS", "")
378
381
  themode = contact.get("Mode", "")
379
- if themode == "LSB" or themode == "USB":
382
+ if themode in ("LSB", "USB", "FM", "AM"):
380
383
  themode = "PH"
381
- frequency = str(int(contact.get("Freq", "0"))).rjust(5)
384
+ if themode in (
385
+ "FT8",
386
+ "FT4",
387
+ "RTTY",
388
+ "PSK31",
389
+ "FSK441",
390
+ "MSK144",
391
+ "JT65",
392
+ ):
393
+ themode = "DG"
394
+ freq = int(contact.get("Freq", "0")) / 1000
395
+
396
+ frequency = str(int(freq)).rjust(4)
382
397
 
383
398
  loggeddate = the_date_and_time[:10]
384
399
  loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
@@ -403,3 +418,88 @@ def cabrillo(self):
403
418
 
404
419
  def recalculate_mults(self):
405
420
  """Recalculates multipliers after change in logged qso."""
421
+
422
+
423
+ def set_self(the_outie):
424
+ """..."""
425
+ globals()["ALTEREGO"] = the_outie
426
+
427
+
428
+ def ft8_handler(the_packet: dict):
429
+ """Process FT8 QSO packets
430
+ FT8
431
+ {
432
+ 'CALL': 'KE0OG',
433
+ 'GRIDSQUARE': 'DM10AT',
434
+ 'MODE': 'FT8',
435
+ 'RST_SENT': '',
436
+ 'RST_RCVD': '',
437
+ 'QSO_DATE': '20210329',
438
+ 'TIME_ON': '183213',
439
+ 'QSO_DATE_OFF': '20210329',
440
+ 'TIME_OFF': '183213',
441
+ 'BAND': '20M',
442
+ 'FREQ': '14.074754',
443
+ 'STATION_CALLSIGN': 'K6GTE',
444
+ 'MY_GRIDSQUARE': 'DM13AT',
445
+ 'CONTEST_ID': 'ARRL-FIELD-DAY',
446
+ 'SRX_STRING': '1D UT',
447
+ 'CLASS': '1D',
448
+ 'ARRL_SECT': 'UT'
449
+ }
450
+ FlDigi
451
+ {
452
+ 'FREQ': '7.029500',
453
+ 'CALL': 'DL2DSL',
454
+ 'MODE': 'RTTY',
455
+ 'NAME': 'BOB',
456
+ 'QSO_DATE': '20240904',
457
+ 'QSO_DATE_OFF': '20240904',
458
+ 'TIME_OFF': '212825',
459
+ 'TIME_ON': '212800',
460
+ 'RST_RCVD': '599',
461
+ 'RST_SENT': '599',
462
+ 'BAND': '40M',
463
+ 'COUNTRY': 'FED. REP. OF GERMANY',
464
+ 'CQZ': '14',
465
+ 'STX': '000',
466
+ 'STX_STRING': '1D ORG',
467
+ 'CLASS': '1D',
468
+ 'ARRL_SECT': 'DX',
469
+ 'TX_PWR': '0',
470
+ 'OPERATOR': 'K6GTE',
471
+ 'STATION_CALLSIGN': 'K6GTE',
472
+ 'MY_GRIDSQUARE': 'DM13AT',
473
+ 'MY_CITY': 'ANAHEIM, CA',
474
+ 'MY_STATE': 'CA'
475
+ }
476
+
477
+ """
478
+ logger.debug(f"{the_packet=}")
479
+ if ALTEREGO is not None:
480
+ ALTEREGO.callsign.setText(the_packet.get("CALL"))
481
+ ALTEREGO.contact["Call"] = the_packet.get("CALL", "")
482
+ ALTEREGO.contact["SNT"] = ALTEREGO.sent.text()
483
+ ALTEREGO.contact["RCV"] = ALTEREGO.receive.text()
484
+ my_grid = the_packet.get("MY_GRIDSQUARE", "")
485
+ if my_grid:
486
+ if len(my_grid) > 4:
487
+ my_grid = my_grid[:4]
488
+ their_grid = the_packet.get("GRIDSQUARE", "")
489
+ if their_grid:
490
+ if len(their_grid) > 4:
491
+ their_grid = their_grid[:4]
492
+ ALTEREGO.contact["NR"] = their_grid
493
+ # ALTEREGO.contact["Sect"] = the_packet.get("ARRL_SECT", "ERR")
494
+ ALTEREGO.contact["Mode"] = the_packet.get("MODE", "ERR")
495
+ ALTEREGO.contact["Freq"] = round(float(the_packet.get("FREQ", "0.0")) * 1000, 2)
496
+ ALTEREGO.contact["QSXFreq"] = round(
497
+ float(the_packet.get("FREQ", "0.0")) * 1000, 2
498
+ )
499
+ ALTEREGO.contact["Band"] = get_logged_band(
500
+ str(int(float(the_packet.get("FREQ", "0.0")) * 1000000))
501
+ )
502
+ logger.debug(f"{ALTEREGO.contact=}")
503
+ ALTEREGO.other_1.setText(my_grid)
504
+ ALTEREGO.other_2.setText(their_grid)
505
+ ALTEREGO.save_contact()
@@ -11,11 +11,13 @@ import logging
11
11
  from pathlib import Path
12
12
  from PyQt6 import QtWidgets
13
13
 
14
+ from not1mm.lib.ham_utility import get_logged_band
14
15
  from not1mm.lib.plugin_common import gen_adif, get_points
15
16
  from not1mm.lib.version import __version__
16
17
 
17
18
  logger = logging.getLogger(__name__)
18
19
 
20
+ ALTEREGO = None
19
21
  EXCHANGE_HINT = "4-character grid square"
20
22
 
21
23
  name = "ARRL VHF JUN"
@@ -26,6 +28,7 @@ columns = [
26
28
  "YYYY-MM-DD HH:MM:SS",
27
29
  "Call",
28
30
  "Freq",
31
+ "Mode",
29
32
  "SentNr",
30
33
  "RcvNr",
31
34
  "PTS",
@@ -344,9 +347,21 @@ def cabrillo(self):
344
347
  for contact in log:
345
348
  the_date_and_time = contact.get("TS", "")
346
349
  themode = contact.get("Mode", "")
347
- if themode == "LSB" or themode == "USB":
350
+ if themode in ("LSB", "USB", "FM", "AM"):
348
351
  themode = "PH"
349
- frequency = str(int(contact.get("Freq", "0"))).rjust(5)
352
+ if themode in (
353
+ "FT8",
354
+ "FT4",
355
+ "RTTY",
356
+ "PSK31",
357
+ "FSK441",
358
+ "MSK144",
359
+ "JT65",
360
+ ):
361
+ themode = "DG"
362
+ freq = int(contact.get("Freq", "0")) / 1000
363
+
364
+ frequency = str(int(freq)).rjust(4)
350
365
 
351
366
  loggeddate = the_date_and_time[:10]
352
367
  loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
@@ -371,3 +386,88 @@ def cabrillo(self):
371
386
 
372
387
  def recalculate_mults(self):
373
388
  """Recalculates multipliers after change in logged qso."""
389
+
390
+
391
+ def set_self(the_outie):
392
+ """..."""
393
+ globals()["ALTEREGO"] = the_outie
394
+
395
+
396
+ def ft8_handler(the_packet: dict):
397
+ """Process FT8 QSO packets
398
+ FT8
399
+ {
400
+ 'CALL': 'KE0OG',
401
+ 'GRIDSQUARE': 'DM10AT',
402
+ 'MODE': 'FT8',
403
+ 'RST_SENT': '',
404
+ 'RST_RCVD': '',
405
+ 'QSO_DATE': '20210329',
406
+ 'TIME_ON': '183213',
407
+ 'QSO_DATE_OFF': '20210329',
408
+ 'TIME_OFF': '183213',
409
+ 'BAND': '20M',
410
+ 'FREQ': '14.074754',
411
+ 'STATION_CALLSIGN': 'K6GTE',
412
+ 'MY_GRIDSQUARE': 'DM13AT',
413
+ 'CONTEST_ID': 'ARRL-FIELD-DAY',
414
+ 'SRX_STRING': '1D UT',
415
+ 'CLASS': '1D',
416
+ 'ARRL_SECT': 'UT'
417
+ }
418
+ FlDigi
419
+ {
420
+ 'FREQ': '7.029500',
421
+ 'CALL': 'DL2DSL',
422
+ 'MODE': 'RTTY',
423
+ 'NAME': 'BOB',
424
+ 'QSO_DATE': '20240904',
425
+ 'QSO_DATE_OFF': '20240904',
426
+ 'TIME_OFF': '212825',
427
+ 'TIME_ON': '212800',
428
+ 'RST_RCVD': '599',
429
+ 'RST_SENT': '599',
430
+ 'BAND': '40M',
431
+ 'COUNTRY': 'FED. REP. OF GERMANY',
432
+ 'CQZ': '14',
433
+ 'STX': '000',
434
+ 'STX_STRING': '1D ORG',
435
+ 'CLASS': '1D',
436
+ 'ARRL_SECT': 'DX',
437
+ 'TX_PWR': '0',
438
+ 'OPERATOR': 'K6GTE',
439
+ 'STATION_CALLSIGN': 'K6GTE',
440
+ 'MY_GRIDSQUARE': 'DM13AT',
441
+ 'MY_CITY': 'ANAHEIM, CA',
442
+ 'MY_STATE': 'CA'
443
+ }
444
+
445
+ """
446
+ logger.debug(f"{the_packet=}")
447
+ if ALTEREGO is not None:
448
+ ALTEREGO.callsign.setText(the_packet.get("CALL"))
449
+ ALTEREGO.contact["Call"] = the_packet.get("CALL", "")
450
+ ALTEREGO.contact["SNT"] = ALTEREGO.sent.text()
451
+ ALTEREGO.contact["RCV"] = ALTEREGO.receive.text()
452
+ my_grid = the_packet.get("MY_GRIDSQUARE", "")
453
+ if my_grid:
454
+ if len(my_grid) > 4:
455
+ my_grid = my_grid[:4]
456
+ their_grid = the_packet.get("GRIDSQUARE", "")
457
+ if their_grid:
458
+ if len(their_grid) > 4:
459
+ their_grid = their_grid[:4]
460
+ ALTEREGO.contact["NR"] = their_grid
461
+ # ALTEREGO.contact["Sect"] = the_packet.get("ARRL_SECT", "ERR")
462
+ ALTEREGO.contact["Mode"] = the_packet.get("MODE", "ERR")
463
+ ALTEREGO.contact["Freq"] = round(float(the_packet.get("FREQ", "0.0")) * 1000, 2)
464
+ ALTEREGO.contact["QSXFreq"] = round(
465
+ float(the_packet.get("FREQ", "0.0")) * 1000, 2
466
+ )
467
+ ALTEREGO.contact["Band"] = get_logged_band(
468
+ str(int(float(the_packet.get("FREQ", "0.0")) * 1000000))
469
+ )
470
+ logger.debug(f"{ALTEREGO.contact=}")
471
+ ALTEREGO.other_1.setText(my_grid)
472
+ ALTEREGO.other_2.setText(their_grid)
473
+ ALTEREGO.save_contact()
@@ -11,11 +11,13 @@ import logging
11
11
  from pathlib import Path
12
12
  from PyQt6 import QtWidgets
13
13
 
14
+ from not1mm.lib.ham_utility import get_logged_band
14
15
  from not1mm.lib.plugin_common import gen_adif, get_points
15
16
  from not1mm.lib.version import __version__
16
17
 
17
18
  logger = logging.getLogger(__name__)
18
19
 
20
+ ALTEREGO = None
19
21
  EXCHANGE_HINT = "4-character grid square"
20
22
 
21
23
  name = "ARRL VHF SEP"
@@ -26,6 +28,7 @@ columns = [
26
28
  "YYYY-MM-DD HH:MM:SS",
27
29
  "Call",
28
30
  "Freq",
31
+ "Mode",
29
32
  "SentNr",
30
33
  "RcvNr",
31
34
  "PTS",
@@ -344,9 +347,21 @@ def cabrillo(self):
344
347
  for contact in log:
345
348
  the_date_and_time = contact.get("TS", "")
346
349
  themode = contact.get("Mode", "")
347
- if themode == "LSB" or themode == "USB":
350
+ if themode in ("LSB", "USB", "FM", "AM"):
348
351
  themode = "PH"
349
- frequency = str(int(contact.get("Freq", "0"))).rjust(5)
352
+ if themode in (
353
+ "FT8",
354
+ "FT4",
355
+ "RTTY",
356
+ "PSK31",
357
+ "FSK441",
358
+ "MSK144",
359
+ "JT65",
360
+ ):
361
+ themode = "DG"
362
+ freq = int(contact.get("Freq", "0")) / 1000
363
+
364
+ frequency = str(int(freq)).rjust(4)
350
365
 
351
366
  loggeddate = the_date_and_time[:10]
352
367
  loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
@@ -371,3 +386,88 @@ def cabrillo(self):
371
386
 
372
387
  def recalculate_mults(self):
373
388
  """Recalculates multipliers after change in logged qso."""
389
+
390
+
391
+ def set_self(the_outie):
392
+ """..."""
393
+ globals()["ALTEREGO"] = the_outie
394
+
395
+
396
+ def ft8_handler(the_packet: dict):
397
+ """Process FT8 QSO packets
398
+ FT8
399
+ {
400
+ 'CALL': 'KE0OG',
401
+ 'GRIDSQUARE': 'DM10AT',
402
+ 'MODE': 'FT8',
403
+ 'RST_SENT': '',
404
+ 'RST_RCVD': '',
405
+ 'QSO_DATE': '20210329',
406
+ 'TIME_ON': '183213',
407
+ 'QSO_DATE_OFF': '20210329',
408
+ 'TIME_OFF': '183213',
409
+ 'BAND': '20M',
410
+ 'FREQ': '14.074754',
411
+ 'STATION_CALLSIGN': 'K6GTE',
412
+ 'MY_GRIDSQUARE': 'DM13AT',
413
+ 'CONTEST_ID': 'ARRL-FIELD-DAY',
414
+ 'SRX_STRING': '1D UT',
415
+ 'CLASS': '1D',
416
+ 'ARRL_SECT': 'UT'
417
+ }
418
+ FlDigi
419
+ {
420
+ 'FREQ': '7.029500',
421
+ 'CALL': 'DL2DSL',
422
+ 'MODE': 'RTTY',
423
+ 'NAME': 'BOB',
424
+ 'QSO_DATE': '20240904',
425
+ 'QSO_DATE_OFF': '20240904',
426
+ 'TIME_OFF': '212825',
427
+ 'TIME_ON': '212800',
428
+ 'RST_RCVD': '599',
429
+ 'RST_SENT': '599',
430
+ 'BAND': '40M',
431
+ 'COUNTRY': 'FED. REP. OF GERMANY',
432
+ 'CQZ': '14',
433
+ 'STX': '000',
434
+ 'STX_STRING': '1D ORG',
435
+ 'CLASS': '1D',
436
+ 'ARRL_SECT': 'DX',
437
+ 'TX_PWR': '0',
438
+ 'OPERATOR': 'K6GTE',
439
+ 'STATION_CALLSIGN': 'K6GTE',
440
+ 'MY_GRIDSQUARE': 'DM13AT',
441
+ 'MY_CITY': 'ANAHEIM, CA',
442
+ 'MY_STATE': 'CA'
443
+ }
444
+
445
+ """
446
+ logger.debug(f"{the_packet=}")
447
+ if ALTEREGO is not None:
448
+ ALTEREGO.callsign.setText(the_packet.get("CALL"))
449
+ ALTEREGO.contact["Call"] = the_packet.get("CALL", "")
450
+ ALTEREGO.contact["SNT"] = ALTEREGO.sent.text()
451
+ ALTEREGO.contact["RCV"] = ALTEREGO.receive.text()
452
+ my_grid = the_packet.get("MY_GRIDSQUARE", "")
453
+ if my_grid:
454
+ if len(my_grid) > 4:
455
+ my_grid = my_grid[:4]
456
+ their_grid = the_packet.get("GRIDSQUARE", "")
457
+ if their_grid:
458
+ if len(their_grid) > 4:
459
+ their_grid = their_grid[:4]
460
+ ALTEREGO.contact["NR"] = their_grid
461
+ # ALTEREGO.contact["Sect"] = the_packet.get("ARRL_SECT", "ERR")
462
+ ALTEREGO.contact["Mode"] = the_packet.get("MODE", "ERR")
463
+ ALTEREGO.contact["Freq"] = round(float(the_packet.get("FREQ", "0.0")) * 1000, 2)
464
+ ALTEREGO.contact["QSXFreq"] = round(
465
+ float(the_packet.get("FREQ", "0.0")) * 1000, 2
466
+ )
467
+ ALTEREGO.contact["Band"] = get_logged_band(
468
+ str(int(float(the_packet.get("FREQ", "0.0")) * 1000000))
469
+ )
470
+ logger.debug(f"{ALTEREGO.contact=}")
471
+ ALTEREGO.other_1.setText(my_grid)
472
+ ALTEREGO.other_2.setText(their_grid)
473
+ ALTEREGO.save_contact()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.9.9
3
+ Version: 24.9.10.1
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -171,7 +171,7 @@ when the program craps the bed. I'm only one guy, so if you see a bug let me kno
171
171
 
172
172
  I've recently added portions of code to watch for WSTJ-X and fldigi QSOs. I've added
173
173
  the Weekly RTTY Test, So RTTY could be tested. Also added FT8/4 and RTTY to ARRL Field
174
- Day. Praying that it works. I'll add more details later.
174
+ Day and ARRL VHF. Praying that it works. I'll add more details later.
175
175
 
176
176
  ### Other not so supported contests
177
177
 
@@ -229,9 +229,11 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
229
229
 
230
230
  ## Recent Changes
231
231
 
232
- - [24-9-9] Add IARU R1 Fieldday CW and SSB
232
+ - [24-9-10-1] ft8_watcher now used default WSJT-X Multicast address and port.
233
+ - [24-9-10] Add WSJT FT8/4 and fldigi support to ARRL VHF.
234
+ - [24-9-9] Add IARU R1 Fieldday CW and SSB.
233
235
  - [24-9-8] Correct n1mm contact packet info.
234
- - [24-9-6] Added the Weekly RTTY
236
+ - [24-9-6] Added the Weekly RTTY.
235
237
  - [24-9-5] Added FlDigi support for Field Day.
236
238
  - [24-9-3] Added WSJT-X FT8 mode contacts to ARRL Field Day.
237
239
 
@@ -614,8 +616,8 @@ appear. Those without will not.
614
616
 
615
617
  **FT8/FT4 Currently only working for ARRL Field Day.**
616
618
 
617
- not1mm listens for WSJT-X UDP traffic on the default localhost:2237. No setup is
618
- needed to be done on not1mm's side. That's good because I'm lazy.
619
+ not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
620
+ No setup is needed to be done on not1mm's side. That's good because I'm lazy.
619
621
 
620
622
  not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
621
623
  way. It just keeps asking what was the last QSO and compares it to the previous response.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.9.9"
7
+ version = "24.9.10.1"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +0,0 @@
1
- """It's the version"""
2
-
3
- __version__ = "24.9.9"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes