# tmirob-robot-status

> Made with create-react-library

Latest version **2.1.0** (published 2024-10-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install tmirob-robot-status
pnpm add tmirob-robot-status
yarn add tmirob-robot-status
bun add tmirob-robot-status
```

## Health

**Score 30/100 (F)** — status: maintenance-mode.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2024-10-30 |
| First published | 2020-09-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Node | >=10 |
| Dependencies | 1 |
| Unpacked size | 1.7 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | W-Qing |
| Maintainers | taimirobot, taimi-wqing, yuqing.hao, formax |

## Links

- npm: https://www.npmjs.com/package/tmirob-robot-status
- Repository: https://github.com/W-Qing/tmirob-robot-status
- Homepage: https://github.com/W-Qing/tmirob-robot-status#readme
- Issues: https://github.com/W-Qing/tmirob-robot-status/issues
- npm.io page: https://npm.io/package/tmirob-robot-status

## Dependencies (1)

- [react-custom-scrollbars](https://npm.io/package/react-custom-scrollbars.md) ^4.2.1

## Recent versions

- 2.1.0 (latest) — 2024-10-30
- 2.0.5 — 2021-02-02
- 2.0.4 — 2021-01-29
- 2.0.3 — 2021-01-08
- 2.0.2 — 2020-11-17
- 2.0.1 — 2020-11-17
- 2.0.0 — 2020-11-12
- 1.9.0 — 2020-11-12
- 1.8.0 — 2020-11-06
- 1.7.0 — 2020-11-05
- 1.6.0 — 2020-10-14
- 1.5.0 — 2020-09-23
- 1.4.0 — 2020-09-23
- 1.3.0 — 2020-09-22
- 1.2.0 — 2020-09-22
- … 2 more at https://npm.io/package/tmirob-robot-status/versions

## README

# tmirob-robot-status

> Made with [create-react-library](https://github.com/transitive-bullshit/create-react-library/blob/master/readme.md)

[![NPM](https://img.shields.io/npm/v/tmirob-robot-status.svg)](https://www.npmjs.com/package/tmirob-robot-status) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save tmirob-robot-status
```

## Development

1. `cd tmirob-robot-status`
2.  `yarn install && yarn run start`
3. `cd example`
4. `yarn install && yarn run start`

## Usage

**api**

```js
// robotApi
static getRobotStatusData(robotId) {
		const url = `${Config.serverUrl}rest/details/getRobotSections?serialNo=${robotId}`;
		return getApi(url);
}
```

**demo**

```jsx
import React, {useState, useEffect} from 'react'
import TmirobRobotStatus from 'tmirob-robot-status'
import 'tmirob-robot-status/dist/index.css'
import robotsApi from '../../api/robotsApi'

const TestStatus = (props) => {
  const [robotId, setRobotId] = useState('SN1901B12101')
  const [robotInfo, setRobotInfo] = useState({})
  const [basicInfo, setBasicInfo] = useState({})
  const [pluginInfo, setPluginInfo] = useState({})
  const [funcInfo, setFuncInfo] = useState({})
	const [appStateInfo, setAppStateInfo] = useState({})
  
  const mapStatusData = (statusData) => {
    let resp = {}
    Object.keys(statusData).forEach((key) => {
      let data = statusData[key].map(item => {
        return {
          value: item.status,
          abnormal: item.errorCode !== '',
          abnormalMsg: item.msg
        }
      })
      resp[key] = data
    })
    return resp
  }
  
  const mapAppStateData = (appState) => {
    let resp = {}
    if(!isEmpty(appState)){
      Object.keys(appState).forEach((key) => {
        let data = appState[key].map(item => {
          return {
            value: item.msg,
            abnormal: item.status === 'error',
            abnormalMsg: ''
          }
        })
        resp[key] = data
      })
    }
    return resp
  }
  useEffect(() => {
    robotsApi.getRobotStatusData(robotId).then(res => {
      if(res.retval === 0) {
        const {basic_status, funtion_status,peripherals_status, Status } = res.result
        const {robot_id,robotType,current_floor,current_position,collision,is_offline, ...basicRest} = basic_status
        setRobotInfo({
          robot_id: robot_id[0].status,
          robotType: robotType[0].status,
          current_floor: current_floor[0].status,
          current_position: current_position[0].status,
          is_crash: collision[0].status,
          is_offline: is_offline[0].status,
        })
        
        let basicData = mapStatusData(basicRest)
        basicData['battery_level'][0]['charging'] = basicRest.charging[0].status
        basicData['rssi'][0]['ssid'] = basicRest.wifi_ssid[0].status
        setBasicInfo(basicData)
        let pluginData = mapStatusData(peripherals_status)
        setPluginInfo(pluginData)
        let moduleData = mapStatusData(funtion_status)
        setFuncInfo(moduleData)
        let stateData = mapAppStateData(Status)
        setAppStateInfo(stateData)
      }
    })
  },[robotId])
  return (
    <TmirobRobotStatus 
      goBack={() => console.log('goBack')}
      robotInfo={robotInfo}
      basicInfo={basicInfo}
      pluginInfo={pluginInfo}
      funcInfo={funcInfo}
      appStateInfo={appStateInfo}
    />
  )
}
export default TestStatus
```

## Props

- robotInfo

```js
 const robotInfo = {
    robot_id: 'SN1901B12101',
    robotType: 'IdentityRobot',
    current_floor: '第二层',
    current_position: '1.0，2.0，2.3',
    is_crash: 'true',
    is_offline: 'false',
  }
```

- basicInfo

```js
const basicInfo = {
    emergency_stop: [{
      value: 'normal',
      abnormal: false,
      abnormalMsg: 'emergency stopped'
    }],
    paused: [{
      value: 'normal',
      abnormal: true,
      abnormalMsg: '机器人被暂停'
    }],
    control_mode: [{
      value: 'self_nav',
      abnormal: false,
      abnormalMsg: ''
    }],
    slave_connection: [{
      value: 'normal',
      abnormal: true,
      abnormalMsg: '无法连接从机'
    }],
  	// charging
    battery_level: [{
      charging: false,
      value: '3',
      abnormal: true,
      abnormalMsg: '电量过低'
    }],
    charge_current: [{
      value: '1000',
      abnormal: false,
      abnormalMsg: ''
    }],
    discharge_current: [{
      value: '1000',
      abnormal: false,
      abnormalMsg: ''
    }],
    cpu_occupation: [{
      value: '95',
      abnormal: true,
      abnormalMsg: 'CPU占用率过高'
    }],
  	// ssid
    rssi: [{
      value: '3',
      ssid: 'tmirob-5G',
      abnormal: true,
      abnormalMsg: '无线信号强度过低'
    }],
    linear_velocity: [{
      value: '5.5',
      abnormal: false,
      abnormalMsg: ''
    }],
    cpu_temperature: [{
      value: '70',
      abnormal: true,
      abnormalMsg: 'CPU占用率过高'
    }],
  }
```

- pluginInfo

```js
const pluginInfo = {
    lidar: [{
      value: 'normal',
      abnormal: false,
      abnormalMsg: ''
    }],
    motor_control_driver: [{
      // 同上，省略...
    }],
    agv_serial_board: [{
     	// ...
    }],
    main_control: [{
      // ...
    }],
    sensor_driver: [{
      // ...
    }],
    power_manager: [{
       // ...
    }],
    auto_charging_ir: [{
       // ...
    }],
    disinfecting_driver: [{
       // ...
    }],
    motor_adapter: [{
       // ...
    }],
    realsense: [{
      value: 'normal',
      abnormal: false,
      abnormalMsg: ''
    },{
      value: 'normal',
      abnormal: false,
      abnormalMsg: ''
    }]
  }
```

- appStateInfo / funcInfo

```js
const funcInfo = {
    localization: [{
      value: 'normal',
      abnormal: false,
      abnormalMsg: ''
    }],
    navigation: [{
      // 同上，省略...
    }],
    map_server: [{
      // ...
    }]
  }
```

## Tips

- 机器人离线时显示的状态数据是最近一次的状态
- **basicInfo**下的机器人电量**battery_level**不只表示当前电量，还会显示是否为充电状态，由**basic_status**里的**battery_level**与**charging**共同控制。
- **basicInfo**下的wifi状态**rssi**不只表示 WiFi 强度(由**basic_status**里的**rssi**值决定)，同时还可以显示  WiFi 名称(由**basic_status**里的**wifi_ssid**值决定)。

---
_Source: https://npm.io/package/tmirob-robot-status · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
