Radiation detector platform

Hi, There!
To build an inexpensive geiger counter with a simple connection to Home Assistant / ESPHome, you can use the GGreg20_V3 module manufactured by IoT-devices LLC.

https://iot-devices.com.ua/en/product/ggreg20_v3-ionizing-radiation-detector-with-geiger-tube-sbm-20/

We recently posted on GitHub an example of connecting this module:

https://github.com/iotdevicesdev/ggreg20-v3-homeassistant-esphome-example
Using any master controller (and in the case of ESPHome firmware, it can be either ESP32 or ESP8266), you can: receive data from the sensor to the server and keep convenient records, build graphs, calculate derivatives for users, such as:

  • received for a certain period of time the radiation dose,
  • or average data thanks to built-in mechanisms in ESPHome such as Moving Average Filter;
  • also Home Assistant allows you to easily build a virtual sensor that shows the general nature of the change in the measured value - in this case, shows the speed at which the radiation background increases.
    It should also be noted that Home Assistant allows you to build automations with crossing thresholds, notifying users and, for example, emergency automatic blocking of ventilation ducts in the building in case of danger and more.

See also:
Derivative - Home Assistant
Understanding automations - Home Assistant
Sensor Component — ESPHome

With regard to the pulse counter generated by GGreg20_V3, this is very convenient and easy to implement.
The module uses an inexpensive and common Geiger-Mueller tube SBM-20.
Due to the fact that the GGreg20_V3 module has a very simple internal architecture and does not have an I2C, UART or SPI interface, which usually requires special driver support on the side of the main controller or platform to which it must be connected, this sensor integrates into any modern system with one line of code and takes up only one additional GPIO on the main controller.
The power supply of the module is also conveniently implemented - a wide range of input voltages is supported (2.2 - 5.5 V), compatible with all common hardware platforms for DYI.

With hope that this helps!

Best Regards,
Oleksii

1 Like

Are these still being sold? It looks like they were shipping directly from Kyiv so I’m thinking not.

Hi,
how can I use it in homeassistant?
Thank You.
Arnold.


Hi! Thanks for your question! And sorry for the delay.
We are pleased to announce that we have resumed sales and delivery of our modules on Tindie .
Currently available modules:

  • GGreg20_V3 Ionizing Radiation Detector;
  • I2CUI4_V1 keypad user interface module.
    Shipment of modules is performed in the usual time, but the delivery time may vary taking into account the logistics of the Ukrposhta service.
    We are waiting for your orders and are ready to supply our modules, well made and tested.
    Delivery of the order takes place from a warehouse in Kyiv.
    We are also working to fulfill a warehouse in the United States.

Source: Resumed sales of modules on Tindie. - Electronics manufacturer for IoT

1 Like

Hi! Thank you for your interest in our projects.
You may use intructions following the link for GGreg20_V3 on GitHub:

Today I got one GGreg20_V3, and wrote a small app, that integrates it to HA via mqtt; all seems great.
Now, I want to put it outdoor, so only needs a 3d printable enclosure; does anybody has one? Please upload it to thingverse, if I can ask for it :slight_smile:
If noone reply, I would make a poor quality one (so bad at cad), so save the world from it if you can :smiley:

1 Like

For me too :slight_smile:

Hello @sakalauskas
Thank you for your integration. It seems that the URL https://rewidget.jrc.ec.europa.eu/v3/objects/point?id=LT21042 doesn’t work anymore. Do you know if they have updated the adress of the json ?

2 Likes

Stoped working for me also… what the heck EU is working…

I got some bad news… I just got an e-mail from EURDEP… they discontinued the widgets service.

If you choose the simple map on website: Radiological Maps - European Commission
Open the developer tools of your browser, go to network tab.

Click on the desired area.
On the network tab, you’ll see a lot of requests, but you’ll need the last with url polygon?id=XX_YY&zoom=Z…
If you zoom in a bit, you’ll get closer data, as the zoom variable increases.

Copy the id to this link, and you’ll get the result in HA in XML format.
https://remap.jrc.ec.europa.eu/api/maps/polygon?id=74_35&zoom=4

Example xml:

<MapInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/JRC.REM.EURDEP.Web.App.Map.Public.DAL.Controllers">
<Avg>64.79</Avg>
<Error i:nil="true"/>
<Max>64.79</Max>
<Min>64.79</Min>
</MapInfo>

For example see sakalauskas’s post up here. Check the rest sensor with te right url.

3 Likes

Here’s working snippet for Krakow, Poland (see previous post for the tips on polygon URL):

sensor:
  - platform: rest
    name: Radiation in Krakow
    resource: https://remap.jrc.ec.europa.eu/api/maps/polygon?id=604_275&zoom=7
    scan_interval: 1800 # check every 30 minutes
    timeout: 60 # seconds
    json_attributes:
      - avg
      - max
      - min
    unit_of_measurement: nSv/h
    value_template: "{{ value_json.avg }}"
    headers:
      Content-Type: application/json
4 Likes

https://remap.jrc.ec.europa.eu/api/maps/point?id=XX00000

Hi,
I have this device:

it generate a json file over http connection, and I use REST to get value in HA

