Official SinricPro SDK for Node.js and TypeScript. Control your IoT devices with Alexa and Google Home.
🎯 Features:
- ✅ Full TypeScript support with strong typing
- ✅ Modern async/await API
- ✅ WebSocket with automatic reconnection
- ✅ HMAC-SHA256 authentication
- ✅ Local control over the LAN (works while SinricPro is unreachable)
- ✅ Event rate limiting
- ✅ Multiple device types (Switch, Light, Thermostat, etc.)
- ✅ Comprehensive error handling
- ✅ Unit tested
npm install sinricproOr with yarn:
yarn add sinricpro- Sign up at sinric.pro
- Create a new device (e.g., "Switch")
- Copy your credentials:
APP_KEYAPP_SECRETDEVICE_ID
import SinricPro from 'sinricpro';
import { SinricProSwitch } from 'sinricpro/devices';
const config = {
appKey: 'YOUR-APP-KEY',
appSecret: 'YOUR-APP-SECRET',
};
async function main() {
// Create a switch device
const mySwitch = SinricProSwitch('YOUR-DEVICE-ID');
// Handle power state changes from Alexa/Google Home
mySwitch.onPowerState(async (deviceId, state) => {
console.log(`Device turned ${state ? 'ON' : 'OFF'}`);
// Control your hardware here
return true; // Return true if successful
});
// Add device to SinricPro
SinricPro.add(mySwitch);
// Connection events
SinricPro.onConnected(() => console.log('Connected!'));
SinricPro.onDisconnected(() => console.log('Disconnected!'));
// Initialize SDK
await SinricPro.begin(config);
// Send events when state changes locally
setTimeout(async () => {
await mySwitch.sendPowerStateEvent(true);
}, 5000);
}
main().catch(console.error);ts-node app.ts- "Alexa, turn on Switch"
- "OK Google, turn off Switch"
Devices also answer signed commands over the local network, so they keep working
while SinricPro is unreachable. It is on by default and needs no application
changes: a LAN request runs the same callbacks as a cloud request. UDP listener on port 3333, joined to multicast group 224.9.9.9 and answering unicast on the same port. Replies go back to the peer that sent the request, never to the cloud websocket.
The mDNS announcement uses bonjour-service, installed with the SDK:
npm install sinricpro- Check credentials - Ensure APP_KEY and APP_SECRET are correct
- Check device ID - Verify the device ID is exactly 24 hexadecimal characters
- Check network - Ensure you have internet connectivity
- Enable debug logging -
import { SinricProSdkLogger, LogLevel } from 'sinricpro';
SinricProSdkLogger.setLevel(LogLevel.DEBUG); // DEBUG, INFO, WARN, ERROR, NONE- No device found on the LAN - check the log for
Local control listening on UDP 3333. A failed multicast join leaves nothing listening, and the log line says so. - No mDNS record - install the extra:
pip install sinricpro[mdns]. - Discovery answers on the wrong network - set
local_control_interfaceto the LAN address of the host. - Android clients need a
WifiManager.MulticastLock, and iOS clients need_sinricpro._udplisted inNSBonjourServices, or discovery returns nothing.
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Submit a pull request
This project is licensed under CC-BY-SA-4.0.
- Website: sinric.pro
- Documentation: help.sinric.pro
- GitHub: github.com/sinricpro
- Support: community.sinric.pro
- Issues: GitHub Issues
- Community: SinricPro Community
- Email: support@sinric.pro
Made with ❤️ by the SinricPro team