Radioaktivitätsmessung mit DIYGeigerCounter: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „{{Baustelle}} Die Selbstbau-Geizerzähler von DIYGeigerCounter besitzen einen seriellen TTL Ausgang können daher relativ einfach mit FHEM-Bordmittel angebunde…“)
 
(Anpassung von <source>-Tags nach <syntaxhighlight>)
 
(3 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Baustelle}}
Die Selbstbau-Geizerzähler von DIYGeigerCounter besitzen einen seriellen TTL Ausgang können daher relativ einfach mit FHEM-Bordmittel angebunden werden. Eine Vorverarbeitung findet im Gerät statt und neben den Impulsen pro Minute können folgende Dosiseinheiten ausgegeben werden: uSv/h, uR/h, mR/h oder xBg.
Die Selbstbau-Geizerzähler von DIYGeigerCounter besitzen einen seriellen TTL Ausgang können daher relativ einfach mit FHEM-Bordmittel angebunden werden. Eine Vorverarbeitung findet im Gerät statt und neben den Impulsen pro Minute können folgende Dosiseinheiten ausgegeben werden: uSv/h, uR/h, mR/h oder xBg


==Vorbereitung==
==Vorbereitung==
Je nach verwendeter Server-Hardware die Schnittstelle anschließen. Raspi ggf. über Steckleiste direkt, sonst via USB-TTL Seriell-Adapter.
Je nach verwendeter Server-Hardware die serielle Schnittstelle mit der Pin-Leiste des DIYCounter verbinden. Evtl. per Kabel, falls TTL-fähig, sonst via TTL Seriell-Adapter.
Im Menü "SERIAL OUTPUT MODE" auf GK-B5 stellen.  "SERIAL LOG PERIOD" auf 10s (für dieses HowTo).
Im Menü des Geigerzählers den '''''SERIAL OUTPUT MODE''''' auf GK-B5 und '''''SERIAL LOG PERIOD''''' auf '''10s''' einstellen. Diese Werte sind notwendig für dieses HowTo; andere Werte sind möglich, führen dann aber zu Fehlern in der Verarbeitung durch FHEM wenn die Zeiten nicht angepasst werden.


==Integration in FHEM==
==Integration in FHEM==
Zeile 10: Zeile 9:
Das Einlesen der Daten geschieht über [[ECMD]].
Das Einlesen der Daten geschieht über [[ECMD]].


Vor dem Ausführen der Befehle in FHEM ist folgende Datei im Programmverzeichnis anzulegen:
Vor dem Ausführen der Befehle in FHEM ist folgende Datei im Programmverzeichnis von FHEM (z.B. ''/usr/local/fhem/'' od. ''/opt/fhem'') anzulegen:
  rad_counter.classdef
  rad_counter.classdef


<source lang="perl">
Folgende Zeilen müssen in diese Datei kopiert werden:
 
