Radioaktivitätsmessung mit DIYGeigerCounter
An dieser Seite wird momentan noch gearbeitet. |
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 Schnittstelle anschließen. Raspi ggf. über Steckleiste direkt, sonst via USB-TTL Seriell-Adapter. Im Menü "SERIAL OUTPUT MODE" auf GK-B5 stellen. "SERIAL LOG PERIOD" auf 10s (für dieses HowTo).
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 anzulegen:
rad_counter.classdef
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}
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).
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 verdwendetem OS 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. 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.
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.