hardlink/README.md
2025-05-22 12:08:55 +01:00

154 lines
3.7 KiB
Markdown

# Access Point
This service handles door card issuance and room ticket printing for hotels. It interacts with the card dispenser over serial, the Assa Abloy lock server, and prints receipts.
## Deployment
We use Salt for deployment. To build and deploy a new version:
1. **Push your branch** with a meaningful commit message:
```bash
git push origin <branch>
```
2. **Tag and build**:
```bash
./tagbuild.sh
```
This script:
- Builds the latest `hardlink.exe` binary
- Tags the repository with the new version
- Copies `hardlink_<tag>.exe` to `salt/hardlink/files`
3. **Commit the new binary** in Salt:
```bash
cd salt
git add hardlink/files/hardlink_<tag>.exe
git commit -m "added hardlink"
git push
```
4. **Update pillar** (`pillar/hardlink/init.sls`) to point to the new version.
5. **Apply the state** on your hosts:
```bash
salt '*' state.apply hardlink
```
## Configuration
Place `config.yml` alongside `hardlink.exe`:
```yaml
port: 9091
lockservUrl: "http://192.168.4.109:4000"
encoderAddr: "1"
dispensPort: "COM9"
dispensAddr: "15"
printerName: "EPSON TM-T82II Receipt"
logdir: "./logs"
```
Provide `TicketLayout.xml` for print layout:
```xml
<LayoutOptions>
<LogoPath>C:/Logo/logo.png</LogoPath>
<TopMostText>Welcome to The Bike and Boot</TopMostText>
<BeforeRoomNumberText>Your room number is</BeforeRoomNumberText>
<BeforeDirectionsText></BeforeDirectionsText>
<HotelSpecificDetails>This is the hotel details section</HotelSpecificDetails>
<CheckOutTimeText>Check Out Time</CheckOutTimeText>
<RoomMapFolderPath>C:/Logo/Roommaps</RoomMapFolderPath>
</LayoutOptions>
```
## Build & Run
```bash
# Install dependencies
go mod tidy
# Build the executable
go build -o hardlink.exe
# Run
./hardlink.exe
```
The HTTP server listens on `http://localhost:<port>` (default `9091`).
## API Endpoints
### 1. Issue Door Card
- **Endpoint**: `POST /issuedoorcard`
- **Headers**: `Content-Type: application/json`
- **Body**:
```json
{
"roomField": "101",
"checkinTime": "2025-04-08 11:16:05 +0100",
"checkoutTime": "2025-04-08 12:00:00 +0100",
"followStr": "0"
}
```
- **Responses**:
- `200 OK`
```json
{ "Code": 200, "Message": "Card issued successfully" }
```
- `4XX` / `5XX`
```json
{ "Code": <status>, "Message": "<error>" }
```
### 2. Print Room Ticket
- **Endpoint**: `POST /printroomticket`
- **Headers**: `Content-Type: application/xml`
- **Body**:
```xml
<roomdetails>
<customername>John Doe</customername>
<checkoutdatetime>16/05/2025 11:00 am</checkoutdatetime>
<roomno>103</roomno>
<roommap>map.png</roommap>
<roomdirections>Follow corridor...</roomdirections>
</roomdetails>
```
- **Responses**:
- `200 OK`
```json
{ "Code": 200, "Message": "Print job sent successfully" }
```
- `4XX` / `5XX`
```json
{ "Code": <status>, "Message": "<error>" }
```
## Packages
### `main`
- Entry point: reads config, sets up logging, initializes dispenser and lock server, loads print layout, and starts HTTP server.
### `dispenser`
- Communicates with the card dispenser via serial port.
- Commands: check status, move card, eject card.
### `lockserver`
- Manages TCP connection to the Assa Abloy lock server.
- Sends heartbeat and encoding commands.
### `printer`
- Loads `TicketLayout.xml` into `LayoutOptions`.
- Provides `printLogo`, `printMap`, `BuildRoomTicket`, `SendToPrinter`.
- Converts images to ESC/POS raster commands with dithering and transparency support.
### `cmstypes`
- Defines JSON and XML payload structures for door cards and room details.
## Logging
Logs are written in JSON format to `<logdir>/hardlink.log`.
---
MIT © FutureSens Systems