<syntaxhighlight lang="perl">
params rad_counts rad_dose
params rad_counts rad_dose
reading rad_counts match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
reading rad_counts match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
Zeile 19: Zeile 20:
reading rad_dose match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
reading rad_dose match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
reading rad_dose postproc {s/(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n/$2/;; $2}
reading rad_dose postproc {s/(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n/$2/;; $2}
</source>
</syntaxhighlight>


Diese holt aus der seriellen Ausgabe "102,0.1166,5.03" (IPM,DOSIS,VCC) die ersten beiden Werte heraus, indem für jeden Wert auf eine komplette Ausgabezeile gematcht wird (match) und dann der eigentliche Wert durch Suchen und Ersetzen herausgefilter wird (postproc).
Damit holt FHEM aus z.B. der seriellen Ausgabe ''102,0.1166,5.03'' (IPM,DOSIS,VCC) die ersten beiden Werte heraus, indem für jeden Wert auf eine komplette Ausgabezeile gematcht wird (match) und dann der eigentliche Wert durch Suchen und Ersetzen herausgefilter wird (postproc).


Dann kann die Definition des Device und seiner Attribute erfolgen:
Dann kann die Definition des Device und seiner Attribute erfolgen:


<source lang="perl">
<syntaxhighlight lang="perl">
define Rad_Counter_Serial ECMD serial /dev/cuaU1@9600
define Rad_Counter_Serial ECMD serial /dev/cuaU1@9600
attr Rad_Counter_Serial classdefs message=./rad_counter.classdef
attr Rad_Counter_Serial classdefs message=./rad_counter.classdef
Zeile 32: Zeile 33:
attr Rad_Counter_Serial split \r\n
attr Rad_Counter_Serial split \r\n
attr Rad_Counter_Serial verbose 5
attr Rad_Counter_Serial verbose 5
</source>
</syntaxhighlight>


Die Schnittstellenbezeichnung kann je nach verdwendetem OS natürlich unterschiedlich sein.
Die Schnittstellenbezeichnung kann je nach verwendetem Betriebssystem natürlich unterschiedlich sein.
Die zusätzlichen Attribute dienen dem Zweck, daß im Falle einer zerstückelten Ausgabe durch z.B. USB-Bufferprobleme die Zeilen wieder korrekt zusammengesetzt werden bevor das Matching durch die .classdef erfolgt.
Die zusätzlichen Attribute dienen dem Zweck, dass im Falle einer zerstückelten Ausgabe durch z.B. USB-Bufferprobleme die Zeilen wieder korrekt zusammengesetzt werden, bevor das Matching durch die ''.classdef'' erfolgt.
Hierbei werden die beiden Readings rad_counts und rad_dose für ein ECMD Device erzeugt.
Hierbei werden die beiden Readings ''rad_counts'' und ''rad_dose'' für ein ECMD-Device erzeugt.


===Definition des ECMD Device===
===Definition des ECMD Device===
Um eine weitere interne Verarbeitung der Daten zu ermöglichen definieren wir noch ein ECMDDevice:
Um eine weitere interne Verarbeitung der Daten zu ermöglichen definieren wir noch ein ECMDDevice:


<source lang="perl">
<syntaxhighlight lang="perl">
defmod Rad_Counter ECMDDevice message rad_counts rad_dose
defmod Rad_Counter ECMDDevice message rad_counts rad_dose
attr Rad_Counter IODev Rad_Counter_Serial
attr Rad_Counter IODev Rad_Counter_Serial
attr Rad_Counter event-min-interval rad_dose.av:58
attr Rad_Counter event-min-interval rad_dose.av:58
attr Rad_Counter userReadings rad_dose.av {movingAverage("Rad_Counter","rad_dose",1200)}
attr Rad_Counter userReadings rad_dose.av {movingAverage("Rad_Counter","rad_dose",1200)}
</source>
</syntaxhighlight>


In diesem Fall wird zusätzlich noch jede Minute ein [[Gleitende_Mittelwerte_berechnen_und_loggen|Durchschnittswert]] mit dem Namen rad_dose.av (über einen Zeitraum von 1200 Sekunden gemittelt) erzeugt. Dies erfordert natürlich vorher den Eintrag der Zusatzfunktion movingAverage in der Datei 99_Utils.pm.
In diesem Fall wird zusätzlich noch jede Minute ein [[Gleitende_Mittelwerte_berechnen_und_loggen|Durchschnittswert]] mit dem Namen ''rad_dose.av'' (über einen Zeitraum von 1200 Sekunden gemittelt) erzeugt. Dies erfordert natürlich vorher den Eintrag der Zusatzfunktion [[Gleitende_Mittelwerte_berechnen_und_loggen#Subroutine_movingAverage_in_99_MyUtils_anlegen|movingAverage]] in der Datei ''99_Utils.pm'' im FHEM Programmverzeichnis.


===Definiton des FileLog===
===Definiton des FileLog===
Die Definition mit Auswahl der zu loggenden Werte erfolgt so:
Die Definition mit Auswahl der zu loggenden Werte erfolgt so:


<source lang="perl">
<syntaxhighlight lang="perl">
defmod FileLog_Rad_Counter FileLog ./log/Rad_Counter-%Y.txt Rad_Counter:(rad_dose|rad_dose.av|rad_counts)[:].*
defmod FileLog_Rad_Counter FileLog ./log/Rad_Counter-%Y.txt Rad_Counter:(rad_dose|rad_dose.av|rad_counts)[:].*
</source>
</syntaxhighlight>


Und ergibt dieses Beispiellog:
Und ergibt dieses Beispiellog:
<source lang="text">
<syntaxhighlight lang="text">
2016-12-31_23:41:15 Rad_Counter rad_counts: 120
2016-12-31_23:41:15 Rad_Counter rad_counts: 120
2016-12-31_23:41:15 Rad_Counter rad_dose.av: 0.082
2016-12-31_23:41:15 Rad_Counter rad_dose.av: 0.082
Zeile 73: Zeile 74:
2016-12-31_23:42:15 Rad_Counter rad_dose.av: 0.086
2016-12-31_23:42:15 Rad_Counter rad_dose.av: 0.086
2016-12-31_23:42:15 Rad_Counter rad_dose: 0.1303
2016-12-31_23:42:15 Rad_Counter rad_dose: 0.1303
</source>
</syntaxhighlight>


Hier ist sehr gut der minütlich generierte Mittelwert zu sehen.
Hier ist sehr gut der minütlich generierte Mittelwert zu sehen.
Zeile 80: Zeile 81:
==Links==
==Links==
*[https://sites.google.com/site/diygeigercounter/ Projektseite von DIYGeigercounter]
*[https://sites.google.com/site/diygeigercounter/ Projektseite von DIYGeigercounter]
[[Kategorie:HOWTOS]]

Aktuelle Version vom 26. Juli 2017, 19:01 Uhr

Die Selbstbau-Geizerzähler von DIYGeigerCounter besitzen einen seriellen TTL Ausgang können daher relativ einfach mit FHEM-Bordmittel angebunden werden. Eine Vorverarbeitung findet im Gerät statt und neben den Impulsen pro Minute können folgende Dosiseinheiten ausgegeben werden: uSv/h, uR/h, mR/h oder xBg.

Vorbereitung

Je nach verwendeter Server-Hardware die serielle Schnittstelle mit der Pin-Leiste des DIYCounter verbinden. Evtl. per Kabel, falls TTL-fähig, sonst via TTL Seriell-Adapter. Im Menü des Geigerzählers den SERIAL OUTPUT MODE auf GK-B5 und SERIAL LOG PERIOD auf 10s einstellen. Diese Werte sind notwendig für dieses HowTo; andere Werte sind möglich, führen dann aber zu Fehlern in der Verarbeitung durch FHEM wenn die Zeiten nicht angepasst werden.

Integration in FHEM

Definition des seriellen Device

Das Einlesen der Daten geschieht über ECMD.

Vor dem Ausführen der Befehle in FHEM ist folgende Datei im Programmverzeichnis von FHEM (z.B. /usr/local/fhem/ od. /opt/fhem) anzulegen:

rad_counter.classdef

Folgende Zeilen müssen in diese Datei kopiert werden:

params rad_counts rad_dose
reading rad_counts match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
reading rad_counts postproc {s/(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n/$1/;; $1}
reading rad_dose match "(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n"
reading rad_dose postproc {s/(^\d+),(\d+\.\d+),(\d+.\d{2})\r\n/$2/;; $2}

Damit holt FHEM aus z.B. der seriellen Ausgabe 102,0.1166,5.03 (IPM,DOSIS,VCC) die ersten beiden Werte heraus, indem für jeden Wert auf eine komplette Ausgabezeile gematcht wird (match) und dann der eigentliche Wert durch Suchen und Ersetzen herausgefilter wird (postproc).

Dann kann die Definition des Device und seiner Attribute erfolgen:

define Rad_Counter_Serial ECMD serial /dev/cuaU1@9600
attr Rad_Counter_Serial classdefs message=./rad_counter.classdef
attr Rad_Counter_Serial logTraffic 5
attr Rad_Counter_Serial partial 2
attr Rad_Counter_Serial split \r\n
attr Rad_Counter_Serial verbose 5

Die Schnittstellenbezeichnung kann je nach verwendetem Betriebssystem natürlich unterschiedlich sein. Die zusätzlichen Attribute dienen dem Zweck, dass im Falle einer zerstückelten Ausgabe durch z.B. USB-Bufferprobleme die Zeilen wieder korrekt zusammengesetzt werden, bevor das Matching durch die .classdef erfolgt. Hierbei werden die beiden Readings rad_counts und rad_dose für ein ECMD-Device erzeugt.

Definition des ECMD Device

Um eine weitere interne Verarbeitung der Daten zu ermöglichen definieren wir noch ein ECMDDevice:

defmod Rad_Counter ECMDDevice message rad_counts rad_dose
attr Rad_Counter IODev Rad_Counter_Serial
attr Rad_Counter event-min-interval rad_dose.av:58
attr Rad_Counter userReadings rad_dose.av {movingAverage("Rad_Counter","rad_dose",1200)}

In diesem Fall wird zusätzlich noch jede Minute ein Durchschnittswert mit dem Namen rad_dose.av (über einen Zeitraum von 1200 Sekunden gemittelt) erzeugt. Dies erfordert natürlich vorher den Eintrag der Zusatzfunktion movingAverage in der Datei 99_Utils.pm im FHEM Programmverzeichnis.

Definiton des FileLog

Die Definition mit Auswahl der zu loggenden Werte erfolgt so:

defmod FileLog_Rad_Counter FileLog ./log/Rad_Counter-%Y.txt Rad_Counter:(rad_dose|rad_dose.av|rad_counts)[:].*

Und ergibt dieses Beispiellog:

2016-12-31_23:41:15 Rad_Counter rad_counts: 120
2016-12-31_23:41:15 Rad_Counter rad_dose.av: 0.082
2016-12-31_23:41:15 Rad_Counter rad_dose: 0.1371
2016-12-31_23:41:25 Rad_Counter rad_counts: 84
2016-12-31_23:41:25 Rad_Counter rad_dose: 0.0960
2016-12-31_23:41:35 Rad_Counter rad_counts: 78
2016-12-31_23:41:35 Rad_Counter rad_dose: 0.0891
2016-12-31_23:41:55 Rad_Counter rad_counts: 54
2016-12-31_23:41:55 Rad_Counter rad_dose: 0.0617
2016-12-31_23:42:05 Rad_Counter rad_counts: 42
2016-12-31_23:42:05 Rad_Counter rad_dose: 0.0480
2016-12-31_23:42:15 Rad_Counter rad_counts: 114
2016-12-31_23:42:15 Rad_Counter rad_dose.av: 0.086
2016-12-31_23:42:15 Rad_Counter rad_dose: 0.1303

Hier ist sehr gut der minütlich generierte Mittelwert zu sehen. Eine Weiterverarbeitung kann dann sehr einfach via Plot-Editor erfolgen.

Links