A TypeScript application that monitors EV Connect charging station availability and sends notifications via Pushover when connectors become available.
Disclaimer: This project is an unofficial, personal tool and is not affiliated with or endorsed by EV Connect. It interacts with the EV Connect API for personal monitoring purposes only. Use at your own risk.
- π Real-time monitoring of EV Connect charging stations
- π± Pushover notifications when connectors become available
- π Charging session tracking to avoid false alerts
- π¨ Parking time notifications when charging is complete
- πΎ State persistence across restarts
- π³ Docker support for easy deployment
- Node.js 18+
- pnpm package manager
- EV Connect account credentials
- Pushover account (optional)
# Clone the repository
git clone https://github.com/darnfish/evc-monitor.git
cd evc-monitor
# Install dependencies
pnpm install
# Copy environment template
cp env.template .env
# Edit .env with your credentials
# See Environment Variables section below# Development
pnpm dev
# Production
pnpm build
pnpm start
# Docker
docker-compose up -dEMAIL=your-evconnect-email
PASSWORD=your-evconnect-password
NETWORK_ID=your-network-id
LOCATION_ID=your-location-id# Monitoring settings
CHECK_INTERVAL_MS=60000 # Check interval in milliseconds (default: 60000)
IGNORE_CONNECTOR_IDS=connector1,connector2 # Comma-separated list of connectors to ignore
DATA_DIR=./data # Directory for state persistence
PERSIST_LAST_CHECK_TIMESTAMP=true # Respect check interval on restart
# Pushover notifications
PUSHOVER_ENABLED=true # Enable Pushover notifications
PUSHOVER_USER_KEY=your-pushover-user-key # Your Pushover user key
PUSHOVER_APP_TOKEN=your-pushover-app-token # Your Pushover app token
PUSHOVER_SERVICE_NOTIFICATIONS=true # Send service start/stop notifications
# Non-priority notifications (low priority, quiet notifications)
PUSHOVER_OCCUPIED_NOTIFICATIONS=false # Send notifications when connectors become occupied
PUSHOVER_SERVICE_STATUS_NOTIFICATIONS=false # Send notifications when connectors go in/out of service
# Parking notifications
ENABLE_PARKING_NOTIFICATIONS=true # Enable parking time notifications
DISABLE_ALERTS_WHILE_CHARGING=true # Disable availability alerts while you're charging (default: true)The application includes a comprehensive test suite with unit and integration tests.
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests with coverage
pnpm test:coverage
# Run tests for CI
pnpm test:ciFor testing, the following environment variables are automatically set:
EMAIL=test@example.com
PASSWORD=test-password
NETWORK_ID=test-network-id
LOCATION_ID=test-location-id
PUSHOVER_ENABLED=false
PUSHOVER_USER_KEY=test-user-key
PUSHOVER_APP_TOKEN=test-app-token
PUSHOVER_SERVICE_NOTIFICATIONS=false
ENABLE_PARKING_NOTIFICATIONS=true
PERSIST_LAST_CHECK_TIMESTAMP=true
CHECK_INTERVAL_MS=60000
IGNORE_CONNECTOR_IDS=""
DATA_DIR=./test-dataThe repository includes GitHub Actions workflows for:
- Testing: Runs on every pull request (required for merge)
- Building: Creates Docker images
- Deployment: Pushes to container registry
For production deployments, set these as GitHub repository secrets:
EMAIL=your-actual-email
PASSWORD=your-actual-password
NETWORK_ID=your-actual-network-id
LOCATION_ID=your-actual-location-id
PUSHOVER_USER_KEY=your-pushover-user-key
PUSHOVER_APP_TOKEN=your-pushover-app-tokenWhen adding new features, please ensure:
- Write tests first (TDD approach)
- Add unit tests for all new functionality
- Add integration tests for service interactions
- Test error handling and edge cases
- Maintain >90% code coverage
- Update documentation
- Use TypeScript strict mode
- Follow existing code patterns
- Add JSDoc comments for public APIs
- Handle errors gracefully
- Use meaningful variable names
- Create feature branch
- Write tests for new functionality
- Implement feature
- Ensure all tests pass
- Update documentation
- Create pull request with template
AuthService: Handles EV Connect authentication and token managementEVCMonitor: Main monitoring service that checks connector availabilityPushoverService: Sends notifications via Pushover APIStateManager: Persists connector states across restartsTokenStorageService: Manages authentication token storage
- Authentication: Authenticate with EV Connect API using email/password
- Monitoring: Check location data β Compare with previous state β Detect changes
- Notifications: Send Pushover notifications for newly available connectors
- State Management: Save current state for next check cycle
# Copy environment file
cp env.template .env
# Edit .env with your credentials
# Start services
docker-compose up -d
# View logs
docker-compose logs -f evc-monitor# Build image
docker build -t evc-monitor .
# Run container
docker run -d \
--name evc-monitor \
--env-file .env \
-v $(pwd)/data:/app/data \
evc-monitor- Authentication errors: Check your email, password, and network ID
- No notifications: Verify Pushover configuration
- High CPU usage: Increase check interval
- State file issues: Clear data directory and restart
The application provides detailed logging:
- π Authentication status
- π Connector availability changes
- π± Notification delivery status
- β Error conditions
- Check existing issues and discussions
- Review documentation
- Create detailed bug reports with logs
MIT License - see LICENSE file for details.
- Fork the repository
- Create a feature branch
- Write tests for new functionality
- Implement your changes
- Ensure all tests pass
- Submit a pull request
See DEVELOPMENT.md and TESTING.md for detailed development guidelines.