Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. ICal + Sayit

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    680

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

ICal + Sayit

Scheduled Pinned Locked Moved ioBroker скрипты
25 Posts 5 Posters 6.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    spectrekr
    wrote on last edited by
    #1

    Кто нибудь уже дружил эти два драйвера? Есла да, поделитесь, пожалуйста, скриптом, думаю будет полезен и другим начинающим.

    Конечный вариант.

     `schedule("*/10 8-22 * * *", function () {
        //Получаем данные с iCal
        var i_Cal_Value = getState('ical.0.data.table').val;
        var i_Cal_Count = getState('ical.0.data.count').val;
        var date = new Date();
        var hour = date.getHours();
        //Время в которое будет проигрываться сообытие на весь день
        var hour_control = '9:00';
        var min = (date.getMinutes()<10?'0':'') + date.getMinutes();
        var time_now = hour + ':' + min;
        //Регулярное выражение, чтоб события из строки преобразовать в массив
        var reg = /\s* \s*/
    
        //проверям есть ли события на сегодня
        if ( i_Cal_Count > 0){
            for (var i = 0; i < i_Cal_Count; i++) {
                var date_event = i_Cal_Value[i].date;
                var time = date_event.split(reg);
                //Воспроизведение события на целый день
                if((date_event == 'Сегодня  ') && (time_now == hour_control)){
                    setState('sayit.0.tts.text', i_Cal_Value[i].event);
                }
                //Воспроизведение события по времени наступления
                if(time[1] == time_now){
                    setState('sayit.0.tts.text', i_Cal_Value[i].event);
                }
            }
        }
    });` [/i][/i][/i]
    
    1 Reply Last reply
    0
    • S Offline
      S Offline
      spectrekr
      wrote on last edited by
      #2

      Накропал что-то, даже вроде работает. За наводку, и часть кода спасибо Bluefox.

      `createState('tempOutside','');
      
      schedule("0/10 7-22 * * *", function () {
          var i_Cal_Value = getState('ical.0.data.table').val;
          var date = new Date();
          var hour = date.getHours();
          var min = (date.getMinutes()<10?'0':'') + date.getMinutes();
          var date_now = 'Сегодня '+ hour + ':' + min;
          var volume = getState('sayit.0.tts.volume').val;
      
          for (var i = 0; i < i_Cal_Value.length; i++) {
            var date_event = i_Cal_Value[i].date;
            if(date_event == date_now){
               setState('sayit.0.tts.text',volume+';'+ i_Cal_Value[i].event);
              }
              else {
                log('Событие '+ i_Cal_Value[i].event + ' пропущено');
              }
           }
      });` 
      Правда вот не знаю как будет работать, если событие продолжительное. Не проверял.[/i][/i][/i]
      
      1 Reply Last reply
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        wrote on last edited by
        #3

        События, которые длятся дольше 20 мин будут произносится каждые 10 минут пока они длятся.

        1 Reply Last reply
        0
        • V Offline
          V Offline
          vtec
          wrote on last edited by
          #4

          @spectrekr:

          if(date_event == date_now) `
          А зачем вообще такое сравнение?

          Вот я создал событие на весь день, смысл время указывать для дня рождения (соответственно время нету):

          [{"date":"Сегодня  ","event":"Тестовое день рождение","_class":"ical_Дни рождения ical_today","_date":"2015-07-27T18:00:00.000Z","_end":"2015-07-27T18:00:00.000Z","_IDID":"8jeciVb6yandex.ru","_allDay":false,"_rule":" rrule ","_calName":"Дни рождения"}]
          

          Есть вот такая переменная ical.0.data.count, может от нее отталкиваться? То есть если ical.0.data.count > 0 то отрабатываем?

          @spectrekr:

          log('Событие '+ i_Cal_Value__.event + ' пропущено');__ Не понял? Как пропущено, точнее не понял как такое событие может получится? Если только в моем примере выше. `

          1 Reply Last reply
          0
          • S Offline
            S Offline
            spectrekr
            wrote on last edited by
            #5

            @vtec:

            Есть вот такая переменная ical.0.data.count, может от нее отталкиваться? То есть если ical.0.data.count > 0 то отрабатываем?

            @spectrekr:

            log('Событие '+ i_Cal_Value__.event + ' пропущено');__ _Не понял? Как пропущено, точнее не понял как такое событие может получится? Если только в моем примере выше. _Этот лог делал для отладки, его можно исключить, про то что будет повторятся каждый 10 минут, потом уже догадался. Сейчас попробую посмотреть в сторону количества событий на день.

            Bluefox тот код что вы предложили, в соседней ветке, отрабатывает при каждом обновлении iCal, вот от него оттолкнулся. javaScript, честно, вижу вообще первый раз.__

            1 Reply Last reply
            0
            • S Offline
              S Offline
              spectrekr
              wrote on last edited by
              #6

              Доработал по замечаниям. Вторая версия скрипта)) У кого есть замечания и идеи по оптимизации или улучшению, буду благодарен.

              ! ```
              createState('tempOutside',''); ! schedule("*/10 8-22 * * *", function () { //Получаем данные с iCal var i_Cal_Value = getState('ical.0.data.table').val; var i_Cal_Count = getState('ical.0.data.count').val; var date = new Date(); var hour = date.getHours(); //Время в которое будет проигрываться сообытие на весь день var hour_control = '09:00'; var min = (date.getMinutes()<10?'0':'') + date.getMinutes(); var time_now = hour + ':' + min; //Получаем громкость синтезатора речи var volume = getState('sayit.0.tts.volume').val; var reg = /\s* \s*/ ! //проверям есть ли события на сегодня if ( i_Cal_Count > 0){ for (var i = 0; i < i_Cal_Count; i++) { var date_event = i_Cal_Value[i].date; var time = date_event.split(reg); //Воспроизведение события на целый день if((date_event == 'Сегодня ') && (time_now == hour_control)){ setState('sayit.0.tts.text',volume+';'+ i_Cal_Value[i].event); } //Воспроизведение события по времени наступления if(time[1] == time_now){ setState('sayit.0.tts.text',volume+';'+ i_Cal_Value[i].event); } } } });
              ! ~~[b]~~Bluefox[/b] подскажите пожалуйста в строке ~~[code]~~var volume = getState('sayit.0.tts.volume').val;[/code] мы громкость получаем в тесктовом виде, а можно ли уменьшить ее методом вычитания или надо преобразовывать в число, а потом обратно в текст?[/i][/i][/i]

              1 Reply Last reply
              0
              • V Offline
                V Offline
                vtec
                wrote on last edited by
                #7

                То есть у вас в девять часов проговаривает, если есть событие?

                На будущее, комментируйте код как можно больше, тогда легче соображать :)

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  spectrekr
                  wrote on last edited by
                  #8

                  В 9 часов проговаривается событие на целый день, а остальные события по времени наступления.

                  Коментарии мое самое слабое место :D

                  Отредоктировал последнее сообщение с коментариями.

                  1 Reply Last reply
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    wrote on last edited by
                    #9

                    @spectrekr:

                    Bluefox подскажите пожалуйста в строкеvar volume = getState('sayit.0.tts.volume').val;мы громкость получаем в тесктовом виде, а можно ли уменьшить ее методом вычитания или надо преобразовывать в число, а потом обратно в текст? `
                    Что то я не пойму, что делает 0/10 в "0/10 8-22 * * *" ? Либо */10, либо 0-59/10.

                    В Javascript отнимать, умножать и делить можно и строку. Она будет автоматом сконвертирована в число, а вот прибавлять нельзя.

                    console.log("80" - 10) => 70
                    console.log("80" + 10) => "8010"
                    

                    Поэтому я всегда при получении значения преобразую его с parseInt(x, 10);

                    var volume = parseInt(getState('sayit.0.tts.volume').val, 10);
                    if (isNaN(volume)) volume = 100;
                    
                    
                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      spectrekr
                      wrote on last edited by
                      #10

                      @Bluefox:

                      @spectrekr:

                      Что то я не пойму, что делает 0/10 в "0/10 8-22 * * *" ? Либо */10, либо 0-59/10.
                      Эту строчку взял со скрипта проговаривания времени, не стал изменять.

                      Поправил в скрипте :-)

                      По громкости, в объектах значение присутствует, а вот в настройках где регулировать громкость не нашел. Или это берется уровень системной громкости?

                      Правильно понял, это будет работать?

                          if(hour == 22 ) volume = volume - 10;
                          if((hour == 7) && (hour == 8)) volume = volume - 30;
                      
                      
                      1 Reply Last reply
                      0
                      • E Offline
                        E Offline
                        electric69
                        wrote on last edited by
                        #11

                        @spectrekr:

                        По громкости, в объектах значение присутствует, а вот в настройках где регулировать громкость не нашел. Или это берется уровень системной громкости?

                        Правильно понял, это будет работать?

                            if(hour == 22 ) volume = volume - 10;
                            if((hour == 7) && (hour == 8)) volume = volume - 30;
                        
                        ```` `  
                        

                        А зачем устанавливаете относительную громкость?

                        Не проще ли абсолютную?

                        Вот http://forum.iobroker.org/viewtopic.php?f=15&t=265 публиковал скрипт для CCU.IO, думаю оттуда можно взять работу с громкостью, принцип сам, функции чуть другие в ioBroker.

                        1 Reply Last reply
                        0
                        • V Offline
                          V Offline
                          vtec
                          wrote on last edited by
                          #12

                          Тоже не понимаю извращения с громкостью.

                          Делай везде 100, а где нужно уменьшай до например 80

                          В моем же скрипте про время вот как:

                          var volume = 100;

                          if(hour == 23) volume = 80;

                          setState (idSayIt, volume+';Привет);

                          Зачем чего то там вычетать и складывать

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            spectrekr
                            wrote on last edited by
                            #13

                            Извращение потому что уже 2 скрипта которые что-то проговаривают, может появится и еще, со временем. Хотел соответственно чтоб громкость была у вех одна, и уже регулировать только ее одну.

                            vtec вот именно что в вашем скрипте конкретно прописано, т.е. после смены колонок мне бы надо было регулировать параметры громкости во всех скриптах, где указана конкретная цифра. А вычитал, потому что не знал как устанавливать значения, только учусь :-) и пытаюсь разобраться.

                            А благодаря наводки electric69 накропал скрипт, который будет менять громкость в зависимости от времени, потом можно будет расширить функционал, например на присутствие в доме.

                            Может это и полное извращение, но мне удобней чтоб все настройки были в минимальном количестве мест.

                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              vtec
                              wrote on last edited by
                              #14

                              Я не увидел, где ты громкость выставляешь обратно в 100%.

                              Представь 1-ый скрипт установил громкость в 80%, а через 10 минут отработает скрипт по новой, то твоя громкость будет составлять уже не 80%, а 60%. Т.к. переменная сама в 100% не возвращается.

                              Может я конечно чего то не знаю :)

                              Если ты заменишь колонку, то ты должен будешь выставить громкость на колонке, потому что громкость здесь измеряется в процентах, а не в децибелах. А давай смодулируем ситуацию, что у тебя не одна зона а пять, что ты будешь делать с громкостью?

                              Мы все здесь учимся, я ни в коем случае не назжаю, а пытаюсь понять и сделать скрипт как можно оптимальней и функциональней. Если окажется что твой вариант более гибкий, то я готов свой скрипт переписать ;)

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                spectrekr
                                wrote on last edited by
                                #15

                                В данном скрипте вообще переменная просто берется из системы. В скрипте с временем, там строка определяющая основную громкость стоит первой, а потом уже по наступлению времени изменяет только на данное время, при следующем запуске скрипта будет начальная громкость. Опять же в этих обоих скриптах, уже в данный момент, параметры громкости только берутся из системной переменной. Убрал я это уменьшение :-) Оставил уменьшение в отдельном скрипте, которое может регулировать и зонально и по времени, и вообще по присутствию в комнате, дабы не воспроизводил там где отсутствуют люди.

                                Про колонку, настроил и спрятал далеко. Но вот моделируем ситуацию что рядом с домом\квартирой устроили ремонт и уровень постороннего шума поднялся, надо будет лезть и добавлять громкость на колонке. А по окончанию работ - убирать.

                                Опять же, у меня нет системы сонос, может она по другому работает и можно более гибко сделать.

                                1 Reply Last reply
                                0
                                • I Offline
                                  I Offline
                                  instalator
                                  wrote on last edited by
                                  #16

                                  @spectrekr:

                                  …. и вообще по присутствию в комнате, дабы не воспроизводил там где отсутствуют люди. `
                                  А как вы определяете присутствие?

                                  Высокий уровень Децибел вреден для здоровья!

                                  http://blog.instalator.ru/

                                  1 Reply Last reply
                                  0
                                  • V Offline
                                    V Offline
                                    vtec
                                    wrote on last edited by
                                    #17

                                    @spectrekr:

                                    В данном скрипте вообще переменная просто берется из системы. `
                                    Если вы про это: var volume = getState('sayit.0.tts.volume').val;

                                    То все выше изложенное как раз про это. Вы взяли значение из переменной volume, потом изменяете (например -20) и сохраняете обратно. Если скрипт повторно отработает, то он снова возьмет из переменной sayit.0.tts.volume значение. А оно там будет уже не 100%, а 80% и соответственно еще раз уменьшится громкость на -20, но уже от 80%.

                                    Не знаю понятно ли объяснил :)

                                    @spectrekr:

                                    Убрал я это уменьшение :-) Оставил уменьшение в отдельном скрипте, которое может регулировать и зонально и по времени, и вообще по присутствию в комнате, дабы не воспроизводил там где отсутствуют люди. `
                                    А вот это хорошая идея, вынести управление громкостью в отдельный скрипт и пусть он по шедулеру устанавливает громкость…. хм надо обдумать.

                                    @spectrekr:

                                    Про колонку, настроил и спрятал далеко. Но вот моделируем ситуацию что рядом с домом\квартирой устроили ремонт и уровень постороннего шума поднялся, надо будет лезть и добавлять громкость на колонке. А по окончанию работ - убирать.

                                    Опять же, у меня нет системы сонос, может она по другому работает и можно более гибко сделать. `
                                    У меня была такая ситуация, там где находилась колонка, я ее все равно слышал. А вот если уходишь например на кухню то там уже не слышно, но это уже другая история про мультирум :)
                                    4489_erstes_skript_mit_blockly.pdf

                                    1 Reply Last reply
                                    0
                                    • V Offline
                                      V Offline
                                      vtec
                                      wrote on last edited by
                                      #18

                                      @spectrekr:

                                      дабы не воспроизводил там где отсутствуют люди. `
                                      У вас есть многозонность? Как вы регулируете громкость в разных комнатах?

                                      1 Reply Last reply
                                      0
                                      • S Offline
                                        S Offline
                                        spectrekr
                                        wrote on last edited by
                                        #19

                                        @instalator:

                                        @spectrekr:

                                        …. и вообще по присутствию в комнате, дабы не воспроизводил там где отсутствуют люди. А как вы определяете присутствие?
                                        Еще не делал, но, например, датчик движения.
                                        @vtec:

                                        Если вы про это: var volume = getState('sayit.0.tts.volume').val;

                                        То все выше изложенное как раз про это. Вы взяли значение из переменной volume, потом изменяете (например -20) и сохраняете обратно. Если скрипт повторно отработает, то он снова возьмет из переменной sayit.0.tts.volume значение. А оно там будет уже не 100%, а 80% и соответственно еще раз уменьшится громкость на -20, но уже от 80%. `
                                        Так он только берет и уменьшает на данное воспроизведение, объект он новое значение не записывает, для этого надо отдельно setState делать, что уже и выполняется у меня в отдельном скрипте. Так даже удобней получилось.

                                        @vtec:

                                        А вот это хорошая идея, вынести управление громкостью в отдельный скрипт и пусть он по шедулеру делает громкость…. хм надо обдумать. `
                                        Могу выложить свою вариацию. Уже работает :-)

                                        @vtec:

                                        У меня была такая ситуация, там где находилась колонка, я ее все равно слышал. А вот если уходишь например на кухню то там уже не слышно, но это уже другая история про мультирум :) `
                                        Мультирум чуть другая ситуация, комната бывает большой. И колонку не всегда получается в центр комнаты разместить, чтоб равномерно по комнате было. По-этому, в некоторой ситуации, может быть и не слышно.

                                        @vtec:

                                        У вас есть многозонность? Как вы регулируете громкость в разных комнатах? `
                                        Это пока в задумке, но думаю Bluefox с коллегами не зря сделал категории(комнаты) думаю от них можно будет оттолкнутся.

                                        1 Reply Last reply
                                        0
                                        • V Offline
                                          V Offline
                                          vtec
                                          wrote on last edited by
                                          #20

                                          @spectrekr:

                                          Так он только берет и уменьшает на данное воспроизведение, объект он новое значение не записывает, для этого надо отдельно setState делать, что уже и выполняется у меня в отдельном скрипте. Так даже удобней получилось. `
                                          Хм… понял, попробую проверить на самом деле так или нет.
                                          @spectrekr:

                                          Могу выложить свою вариацию. Уже работает :-) `
                                          Давайте конечно же. Если громкостью будет удбней из отдельного скрипта управлять, то в скрипте про время уберу тоже.

                                          @spectrekr:

                                          Это пока в задумке, но думаю Bluefox с коллегами не зря сделал категории(комнаты) думаю от них можно будет оттолкнутся. `
                                          А вот этого пока нет :)

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          261

                                          Online

                                          32.7k

                                          Users

                                          82.6k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe