Radioaktivitätsmessung mit DIYGeigerCounter
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.