mirror of
https://github.com/10h30/sinric-n8n-bridge.git
synced 2026-05-12 15:21:23 +09:00
Initialize sinric-n8n-bridge with Docker setup, environment configuration, and core functionality
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
APP_KEY=
|
||||||
|
APP_SECRET=
|
||||||
|
DEVICE_ID=
|
||||||
|
|
||||||
|
N8N_WEBHOOK_URL=
|
||||||
|
N8N_TOKEN=
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
.env
|
||||||
|
node_modules
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
FROM node:22-alpine
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json .
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY index.js .
|
||||||
|
|
||||||
|
CMD ["node", "index.js"]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
A lightweight Dockerized bridge that listens to Sinric Pro switch events and forwards them to n8n webhooks for home automation workflows.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
services:
|
||||||
|
sinric-bridge:
|
||||||
|
build: .
|
||||||
|
container_name: sinric-bridge
|
||||||
|
restart: always
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
const axios = require("axios");
|
||||||
|
const { SinricPro, SinricProSwitch } = require("sinricpro");
|
||||||
|
|
||||||
|
const APP_KEY = process.env.APP_KEY;
|
||||||
|
const APP_SECRET = process.env.APP_SECRET;
|
||||||
|
const DEVICE_ID = process.env.DEVICE_ID;
|
||||||
|
|
||||||
|
const N8N_WEBHOOK_URL = process.env.N8N_WEBHOOK_URL;
|
||||||
|
const N8N_TOKEN = process.env.N8N_TOKEN;
|
||||||
|
|
||||||
|
async function callN8n(action) {
|
||||||
|
try {
|
||||||
|
const res = await axios.post(
|
||||||
|
N8N_WEBHOOK_URL,
|
||||||
|
{ action },
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"X-Token": N8N_TOKEN,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log(`[n8n] ${action} -> ${res.status}`);
|
||||||
|
} catch (err) {
|
||||||
|
console.error("[n8n error]", err.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const device = new SinricProSwitch(DEVICE_ID);
|
||||||
|
|
||||||
|
device.onPowerState(async (state) => {
|
||||||
|
const action = state ? "on" : "off";
|
||||||
|
|
||||||
|
console.log(`[sinric] ${action.toUpperCase()}`);
|
||||||
|
|
||||||
|
await callN8n(action);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const sinric = new SinricPro();
|
||||||
|
|
||||||
|
sinric.add(device);
|
||||||
|
|
||||||
|
sinric.onConnected(() => {
|
||||||
|
console.log("[bridge] Connected");
|
||||||
|
});
|
||||||
|
|
||||||
|
sinric.onDisconnected(() => {
|
||||||
|
console.log("[bridge] Disconnected");
|
||||||
|
});
|
||||||
|
|
||||||
|
sinric.begin({
|
||||||
|
appKey: APP_KEY,
|
||||||
|
appSecret: APP_SECRET,
|
||||||
|
server: "ws.sinric.pro",
|
||||||
|
port: 443
|
||||||
|
});
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "sinric-bridge",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.7.0",
|
||||||
|
"sinricpro": "^5.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user