LabWatcher

Wissance.MossbauerLab.Watcher

A set of tools that helps to automate measure/control processes of any Scientific / Industrial Lab. Current solution is using for:

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.

GitHub code size in bytes GitHub issues GitHub Release Date GitHub release (latest by date)

LabWatcher: is automated Mossbauer laboratory control toolset

Mossbauer laboratory automation tool controls spectra measurements from SM2201 Mossbauer spectrometer and watches state of other equipment.

Key features

1. Watching objects and notifications

1.1 Watching objects

1.2 Notifications

2. Configuration

There are 2 run profiles (Development and Production) and 2 possible configs variants of Wissance.Mossabuer.LabWatcher:

  1. 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
    }
    
  2. Running on any Linux requires to mount Windows shared folder using cifs.mount, because Directory in Linux doesn’t understand Windows network Path, therefore SM2201 config section looks like:
    "Sm2201SpectraStoreSettings": {
       "Address": "",
       "Domain": "MOSSBAUERLAB",
       "Folder": "/mnt/sm2201/dev",
       "UserCredentials": null
    }
    

Solution could be run either on Windows or Linux

2.1 Running solution on Raspberry Pi

  1. 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 using smbclient use following command
      smbclient //MICHAEL/Autosaves -m NT1 -w MOSSBAUERLAB
      

      Where:

    • MICHAEL - computer name
    • MOSSBAUERLAB - workgroup name
    • AUTOSAVES - name of shared folder
  2. 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 name
    • MOSSBAUERLAB - workgroup name
    • AUTOSAVES - name of shared folder

3. How to run

3.1 Run once

  1. Configure appsettings.Production.json before run and set Address to “” and set Folder to mount point if you are running solution on Raspberry Pi
  2. Run solution dotnet Wissance.MossbauerLab.Watcher.Web.dll --environment=Production

3.2 Run as a service

To run Wissance.MossbauerLab.Watcher.Web as a service it should be configured as systemd service:

  1. Create group - sudo groupadd mossbauer
  2. Create user - labwatcher - sudo useradd -r -g mossbauer -d /usr/local/sbin/labwatcher -s /sbin/nologin labwatcher
  3. 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

4. Change directory owner to `mossbauer:labwatcher` - `sudo chown -R labwatcher:mossbauer /usr/local/sbin/labwatcher`
5. Copy `labwatcher.service` file to `/etc/systemd/system`
6. Execute `sudo systemctl daemon-reload`
7. Execute `sudo systemctl enable labwatcher`
8. Execute `sudo systemctl start labwatcher`

## 4. Troubleshooting

1. 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

5. Web API

There are following endpoints to receive/manage state from browser or other clients:

6. Contributors