Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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
    641

  • 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

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
25 Beiträge 5 Kommentatoren 6.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    spectrekr
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      spectrekr
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

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

        1 Antwort Letzte Antwort
        0
        • V Offline
          V Offline
          vtec
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            spectrekr
            schrieb am zuletzt editiert von
            #5

            @vtec:

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

            @spectrekr:

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

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

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              spectrekr
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • V Offline
                V Offline
                vtec
                schrieb am zuletzt editiert von
                #7

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

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

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  spectrekr
                  schrieb am zuletzt editiert von
                  #8

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

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

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

                  1 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      spectrekr
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • E Offline
                        E Offline
                        electric69
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • V Offline
                          V Offline
                          vtec
                          schrieb am zuletzt editiert von
                          #12

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

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

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

                          var volume = 100;

                          if(hour == 23) volume = 80;

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

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

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            spectrekr
                            schrieb am zuletzt editiert von
                            #13

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

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

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

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

                            1 Antwort Letzte Antwort
                            0
                            • V Offline
                              V Offline
                              vtec
                              schrieb am zuletzt editiert von
                              #14

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

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

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

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

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

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                spectrekr
                                schrieb am zuletzt editiert von
                                #15

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

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

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

                                1 Antwort Letzte Antwort
                                0
                                • I Offline
                                  I Offline
                                  instalator
                                  schrieb am zuletzt editiert von
                                  #16

                                  @spectrekr:

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

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

                                  http://blog.instalator.ru/

                                  1 Antwort Letzte Antwort
                                  0
                                  • V Offline
                                    V Offline
                                    vtec
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    0
                                    • V Offline
                                      V Offline
                                      vtec
                                      schrieb am zuletzt editiert von
                                      #18

                                      @spectrekr:

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

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        spectrekr
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • V Offline
                                          V Offline
                                          vtec
                                          schrieb am zuletzt editiert von
                                          #20

                                          @spectrekr:

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

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

                                          @spectrekr:

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

                                          1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          327

                                          Online

                                          32.7k

                                          Benutzer

                                          82.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe