Source code for crappy.inout.opsens_handysens

# coding: utf-8

from time import time
from typing import List
import logging
from  warnings import warn

from .meta_inout import InOut
from .._global import OptionalModule

try:
  import serial
except (ModuleNotFoundError, ImportError):
  serial = OptionalModule("pyserial")


[docs] class HandySens(InOut): """This class allows reading data from an OpSens HandySens fiber optics signal conditioner. It can read data from various fiber optics sensors like temperature, pressure, position or strain. .. versionadded:: 1.4.0 .. versionchanged:: 2.0.0 renamed from *Opsens* to *HandySens* """
[docs] def __init__(self, device: str = '/dev/ttyUSB0') -> None: """Sets the argument and initializes the parent class. Args: device: Address of the serial connection for communicating with the OpSens. """ warn(f"Starting from version 2.1.0, {type(self).__name__} will be moved " f"to crappy.collection. Your code that uses it will still work as " f"is, except you will now need to import crappy.collection at the " f"top of your script.", FutureWarning) self._dev = None super().__init__() self._addr = device
[docs] def open(self) -> None: """Opens the serial connection and configures the OpSens.""" self.log(logging.INFO, f"Opening the serial connection on port " f"{self._addr} with baudrate 57600") self._dev = serial.Serial(port=self._addr, baudrate=57600, timeout=0.1) self._send_cmd("meas:rate min")
[docs] def get_data(self) -> List[float]: """Reads data from the OpSens and returns it.""" return [time(), float(self._send_cmd("ch1:data? 1")[:-3])]
[docs] def close(self) -> None: """Closes the serial connection, if it was opened.""" if self._dev is not None: self.log(logging.INFO, f"Closing the serial connection on port " f"{self._addr}") self._dev.close()
def _send_cmd(self, cmd: str) -> str: """Wrapper for sending a command and returning the received answer.""" self.log(logging.DEBUG, f"Writing b'{cmd}\\n' to port {self._addr}") self._dev.write(cmd + '\n') ret = self._dev.read_until(b'\x04\n').decode() self.log(logging.DEBUG, f"Read {ret} on port {self._addr}") return ret