Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. tempestas

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    T
    • Profile
    • Following 0
    • Followers 1
    • Topics 66
    • Posts 1251
    • Best 18
    • Groups 3

    tempestas

    @tempestas

    18
    Reputation
    215
    Profile views
    1251
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    tempestas Follow
    Pro Starter Most Active

    Best posts made by tempestas

    • RE: ich such was neues für die Wand.. inspiration bitte

      @ahfreezer

      Ich habe ein langes USB Kabel ganz flach unter dem Putz eingezogen. Geht problemlos. Steckdose ist ca 3.5 Meter entfernt.

      Dann noch in fully weg von der Bewegungserkennung hin zu einem Homematic BWM, der den Fully schaltet und das Tablet hält ca 3x so lange ohne laden.

      posted in Praktische Anwendungen (Showcase)
      T
      tempestas
    • RE: SayIt mp3-Pfad im JavaScript

      Ziemlich spät aber vielleicht hilft es dir ja:

      nicht mp3 nehmen sondern text. Klingt komisch, steht aber irgendwo in einem alten Posting von Bluefox selbst.

      setState("sayit.0.tts.text", '/opt/iobroker/iobroker-data/files/sayit.0/tts.userfiles/gong.mp3');

      posted in Skripten / Logik
      T
      tempestas
    • RE: Ist Javascript eigentlich Javascript?

      @AlCalzone

      Da ich so ein Halbwissender bin gerne die Bitte, dass falls du über was halbgares von mir stolperst, lass es mich gerne wissen. Man will ja lernen ☝ ☺

      posted in JavaScript
      T
      tempestas
    • RE: Alarmanlage darstellen

      Es gibt hier sehr viele Alarmanlagenskripte.

      Anbei meins, das folgendes kann/tut:

      1. Alarmanlage an / aus / automatik bei Abwesenheit

      2. Countdown bei Aktivierung (nicht bei Abwesenheit)

      3. Hüllschutz / Vollschutz

      4. Stummer Alarm / voller Alarm

      5. Telegram Nachricht

      6. Einbeziehung meiner Kamera im Wohnbereich

      7. Überprüfung der Fenster bei Aktivierung, Meldung via Telegram, ob alles geschlossen ist bzw welche Fenster noch offen sind

      8. Log mit Alarmmeldungen in VIS angezeigt

      9. Abschalten via Pineingabe

      posted in Visualisierung
      T
      tempestas
    • RE: Benötige Hilfe beim Fully Kiosk Browser

      Android hat einen internen Scaling Faktor von 1,5.

      D.h. die echte Auflösung für das 10.1 ist 1280 * 800

      posted in ioBroker Allgemein
      T
      tempestas
    • RE: Script für einen SpeedTest über speedtest.net

      @Elektroniker86 said in Script für einen SpeedTest über speedtest.net:

      Hallo, ich häng mich hier mal dran.

      Hab ebenfalls das selbe Problem, ich habe das hier installiert:

      npm install --global speed-test

      Meine npm Version ist die 6.4.1 auf einem Tinkerboard S. Übrigens, hat er mir vorgeschlagen ein Update auf npm 6.9.0 zu machen, das habe ich mich allerdings nicht getraut.

      Wenn ich den den Befehl in putty ausführe (speed-test --json --verbose) sieht es aber gut aus. An was könnte das liegen?

      Hier noch ein Screenshot

      Unbenannt.png

      Unbenannt2.png

      Du musst exec aktivieren in deinen JS Adapter Einstellungen.

      posted in Skripten / Logik
      T
      tempestas
    • RE: Metro Tile - String: Größe Feld / Scrollbar

      scrollen geht mit "overflow x" bzw "y" in den widget Einstellungen.

      posted in Visualisierung
      T
      tempestas
    • RE: [gelöst] in SayIt Wetter und Geburtstagsscript -> Müllkalender mit einbinden

      @Johann001

      Hi,

      dieses Skript nutze ich (ist wohl auch das, aus dem dein Auszug kommt), um mir morgens das Wetter, Datum sowie die Termine des aktuellen oder nach Einstellung auch bis übermorgen einschließlich ansagen zu lassen.
      Danach wird ein Radiosender eingestellt, der nach Beendigung der Bewegung im Bad dann abgeschaltet wird.

      Gestartet wird das Ganze durch einen Bewegungsmelder und die Zeiten kann ich an meiner Vis für Wochenende / Feiertage / Ferien oder Arbeitstage separat einstellen. Das Ganze geht sicherlich sehr viel eleganter, war mein aller erstes Skript hier im Forum.


      02b32ad5-7c6a-4ae9-acfc-45ff7a06ea3a-grafik.png

      98dee977-db0c-42d5-8090-a68638f40c64-grafik.png

      /* ANSAGESKRIPT MIT DATUM, UHRZEIT, TEMPERATUR AKTUELL UND MAX SOWIE REGEN UND TERMINEN. TRIGGERBAR. OB HEUTE, HEUTE UND MORGEN ODER BIS EINSCHLIESSLICH UEBERMORGEN
      ORIGNARES SKRIPT FÜR TEMPERATUR UND DATUM PLUS UHRZEIT VON SKORPIL UND PIX, IOBROKER FORUM
      
      ERGAENZT UM AUSLESEN DER TERMINE AUS HTML ANSTATT AUS DATA OBJECT ZUR VERMEIDUNG DER OBJECT PROBLEMATIK (TERMINE WERDEN NICHT IMMER EINGELESEN)
      HTML TO PLAIN TEXT KONVERTIERUNG AUS STACKOVERFLOW FORUM; ALL CREDIT TO USER ELENDURWEN
      
      SUCHFUNKTION STACKOVERFLOW FORUM USER iammatthew2
      
      ZUSAMMENFUERHUNRG UND TRIGGER FUNKTION TEMPESTAS
      
      VERSION 0.4 STATUS 23. JANUAR 2018, Radiosenderauswahl via States / VIS sowie Terminauswahl via States/Vis eingebaut
      VERSION V.03 STATUS 5. OKTOBER 2017, auf Wunsch der GöGa Zeitplanung für Ferien, Feiertage und Wochenende aufgenommen
      VERSION V.02 STATUS 30. APRIL 2017
      
      DER ICAL MUSS "ERSETZE DATUM MIT WORTEN" AKTIVIERT HABEN
      
      */
      
      // EINSTELLUNGEN
      
      var debug = true;
      const force = false;
      
      // ##########################################################
      // ############### Zeitplanungs-States anlegen ##############
      // ##########################################################
      
      
      
      
      
      // Generelle Einstellungen
      
      createState('Ansage.Radiosender','1000 Oldies',  {               
         name: 'Einstellung Radiosender',
         type: 'string',
      });
      
      createState('Ansage.Terminvorschau',1, force,  {               
         name: 'Termine heute, morgen oder bis einschließlich übermorgen',
         type: 'Number',
         min:  '1',
         max:  '3',
         states: '1:heute;2:morgen;3:übermorgen',    
      });
      
      
      // IDs
      
      var idRadio = 'javascript.0.Ansage.Radiosender';   
      var idTerminvorschau = "javascript.0.Ansage.Terminvorschau"/*Termine heute, morgen oder bis einschließlich übermorgen*/;  
      var radio;
      
      // Wochenende bzw Ferien und Feiertage 
      
      createState('Ansage.Timing.Wochenende.Aktiv', false, {
       read: true, 
       write: true, 
       name: "Ansage am Wochenende aktiv oder aus?", 
       type: "boolean", 
       def: false
      });
      
      
      createState('Ansage.Timing.Wochenende.Start.Stunde',9, force, {               
         name: 'Startstunde Wochenende',
         type: 'number',
         min:  '0',
         max:  '23',
      });
      
      createState('Ansage.Timing.Wochenende.Start.Minute',30, force, {               
         name: 'Startminute Wochenende',
         type: 'number',
         min:  '0',
         max:  '59',
      });
      
      createState('Ansage.Timing.Wochenende.Start.MinuteString',30, force, {          // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen      
         name: 'Startminute Wochenende',
         type: 'string',
         min:  '0',
         max:  '59',
      });
      
      
      createState('Ansage.Timing.Wochenende.Ende.Stunde',11, force, {               
         name: 'Endstunde Wochenende',
         type: 'number',
         min:  '0',
         max:  '23',
      });
      
      createState('Ansage.Timing.Wochenende.Ende.Minute',30, force, {               
         name: 'Endminute Wochenende',
         type: 'number',
         min:  '00',
         max:  '59',
      });
      
      createState('Ansage.Timing.Wochenende.Ende.MinuteString',30, force, {           // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen       
         name: 'Endminute Wochenende',
         type: 'string',
         min:  '00',
         max:  '59',
      });
      
      
      
      // Arbeitstage
      
      createState('Ansage.Timing.Arbeitstag.Aktiv', false, {
       read: true, 
       write: true, 
       name: "Ansage am Arbeitstag aktiv oder aus?", 
       type: "boolean", 
       def: false
      });
      
      
      createState('Ansage.Timing.Arbeitstag.Start.Stunde',6, force, {               
         name: 'Startstunde Arbeitstag',
         type: 'number',
         min:  '0',
         max:  '23',
      });
      
      createState('Ansage.Timing.Arbeitstag.Start.Minute',30, force, {               
         name: 'Startminute Arbeitstag',
         type: 'number',
         min:  '0',
         max:  '59',
      });
      
      createState('Ansage.Timing.Arbeitstag.Start.MinuteString','30', force, {        // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen      
         name: 'Startminute Arbeitstag',
         type: 'string',
      });
      
      
      
      createState('Ansage.Timing.Arbeitstag.Ende.Stunde',9, force, {               
         name: 'Endstunde Arbeitstag',
         type: 'number',
         min:  '0',
         max:  '23',
      });
      
      createState('Ansage.Timing.Arbeitstag.Ende.Minute',0, force, {               
         name: 'Endminute Arbeitstag',
         type: 'number',
         min:  '0',
         max:  '59',
      });
      
      createState('Ansage.Timing.Arbeitstag.Ende.MinuteString','00', force, {               // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen    
         name: 'Endminute Arbeitstag',
         type: 'string',
      });
      
      
      
      
      // ###########################################################################
      // ### Functions zur Anpassung der Minuten Strings an die numerischen Werte ##
      // ###########################################################################
      
      var idWochenendeAktiv = 'javascript.0.Ansage.Timing.Wochenende.Aktiv';
      var idWochenendeMinStart = 'javascript.0.Ansage.Timing.Wochenende.Start.Minute' ;
      var idWochenendeStdStart = 'javascript.0.Ansage.Timing.Wochenende.Start.Stunde' ;
      var idWochenendeMinStartString = 'javascript.0.Ansage.Timing.Wochenende.Start.MinuteString';
      var idWochenendeMinEnd = 'javascript.0.Ansage.Timing.Wochenende.Ende.Minute';
      var idWochenendeStdEnd = 'javascript.0.Ansage.Timing.Wochenende.Ende.Stunde';
      var idWochenendeMinEndString = 'javascript.0.Ansage.Timing.Wochenende.Ende.MinuteString';
      
      var idArbeitAktiv = 'javascript.0.Ansage.Timing.Arbeitstag.Aktiv';
      var idArbeitMinStart = 'javascript.0.Ansage.Timing.Arbeitstag.Start.Minute' ;
      var idArbeitStdStart = 'javascript.0.Ansage.Timing.Arbeitstag.Start.Stunde' ;
      var idArbeitMinStartString = 'javascript.0.Ansage.Timing.Arbeitstag.Start.MinuteString';
      var idArbeitMinEnd = 'javascript.0.Ansage.Timing.Arbeitstag.Ende.Minute';
      var idArbeitStdEnd = 'javascript.0.Ansage.Timing.Arbeitstag.Ende.Stunde';
      var idArbeitMinEndString = 'javascript.0.Ansage.Timing.Arbeitstag.Ende.MinuteString';
      
      
      // Bei Änderung Minuten Startzeit am Wochenende
      on(idWochenendeMinStart, function() {
         var minuten = getState(idWochenendeMinStart).val;
         var minutenString = "";
                 if(minuten < 10) {
                     minutenString = '0' +minuten;
                     }
                 else minutenString = minuten.toString();
      
         setState(idWochenendeMinStartString, minutenString);
      
      });
      
      
      // Bei Änderung Minuten Endzeit am Wochenende
      on(idWochenendeMinEnd, function() {
         var minuten = getState(idWochenendeMinEnd).val;
         var minutenString = "";
                 if(minuten < 10) {
                     minutenString = '0' +minuten;
                     }
                 else minutenString = minuten.toString();
         
         setState(idWochenendeMinEndString, minutenString);
      
      });
      
      
      // Bei Änderung Minuten Startzeit am Arbeitstag
      on(idArbeitMinStart, function() {
         var minuten = getState(idArbeitMinStart).val;
         var minutenString = "";
                 if(minuten < 10) {
                     minutenString = '0' +minuten;
                     }
                 else minutenString = minuten.toString();
      
         setState(idArbeitMinStartString, minutenString);
      
      });
      
      
      // Bei Änderung Minuten Endzeit am Arbeitstag
      on(idArbeitMinEnd, function() {
         var minuten = getState(idArbeitMinEnd).val;
         var minutenString = "";
                 if(minuten < 10) {
                     minutenString = '0' +minuten;
                     }
                 else minutenString = minuten.toString();
         
         setState(idArbeitMinEndString, minutenString);
      
      });
      
      // Variablen 
      
      var WochenendeStart,
         WochenendeEnd,
         ArbeitstagStart,
         ArbeitstagEnde,
         ArbeitstagAktiv,
         WochenendeAktiv;
      
      // ##################################
      // ####### TRIGGER FÜR ANSAGE #######
      // ##################################
      
      
      createState('Ansage.Trigger', false, {
       read: true, 
       write: true, 
       name: "Trigger", 
       type: "boolean", 
       def: false
      });
      
      var stopit = null;
      var move = false;
      var idTrigger = 'javascript.0.Ansage.Trigger';                                  // damit nur einmal pro Tag ausgelöst wird    
      var zeitplan;
      var idMove = "hm-rpc.1.000915699602FD.1.MOTION";  // ID des Bewegungsmelders
      
      
      // **************************************************************
      // ************* Wechsel des Radiosenders ***********************
      // **************************************************************
      
      on({id: idRadio, change: "any"}, function(){
         checkRadio();
      });
      
      function checkRadio(){
        radio = getState(idRadio).val;                                              
        if(debug) log("Radiosender "+radio +" wurde eingestellt");
      }
      
      //**********************************************************************************************************************************
      // Festlegen, ob nur heute [1], heute und morgen [2] oder einschliesslich uebermorgen angesagt wird [3] --> wird via VIS festgelegt
      //**********************************************************************************************************************************
      
         
         
      var terminAnsage;
         
      on({id: idTerminvorschau, change: "ne"}, function(){
         checkTermine();
      });
      
      function checkTermine(){
        terminAnsage = parseInt(getState(idTerminvorschau).val);                                              
        if(debug) log("Terminvorschau wurde auf "+terminAnsage+" Tage eingestellt");
      }
      
      
      
      
      // ######################################################
      // ############# Function zur Ansage ####################
      // ######################################################
      
      on({id: idMove, val: true}, function() {
      
         zeitplan = getState("javascript.0.Zeitplanung.Tage.Modus").val;             // abholen Wert Arbeitstag (0) oder Ferien, Wochenende, Feiertag (1)
      
         ArbeitstagStart = getState(idArbeitStdStart).val.toString() + ':'+getState(idArbeitMinStartString).val;
         ArbeitstagEnde = getState(idArbeitStdEnd).val.toString() + ':'+getState(idArbeitMinEndString).val;
         ArbeitstagAktiv = getState(idArbeitAktiv).val;
         
         WochenendeStart = getState(idWochenendeStdStart).val.toString() + ':'+getState(idWochenendeMinStartString).val;
         WochenendeEnd = getState(idWochenendeStdEnd).val.toString() + ':'+getState(idWochenendeMinEndString).val;    
         WochenendeAktiv = getState(idWochenendeAktiv).val;    
         
      
         switch(zeitplan) {
             case 0:                                                                 // case 0: Arbeitstag
                 if(!move && ArbeitstagAktiv && compareTime(ArbeitstagStart, ArbeitstagEnde, 'between')) {
                 move = true;
                 setState(idTrigger, move);
                 if(debug) log("Bewegung erkannt, Ansage wird an einem Arbeitstag zwischen " +ArbeitstagStart +" und " +ArbeitstagEnde +" ausgeführt");            
             }
             break;
             
             case 1:                                                                 // case 1: Freier Tag
                 if(!move && WochenendeAktiv && compareTime(WochenendeStart, WochenendeEnd, 'between')) {
                 move = true;
                 setState(idTrigger, move);  
                 if(debug) log("Bewegung erkannt, Ansage wird an einem freien Tag zwischen " +WochenendeStart +" und " +WochenendeEnd +" ausgeführt");                       
             }
             break;
         }
      });
      
      
      // Trigger nachts zurücksetzen
      
      schedule('15 0 * * *', function() {  // täglich 0:15 Uhr
        move = false;
        setState(idTrigger, move);
        if(debug) log("SayIt Trigger um 6.15h auf false gesetzt");
      });
      
      
      // ************************************************************************
      //                  START DER EIGENTLICHEN ANSAGE 
      // ************************************************************************
      
      //Trigger
         on(idTrigger, function (data) {                       
             
         // Definition
         var tts = "sayit.0.tts.text";
         
         // Nochmal Terminvorschau abholen 
         //terminAnsage = 1;  
      
      
         //Lautstärke einstellen
             var vol ="sayit.0.tts.volume";
             setState (vol,15);
      
         //Wochentag ermitteln
             var d = new Date ();
             var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
             var w = weekday[d.getDay()]; 
      
         //Tagesdatum ermitteln
             var t = d.getDate();
      
         //Monat ermitteln
             var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
             var m = month[d.getMonth()];
      
         //Jahr ermitteln
             var j = d.getFullYear();
      
         //Stunde ermitteln
             h = d.getHours();
      
         //Minute ermitteln
             mi = d.getMinutes();
      
         // ********************************************************************
         // Die Außentemperatur ist xx.
         // Einfache Temperaturansage mit SayIt.
         // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
         // "Es sind 18 Punkt 2 Grad " sagt.
         // *********************************************************************
      
             var Temperatursensor = getState("daswetter.0.NextHours.Location_1.Day_1.current.temp_value"/*temperature*/); /*Temperatursensor:1.TEMPERATURE*/
             var temperatur = Temperatursensor.val.toString();
             var temp_array = [];
      
             temp_array = temperatur.split(".");
      
                 // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
                 // Es wird dann nur "18" gelesen.
                 if (!temp_array[1]) {
                     temp_array[1] = "0";
                     if(debug) log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
               }
         
         // ******************************
         // Wird Regen erwartet? 
         // ******************************
         
         var idRain = "javascript.0.Wetter.Regentimer"/*Regentimer*/;   // wird in anderem Skript angelegt
         var idRainValue;
         var idRainValueText;
         idRainValue = getState(idRain).val;
         idRainValueText = idRainValue.replace(':00h', ' Uhr');  // bereinigen des Anzeigetextes in eine sprechbare Form
         //log(idRainValue);
         //log(idRainValueText);
      
         
         
         // *********************************
         // Tageshöchstemperatur
         // *********************************
         
         var maxTemp;
         maxTemp = getState("weatherunderground.0.forecast_day.0d.temp.high"/*high temperature*/).val;
         
         
         
      
         // **************************************************************************************            
         // Termine auswerten aus html. Bereinigung der HTML Tags und Konvertierung in Plain Text
         // **************************************************************************************
         
             var inhalt = getState("ical.0.data.html"/*HTML iCal table*/);
             var inhaltString = inhalt.val.toString();
             var inhaltStringReplace = inhaltString;
             var inhaltStringText;
             var i_search;
             
      
             //**************************************************************************************
             // Suchfunktion für Termin-Cutoff
             // Sucht nach dem n-ten definierten Muster, hier "§$%" und gibt die Fundstelle zurück. 
             // Hinter dieser Fundstelle wird dann der Text gekürzt
             // Sinnloses Muster genommen, da dies wohl nirgends normalerweise vorkommt
             //*****************************************************************************************
             
             // Suchfunktion für Termin-Cutoff
             
             function nthIndex(str, pat, n){
             var L= str.length, i= -1;
             while(n-- && i++<L){
             i= str.indexOf(pat, i);
             if (i < 0) break;
                 }
             i_search =i;
             }
      
             
             // remove all inside SCRIPT and STYLE tags
             inhaltStringReplace=inhaltStringReplace.replace(/<script.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, "");
             inhaltStringReplace=inhaltStringReplace.replace(/<style.*>[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, "");
             
             // remove BR tags. Werden durch sinnlose Zeichenkette ersetzt, nach der später gesucht wird
             inhaltStringReplace=inhaltStringReplace.replace(/<br>/gi, ". §$%");
             inhaltStringReplace=inhaltStringReplace.replace(/<br\s\/>/gi, ". §$%");
             inhaltStringReplace=inhaltStringReplace.replace(/<br\/>/gi, ". §$%");
             
             
             // remove all else
             inhaltStringReplace=inhaltStringReplace.replace(/<(?:.|\s)*?>/g, "");
             
             // get rid of html-encoded characters:
             inhaltStringReplace=inhaltStringReplace.replace(/&nbsp;/gi," ");
             inhaltStringReplace=inhaltStringReplace.replace(/&amp;/gi,"&");
             inhaltStringReplace=inhaltStringReplace.replace(/&quot;/gi,'"');
             inhaltStringReplace=inhaltStringReplace.replace(/&lt;/gi,'<');
             inhaltStringReplace=inhaltStringReplace.replace(/&gt;/gi,'>');
             
             // Punkt ans Ende setzen
             inhaltStringReplace=inhaltStringReplace+". §$%";
         
            // log("Text ohne HTML mit 'sinnlos String': "+inhaltStringReplace);
               
             // Termine heute zaehlen
             var terminHeuteCount = inhaltStringReplace.split("Heute").length -1;
      
             //log("Anzahl Termine heute: "+terminHeuteCount);
             
             // Termine morgen zählen
             var terminMorgenCount = inhaltStringReplace.split("Morgen").length -1;
      
             // log("Anzahl Termine morgen: "+terminMorgenCount);
             
             // Termine übermorgen zählen
             var terminUebermorgenCount = inhaltStringReplace.split("Übermorgen").length -1;
      
             // log("Anzahl Termine übermorgen: "+terminUebermorgenCount);
             
             // Termine addieren
             var termineCount = (terminHeuteCount + terminMorgenCount + terminUebermorgenCount);
             var termineHeuteMorgenCount = (terminHeuteCount +terminMorgenCount);
             
             // log("Termine heute und morgen gesamt: " +termineHeuteMorgenCount);
             
             // log("Anzahl Termine gesamt: " +termineCount);
                 
                  
             //*******************************************
             // Text kürzen je nach gewählter Selektion
             // ******************************************
             
             if (termineCount === 0) { 
                 inhaltStringText ="Es liegen keine Termine an";
      
             }
             else {
                 switch(terminAnsage) {
                     case 1:
                         if (terminHeuteCount === 0) { 
                             inhaltStringText ="Es liegen keine Termine an";
                         }
                         else{
                         nthIndex(inhaltStringReplace,"§$%", terminHeuteCount);                // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                         inhaltStringText = inhaltStringReplace.slice(0,i_search);
                         for (k =0; k < terminHeuteCount; k++) {
                         inhaltStringText = inhaltStringText.replace("§$%", "");             // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                         }
                         inhaltStringText = "Folgende Termine stehen an: "+inhaltStringText; // neu eingefügt
                         }
                     break;
                     
                     case 2:
                         if (termineHeuteMorgenCount === 0) { 
                             inhaltStringText ="Es liegen keine Termine an";
                         }
                         else{
                         nthIndex(inhaltStringReplace,"§$%", termineHeuteMorgenCount);            // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                         inhaltStringText = inhaltStringReplace.slice(0,i_search);
                         for (k =0; k < termineHeuteMorgenCount; k++) {
                         inhaltStringText = inhaltStringText.replace("§$%", "");             // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                         }
                         inhaltStringText = "Folgende Termine stehen an: "+inhaltStringText;   // neu eingefügt
                         }                    
                     break; 
                     
                     case 3:
                         if (termineCount === 0) { 
                             inhaltStringText ="Es liegen keine Termine an";
                         }
                         else{
                         nthIndex(inhaltStringReplace,"§$%", termineCount);                // nutzen der Suchfunktion zum Suchen der n-ten sinnlosen Zeichenkette
                         inhaltStringText = inhaltStringReplace.slice(0,i_search);
                         for (k =0; k < termineCount; k++) {
                         inhaltStringText = inhaltStringText.replace("§$%", "");           // rausnehmen der sinnlosen Zeichen, damit diese nicht mitgesprochen werden
                         }
                         inhaltStringText = "Folgende Termine stehen an: "+inhaltStringText;   // neu eingefügt
                         }
                     
                 }
             }
      // log("Letzte Fundstelle an Position "+i_search);        
      log("Die bereinigte Ansage ist: " +inhaltStringText);
      
          
         // ANSAGE ausfuehren, danach sonos box starten für 30 Minuten
         
      
        if (data.newState.val === true) {
             
             setState("sonos.0.root.192_168_2_7.favorites_set"/*favorites_set*/, radio);    // gewählte Radiosender eingestellt
             setState("sonos.0.root.192_168_2_7.volume"/*volume*/, 12);                            // Anpassen der Lautstärke 
             
             
             setState (tts, "Guten Morgen, heute ist " + w + " der " + t + "te " + m + j + ". Es ist" + h + "  Uhr und " + mi + "  Minuten." 
              + "  Die Aussentemperatur beträgt aktuell " + temp_array[0] + "," + temp_array[1] + " Grad und das Tagesmaximum soll " 
              +maxTemp +" Grad erreichen. " +idRainValueText+ " "  +inhaltStringText );
      
      
         }
        
      });
      
      // NEU EINGEFÜGT 3.10.2018
      
      on({id: idMove, change: "ne" }, function(dp) {
      
         
         if (!dp.state.val && getState('sonos.0.root.192_168_2_7.state'/*state*/).val != "stop"){    
             stopit = setTimeout(stopmusic, 600000);  // nach 10 Minuten wird stopmusic gerufen
             if(debug) log ("Keine Bewegung erkannt, Stop Funktion mit 10 Minuten initiiert"); 
      
         }
         else if(stopit) {
             clearTimeout(stopit);
             stopit = null;
             if(debug) log("Es wurde binnen 10 Minuten bei laufender Musik Bewegung erkannt, Stop Funktion ausgeschaltet");
             
         }
      });
      
      
      function stopmusic(){
      
           setState("sonos.0.root.192_168_2_7.state", "stop"); 
           if(debug) log("Badezimmer Sonos automatisch ausgeschaltet mangels Anwesenheit");
      };
      
      
      
      // Bei Start des Skripts Einstellungen zum Radiosender und Terminvorschau einlesen
      
      checkRadio();
      checkTermine();
      
      
      //Debuggen
      //console.log(JSON.stringify(getState(idTerminvorschau)));
      //console.log(JSON.stringify(getState(idRadio)));
      

      var ansage;
      
      function berechneZeit(){
      
      var i = 0;
      var data;
      var time;
      var h;
      var zeitpunkt;
      var d = new Date ();
      
         
      //Stunde ermitteln
         h = d.getHours();
         
      for (i=1 ; i<25;i++) {
         if (getState("daswetter.0.NextHours.Location_1.Day_1.Hour_" + i + ".rain_value").val>0) {
           data = getState("daswetter.0.NextHours.Location_1.Day_1.Hour_" + i + ".rain_value").val;
           time = getState("daswetter.0.NextHours.Location_1.Day_1.Hour_" + i + ".hour_value").val;
             break;    
           }
         }
         
         
         if (i<25 && data && i>= h) { 
      
             if(i == h){
             
                 ansage = "Es regnet, Niederschlag "+data + " l/m²."} 
      
             else {
                         ansage = "Regen gegen "+time + data + " l/m².";
                 
             }
                            
             
         } 
         
         else {
                 ansage = "Für heute wird kein Regen erwartet.";
             }
             
         setState('Wetter.Regentimer', ansage);
         setState('Wetter.RegenStunden', i);
         setState('Wetter.RegenMenge', parseInt(data));
      
         
      } // Ende berechneZeit
      
      
         
      
      
         createState('Wetter.Regentimer', {
            name: 'Regentimer',
            dec: 'Wieviele Stunden bis zum nächsten Regen',
            type: 'string',
         });
         
         createState('Wetter.RegenStunden', {
            name: 'Regentimer',
            dec: 'Wieviele Stunden bis zum nächsten Regen',
            type: 'number',
         });
      
         createState('Wetter.RegenMenge', 0, {
            name: 'Regenmenge',
            type: 'number',
            role: 'value'
         });    
         
      
      
      schedule("*/5 * * * *", function(){ berechneZeit()});   
      
      // Bei Start
      berechneZeit();
      


      export_ansage_zeit.txt


      export_zeiteinstellung.txt

      posted in Skripten / Logik
      T
      tempestas
    • RE: Metro Widget Button

      Na ja, der Name sagt ja schon "toggle". Ich glaube nicht, dass es mit einem Metro Widget geht, so auf die Schnelle überflogen.

      posted in Visualisierung
      T
      tempestas
    • RE: [gelöst] in SayIt Wetter und Geburtstagsscript -> Müllkalender mit einbinden

      @sigi234

      Ahh, danke für den Hinweis.

      Habe unten die ID korrigiert und das fehlende Timer Skript eingestellt. Wunderground nutze ich nicht mehr, der ist bei mir in der Gegend so verlässlich wie Würfeln. Einfach absoluter Mist.

      posted in Skripten / Logik
      T
      tempestas

    Latest posts made by tempestas

    • RE: VIS Seite wird nicht aufgebaut

      @Homoran

      ich habe web nun noch einmal aktualisiert und siehe da, es geht alles wieder
      Ich fasse es nun erstmal wieder viele Monate nicht mehr an 😉

      Danke an dich und Crunchip.

      VG

      posted in Error/Bug
      T
      tempestas
    • RE: VIS Seite wird nicht aufgebaut

      @crunchip

      ich bin bewusst dann weggegangen von den stable in der Hoffnung, dass es dann läuft.
      Tut es nicht 😞

      Keine Fehlermeldungen; einfach nur der Ladebalken, der aufhört zu laden

      Connecting to Server
      Loading Values

      Ende

      posted in Error/Bug
      T
      tempestas
    • RE: VIS Seite wird nicht aufgebaut

      @crunchip

      ich habe jetzt die Versionen drauf, die in dem von dir verlinkten Thread auch gepostet worden sind. in der Reihenfolge installiert, wie es dort auch stand

      Also web 3.0.12
      Socketio 3.0.13
      VIS 1.29

      posted in Error/Bug
      T
      tempestas
    • RE: VIS Seite wird nicht aufgebaut

      @Homoran

      Ja, danke.
      Entschuldige, dass ich mich daher an einen bestehenden Thread dranhänge und keinen eigenen aufmache.
      Viele der Threads sind aber scheinbar auch aus 2019.
      Ich habe die hier beschriebenen Lösungen nachgebaut, Reihenfolge der Updates von web, socketio, vis

      Das hat ja alles nichts gebracht.

      Was also soll ich tun, außer mich hier an einen bestehenden Thread zu hängen mit der Bitte um weitere Hilfe?
      Dank vergrößerter Familie habe ich nicht mehr die Zeit, wie 2017/2018, ständig in alle Threads reinzuschauen, ob es schon bekannte Probleme gibt.

      posted in Error/Bug
      T
      tempestas
    • RE: VIS Seite wird nicht aufgebaut

      @MartinK

      ja; es ging ja auch alles wunderbar, bis ich gestern nach Monaten mal wieder gedacht habe, ich sollte mal aktualisieren. Nun geht nichts mehr (was die VIS angeht).

      posted in Error/Bug
      T
      tempestas
    • RE: VIS Seite wird nicht aufgebaut

      Mein VIS will nach Updates diverser Adapter gestern nun auch nicht mehr. .
      Ich benutze immer nur stable und warte lange, bis ich mal update (never touch a running system, hat sich auch hier wieder bestätigt).

      Die hier genannten Tipps habe ich befolgt, ohne Ergebnis. Es hängt sich beim Laden auf, keine Fehler im Log.

      Brauche bitte Hilfe. Was kann ich analysieren / tun ?

      posted in Error/Bug
      T
      tempestas
    • RE: Javascript - wie lese ich diese Werte aus?

      @ticaki

      hatte ich nicht, habe ich nachgetragen. Ändert gar nichts.
      Sei es drum, die umständliche Version geht ja... wäre zwar schön zu wissen, warum es so seltsam nur geht, aber wie auch immer 🙂 danke dir für diene Mühen

      posted in JavaScript
      T
      tempestas
    • RE: Javascript - wie lese ich diese Werte aus?

      @ticaki

      Hi,

      ich habe diverse Variationen durchgespielt.

      Beide deiner Ideen liefern "false", egal, ob ich die anlage ein oder ausschalte.. Da scheint der return nicht zu stimmen.

      Ich nutze dann die stringify to parse version, ist ja kein Thema.
      da du deutlich bewanderter bist als ich: warum geht das? wie gesagt, mein Wissen war, stringify und parse sind quasi yin und yang?

      posted in JavaScript
      T
      tempestas
    • RE: Javascript - wie lese ich diese Werte aus?

      Hi,

      danke bekomme ich fürs erste Log wieder [object promise] und das zweite wirft das bekannte JSON raus.

      VG

      So funktioniert es jetzt:

              // see the object dump for details
              var json = JSON.stringify(blink)
              console.log(json);
              var parsed = JSON.parse(json);
              console.log(parsed._networks[0].armed)
      

      warum ich erst stringify machen muss um dann parse zu nutzen verstehe ich aber nicht, ich dachte, parse ist quasi das Gegenteil von stringify

      posted in JavaScript
      T
      tempestas
    • RE: Javascript - wie lese ich diese Werte aus?

      @ticaki said in Javascript - wie lese ich diese Werte aus?:

      blink.isArmed()

      Ich danke dir.
      es bleibt bei[object object]

      Initial habe ich im Skript stehen:

      const Blink = require('node-blink-security');
      var blink = new Blink('xxxxxx', '|yyyyyyyyyyyy');

      er sollte also mit der Klasse was anfangen können, soweit ich das sehe.

      posted in JavaScript
      T
      tempestas
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo