Skip to content

API Service Project (Raspberry Pi Robot) ​

Verdure.Assistant.Api is the server-side component designed for embedded devices like Raspberry Pi, providing RESTful API and WebSocket services.

Project Overview ​

The API service is designed to be the core backend for intelligent voice assistant systems, particularly optimized for IoT devices and embedded environments.

Core Features ​

  • 🤖 Robot Backend: Intelligent voice services for Raspberry Pi robots
  • 📡 IoT Integration: Support for IoT device connection and management
  • ⚡ High Performance: Optimized resource usage for embedded environments
  • 🔄 Real-time Communication: WebSocket support for bidirectional communication
  • 🌐 Standard Interface: RESTful API design for easy integration

Quick Start ​

Requirements ​

  • .NET 9.0 SDK
  • Linux ARM64 (Raspberry Pi 4 recommended) or any .NET-supported system
  • At least 1GB RAM (2GB+ recommended)
  • Network connection (for voice service calls)

Local Development ​

  1. Clone and navigate to project
bash
git clone https://github.com/maker-community/Verdure.Assistant.git
cd Verdure.Assistant/src/Verdure.Assistant.Api
  1. Configure appsettings.json
json
{
  "VoiceService": {
    "ServerUrl": "wss://api.tenclass.net/xiaozhi/v1/",
    "ApiKey": "your-api-key-here",
    "EnableVoice": true
  }
}
  1. Run the project
bash
dotnet run

API Endpoints ​

Voice Service Endpoints ​

Start Voice Session ​

http
POST /api/voice/start
Content-Type: application/json

{
  "deviceId": "raspberry-pi-001",
  "userId": "user123",
  "sessionConfig": {
    "audioFormat": "opus",
    "sampleRate": 16000,
    "channels": 1
  }
}

Device Registration ​

http
POST /api/device/register
Content-Type: application/json

{
  "deviceId": "raspberry-pi-001",
  "deviceName": "Living Room Assistant",
  "deviceType": "raspberry-pi",
  "capabilities": ["voice", "audio", "led"]
}

Docker Deployment ​

Dockerfile ​

dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:9.0-alpine AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY ["src/Verdure.Assistant.Api/Verdure.Assistant.Api.csproj", "src/Verdure.Assistant.Api/"]
RUN dotnet restore "src/Verdure.Assistant.Api/Verdure.Assistant.Api.csproj"
COPY . .
WORKDIR "/src/src/Verdure.Assistant.Api"
RUN dotnet build "Verdure.Assistant.Api.csproj" -c Release -o /app/build
RUN dotnet publish "Verdure.Assistant.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "Verdure.Assistant.Api.dll"]

Raspberry Pi Deployment ​

System Setup ​

bash
# Install .NET 9
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x ./dotnet-install.sh
./dotnet-install.sh --version latest --runtime aspnetcore

# Install audio support
sudo apt install -y alsa-utils portaudio19-dev

Service Configuration ​

bash
# Create systemd service
sudo tee /etc/systemd/system/verdure-api.service > /dev/null <<EOF
[Unit]
Description=Verdure Assistant API
After=network.target

[Service]
Type=notify
ExecStart=/opt/verdure-api/Verdure.Assistant.Api
Restart=always
User=pi
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable verdure-api
sudo systemctl start verdure-api

Released under the MIT License