Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

channel.js 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * @type {Reading}
  3. */
  4. class Reading {
  5. constructor({ onRead, unit, min, max }) {
  6. this._val = onRead
  7. this.unit = unit
  8. this.max = max
  9. this.min = min
  10. this.created = Date.now()
  11. }
  12. /**
  13. * Reach out and grabs the value
  14. * from some sensor
  15. */
  16. get val() {
  17. return this._val()
  18. }
  19. }
  20. /**
  21. * @type {Channel}
  22. */
  23. class Channel {
  24. constructor({ interval = 1, reader = null }) {
  25. this._interval = interval
  26. this._reader = reader
  27. }
  28. get interval() {
  29. return this._interval
  30. }
  31. get val() {
  32. return this._reader.val
  33. }
  34. get unit() {
  35. return this._reader.unit
  36. }
  37. get aboveRange() {
  38. return this._reader.val > this._reader.max
  39. }
  40. get belowRange() {
  41. return this._reader.val < this._reader.min
  42. }
  43. get inRange() {
  44. return this._reader.val && !this.aboveRange && !this.belowRange
  45. ? true
  46. : false
  47. }
  48. /** Always return a new Reading instance with new Channel instances */
  49. update() {
  50. const reader = new Reading({
  51. // !: Setup the callback to return a sensor value
  52. onRead: this._reader._val,
  53. unit: this._reader.unit,
  54. max: this._reader.max,
  55. min: this._reader.min,
  56. })
  57. const chan = new Channel({ interval: this.interval, reader })
  58. return chan
  59. }
  60. }
  61. export { Channel, Reading }