Hi,
would you mind posting the two solutioning elements you mentioned here?

I am evaluating the µRAD here as well and came across this posting (link and core content cited) - please be aware this addresses the uRADMonitor Radon but, radiation sensors might be treated the same way:

JSON output:
http://192.168.1.202/j

{"data": {"id":"1D000XXX","type":"1D","temperature":18.66,"humidity":57.38,"pressure":101355,"radon":84,"uptime":128050} }

SENSORS to create in HASSio:

  - platform: rest
    name: urad_sensors
    resource: http://192.168.1.202/j
    json_attributes:
      - data
    value_template: "OK"
    
  - platform: template
    sensors:
      urad_temperature:
        value_template: "{{ state_attr('sensor.urad_sensors', 'data')['temperature'] }}"
        device_class: temperature
        unit_of_measurement: "°C"
        
      urad_humidity:
        value_template: "{{ state_attr('sensor.urad_sensors', 'data')['humidity'] }}"
        device_class: humidity
        unit_of_measurement: "%"
        
      urad_pressure:
        value_template: "{{ state_attr('sensor.urad_sensors', 'data')['pressure'] }}"
        device_class: pressure
        unit_of_measurement: "P"
       
      urad_radon:
        value_template: "{{ state_attr('sensor.urad_sensors', 'data')['radon'] }}"
        unit_of_measurement: "Bq/m3"
        
 urad_XXXXXX:
        value_template: "{{ state_attr('sensor.urad_sensors', 'data')['XXXXXX'] }}"
        device_class: XXXX # not mandatory, you can comment this line entirely
        unit_of_measurement: "XXX"

I have a station on https://www.uradmonitor.com/ It has a radiation detector and has been active for several years. My station is in Little Rock, AR, USA, but there are many stations around the world. I would love to have an interface for my data to be visible on Home Assistant.

1 Like

There is an API for uradmonitor.com, so you should be able to; unfortunately it looks like you have to login to get to the API, so I can help you with that; but…some of the uradmonitor devices do have local API support, if yours is one then you can pull it all in locally. If you search the forum, there is another discussion on the local API for uradmonitors and that should get you what you need.

Edit: here is your API: URad API. Since you have the only one in Arkansas, you have a model A.

Update and keep alive heartbeat:
As you know, starting from version 2023.12.0, ESPHome has new requirements for Pin Reuse Validation of configuration files. These changes have also covered our GitHub repositories. We have already made the necessary changes to the examples for ESP8266, ESP32, Raspberry Pico W for ESPHome firmware. More details are available here:

BR, Oleksii

Hi all,
I wanted to integration radiation information in my dashboard. I do not have my own geiger machine.
Therefore I have to rely on publicly available information from the nearest data source.
In my case that was a weather station in De Bilt - The Netherlands.

I managed to get readings using home assistant rest configuration.
Thought I would share the used code.

Key was to know which station id to use and the knowledge that there are two values (and therefore two stations id’s). Namely AB (Alpha and Beta radiation), but the more important one was Gamma.

Here is my rest code:

# Radiation Values De Bilt NL1280 Gamma Value
- resource: "https://remap.jrc.ec.europa.eu/api/maps/point?id=NL1280"
  scan_interval: 1800 # check every 30 minutes
  headers:
      Content-Type: application/json
  sensor:
  - name: Radiation Utrecht Gamma Avg
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.avg == 0 %}
        {{ sensor.radiation_utrecht_gamma_avg }}
      {% else %}
        {{ value_json.avg }}
      {% endif %}
  - name: Radiation Utrecht Gamma Min
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.min == 0 %}
        {{ sensor.radiation_utrecht_gamma_min }}
      {% else %}
        {{ value_json.min }}
      {% endif %}
  - name: Radiation Utrecht Gamma Max
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.max == 0 %}
        {{ sensor.radiation_utrecht_gamma_max }}
      {% else %}
        {{ value_json.max }}
      {% endif %}

# Radiation Values De Bilt NL0998 AB Value
- resource: "https://remap.jrc.ec.europa.eu/api/maps/point?id=NL0998"
  scan_interval: 1800 # check every 30 minutes
  headers:
      Content-Type: application/json
  sensor:
  - name: Radiation Utrecht AB Avg
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.avg == 0 %}
        {{ sensor.radiation_utrecht_ab_avg }}
      {% else %}
        {{ value_json.avg }}
      {% endif %}
  - name: Radiation Utrecht AB Min
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.min == 0 %}
        {{ sensor.radiation_utrecht_ab_min }}
      {% else %}
        {{ value_json.min }}
      {% endif %}
  - name: Radiation Utrecht AB Max
    icon: mdi:radioactive-circle
    unit_of_measurement: nSv/h 
    value_template: >
      {% if value_json.max == 0 %}
        {{ sensor.radiation_utrecht_ab_max }}
      {% else %}
        {{ value_json.max }}
      {% endif %}

[update: I noticed that last week the rest API reported values of 0 as the API interface was under maintenance. Added this condition and only adding new values if they are not 0 - otherwise use the last known good value]

Happy Coding

2 Likes

Thank you for sharing this example with the community.
Best regards,
Oleksii