A set of tools that helps to automate measure/control processes of any Scientific / Industrial Lab. Current solution is using for:
- collect measurements data produced by another our software working over existing scientific equipment (
mossbauer spectrometer
); - notify about measurements state and send data itself over multiple channels (
e-mail
,Telegram
) - watch events and notify about possible issues;
- provides Web interface to obtain stored spectra even any intermediate;
- run an AI tools with computer vision (if future versions).
This software is a laboratory specific and made as example if you would like to automate your laboratory / industry please contact us using email in our organization info.
Mossbauer laboratory automation tool controls spectra measurements from SM2201 Mossbauer spectrometer
and watches state of other equipment.
SM2201
spectrometer controlled by software that is running onWindows 98
- Target Platform where
Wissance.MossbauerLab.Watcher
is running -Raspberry Pi (v2)
+Raspbian
as OS
Messbauer spectra
accumulation process (monitoring auto save process) fromSM2201
spectrometer (controll by date+time) of file last change (onWindows98
machine system clock must be set right)
- Send fresh (-2h of Date,Time) spectra by e-mail and Telegram bot (NOT IMPLEMENTED YET)
- Analyze power loss (NOT IMPLEMENTED YET)
There are 2 run profiles (Development
and Production
) and 2 possible configs variants of Wissance.Mossabuer.LabWatcher
:
-
Running on Windows allows to use Net Directory class with network path to files && folders, therefore
SM2201
config section looks like:"Sm2201SpectraStoreSettings": { "Address": "192.168.10.212", "Domain": "MOSSBAUERLAB", "Folder": "Autosaves", "UserCredentials": null }
-
Running on any Linux requires to mount Windows shared folder using
cifs.mount
, becauseDirectory
in Linux doesn't understand Windows network Path, thereforeSM2201
config section looks like:"Sm2201SpectraStoreSettings": { "Address": "", "Domain": "MOSSBAUERLAB", "Folder": "/mnt/sm2201/dev", "UserCredentials": null }
Solution could be run either on Windows
or Linux
- Configure SMB (/etc/samba/smb.conf) as follows, add to
global
section:client min protocol = NT1
client lanman auth = yes
client ntlmv2 auth = no
To check is there access to shared folder usingsmbclient
use following command
Where:smbclient //MICHAEL/Autosaves -m NT1 -w MOSSBAUERLAB
MICHAEL
- computer nameMOSSBAUERLAB
- workgroup nameAUTOSAVES
- name of shared folder
- To watch save process we monitor windows shared folder but in linux we have to mount shared folder using
cifs
(All names must be Uppercase):sudo mount -t cifs -o user=guest,pass=,vers=1.0,sec=none,domain=MOSSBAUERLAB,ip=192.168.10.217,servern=MICHAEL //MICHAEL/AUTOSAVES /mnt/sm2201/dev
Where:MICHAEL
- computer nameMOSSBAUERLAB
- workgroup nameAUTOSAVES
- name of shared folder
- Configure
appsettings.Production.json
before run and setAddress
to "" and setFolder
to mount point if you are running solution onRaspberry Pi
- Run solution
dotnet Wissance.MossbauerLab.Watcher.Web.dll --environment=Production
To run Wissance.MossbauerLab.Watcher.Web
as a service it should be configured as systemd
service:
- Create group -
sudo groupadd mossbauer
- Create user -
labwatcher - sudo useradd -r -g mossbauer -d /usr/local/sbin/labwatcher -s /sbin/nologin labwatcher
- Create labwatcher.service file with following content:
[Unit]
Description=Wissance.MossbauerLab.Watcher service
After=syslog.target network.target
Before=httpd.service
[Service]
WorkingDirectory=/usr/local/sbin/labwatcher/app
User=labwatcher
Group=mossbauer
LimitNOFILE=102642
PIDFile=/var/run/mossbauer/labwatcher.pid
ExecStart=dotnet /usr/local/sbin/labwatcher/app/Wissance.MossbauerLab.Watcher.Web.dll --environment=Production
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
- Change directory owner to
mossbauer:labwatcher
-sudo chown -R labwatcher:mossbauer /usr/local/sbin/labwatcher
- Copy
labwatcher.service
file to/etc/systemd/system
- Execute
sudo systemctl daemon-reload
- Execute
sudo systemctl enable labwatcher
- Execute
sudo systemctl start labwatcher
- If we are mount automatically and got error like:
Jan 08 18:14:32 LabControl mount.sh[495]: mount error(101): Network is unreachable
Jan 08 18:14:32 LabControl mount.sh[495]: Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) ...
there are many solutions but for me helpful was adding sleep 20s
in .sh
script prior to mount
There are following endpoints to receive/manage state from browser or other clients:
GET /api/Spectrum
- list all spectra from database;GET /api/Spectrum/{id}
- return one spectrum by its id;GET /api/Spectrum/{id}/samples
- return spectrum data including list of all intermediate measurements;GET /api/Spectrum/{id}/samples/{sampleName}/spectrum
- return spectrum with file name ={sampleName}