background.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // background.js
  2. const numberToChinese = number => {
  3. const numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  4. const [integer, fraction] = number.toString().split('.');
  5. // 整数部分转换
  6. let result = integer.split('').map(num => numbers[parseInt(num, 10)]).join('');
  7. // 小数部分转换
  8. if (fraction) {
  9. result += '点' + fraction.split('').map(num => numbers[parseInt(num, 10)]).join('');
  10. }
  11. return result;
  12. };
  13. // 英文单位到中文单位的映射
  14. const unitMap = {
  15. "m": "米",
  16. "kg": "千克",
  17. "s": "秒",
  18. "m/s": "米每秒",
  19. "kwh": "千瓦时",
  20. "kw": "千瓦",
  21. "kWh": "千瓦时",
  22. };
  23. const translateSentence = sentence => {
  24. // 匹配数字和可选的单位
  25. const regex = /(\d+(\.\d+)?)(kwh|kwH|kg|kw|m\/s|m)?/g;
  26. return sentence.replace(regex, (match, number, fraction, unit) => {
  27. const chineseNumber = number;
  28. // const chineseNumber = numberToChinese(number); // 转换数字
  29. const chineseUnit = unit ? (unitMap[unit.toLowerCase()] || unit) : ''; // 转换单位
  30. return chineseNumber + chineseUnit;
  31. });
  32. };
  33. // const wsUrl = 'ws://10.138.3.85:21086/ws?siteId=167037857943322624';
  34. const wsUrl = 'ws://218.13.91.150:21086/ws?siteId=167037857943322624';
  35. const initWebSocket = () => {
  36. const ws = new WebSocket(wsUrl);
  37. ws.onopen = () => {
  38. console.log('WebSocket connection established');
  39. };
  40. ws.onmessage = event => {
  41. let message = event.data;
  42. message = translateSentence(message);
  43. console.log('Received message:', message);
  44. // 假设接收到的报警信息是一个简单的文本字符串
  45. // 根据你的实际情况,你可能需要解析JSON或进行其他处理
  46. if (message.includes('报警')) { // 根据实际情况判断是否为报警信息
  47. // 判断优先级
  48. // 判断时间
  49. playTts(message);
  50. }
  51. };
  52. ws.onerror = error => {
  53. console.log('WebSocket error:', error);
  54. };
  55. ws.onclose = event => {
  56. console.log('WebSocket connection closed', event.code, event.reason);
  57. // 可以在这里重新连接
  58. setTimeout(initWebSocket, 1000); // 延迟重连
  59. };
  60. };
  61. chrome.tts.getVoices(function (voices) {
  62. const voiceNames = [];
  63. for (let i = 0; i < voices.length; i++) {
  64. if (voices[i].lang === 'zh-CN') {
  65. console.log('Voice ' + i + ':');
  66. console.log(' name: ' + voices[i].voiceName);
  67. console.log(' lang: ' + voices[i].lang);
  68. console.log(' extension id: ' + voices[i].extensionId || 'n/a');
  69. voiceNames.push(voices[i].voiceName);
  70. }
  71. }
  72. console.log(voiceNames);
  73. chrome.storage.sync.set({'voiceNames': voiceNames});
  74. });
  75. const playTts = (message) => {
  76. chrome.storage.sync.get(['voiceName', 'voiceVolume'], (obj) => {
  77. let volume = obj.voiceVolume;
  78. let voiceName = obj.voiceName;
  79. if (volume === undefined) {
  80. volume = 100;
  81. }
  82. if (voiceName === undefined) {
  83. voiceName = '';
  84. }
  85. console.log("volume", volume);
  86. console.log("voice name", voiceName);
  87. chrome.tts.speak(message, {
  88. 'lang': 'zh-CN',
  89. 'rate': 1.0,
  90. 'voiceName': voiceName,
  91. 'volume': volume / 100
  92. });
  93. });
  94. };
  95. // 初始化WebSocket连接
  96. initWebSocket();
  97. const sentence = "我昨天买了123456789.321kwh苹果和5个橙子,还有0.233445m/s的绳子。";
  98. const translatedSentence = translateSentence(sentence);
  99. console.log(translatedSentence);
  100. // playTts(sentence)
  101. playTts(translatedSentence)