Menu

Evaluating GeigerLog Version 1.5

ullix
2023-04-01
2024-09-05
<< < 1 .. 7 8 9 10 > >> (Page 9 of 10)
  • Simon Harrison

    Simon Harrison - 2024-06-23

    @ullix

    Ok I'll use you the formula you suggest and read your comments again.
    Please, however, let me know and answer any of the questions I asked which are not covered in your comments or the GL manual.
    Yes, I'll look at the gsup_utils.py file, thanks.

    Now for something completely different:

    Have you considered, or have any opinions on, modifying you GL app for use with gamma spectrometry to identify radionucleotides via a scintillation crystal, photomultiplier tube (PMT), (USB) audio adapter solution? Somewhat like a DIY version of a Radiacode.

    I recently purchased a PMT (pic attached) and eventually I'll be trying to connect it to a multichannel analyzer (MCA) + spectrometry software solution from an open-source software project I found.

    Anyway, I'd be interested to see what you think.

    Simon

     

    Last edit: Simon Harrison 2024-06-23
  • Anonymous

    Anonymous - 2024-06-23

    Ok will use the formula you suggest and re-read your comments.
    Please however, respond to my questions (not covered in your comments or the GL manual).
    Thanks for letting me know about gsup_utils.py, I will look at it.

     
  • ullix

    ullix - 2024-06-24

    Wow, this sure looks like a project!

    Actually, the Radiacode and its software are so good, it is hard to make anything significantly better. I had contacted them, offering GeigerLog adaptation, but they are not interested. So, this won't happen.

    The requirement for spectra analysis is so much different from GeigerLog's current offer, that its integration into GeigerLog is a real challenge. Maybe a separate program, like "GeigerSpectra", is needed. Demanding, but not impossible.

    What is your plan regarding data preparation from the PMT and delivering to "GeigerSpectra"? I guess you will need a microprocessor to handle this? Are you able to program C/C++?

     
    • Simon Harrison

      Simon Harrison - 2024-06-24

      @ullix

      Yes, interesting project and not as difficult (or expensive) as would seem.

      I'd love to get a Radiacode but I've got a few more pennies to add to the piggybank :)
      I believe they're using solid state ICs to perform photomultiplication, and these must be sufficiently accurate/efficient to get reliable results. While bulky, PMTs seem a bit more "old-school" but might be just still as accurate or maybe even better depending on the type of scintillation material and tube design.

      Yes, it's a shame they're not interested in adapting GL, or may it's for the best.

      Plan:

      It's pretty straightforward actually. Hardware is relatively simple to build and software is handled by that open-source project I mentioned before. Here's the basic topology:

      Scintillator (plastic or NaI(Th)) >> PMT (rewired w/ resistors in series + some caps) >> MCA (provides high-voltage power, reads voltage spikes from PMT) >> USB Audio adapter (powers the MCA and transmutes signals into audio pulses) >> Software (reads the audio signal intensity and plots them on a known KeV/MeV scale for various known radionucleotide signatures)

      Happy to provide more details if you're interested.

       

      Last edit: Simon Harrison 2024-06-25
  • ullix

    ullix - 2024-06-25

    So, you are ending with an audio signal? Hmmm. GeigerLog can handle audio signals with its AudioDevice (see manual). All it does is to detect an audio pulse. However, the audio signal height is also available, so there is at least a chance it could measure pulse heights.

    However, audio conversion tends to insert noise. I would put an MCU (STM32, ESP32) at the point where a pulse (not audio pulse) is defined, and let its ADC measure the pulse height. At this point you can already share the pulse height via WiFi, or, better, let the MCU also do the MCS sorting.

    Keep me informed on the progress!

     
    • Simon Harrison

      Simon Harrison - 2024-06-25

      Will do. Also, take a look at Theremino.
      That's the open-source software/hardware project I was referring to. https://www.theremino.com/downloads/radioactivity


      Back to the moving average:
      You've been a big help but one last try for COUNTRATE_AVG("CPM","HOUR") which stubbornly just does't seem to work for me.

      • Works! COUNTRATE_AVG("CPM", 3600)/60
      • Works! COUNTRATE_AVG("CPM", 600)/10
      • Works! COUNTRATE_AVG("CPM", 180)/3
      • I'm back to the WiFi Client + GL Relay config transmitting @ 1 CPM / minute
      • My geigerlog.cfg is below and pic attached. FYI
      • Also. I'm still getting the following error repeatedly. Anything?
      25 13:24:51.216067 DEBUG  : .....2    EXCEPTION: COUNTRATE_AVG:  (e:'slice indices must be integers or None or have an __index__ method') in file: gsup_utils.py in line: 2275
      

      Smoothing?
      "Bells & whistles" I know, but have you ever thought about smoothing functions? Maybe it would be nice with the moving average?

      for example:

      import numpy as np 
      import matplotlib.pyplot as plt 
      from scipy.interpolate import make_interp_spline 
      
      x = np.array([1, 2, 3, 4, 5]) 
      y = np.array([4, 9, 1, 3, 5]) 
      xnew = np.linspace(x.min(), x.max(), 300) 
      gfg = make_interp_spline(x, y, k=3) 
      y_new = gfg(xnew) 
      plt.plot(xnew, y_new) 
      plt.show() 
      

      https://www.geeksforgeeks.org/create-scatter-plot-with-smooth-line-using-python/

      https://pieriantraining.com/python-smoothing-data-a-comprehensive-guide/


      My geigerlog.cfg

      [Logging]
      LogCycle    = 60
      
      [DataDirectory]
      DataDir    = auto
      UseVenvSubDir = no
      
      [TimeZone]
      TimeZoneOffset = auto
      [Graphic]
      MovingAverage = 600
      linewidth   = 1
      markersymbol = o
      markersize  = 15
      
      [Window]
      HiDPIactivation  = auto
      HiDPIscaleMPL = auto
      windowWidth      = 1366
      windowHeight     = 720
      windowSize = auto
      windowStyle = auto
      
      [Network]
      WiFiSSID     = <mySSID>
      WiFiPassword = <myPassword>
      
      [MonServer]
      MonServerAutostart = yes
      MonServerSSL = no
      MonServerPort = auto
      MonServerThresholds = auto
      MonServerPlotConfig = 1400, 2, 0
      MonServerDataConfig = auto
      
      [Worldmaps]
      gmcmapWebsite      = www.gmcmap.com
      gmcmapURL          = log2.asp
      gmcmapUserID        = <myUserId>
      gmcmapCounterID     = <myCounterID>
      
      [TubeSensitivities]
      TubeSensitivityDef = auto
      TubeSensitivity1st = auto
      TubeSensitivity2nd = auto
      TubeSensitivity3rd = auto
      
      [GMC_Device]
      GMC_Activation = no
      GMC_locationBug   = auto
      GMC_SPIRbugfix  = auto
      GMC_SPIRpage    = auto
      GMC_FastEstTime = auto
      GMC_RTC_Offset  = auto
      GMC_GL_ClockCorrection = auto
      GMC_memory = auto
      GMC_configsize = auto
      GMC_voltagebytes = auto
      GMC_endianness = auto
      GMC_Bytes     = auto
      GMC_CfgHiIndex = auto
      GMC_WiFiPeriod = auto
      GMC_WiFiSwitch = auto
      GMC_usbport  = auto
      GMC_ID        = auto
      GMC_Variables = CPM
      
      [AudioCounter]
      AudioActivation = no
      AudioDevice     = auto
      AudioLatency    = auto
      AudioPulseMax   = auto
      AudioPulseDir   = auto
      AudioThreshold  = 30
      AudioVariables  = auto
      
      [IoTDevice]
      IoTActivation   = no
      IoTBrokerIP = auto
      IoTBrokerPort = 1884
      IoTTimeout      = auto
      IoTUsername = rw
      IoTPassword = readwrite
      IoTBrokerFolder = auto
      IoTClientDataGL     =  n,    geigerlog/cmnd/GLdevice,            SEND,           CPM, CPS, CPM1st, CPS1st, CPM2nd, CPS2nd, CPM3rd, CPS3rd, Temp, Press, Humid, Xtra
      IoTClientTasmotaGL1 =  n,    geigerlog/cmnd/tasmotaGL1/Status,   8,              CPM,    None, Temp
      IoTClientTasmotaGL2 =  n,    geigerlog/cmnd/tasmotaGL2/Status,   8,              CPM1st, None, Press
      IoTClientTasmotaGL3 =  n,    geigerlog/cmnd/tasmotaGL3/Status,   8,              CPM2nd, None, Humid
      IoTClientTasmotaGL4 = yn,    geigerlog/cmnd/tasmotaGL4/Status,   8,              Press,  Humid, Xtra
      
      [RadMonPlusDevice]
      RMActivation    = no
      RMServerIP  = auto
      RMServerPort = auto
      RMServerFolder  = geigerlog/
      RMTimeout       = auto
      RMVariables     = auto
      
      [AmbioMonDevice]
      AmbioActivation = no
      AmbioServerIP   = auto
      AmbioServerPort = auto
      AmbioTimeout    = auto
      AmbioDataType   = auto
      AmbioVariables  = auto
      
      [GammaScoutDevice]
      GSActivation  = no
      GSVariables    = auto
      GSusbport  = auto
      
      [LabJackDevice]
      LJActivation = no
      LJEI1050Activation = yes
      LJVariables = auto
      
      [MiniMon]
      MiniMonActivation = no
      MiniMonOS_Device = auto
      MiniMonInterval = auto
      MiniMonVariables = auto
      
      [Formula]
      FormulaActivation = yes
      FormulaVariables = CPM1st, CPM2nd, CPM3rd
      
      [Manu]
      ManuActivation = no
      ManuVariables   = auto
      
      [WiFiClientDevice]
      WiFiClientActivation = yes
      WiFiClientPort = auto
      WiFiClientType = GMC
      WiFiClientVariablesGENERIC = auto
      WiFiClientVariablesGMC = CPM:CPM
      
      [WiFiServerDevice]
      WiFiServerActivation = no
      WiFiServer =
         # y, 10.0.0.49,    4000, GL, CPM1st, CPS1st, Temp, Xtra
         y, 10.0.0.60,    4000,   , CPM1st, CPS1st
      
      [I2CDevice]
      I2CActivation = no
      I2CDongle  = ISS
      I2Cusbport = auto
      I2CSensorLM75      = n,  0x48, CPS3rd
      I2CSensorBME280    = yn, 0x76, Temp, Press, Humid
      I2CSensorSCD30     = yn, 0x61, CPM1st, CPS1st, None
      I2CSensorSCD41     = yn, 0x62, CPM2nd, CPS2nd, None
      I2CSensorTSL2591   = n,  0x29, Temp, None
      I2CSensorBH1750    = n,  0x23, Press
      I2CSensorGDK101    = n,  0x18, CPM3rd, CPS3rd, Temp
      
      [RaspiI2CDevice]
      RaspiI2CActivation = no
      RaspiI2CSensorLM75      =  n, 0x48, 9, Xtra
      RaspiI2CSensorBME280    =  n, 0x77, 1, Temp, Press, Humid
      RaspiI2CSensorBH1750    =  n, 0x23, 1, Xtra
      RaspiI2CSensorTSL2591   =  n, 0x29, 1, CPS, None
      RaspiI2CSensorBMM150    = yn, 0x13, 3, Temp, Press, Humid, Xtra, CPM
      RaspiI2CSensorSCD30     =  n, 0x61, 1, CPM, CPS, None
      RaspiI2CSensorSCD41     =  n, 0x62, 1, CPM, CPS, None
      RaspiI2CSensorGDK101    =  n, 0x18, 1, CPM2nd, None, None
      
      [RaspiPulseDevice]
      RaspiPulseActivation = no
      RaspiPulsePin = auto
      RaspiPulseEdge = auto
      RaspiPulseVariables = auto
      [SerialPulseDevice]
      SerialPulseActivation = no
      SerialPulseUsbport  = auto
      SerialPulseVariables = auto
      
      [RadProDevice]
      RadProActivation = no
      RadProPort  = auto
      RadProClockCorrection = auto
      RadProVariables = auto
      
      [Comment]
      CommentCPM    = CPM
      CommentCPS    = CPS
      CommentCPM1st = CPM1st
      CommentCPS1st = CPS1st
      CommentCPM2nd = CPM2nd
      CommentCPS2nd = CPS2nd
      CommentCPM3rd = CPM3rd
      CommentCPS3rd = CPS3rd
      CommentTemp   = Temp
      CommentPress  = Press
      CommentHumid  = Humid
      CommentXtra   = Xtra
      
      [ValueFormula]
      CPM    = val
      CPS    = val
      CPM1st = COUNTRATE_AVG("CPM", 3600)/60
      CPS1st = val
      CPM2nd = COUNTRATE_AVG("CPM", 600)/10
      CPS2nd = val
      CPM3rd = COUNTRATE_AVG("CPM", 180)/3
      CPS3rd = val
      Temp   = val
      Press  = val
      Humid  = val
      Xtra   = val
      
      [GraphFormula]
      CPM    = val
      CPS    = val
      CPM1st = val
      CPS1st = val
      CPM2nd = val
      CPS2nd = val
      CPM3rd = val
      CPS3rd = val
      Temp   = val
      Press  = val - 1000
      Humid  = val
      Xtra   = val
      
      [Alarm]
      AlarmActivation = yes
      AlarmSound      = yes
      AlarmIdleCycles = 10
      AlarmCPM       = 2, None, 80
      AlarmCPS       = None
      AlarmCPM1st    = None
      AlarmCPS1st    = None
      AlarmCPM2nd    = None
      AlarmCPS2nd    = None
      AlarmCPM3rd    = None
      AlarmCPS3rd    = None
      AlarmTemp      = None
      AlarmPress     = None
      AlarmHumid     = None
      AlarmXtra      = None
      
      [Email]
      emailActivation = yes
      emailReadFromFile    = /home/simon/geigerlog/private_email/alarm_email.cfg
      emailProtocol        = SMTP_SSL
      emailHost            = smtp.johndoe.com
      emailPort            = 465
      emailFrom            = john@johndoe.com
      emailTo              = info@johndoe.com
      emailPassword        = topsecret
      
       

      Last edit: Simon Harrison 2024-06-25
  • Simon Harrison

    Simon Harrison - 2024-06-26

    @ ullix

    ...and one more suggestion for the web monitor page (if feasible):

    If you look at the attached screenshots, you see that in GL program graph, each of the 4 plots correlate to a common Y-axis scale (from 0-25 CPM in my case). This is perfect.

    However in the website monitor plot page, the range of the Y-axis for of each COUNTRATE formula, spans the zero and maximum value of that specific dataset. While this makes sense most of the time, IMO, it's not very helpful for moving averages normalized to the CPM.

    My 4 plots include the CPM data + 3 calculated moving averages all "normalized" to the CPM:
    * CPM1st = COUNTRATE_AVG("CPM", 600)/10
    * CPM2nd = COUNTRATE_AVG("CPM", 7200)/120
    * CPM3rd = COUNTRATE_AVG("CPM", 21600)/360

    So my question is: In the website monitor plot page, would it be possible to programmatically make the:
    Y-Axis scale = CPM Y-Axis scale
    for all moving averages normalized to the CPM)?

    This (plus the splice-smoothing the plot), would help mightily to visualize trends in the moving averages.

    (please see 4 attached screenshots)

    Thanks
    -S

     

    Last edit: Simon Harrison 2024-06-27
  • ullix

    ullix - 2024-06-27

    At a quick glance this Theremino looks quite good. What do you think can GeigerLog do better?

    This error message is strange; clearly pointing to a bug, but the referred-to line does not have anything it complains about. Therefor, please post:
    your file gsup_utils.py and a * .logdb file, in which this error has occurred.

    An what exactly does not work in COUNTRATE_AVG("CPM","HOUR")? It is all ok here.

    A smoothing function is e.g. the Moving Average. And so are the COUNTRATE_AVG functions. If it is not smooth enough for you, the select a longer period, like DAY instead of HOUR. Currently this function skips the first 10 records, so it doesn't ruin your data, like the FET "feature" in GMC counters does.

    The common scale in the Monitor is certainly possible, but would require a major revision in code. Don't wait for it ;-)

    I don't see a problem in your cfg file. Just a note: in the GCM-Device I would record both CPM and CPS. Simply set it to auto, unless you absolutely don't want CPM1st, CPS1st. I sometimes find it helpful to check CPS.

    In the WiFiClient situation there is of course no CPS.

     
  • ullix

    ullix - 2024-06-27

    Found the bug, new file attached. Copy it over the existing one.

    Slight change to COUNTRATE_AVG("CPM","HOUR"): It now skips only the "first 30 sec", i.e. it is relevant only when averaging CPS. In your case only the first CPM value will be skipped, and the first average returned is the average of the first 2 CPM.

    Use of HOUR and DAY is recommended over the specification of seconds.

     
    • Simon Harrison

      Simon Harrison - 2024-06-27

      Theremino does seem good. Ok I'll use it.

      I still think the smoothing function would add value (at least to the COUNTRATE graphs in the website_monitor) and then I could set the period to hour(s) w/o a jagged plot (which even a 1500 minute period has).

      Using "HOUR" returns no data.

      Understand and appreciate that programming a common scale is not feasible. Shame though.

      Thanks for looking through my config. I'll change GMC-Device to "auto" then.

      Thanks for finding the bug. With the new gsup_utils.py, no more bugs and the "HOUR" type works.

      Now using COUNTRATE_AVG("CPM","HOUR")

      Cheers.

       

      Last edit: Simon Harrison 2024-06-28
  • ullix

    ullix - 2024-07-02

    Take a look at the pre02 release
    https://sourceforge.net/p/geigerlog/discussion/devel2/thread/27576f2128/

    among other it has the locked scale feature for the Monitor. It is pre-configured for your purposes; see the geigerlog.cfg file for explanation in the Monitor section

     
    • Simon Harrison

      Simon Harrison - 2024-07-02

      @ullix

      Excellent and very nicely done!

      Thanks for your efforts Ullix!


      A few small points for users:

      1. Note that Ullix's custom config settings in geigerlog.cfg (which comes packaged in geigerlog-1.5.1pre02.zip) are overwritten to defaults when executing ./GeigerLog.sh setup

      2. Upgrading from 151pre01 to 151pre02 (in Linux) required that I re-create my virtual environment:

      sudo apt install python3.12-venv
      

      and run:

      ./GeigerLog.sh setup
      

      and (in my case) possibly the following additional script:

      **********
      geigerlog ubuntu config
      **********
      sudo apt update && sudo apt upgrade
      #python 3.10.6 is default version preinstalled in 22.04
      sudo apt install -y software-properties-common
      sudo add-apt-repository ppa:deadsnakes/ppa
      sudo apt-cache search python3.1
      sudo apt-get install python3.12 -y
      sudo python -V
      sudo python3 -V
      sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 
      sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2 
      sudo update-alternatives --config python3
      sudo apt-get install python3-setuptools
      sudo apt-get install python3-dev
      sudo apt-get install python3
      sudo apt-get install python3-pip
      python3 -m pip install -U pip
      python3 -m pip --version
      sudo apt install python3.12-venv
      sudo apt-get install libportaudio2
      sudo apt-get install libxcb-xinerama0
      python3 -m pip install -U paho-mqtt
      python3 -m pip install -U LabJackPython
      python3 -m pip install -U RPi.GPIO
      python3 -m pip install -U smbus
      python3 -m pip install -U psutil
      python3 -m pip install -U pip-check
      python3 -m pip install -U pip
      python3 -m pip install -U testresources
      python3 -m pip install -U setuptools
      python3 -m pip install -U pyqt5
      python3 -m pip install -U pyqt5-sip
      python3 -m pip install -U matplotlib
      python3 -m pip install -U numpy
      python3 -m pip install -U scipy
      python3 -m pip install -U pyserial
      python3 -m pip install -U sounddevice
      python3 -m pip install -U soundfile
      python3 -m pip install -U ntplib
      python3 -m pip install -U py-cpuinfo
      python3 -m pip install -U rpi-lgpio
      python3 -m pip install -U smbus2
      pip install --upgrade psutil
      python3 ./GLpipcheck.py
      ./GeigerLog.sh setup
      sudo python3 GLrelay.py -h
      sudo python3 GLrelay.py -I 10.220.3.163 -P 4000
      ./GeigerLog.sh connect load start
      
       

      Last edit: Simon Harrison 2024-07-03
  • ullix

    ullix - 2024-07-03

    ... config settings in geigerlog.cfg (which comes packaged in geigerlog-1.5.1pre02.zip) are overwritten to defaults when executing ./GeigerLog.sh setup

    Ooops, I actually forgot about this :-/ But this feature will stay. Only the next time I spend the time to pre-configure the config, I will provide it as a separate file!

    re-create my virtual environment ...

    Yes, a necessity! And with respect to your own script:

    Do NOT do this!

    The very reason for using a Python Virtual Environment (PVE) is to NOT fiddle with these pips! There is a chance you could solidly ruin your system!

    Let GeigerLog do it, and if something isn't going right, make a bug report

    In fact, because those uncalled-for actions could result in a possible disaster, the next Linux OS releases will make it impossible to issue many of these commands, and so you must use a PVE.

    The reason behind all of this is the immense success of Python, which increases the chances of conflicting installations.

     
    • Simon Harrison

      Simon Harrison - 2024-07-03

      Ok, thanks. I'll update my Ubuntu python setup instructions as advised.

      Quick question:
      In the attached images, do you have any insights into why the shape of the average curve squares-off at the beginning and end of my two "elevated radiation" tests? I would have thought the curve to be more like a lopsided "bell"? I.e. the running average values to be weighted by the prior hour's worth of "typical" data*? I'm transmitting data via WiFi once per minute.

      (Maybe its just a scaling issue as the 60 test graph from Excel average column data values, "=average($c$1:$c60)" are similar to your Average formula. )

      And, FYI, I got a new error:

      04 10:20:17.558190 DEBUG  : ....79 EXCEPTION: MonServer do_GET: send & write (e:'[Errno 32] Broken pipe') in file: gweb_monserv.py in line: 1198
      
       

      Last edit: Simon Harrison 2024-07-04
  • Simon Harrison

    Simon Harrison - 2024-07-11

    @ullix

    Some additional 151pre02 error messages. (Works fine though):

    Exception occurred during processing of request from ('172.56.241.130', 21509)
    Traceback (most recent call last):
      File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread
        self.finish_request(request, client_address)
      File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/lib/python3.12/socketserver.py", line 761, in __init__
        self.handle()
      File "/usr/lib/python3.12/http/server.py", line 436, in handle
        self.handle_one_request()
      File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request
        self.raw_requestline = self.rfile.readline(65537)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/socket.py", line 708, in readinto
        return self._sock.recv_into(b)
               ^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
    ----------------------------------------
    ----------------------------------------
    ----------------------------------------
    Exception occurred during processing of request from ('172.56.241.130', 11364)
    Exception occurred during processing of request from ('172.56.241.130', 1573)
    ----------------------------------------
    Traceback (most recent call last):
    ----------------------------------------
    Traceback (most recent call last):
    Exception occurred during processing of request from ('172.56.241.130', 45428)
      File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread
        self.finish_request(request, client_address)
    Exception occurred during processing of request from ('172.56.241.130', 15277)
    Traceback (most recent call last):
      File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread
        self.finish_request(request, client_address)
    Traceback (most recent call last):
      File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread
        self.finish_request(request, client_address)
      File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/lib/python3.12/socketserver.py", line 692, in process_request_thread
        self.finish_request(request, client_address)
      File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/lib/python3.12/socketserver.py", line 362, in finish_request
        self.RequestHandlerClass(request, client_address, self)
      File "/usr/lib/python3.12/socketserver.py", line 761, in __init__
        self.handle()
      File "/usr/lib/python3.12/socketserver.py", line 761, in __init__
        self.handle()
      File "/usr/lib/python3.12/socketserver.py", line 761, in __init__
        self.handle()
      File "/usr/lib/python3.12/socketserver.py", line 761, in __init__
        self.handle()
      File "/usr/lib/python3.12/http/server.py", line 436, in handle
        self.handle_one_request()
      File "/usr/lib/python3.12/http/server.py", line 436, in handle
        self.handle_one_request()
      File "/usr/lib/python3.12/http/server.py", line 436, in handle
        self.handle_one_request()
      File "/usr/lib/python3.12/http/server.py", line 436, in handle
        self.handle_one_request()
      File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request
        self.raw_requestline = self.rfile.readline(65537)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request
        self.raw_requestline = self.rfile.readline(65537)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request
        self.raw_requestline = self.rfile.readline(65537)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/http/server.py", line 404, in handle_one_request
        self.raw_requestline = self.rfile.readline(65537)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/socket.py", line 708, in readinto
        return self._sock.recv_into(b)
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/socket.py", line 708, in readinto
        return self._sock.recv_into(b)
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/socket.py", line 708, in readinto
        return self._sock.recv_into(b)
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/socket.py", line 708, in readinto
        return self._sock.recv_into(b)
               ^^^^^^^^^^^^^^^^^^^^^^^
    ConnectionResetError: [Errno 104] Connection reset by peer
    ConnectionResetError: [Errno 104] Connection reset by peer
    ConnectionResetError: [Errno 104] Connection reset by peer
    ----------------------------------------
    ----------------------------------------
    ----------------------------------------
    ConnectionResetError: [Errno 104] Connection reset by peer
    ----------------------------------------
    
     
  • ullix

    ullix - 2024-07-11

    do you have any insights into why the shape of the average curve squares-off at the beginning and end of my two "elevated radiation" tests?

    It is a mathematical necessity when using the average. Try it out in Excel.

    And, FYI, I got a new error:

    Not an error, but an Exception. It is caused by your local network, and GeigerLog has caught this exception, reported it, and recovered. The problem is in your network - GeigerLog can't fix that! But such things happen, and there is little you can do about it. Perhaps moving either counter, or GeigerLog, or both closer to your router?

    Some additional 151pre02 error messages. (Works fine though):

    Again, exceptions, not errors. But this time inside the Python code. It does not even tell me in which part of GL it happened. It also points to issues in your local network; perhaps in the WiFi module in your laptop/desktop. Again, nothing I can do to fix it.

     

    Last edit: ullix 2024-07-11
  • Simon Harrison

    Simon Harrison - 2024-07-12

    The attached running average chart shows the smoothing.
    The sharp fall-off in your average must be due to the spike event being aged out (and not skewing the average) after the specified HOUR window.

    I might have missed it, but what is the function of the "0" in COUNTRATE_AVG("CPM", "HOUR", 0) again?

     

    Last edit: Simon Harrison 2024-07-12
  • ullix

    ullix - 2024-07-13

    COUNTRATE_AVG(vname, period, idle=30)
    idle is the number of sec at the start, before it delivers its first value. For a cycle of 1 min, the first value will thus be the average of the first to recorded values. Relevant mostly for CPS recordings to minimize the FET distortion.

     
    • Simon Harrison

      Simon Harrison - 2024-07-13

      thanks.

       
  • Simon Harrison

    Simon Harrison - 2024-07-27

    Hi again,

    What are you thoughts on adding password protection to the web_mon http monitor page? Easy add?

    It may be a bit of a superfluous ask, I know, as it's likely only useful to my "access over the public WAN" use case, but hey, it doesn’t hurt to ask. Maybe there are others who'dlike it, maybe not.

    While clunky, Knockd+UFW still works nicely, but with a password, I could take the calculated small risk of slightly expanding the list of allowed IP subnet vs. registering each (/32 mask) WAN IP.

     

    Last edit: Simon Harrison 2024-07-28
  • ullix

    ullix - 2024-07-28

    What value is the MonServer offering, which needs password protection?

     
    • Simon Harrison

      Simon Harrison - 2024-07-28

      Hi, are you asking: what value does adding password access impart the MonServer web page?

      If so I answered that above,but to expand:

      It would allow me to set define a broader set of WAN IP address (via Knockd) of which my WAN IP is a part). This woukd cut down on the number of times I need to execute Kockd on my mobile phone in order to access the Geigerlog dials and plots.

      This is very much a minor request so no problem at all if adding optional password protection doesnt make sense outside my tiny need.

      (An example, if you're interested: If I'm away from home (LAN) and want to access the plots on my phone, via IP A.B.C.D, I could define all IPs in the subnet mask A.B.C.x as "allowed" in exchange for a small risk hit, so as not to have to re-run Knockd when the "x" part of my WAN IP changes.)

       

      Last edit: Simon Harrison 2024-07-28
  • ullix

    ullix - 2024-07-29

    I have no idea what Knockd is. But if I wanted to access my GeigerLog running at home from underway, I would have to open a port on my router. And that would already suffice. And if there were some intruder using this path, I doubt he would get very far. A password on MonServer, annoying to everyone else, would not be real hurdle if he made it that far. No, I don't think such a use case warrants a password.

     

    Last edit: ullix 2024-07-29
    • Simon Harrison

      Simon Harrison - 2024-07-29

      Ok, np.

      Btw, I don't think anyone would be particularly "annoyed". Keyword here is "optional".
      Also, I'd never advise anyone open ports (80, 8080 or otherwise) to the outside so here we disagree. Hence Knockd (see below). And if you ever have suggestions on a more elegant solution to "passwords", I'm all ears. If not, that's ok too.

      Anyway, I never feel it hurts to ask, and I a said, "it's a minor request, and "no problem at all...".

      PS. As for the Knockd daemon, Google it. Or read the "how to" I wrote in your "Remote monitoring..." forum. It took me a while to figure out how to reconcile the DHCP nature of Cellular WAN IPs so that only my IP has access via my (home) router. I hope this use case helps some Geigerlog users view their real-time counter data while away. At least that was the thinking behind why I wrote it.

      :)

       
  • Simon Harrison

    Simon Harrison - 2024-08-27

    Hello,

    I was looking for a way to configure GL to diaplay in unts of uSv (calculated from CPM and the associated conversion factor foe my counter). Specifically, I'm interested in displaying these units graphically in the GL monitor (of which I can only seem to get CPM or CPS to show).

    In the main GL graph, toggling to the uSv/h option seems to display properly but throws off the data from the countrate_avg funtion.

    I haven't spent too much time trying to configure this yet, but maybe you can let me know if I'm on the right track.

    I didn't see instructions in the manual, unless I missed them. Could you explain how I might do this please?

    Thanks much.

    Btw, I have 2 counters connected simultaneously to the same server via 2 GL instances as shown below.

     

    Last edit: Simon Harrison 2024-08-27
<< < 1 .. 7 8 9 10 > >> (Page 9 of 10)

Anonymous
Anonymous

Add attachments
Cancel