// Примеры wb-rules для ОДНОЙ выбранной станции. // // Как использовать: // 1) подставь IP станции (или station_id) в переменную STATION; // 2) скопируй файл в /etc/wb-rules/; // 3) перезапусти сервис wb-rules. var API_BASE = "http://127.0.0.1:9124"; var STATION = "PUT_STATION_IP_HERE"; function enc(v) { return encodeURIComponent(String(v === undefined || v === null ? "" : v)); } function apiExec(query, cb) { runShellCommand("curl -s '" + API_BASE + "/api/exec?" + query + "'", { captureOutput: true, exitCallback: function(exitCode, output) { if (exitCode !== 0) return cb({ ok: false, error: "curl_failed" }); try { cb(JSON.parse(output || "{}")); } catch (e) { cb({ ok: false, error: "bad_json", raw: output }); } } }); } function player(cmd) { apiExec("action=player&station=" + enc(STATION) + "&cmd=" + enc(cmd), function() {}); } function tts(text, volume) { apiExec( "action=tts&station=" + enc(STATION) + "&text=" + enc(text) + "&volume=" + enc(volume), function() {} ); } function command(text) { apiExec("action=command&station=" + enc(STATION) + "&text=" + enc(text), function() {}); } function audioTts(text, audioId, volume, voice, effect) { var v = String(voice || ""); var e = String(effect || ""); apiExec( "action=tts&station=" + enc(STATION) + "&text=" + enc(text) + "&tts_audio=" + enc(audioId) + "&tts_voice=" + enc(v) + "&tts_effect=" + enc(e) + "&volume=" + enc(volume), function() {} ); } defineVirtualDevice("alice_one_station_examples", { title: "Алиса: одна станция", cells: { play_btn: { type: "pushbutton", value: false, title: "Play" }, stop_btn: { type: "pushbutton", value: false, title: "Stop" }, next_btn: { type: "pushbutton", value: false, title: "Next" }, prev_btn: { type: "pushbutton", value: false, title: "Prev" }, tts_btn: { type: "pushbutton", value: false, title: "TTS" }, command_btn: { type: "pushbutton", value: false, title: "Command" }, audio_tts_btn:{ type: "pushbutton", value: false, title: "Audio + TTS" } } }); // Правило 1: команда player=play defineRule("alice_example_play", { whenChanged: "alice_one_station_examples/play_btn", then: function(v) { if (v) player("play"); } }); // Правило 2: команда player=stop defineRule("alice_example_stop", { whenChanged: "alice_one_station_examples/stop_btn", then: function(v) { if (v) player("stop"); } }); // Правило 3: команда player=next defineRule("alice_example_next", { whenChanged: "alice_one_station_examples/next_btn", then: function(v) { if (v) player("next"); } }); // Правило 4: команда player=prev defineRule("alice_example_prev", { whenChanged: "alice_one_station_examples/prev_btn", then: function(v) { if (v) player("prev"); } }); // Правило 5: обычный TTS-текст с громкостью 35 defineRule("alice_example_tts", { whenChanged: "alice_one_station_examples/tts_btn", then: function(v) { if (!v) return; tts("Тестовое голосовое сообщение", 35); } }); // Правило 6: обычная голосовая команда станции defineRule("alice_example_command", { whenChanged: "alice_one_station_examples/command_btn", then: function(v) { if (!v) return; command("включи радио"); } }); // Правило 7: звук + TTS в одном запросе (параметр tts_audio) defineRule("alice_example_audio_tts", { whenChanged: "alice_one_station_examples/audio_tts_btn", then: function(v) { if (!v) return; // Тот же звук и голос, что в правиле "Дверной звонок" из `Новая папка/rules.json`. audioTts("Кто-то ждёт у входной двери", "alice-sounds-things-bell-1.opus", 70, "anton_samokhvalov", ""); } });