Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/haradakaito/attendancemanagementsystem
Card Reader-Based Attendance Management System Operating on Raspberry Pi.
https://github.com/haradakaito/attendancemanagementsystem
nfc notion python raspberrypi
Last synced: 15 days ago
JSON representation
Card Reader-Based Attendance Management System Operating on Raspberry Pi.
- Host: GitHub
- URL: https://github.com/haradakaito/attendancemanagementsystem
- Owner: haradakaito
- License: mit
- Created: 2024-10-02T01:59:16.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-10-24T03:22:03.000Z (about 2 months ago)
- Last Synced: 2024-10-24T21:34:35.212Z (about 2 months ago)
- Topics: nfc, notion, python, raspberrypi
- Language: Python
- Homepage:
- Size: 692 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 【ラズパイ】カードリーダー式勤怠管理システム
RaspberryPiを使ったカードリーダー式の勤怠管理システムを作成します.
## システム概要図
![システム概要図](https://github.com/user-attachments/assets/68536d9d-3d55-40ca-b80d-ccf64a32d61e)
## ユーザーインターフェース(一部)
- **確認画面**![UIイメージ](https://github.com/user-attachments/assets/dcf3c998-1461-49b9-8bcf-6be652ccdd0f)
![image](https://github.com/user-attachments/assets/da1da3da-157a-421f-b71a-b26e224a4ee9)
- **勤怠画面**
![スクリーンショット 2024-10-21 113408](https://github.com/user-attachments/assets/b42a4a17-4704-49aa-8b9f-da681d2f5fba)
![入力フォーム](https://github.com/user-attachments/assets/254fab70-aec4-468a-b115-f822b46bf780)
![カード読み込み画面](https://github.com/user-attachments/assets/efbf70c6-7fd6-48c0-8cf9-7a5c4332f5f1)
## RaspberryPiのセットアップ
- RaspberryPi 4 Model B
| Raspberry Pi Imager | OS | Kernel |
----|----|----
| v1.8.5 | Raspbian 11.9 | 6.1.21 |```
$ sudo apt update
$ cd ~/
$ mkdir .ssh
$ touch .ssh/authorized_keys
$ nano .ssh/authorized_keys// 自身の公開鍵(.pub)をコピペ
$ sudo reboot
```## カードリーダー接続
Raspberry Pi 4 Model BにRC-S380/Sを接続する.
- RC-S380/S```
$ lsusb// Sony Corp. RC-S380/Sが認識されていることを確認
$ sudo pip install nfcpy
// nfcが適切にインストールされているかを確認
$ git clone https://github.com/nfcpy/nfcpy.git
$ sudo python3 nfcpy/examples/tagtool.py show// NFCカードを近づけて情報が表示されればOK
$ python3 -m nfc
// better assign ... と記載されている下の行に提示されたコマンドを入力
$ sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c1\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
$ sudo udevadm control -R # then re-attach device
```## API仕様書
### 基本URL
**`/`** - APIのルートパス---
### エンドポイント一覧
| メソッド | URL | 概要 |
| -------- | ---------------------- | --------------------------------- |
| `GET` | `/` | APIのウェルカムメッセージを返す |
| `GET` | `/health` | サービスの稼働状況を確認する |
| `GET` | `/get_uid` | UIDを取得して暗号化する |
| `POST` | `/register_id` | IDを登録する |
| `POST` | `/register_attendance` | 勤怠状態を登録する |
| `DELETE` | `/remove_id` | IDを削除する |
| `DELETE` | `/remove_attendance` | 勤怠データを削除する |---
### エンドポイント詳細
#### 1. ルートエンドポイント
- **メソッド**: `GET`
- **URL**: `/`
- **概要**: APIからのウェルカムメッセージを返します。
- **レスポンス**:
- **200 OK**
```json
{
"message": "Hello API Server!"
}
```---
#### 2. ヘルスチェックエンドポイント
- **メソッド**: `GET`
- **URL**: `/health`
- **概要**: サービスの稼働状況を確認するためのエンドポイントです。
- **レスポンス**:
- **200 OK**
```json
{
"message": "Service is up and running"
}
```---
#### 3. UID取得エンドポイント
- **メソッド**: `GET`
- **URL**: `/get_uid`
- **概要**: カードリーダーからUIDを取得し、暗号化して返します。
- **レスポンス**:
- **200 OK** - 成功時
```json
{
"message": "UID successfully read",
"uid": ""
}
```
- **400 Bad Request** - 失敗時
```json
{
"message": "Failed to read and encrypt UID"
}
```
- **500 Internal Server Error** - エラー発生時
```json
{
"code": 500,
"message": ""
}
```---
#### 4. ID登録エンドポイント
- **メソッド**: `POST`
- **URL**: `/register_id`
- **概要**: IDを登録します。
- **リクエストボディ**:
```json
{
"id": "string",
"name": "string",
"attribute": "string",
"description": "string"
}
```
- **レスポンス**:
- **200 OK** - 登録成功時
```json
{
"code": 200,
"message": "ID registration successful"
}
```
- **400 Bad Request** - 登録失敗時
```json
{
"code": 400,
"message": ""
}
```
- **500 Internal Server Error** - エラー発生時
```json
{
"code": 500,
"message": ""
}
```---
#### 5. 勤怠登録エンドポイント
- **メソッド**: `POST`
- **URL**: `/register_attendance`
- **概要**: 勤怠状態を登録します。
- **リクエストボディ**:
```json
{
"id": "string",
"next_state": "string"
}
```
- **レスポンス**:
- **200 OK** - 登録成功時
```json
{
"code": 200,
"message": "Attendance registration successful"
}
```
- **400 Bad Request** - 登録失敗時
```json
{
"code": 400,
"message": ""
}
```
- **500 Internal Server Error** - エラー発生時
```json
{
"code": 500,
"message": ""
}
```---
#### 6. ID削除エンドポイント
- **メソッド**: `DELETE`
- **URL**: `/remove_id`
- **概要**: IDを削除します。
- **リクエストボディ**:
```json
{
"id": "string",
"name": "string"
}
```
- **レスポンス**:
- **200 OK** - 削除成功時
```json
{
"code": 200,
"message": "ID removal successful"
}
```
- **400 Bad Request** - 削除失敗時
```json
{
"code": 400,
"message": ""
}
```
- **500 Internal Server Error** - エラー発生時
```json
{
"code": 500,
"message": ""
}
```---
#### 7. 勤怠削除エンドポイント
- **メソッド**: `DELETE`
- **URL**: `/remove_attendance`
- **概要**: 勤怠データを削除します。
- **リクエストボディ**:
```json
{
"id": "string",
"name": "string"
}
```
- **レスポンス**:
- **200 OK** - 削除成功時
```json
{
"code": 200,
"message": "Attendance removal successful"
}
```
- **400 Bad Request** - 削除失敗時
```json
{
"code": 400,
"message": ""
}
```
- **500 Internal Server Error** - エラー発生時
```json
{
"code": 500,
"message": ""
}
```---
### リクエスト/レスポンスボディ
#### モデル
| モデル名 | 内容 |
| ---------------------- | --------------------------------------- |
| **RegisterIdRequest** | ID登録リクエスト用 |
| **RemoveIdRequest** | ID削除リクエスト用 |
| **RegisterAttendanceRequest** | 勤怠登録リクエスト用 |
| **RemoveAttendanceRequest** | 勤怠削除リクエスト用 |
| **Response** | 一般的なレスポンスフォーマット |---
#### 1. `RegisterIdRequest`
```json
{
"id": "string",
"name": "string",
"attribute": "string",
"description": "string"
}
```#### 2. `RemoveIdRequest`
```json
{
"id": "string",
"name": "string"
}
```#### 3. `RegisterAttendanceRequest`
```json
{
"id": "string",
"next_state": "string"
}
```#### 4. `RemoveAttendanceRequest`
```json
{
"id": "string",
"name": "string"
}
```#### 5. `Response`
```json
{
"code": 200,
"message": "string"
}
```