Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • 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

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    320

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

ICal + Sayit

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
25 Beiträge 5 Kommentatoren 5.6k 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
    #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
                                        • S Offline
                                          S Offline
                                          spectrekr
                                          schrieb am zuletzt editiert von
                                          #21

                                          @vtec:

                                          @spectrekr:

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

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          767

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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