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. Deutsch
  3. ioBroker Allgemein
  4. Sonoff Tasmota Timer (1-12) über ioBroker nutzen?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Sonoff Tasmota Timer (1-12) über ioBroker nutzen?

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
sonofftasmotaiobrokertimer
24 Beiträge 6 Kommentatoren 3.7k Aufrufe 6 Watching
  • Ä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.
  • SoundyS Offline
    SoundyS Offline
    Soundy
    schrieb am zuletzt editiert von
    #1

    Hallöchen,

    ich suche mich heute schon krumm und schief zu diesem Thema.

    Unter https://tasmota.github.io/docs/Timers/ habe ich ja die entsprechende Dokumentation gefunden, doch fehlt mir noch eine Idee, wie ich dies über ioBroker umsetzen kann? Ein MQTT läuft bei mir und ich glaube, dass hier auch die Lösung sein könnte, denn eine andere Kommunikation zwischen ioBroker und Tasmota findet ja nicht statt.

    Ziel ist eine Zeitschaltfunktion für eine Pflanzenbewässerung, diese würde ich auch in ioBroker direkt umsetzen. Allerdings ist eine Fallback-Lösung geplant, falls der ioBroker (auf Raspberry Pi 4) einen Fehler hat oder es Probleme im Netzwerk gibt. Gerade bei der Bewässerung möchte ich eigentlich keinen Kompromiss eingehen und daher die internen Timer 1-12 nutzen.

    Was wäre hier der richtige Lösungsansatz, denn im offiziellen Sonoff-Adapter ist dies ja auch nicht integriert.

    Danke für gute Ideen und Tips!

    Lg, Jürgen

    liv-in-skyL I 2 Antworten Letzte Antwort
    0
    • SoundyS Soundy

      Hallöchen,

      ich suche mich heute schon krumm und schief zu diesem Thema.

      Unter https://tasmota.github.io/docs/Timers/ habe ich ja die entsprechende Dokumentation gefunden, doch fehlt mir noch eine Idee, wie ich dies über ioBroker umsetzen kann? Ein MQTT läuft bei mir und ich glaube, dass hier auch die Lösung sein könnte, denn eine andere Kommunikation zwischen ioBroker und Tasmota findet ja nicht statt.

      Ziel ist eine Zeitschaltfunktion für eine Pflanzenbewässerung, diese würde ich auch in ioBroker direkt umsetzen. Allerdings ist eine Fallback-Lösung geplant, falls der ioBroker (auf Raspberry Pi 4) einen Fehler hat oder es Probleme im Netzwerk gibt. Gerade bei der Bewässerung möchte ich eigentlich keinen Kompromiss eingehen und daher die internen Timer 1-12 nutzen.

      Was wäre hier der richtige Lösungsansatz, denn im offiziellen Sonoff-Adapter ist dies ja auch nicht integriert.

      Danke für gute Ideen und Tips!

      Lg, Jürgen

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #2

      @Soundy

      irgendwie verstehe ich nicht, was du machen willst - wenn du die timer auf dem sonoff definierst, wird das alles geschalten. egal ob das netz oder iobroker da ist oder nicht.

      iobroker könnte dann außer kontroll-funktionen nichts machen - also eine überprüfung der schaltvorgänge und alarme via mail oder telegram senden.

      wenn du iobroker schalten läßt und die timer nicht aktivierst, mußt du das im sonoff (rules ?) irgendwie abfangen - bei einer störung - aber auch da kannst du ein script überprüfen lassen, ob der sonoff noch reagiert

      wenn das netzwerk weg ist, kann der iobroker nicht mehr mit dem sonoff kommunizieren - dann kann nur noch der sonoff reagieren

      was sollte jetzt im sonoff adapter noch integriert sein - damit bei einem netzausfall der adapter was tun sollte ?

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      J 1 Antwort Letzte Antwort
      0
      • liv-in-skyL liv-in-sky

        @Soundy

        irgendwie verstehe ich nicht, was du machen willst - wenn du die timer auf dem sonoff definierst, wird das alles geschalten. egal ob das netz oder iobroker da ist oder nicht.

        iobroker könnte dann außer kontroll-funktionen nichts machen - also eine überprüfung der schaltvorgänge und alarme via mail oder telegram senden.

        wenn du iobroker schalten läßt und die timer nicht aktivierst, mußt du das im sonoff (rules ?) irgendwie abfangen - bei einer störung - aber auch da kannst du ein script überprüfen lassen, ob der sonoff noch reagiert

        wenn das netzwerk weg ist, kann der iobroker nicht mehr mit dem sonoff kommunizieren - dann kann nur noch der sonoff reagieren

        was sollte jetzt im sonoff adapter noch integriert sein - damit bei einem netzausfall der adapter was tun sollte ?

        J Offline
        J Offline
        Jan1
        schrieb am zuletzt editiert von
        #3

        @liv-in-sky
        Ich denke er möchte die Timer über IOBroker (VIS) direkt auf dem Tasmota Device setzten und verwalten , ansonsten hast mit Deinem Einwand vollkommen recht.

        SoundyS 1 Antwort Letzte Antwort
        0
        • J Jan1

          @liv-in-sky
          Ich denke er möchte die Timer über IOBroker (VIS) direkt auf dem Tasmota Device setzten und verwalten , ansonsten hast mit Deinem Einwand vollkommen recht.

          SoundyS Offline
          SoundyS Offline
          Soundy
          schrieb am zuletzt editiert von
          #4

          @Jan1 said in Sonoff Tasmota Timer (1-12) über ioBroker nutzen?:

          @liv-in-sky
          Ich denke er möchte die Timer über IOBroker (VIS) direkt auf dem Tasmota Device setzten und verwalten , ansonsten hast mit Deinem Einwand vollkommen recht.

          Ganz richtig, das war mein Plan und Gedankengang.

          Kurz umrissen: ioBroker verwaltet die Timer und den Rest macht der Sonoff selbst. Die Einwände von @liv-in-sky verstehe ich ja auch wieder, denn eigentlich sollten wir ja ein stabiles System und Netzwerk herstellen. Hmm...

          Nunja, aber prinzipiell, würde es gehen? Bzw. wie muss ich da anfangen?

          Lg, Jürgen

          mickymM liv-in-skyL 2 Antworten Letzte Antwort
          0
          • SoundyS Soundy

            Hallöchen,

            ich suche mich heute schon krumm und schief zu diesem Thema.

            Unter https://tasmota.github.io/docs/Timers/ habe ich ja die entsprechende Dokumentation gefunden, doch fehlt mir noch eine Idee, wie ich dies über ioBroker umsetzen kann? Ein MQTT läuft bei mir und ich glaube, dass hier auch die Lösung sein könnte, denn eine andere Kommunikation zwischen ioBroker und Tasmota findet ja nicht statt.

            Ziel ist eine Zeitschaltfunktion für eine Pflanzenbewässerung, diese würde ich auch in ioBroker direkt umsetzen. Allerdings ist eine Fallback-Lösung geplant, falls der ioBroker (auf Raspberry Pi 4) einen Fehler hat oder es Probleme im Netzwerk gibt. Gerade bei der Bewässerung möchte ich eigentlich keinen Kompromiss eingehen und daher die internen Timer 1-12 nutzen.

            Was wäre hier der richtige Lösungsansatz, denn im offiziellen Sonoff-Adapter ist dies ja auch nicht integriert.

            Danke für gute Ideen und Tips!

            Lg, Jürgen

            I Offline
            I Offline
            ITCrowd
            schrieb am zuletzt editiert von
            #5

            @Soundy Leider bin ich nicht der Experte in MQTT und kann nicht sagen ob man die Timer darüber abfragen kann. Bin gerade dabei mich hier einzulesen.

            Um aber zu verhindern das der Garten beim Ausfall des ioBrokers absäuft, würde schon der Befehl PulseTime (Tasmota Konsole) helfen. Er begrenzt die Einschaltdauer und soll auch über MQTT erreichbar sein.

            1 Antwort Letzte Antwort
            0
            • SoundyS Soundy

              @Jan1 said in Sonoff Tasmota Timer (1-12) über ioBroker nutzen?:

              @liv-in-sky
              Ich denke er möchte die Timer über IOBroker (VIS) direkt auf dem Tasmota Device setzten und verwalten , ansonsten hast mit Deinem Einwand vollkommen recht.

              Ganz richtig, das war mein Plan und Gedankengang.

              Kurz umrissen: ioBroker verwaltet die Timer und den Rest macht der Sonoff selbst. Die Einwände von @liv-in-sky verstehe ich ja auch wieder, denn eigentlich sollten wir ja ein stabiles System und Netzwerk herstellen. Hmm...

              Nunja, aber prinzipiell, würde es gehen? Bzw. wie muss ich da anfangen?

              Lg, Jürgen

              mickymM Offline
              mickymM Offline
              mickym
              Most Active
              schrieb am zuletzt editiert von mickym
              #6

              @Soundy Installiere Dir den Tasmota Device Manager - da kannst Du die timer direkt einstellen.

              Wenn Du den installiert hast bekommst Du auch im cmnd-Ast alle möglichen Kommandos:

              screen.png

              evtl. hilft auch die offizielle Tasmota Doku https://tasmota.github.io/docs/Commands/

              Den PulseTimer nutze ich auch - das wurde über das Backlog wie folgt eingestellt:

              PulseTime1 0; PulseTime2 3700; PulseTime3 400; PulseTime4 1000; PulseTime5 0; PulseTime6 0; PulseTime7 0; PulseTime8 0; status; status 3

              Die Zahlen bei dem PulseTimer stimmen jedenfalls genau:

              PulseTime<x> Display the amount of PulseTime remaining on the corresponding Relay<x>
              <value> Set the duration to keep Relay<x> ON when Power<x> ON command is issued. After this amount of time, the power will be turned OFF.
              0 / OFF = disable use of PulseTime for Relay<x>
              1..111 = set PulseTime for Relay<x> in 0.1 second increments
              112..64900 = set PulseTime for Relay<x>, offset by 100, in 1 second increments. Add 100 to desired interval in seconds, e.g., PulseTime 113 = 13 seconds and PulseTime 460 = 6 minutes (i.e., 360 seconds)

              Deswegen muss man 100 bei 5min zu den 300s dazu zählen.

              Wie gesagt mit dem Tasmota Device Manager geht das super und grafisch und der setzt Dir automatisch die MQTT-Kommandos.

              Hier kannst den runterladen: Tasmota Device Manager

              Dort kannst Du mehrere Timer mit Wochentagen und Uhrzeiten ganz easy definieren und wird dann in MQTT-Kommands umgesetzt:

              screen.png

              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

              1 Antwort Letzte Antwort
              0
              • SoundyS Soundy

                @Jan1 said in Sonoff Tasmota Timer (1-12) über ioBroker nutzen?:

                @liv-in-sky
                Ich denke er möchte die Timer über IOBroker (VIS) direkt auf dem Tasmota Device setzten und verwalten , ansonsten hast mit Deinem Einwand vollkommen recht.

                Ganz richtig, das war mein Plan und Gedankengang.

                Kurz umrissen: ioBroker verwaltet die Timer und den Rest macht der Sonoff selbst. Die Einwände von @liv-in-sky verstehe ich ja auch wieder, denn eigentlich sollten wir ja ein stabiles System und Netzwerk herstellen. Hmm...

                Nunja, aber prinzipiell, würde es gehen? Bzw. wie muss ich da anfangen?

                Lg, Jürgen

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #7

                @Soundy

                ich habe ein script, welches mir die timer anzeigt in der vis und zum setzen wird ein link zum device dargestellt

                denke nicht, dass du sowas suchst - habe da mal daran gearbeitet - das script könnte noch verbessert werden - sieht dann so aus

                timer.gif

                Image 4.png

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                SoundyS ChaotC 2 Antworten Letzte Antwort
                0
                • liv-in-skyL liv-in-sky

                  @Soundy

                  ich habe ein script, welches mir die timer anzeigt in der vis und zum setzen wird ein link zum device dargestellt

                  denke nicht, dass du sowas suchst - habe da mal daran gearbeitet - das script könnte noch verbessert werden - sieht dann so aus

                  timer.gif

                  Image 4.png

                  SoundyS Offline
                  SoundyS Offline
                  Soundy
                  schrieb am zuletzt editiert von
                  #8

                  @liv-in-sky

                  Wowwww! :-)

                  Nun, das sieht ja mal ganz gut aus, finde ich. Das Anzeigen der Timer wäre mir schon mal eine Hilfe, vielleicht finden wir gemeinsam hier im Forum eine Möglichkeit diese Timer auch über ioBroker zu setzen. Kannst du mal das/die Skript(e) reinstellen? Dann importiere ich mir das mal...

                  liv-in-skyL 3 Antworten Letzte Antwort
                  0
                  • SoundyS Soundy

                    @liv-in-sky

                    Wowwww! :-)

                    Nun, das sieht ja mal ganz gut aus, finde ich. Das Anzeigen der Timer wäre mir schon mal eine Hilfe, vielleicht finden wir gemeinsam hier im Forum eine Möglichkeit diese Timer auch über ioBroker zu setzen. Kannst du mal das/die Skript(e) reinstellen? Dann importiere ich mir das mal...

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von
                    #9

                    @Soundy
                    das timer setzten ist auch nicht die große sache - z.b. über http mit:

                    {"Timer1":{"Arm":1,"Mode":0,"Time":"09:05","Window":0,"Days":"1111111","Repeat":1,"Output":1,"Action":2}}
                    

                    das kann man sich in einem script zusammenbasteln und in der vis darstellen

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    1 Antwort Letzte Antwort
                    0
                    • SoundyS Soundy

                      @liv-in-sky

                      Wowwww! :-)

                      Nun, das sieht ja mal ganz gut aus, finde ich. Das Anzeigen der Timer wäre mir schon mal eine Hilfe, vielleicht finden wir gemeinsam hier im Forum eine Möglichkeit diese Timer auch über ioBroker zu setzen. Kannst du mal das/die Skript(e) reinstellen? Dann importiere ich mir das mal...

                      liv-in-skyL Offline
                      liv-in-skyL Offline
                      liv-in-sky
                      schrieb am zuletzt editiert von
                      #10

                      @Soundy

                      im script gib es eine variable dpVis (zeichekette) und dpRefresh (logik)- im oberen bereich - da stehen datenpunkte - du mußt dir zwei eigene datenpunkte in deinem system anlegen und dann deine datenpunkte im scipt eintragen

                      zusätzlich gibt es die variable filterArray, da trägst du die zu scannenden sonoffs ein - habe anfangs über alle sonoffs gescannt - aber manche - mit alter software - mögen das nicht, daher habe ich ein solches array zum eingeben gemacht (hostname unter INFO ordner eintragen)

                      momentan wird alle 15 minuten abgefragt und die tabelle erzeugt - leider habe ich keinen trigger im system, der mir sagt, dass ein timer dazugekommen ist. man müßte im script noch das erstellen eines timer hinzufügen - dann könnte man darauf triggern und die tabelle sofort "refreshen". im moment wird refresht, wenn sich ein power wert ändert oder alle 15 minuten

                      das script:

                       //@liv-in-sky 2020  5.9.-8:42
                      
                      
                      //HIER WIRD PFAD UND FILENAME DEFINIERT
                      const path = "/htmlexample.html";                   //FIlenamen definieren
                      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                      let   braucheEinFile=false;                          // bei true wird ein file geschrieben
                      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                      let dpVIS="controll-own.0.AAATEST.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                      let dpRefresh="controll-own.0.AAATEST.TestHTMLRefresh"
                      let mySchedule="  */15 * * * * ";                       //jede minute  
                      //---------------------------------------
                      
                      var leerzeile=true           ;                            // leerzeile vor neuen kalender
                      
                      var styleUeber="span"
                      var farbeUeber="lightblue"
                      var symbolLink="🌎";
                      var anzahlTimer=5;                                        // wieviele Timer sollen abgefragt werden
                      
                      var filterArray=["Sonoff11","Sonoff15","Sonoff16"];      // definiert, welche geräte gecheckt werden (hostname)
                      
                      
                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                      var htmlFeld1='Timer';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                      var htmlFeld2='Mode';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                      var htmlFeld3='Repeat';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                      var htmlFeld4='Window';        var Feld4lAlign="center";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                      var htmlFeld5='Days';        var Feld5lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld6='Time';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld7='Output';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld8='Action';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      
                      //-----------------------------------
                      
                      
                      
                      //hier werden die styles für die tabelle definiert
                      //ÜBERSCHRIFT ÜBER TABELLE
                      let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                      let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                      const htmlFeldUeber='Sonoff Devices Timers';              // Überschrift und Signature
                      const htmlFarbUber="white";                         // Farbe der Überschrift
                      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                      //MEHRERE TABELLEN NEBENEINANDER
                      let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                      const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                      const farbetrennungsLinie="white";
                      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                      const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                      //ÜBERSCHRIFT SPALTEN
                      const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                      const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                      const farbeLinieUnterUeberschrift="white";
                      const groesseUeberschrift=16;
                      const UeberschriftStyle="normal"                     // möglich "bold"
                      //GANZE TABELLE
                      let abstandZelle="3";
                      let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                      let farbeGeradeZeilen="#333333";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                      let weite="auto";                                     //Weite der Tabelle
                      let zentriert=true;                                   //ganze tabelle zentriert
                      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                      const htmlSchriftart="Helvetica";
                      const htmlSchriftgroesse="14px";
                      //FELDER UND RAHMEN
                      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                      const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
                      const htmlFarbFelderschrift2="#151515";                 // SchriftFarbe der Felder für jede 2te Tabelle
                      const htmlFarbTableColorGradient1="#1c1c1c";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                      const htmlFarbTableColorGradient2="#1c1c1c";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                      const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                      let htmlRahmenLinien="cols";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                      const htmlSpalte1Weite="auto";                    //  Weite der ersten beiden  Spalten oder z.b. 115px
                      
                      // HIER NICHTS  ÄNDERN
                      
                      let borderHelpBottum;
                      let borderHelpRight;
                      let htmlcenterHelp;
                      let htmlcenterHelp2;
                      
                      if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                      if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                      if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                      if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                      zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                      zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                      
                      
                      const htmlZentriert='<center>'
                      const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                         "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                         " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                        // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                         " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                         " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                         "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                         " </style></head><body> <div>";
                      //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                      const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                            "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                      const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                      const htmlTabUeber3="</tr>";
                      
                      
                      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                      
                      
                      var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&ensp;</td>";
                      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+
                                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                         "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld8+"&ensp;</td>";
                                             //------------------------------------------------------
                      
                      let countMYWerte=0;
                      let idOld=""
                      const axios=require('axios');
                      let wartezeit;
                      let wartezeitInFunction=500;
                      let zaehlerErfolg;
                      var htmlOut="";
                      var mix;
                      var counter;
                      var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                      let myArr=[]
                      let myPowerOld=""
                      let myPower="na"
                      let myPower1="na"
                      let myPower2="na"
                      let arrTrigger=[];
                      let running=false;
                      var htmlTabUeber="";
                      
                      async  function writeHTML(){
                      
                      running=true;
                      htmlOut="";
                      counter=-1;
                      htmlTabUeber="";
                      switch (mehrfachTabelle) { 
                         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                      }; 
                      if (!UeberschriftSpalten) {htmlTabUeber=""}  
                      
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3,val4!!!------------------------------------------------------------
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      myArr=[]
                      arrTrigger=[]
                      //log("anfang")
                      
                        zaehlerErfolg= await durchlaufen()
                      
                      zaehlerErfolg=10000
                      
                      //log("ende2")
                        wartezeit=(wartezeitInFunction*zaehlerErfolg)+5000
                      setTimeout(function () {
                      //log(arrTrigger.toString())
                      myArr.sort(function (alpha, beta) {
                                   if (alpha[2].toUpperCase() > beta[2].toUpperCase())
                                      return 1;
                                   if (beta[2].toUpperCase() > alpha[2].toUpperCase())
                                      return -11;
                                   return 0;
                                  });
                      
                      countMYWerte=0
                      
                      //log(myArr.toString())
                      for(let i=0;i<myArr.length;i++){
                        //counter++
                      
                                       if(myArr[i][2]!=idOld){
                                            countMYWerte++
                                            tabelleMachSchoen()
                                         //   counter=-1
                                            if(leerzeile){
                                                          if(countMYWerte>1) for(var a=0;a<mehrfachTabelle;a++ ) { //leerzeile
                                                                val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";counter++;tabelleBind();
                                                           } }
                                    for(var ic=0;ic<mehrfachTabelle;ic++ ) {
                                           (ic==0) ? val0="<font color=\""+farbeUeber +"\"><"+styleUeber+">"+ myArr[i][2] +  "<a href=\"http:\/\/"+ getState(myArr[i][1]).val+"\/tm" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=480,height=640\'); return false;\">"+symbolLink+"</a>" : val0=""
                                         //  log(val0)
                                         
                                            val1="";val2="";val3="";val4="";val5="";val6="";val7="";
                                            if(myArr[i][3]!="na") myArr[i][3]=="true" ? val1="P:ON" : val1="P:OFF"
                                            if(myArr[i][4]!="na") myArr[i][4]=="true" ? val2=val2+"P1:ON" : val2=val2+"P1:OFF"
                                            if(myArr[i][5]!="na") myArr[i][5]=="true" ? val3=val3+"P2:ON" : val3=val3+"P2:OFF"
                                            val1="<font color=\""+farbeUeber +"\"><"+styleUeber+">"+val1
                                            val2="<font color=\""+farbeUeber +"\"><"+styleUeber+">"+val2
                                            val3="<font color=\""+farbeUeber +"\"><"+styleUeber+">"+val3
                           
                                   counter++;
                                   tabelleBind();}
                                   
                                    idOld=myArr[i][2]; // log(idOld)
                      }
                      
                      //counter=-1
                         let myObj=JSON.parse(myArr[i][0])        
                       //for(let a=0;a<)
                      // log(myObj.hasOwnProperty(/(Timer)/g))
                         
                       let  myTimer=Object.keys(myObj)[0]
                         val0=Object.keys(myObj)[0] 
                         val1=myMode(myObj[myTimer].Mode)
                         val2=myObj[myTimer].Repeat  //""
                         val3=myObj[myTimer].Window //""
                         val4=myDay(myObj[myTimer].Days) //""
                         val5=myObj[myTimer].Time
                         if(myObj[myTimer].Mode==1)  val5=formatDate(getDateObject(getAstroDate("sunrise", undefined, 0)), "hh:mm") //""
                         if(myObj[myTimer].Mode==2)  val5=formatDate(getDateObject(getAstroDate("sunset", undefined, 0)), "hh:mm") //""
                         val6=myObj[myTimer].Output //""
                         val7=   myAction(myObj[myTimer].Action) //""
                      counter++; tabelleBind();
                      }
                      tabelleFinish();
                      //   log(myArr.toString())
                      running=false;
                      }, 10000); 
                      
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      
                      } // function ende
                      
                      //MAIN:
                       
                      schedule(mySchedule,  function () {
                       if(!running) writeHTML();
                       if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                      }); 
                        if(!running) writeHTML();
                      
                         				 function tabelleBind(){
                           //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                         
                             switch (mehrfachTabelle) {  
                               case 1:  if(counter%2==0){  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;} else 
                                                        {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;}
                      
                              case 2:  if(counter%4==0) {
                                        if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                             }else{  
                                        if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;}
                      
                      
                      
                      
                              case 3: if(counter%2==0 ) {
                                         if(counter%3==0)           {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                               } break; }else{
                                         if(counter%3==0)                {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                               } break;      }
                      
                      
                      
                      
                              case 4: if(counter%8==0)  {
                                         if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\>&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                               } break;  }else{
                                         if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                               } break;       }
                      
                           } //switch ende
                      
                      
                      
                      }
                      
                      function tabelleFinish() {
                      
                            // tabelle fertigstellen
                            switch (mehrfachTabelle) {  
                             case 1:    break;
                      
                             case 2:    
                                       if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                      
                                        break;
                      
                             case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                       if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                       if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                     
                                        break;
                             case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                       if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>"); 
                                       break; }
                           
                                          var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                             var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                              
                              if (!htmlSignature) htmlUnter="";
                                //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                 var htmlOutVIS="";
                               //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                  if (htmlUberschrift) 
                                      { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                      
                                    } else {
                                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                      
                                       }
                      
                      // log("bin raus aus tabelleBind");
                                 if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                      
                       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                      
                       if (!htmlSignature) htmlUnter="";
                       var htmlEnd="</table>"+htmlUnter+"</div></body>";
                       //mit oder ohne überschrift - zentriert oder links
                      htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                       //log(htmlOut);
                       
                      
                      
                      }
                      
                       function tabelleMachSchoen(){
                        switch (mehrfachTabelle) {  
                             case 1:    break;
                      
                             case 2:    
                                       if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                      
                                        break;
                      
                             case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                       if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                       if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                     
                                        break;
                             case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                       if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>"); 
                                       break; }
                      
                      
                       }
                      
                            async function getData(url,id,hostname,power,power1,power2) {
                               
                       try {
                         const response = await axios.get(url)
                          if(JSON.stringify(response.data).includes("Timer")) { if(JSON.stringify(response.data).includes(`Arm":1,`) ) myArr.push([JSON.stringify(response.data),id,hostname,power,power1,power2]) }
                       
                       } catch (error) {
                          let myError="Verbindungsproblem - Sonoff Timer script - Script neustarten evtl. Sonoff vom Strom nehmen" //'{"Timerx":{"Arm":1,"Mode":0,"Time":"error","Window":0,"Days":"0000000","Repeat":1,"Output":1,"Action":2}}'
                          // myArr.push([myError,dpRefresh,"error"]);log(myArr.toString())
                            console.log(myError + " - " + hostname);
                       }
                      }
                      
                      function myAction(action) {
                      switch (action) {
                           case 0:
                                  return "OFF"
                      
                           case 1: 
                                  return "ON"
                      
                           case 2: 
                                  return "TOGGLE"
                      
                           case 3: 
                                  return  "BLINK"            
                      
                      }
                        
                      }
                      
                      function myDay(days) {
                         let myErgebnis=""
                      
                      if(days[0]==1)  myErgebnis=myErgebnis+"So,"   
                      if(days[1]==1)  myErgebnis=myErgebnis+"Mo,"   
                      if(days[2]==1)  myErgebnis=myErgebnis+"Di,"   
                      if(days[3]==1)  myErgebnis=myErgebnis+"Mi,"   
                      if(days[4]==1)  myErgebnis=myErgebnis+"Do,"   
                      if(days[5]==1)  myErgebnis=myErgebnis+"Fr,"   
                      if(days[6]==1)  myErgebnis=myErgebnis+"Sa,"
                      
                      return myErgebnis.replace(/(.+),$/,"$1")   
                      
                      }
                      
                      function myMode(mode) {
                      switch (mode) {
                           case 0:
                                  return "Time"
                      
                           case 1: 
                                  return "Sunrise"
                      
                           case 2: 
                                  return "Sunset"
                      
                                
                      
                      }
                        
                      }
                      
                      on({id: dpRefresh, change: "any"}, function (obj) { 
                           var timeout2 = setTimeout(function () {     
                               if(!running) writeHTML(); 
                            }, 1500);
                         });
                      
                      on({id: arrTrigger, ack: false, change: "any"}, function (obj) { 
                        
                          if(!running) writeHTML();
                          if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                      
                           
                         });
                      
                      async function durchArr(){
                      myArr=[]
                      //log("now")
                      $('sonoff.0.*.INFO.IPAddress').each(function(id, i) {           // hier eigene schleife definieren
                              var ida = id.split('.');
                      
                       if(getState("sonoff.0."+ida[2]+".alive").val && parseInt(getState("sonoff.0."+ida[2]+".INFO.Version").val.replace(/^(.).+/,"$1")) >=5) {
                         for (let ii=1;ii<=anzahlTimer;ii++){
                      
                      let myhttp=`http://${getState(id).val}/cm?cmnd=timer${ii}`
                      resolveAfter2Seconds();
                        getData(myhttp,id,getState("sonoff.0."+ida[2]+".INFO.Hostname").val)
                      
                      }}
                      
                      })
                      }
                       
                      function resolveAfter2Seconds() {
                       return new Promise(resolve => {
                         setTimeout(() => {
                           resolve('resolved');
                         }, 1000);
                       });
                      }
                      
                      async function getMyData(myhttp,id,ida)
                      {
                      await getData(myhttp,id,getState("sonoff.0."+ida[2]+".INFO.Hostname").val)
                      }
                      
                      function wait(ms) {
                         return new Promise((resolve) => {
                             setTimeout(resolve, ms);
                         });
                      }
                      async function durchlaufen(){
                        
                         $('sonoff.0.*.INFO.IPAddress').each(async function(id, i) {          
                              var ida = id.split('.');
                              myPower="na";
                              myPower1="na";
                              myPower2="na";
                      
                       if(getState("sonoff.0."+ida[2]+".alive").val && parseInt(getState("sonoff.0."+ida[2]+".INFO.Version").val.replace(/^(.).+/,"$1")) >=5) {
                              if (existsState("sonoff.0."+ida[2]+".POWER")) myPower=getState("sonoff.0."+ida[2]+".POWER").val.toString()
                              if (existsState("sonoff.0."+ida[2]+".POWER1")) myPower1=getState("sonoff.0."+ida[2]+".POWER1").val.toString()
                              if (existsState("sonoff.0."+ida[2]+".POWER2")) myPower2=getState("sonoff.0."+ida[2]+".POWER2").val.toString()      
                         for (let ii=1;ii<=anzahlTimer;ii++){
                      
                             let myhttp=`http://${getState(id).val}/cm?cmnd=timer${ii}`
                      
                            let helpi=getState("sonoff.0."+ida[2]+".INFO.Hostname").val;
                      
                            
                        //  resolveAfter2Seconds();log("!!!!!!")
                            for(let i=0;i<filterArray.length;i++){ await wait(wartezeitInFunction)
                                   if (filterArray[i]==helpi) {  getData(myhttp,id,helpi,myPower,myPower1,myPower2);//log("jetzt wird gefragt");
                                                                if(myPowerOld!=helpi){
                                                                     if (myPower!="na")  arrTrigger.push("sonoff.0."+ida[2]+".POWER");
                                                                     if (myPower1!="na") arrTrigger.push("sonoff.0."+ida[2]+".POWER1");
                                                                     if (myPower2!="na") arrTrigger.push("sonoff.0."+ida[2]+".POWER2");
                                                                     myPowerOld=helpi}
                                                                     zaehlerErfolg=zaehlerErfolg+i}
                            } // await wait(2000)
                      
                          }}
                      
                        });  /*log("bin da");*/      }
                      
                      
                      
                      
                      
                      
                      

                      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                      1 Antwort Letzte Antwort
                      0
                      • SoundyS Soundy

                        @liv-in-sky

                        Wowwww! :-)

                        Nun, das sieht ja mal ganz gut aus, finde ich. Das Anzeigen der Timer wäre mir schon mal eine Hilfe, vielleicht finden wir gemeinsam hier im Forum eine Möglichkeit diese Timer auch über ioBroker zu setzen. Kannst du mal das/die Skript(e) reinstellen? Dann importiere ich mir das mal...

                        liv-in-skyL Offline
                        liv-in-skyL Offline
                        liv-in-sky
                        schrieb am zuletzt editiert von
                        #11

                        @Soundy

                        was meinst du eigentlich mit timer setzen - nur enabeln und disabeln oder mehr - oder möchtest du alles machen können ( anlegen, verändern einzelner einstellungen ?)

                        sollte so funktionieren:

                        • habe die select-widgets nicht "schön" formatiert
                        • es sind nicht alle möglichkeiten integriert - viel arbeit
                        • das einrichten ist auch etwas kompliziert - ich habe noch ein extra script dafür gebraucht
                        • der refresh des ganzen dauert immer ein wenig - das liegt am aufbau der tabelle: diese ist ausgebremst, damit das lesen der sonoffs nicht zu schnell geht

                        smart84.gif

                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                        SoundyS 1 Antwort Letzte Antwort
                        0
                        • liv-in-skyL liv-in-sky

                          @Soundy

                          was meinst du eigentlich mit timer setzen - nur enabeln und disabeln oder mehr - oder möchtest du alles machen können ( anlegen, verändern einzelner einstellungen ?)

                          sollte so funktionieren:

                          • habe die select-widgets nicht "schön" formatiert
                          • es sind nicht alle möglichkeiten integriert - viel arbeit
                          • das einrichten ist auch etwas kompliziert - ich habe noch ein extra script dafür gebraucht
                          • der refresh des ganzen dauert immer ein wenig - das liegt am aufbau der tabelle: diese ist ausgebremst, damit das lesen der sonoffs nicht zu schnell geht

                          smart84.gif

                          SoundyS Offline
                          SoundyS Offline
                          Soundy
                          schrieb am zuletzt editiert von
                          #12

                          @liv-in-sky

                          Prinzipiell wäre Anlegen, Ändern sowie Enable/Disable für mich mal interessiert.

                          Derzeit komme ich mit dem Skript noch nicht ganz klar, es will bei mir absolut nichts ausgeben.

                          Welchen MQTT verwendest du denn? Instanz "sonoff.0" oder "mqtt.0". Versucht habe ich es mit beiden, aber es klappte nicht. Ich habe den Sonoff mal zurück gesetzt und nun den "sonoff.0" verwendet. Auch habe ich alles unter "sonoff.0" entfernt (testweise), damit alle Werte neu geschrieben werden.

                          Aktuell sieht es bei mir so aus:

                          //HIER WIRD PFAD UND FILENAME DEFINIERT
                          const path = "/htmlexample.html";                   //FIlenamen definieren
                          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                          let   braucheEinFile=false;                          // bei true wird ein file geschrieben
                          let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                          let dpVIS="javascript.0.Tasmota.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                          let dpRefresh="javascript.0.Tasmota.TestHTMLRefresh"
                          let mySchedule="  * * * * * ";                       //jede minute  
                          //---------------------------------------
                           
                          var leerzeile=true           ;                            // leerzeile vor neuen kalender
                           
                          var styleUeber="span"
                          var farbeUeber="lightblue"
                          var symbolLink="🌎";
                          var anzahlTimer=5;                                        // wieviele Timer sollen abgefragt werden
                           
                          // var filterArray=["DVES_8CBFCA","Sonoff15","Sonoff16"];      // definiert, welche geräte gecheckt werden (hostname)
                          var filterArray=["DVES_8CBFCA"];      // definiert, welche geräte gecheckt werden (hostname)
                          

                          Die Anzeige im VIS habe ich mal so erledigt:

                          [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{javascript.0.Tasmota.TestHTML}"},"style":{"left":"24px","top":"15px","width":"934px","height":"680px","border-width":"1px","border-style":"solid","border-color":"#efff14"},"widgetSet":"basic"}]
                          

                          Im Prinzip ein "basic HTML", wo ich bei HTML dann {javascript.0.Tasmota.TestHTML} eingefügt habe.

                          Anmerkung 2020-09-06 030955.png Anmerkung 2020-09-06 030954.png

                          liv-in-skyL 2 Antworten Letzte Antwort
                          0
                          • SoundyS Soundy

                            @liv-in-sky

                            Prinzipiell wäre Anlegen, Ändern sowie Enable/Disable für mich mal interessiert.

                            Derzeit komme ich mit dem Skript noch nicht ganz klar, es will bei mir absolut nichts ausgeben.

                            Welchen MQTT verwendest du denn? Instanz "sonoff.0" oder "mqtt.0". Versucht habe ich es mit beiden, aber es klappte nicht. Ich habe den Sonoff mal zurück gesetzt und nun den "sonoff.0" verwendet. Auch habe ich alles unter "sonoff.0" entfernt (testweise), damit alle Werte neu geschrieben werden.

                            Aktuell sieht es bei mir so aus:

                            //HIER WIRD PFAD UND FILENAME DEFINIERT
                            const path = "/htmlexample.html";                   //FIlenamen definieren
                            const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                            let   braucheEinFile=false;                          // bei true wird ein file geschrieben
                            let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                            let dpVIS="javascript.0.Tasmota.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                            let dpRefresh="javascript.0.Tasmota.TestHTMLRefresh"
                            let mySchedule="  * * * * * ";                       //jede minute  
                            //---------------------------------------
                             
                            var leerzeile=true           ;                            // leerzeile vor neuen kalender
                             
                            var styleUeber="span"
                            var farbeUeber="lightblue"
                            var symbolLink="🌎";
                            var anzahlTimer=5;                                        // wieviele Timer sollen abgefragt werden
                             
                            // var filterArray=["DVES_8CBFCA","Sonoff15","Sonoff16"];      // definiert, welche geräte gecheckt werden (hostname)
                            var filterArray=["DVES_8CBFCA"];      // definiert, welche geräte gecheckt werden (hostname)
                            

                            Die Anzeige im VIS habe ich mal so erledigt:

                            [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{javascript.0.Tasmota.TestHTML}"},"style":{"left":"24px","top":"15px","width":"934px","height":"680px","border-width":"1px","border-style":"solid","border-color":"#efff14"},"widgetSet":"basic"}]
                            

                            Im Prinzip ein "basic HTML", wo ich bei HTML dann {javascript.0.Tasmota.TestHTML} eingefügt habe.

                            Anmerkung 2020-09-06 030955.png Anmerkung 2020-09-06 030954.png

                            liv-in-skyL Offline
                            liv-in-skyL Offline
                            liv-in-sky
                            schrieb am zuletzt editiert von liv-in-sky
                            #13

                            @Soundy da wird kein mqtt verwendet - alles über http get

                            wenn du lust hast, lass uns mal eine anydesk oder teamviewer session machen - da kommen wir am schnellsten zur lösung

                            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                            1 Antwort Letzte Antwort
                            0
                            • SoundyS Soundy

                              @liv-in-sky

                              Prinzipiell wäre Anlegen, Ändern sowie Enable/Disable für mich mal interessiert.

                              Derzeit komme ich mit dem Skript noch nicht ganz klar, es will bei mir absolut nichts ausgeben.

                              Welchen MQTT verwendest du denn? Instanz "sonoff.0" oder "mqtt.0". Versucht habe ich es mit beiden, aber es klappte nicht. Ich habe den Sonoff mal zurück gesetzt und nun den "sonoff.0" verwendet. Auch habe ich alles unter "sonoff.0" entfernt (testweise), damit alle Werte neu geschrieben werden.

                              Aktuell sieht es bei mir so aus:

                              //HIER WIRD PFAD UND FILENAME DEFINIERT
                              const path = "/htmlexample.html";                   //FIlenamen definieren
                              const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                              let   braucheEinFile=false;                          // bei true wird ein file geschrieben
                              let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                              let dpVIS="javascript.0.Tasmota.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                              let dpRefresh="javascript.0.Tasmota.TestHTMLRefresh"
                              let mySchedule="  * * * * * ";                       //jede minute  
                              //---------------------------------------
                               
                              var leerzeile=true           ;                            // leerzeile vor neuen kalender
                               
                              var styleUeber="span"
                              var farbeUeber="lightblue"
                              var symbolLink="🌎";
                              var anzahlTimer=5;                                        // wieviele Timer sollen abgefragt werden
                               
                              // var filterArray=["DVES_8CBFCA","Sonoff15","Sonoff16"];      // definiert, welche geräte gecheckt werden (hostname)
                              var filterArray=["DVES_8CBFCA"];      // definiert, welche geräte gecheckt werden (hostname)
                              

                              Die Anzeige im VIS habe ich mal so erledigt:

                              [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{javascript.0.Tasmota.TestHTML}"},"style":{"left":"24px","top":"15px","width":"934px","height":"680px","border-width":"1px","border-style":"solid","border-color":"#efff14"},"widgetSet":"basic"}]
                              

                              Im Prinzip ein "basic HTML", wo ich bei HTML dann {javascript.0.Tasmota.TestHTML} eingefügt habe.

                              Anmerkung 2020-09-06 030955.png Anmerkung 2020-09-06 030954.png

                              liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              schrieb am zuletzt editiert von
                              #14

                              @Soundy

                              was du noch probieren könntest: füge axios in das setting der javscript instanz ein - könnte wichtig sein !

                              Image 2.png

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              SoundyS 1 Antwort Letzte Antwort
                              0
                              • liv-in-skyL liv-in-sky

                                @Soundy

                                ich habe ein script, welches mir die timer anzeigt in der vis und zum setzen wird ein link zum device dargestellt

                                denke nicht, dass du sowas suchst - habe da mal daran gearbeitet - das script könnte noch verbessert werden - sieht dann so aus

                                timer.gif

                                Image 4.png

                                ChaotC Offline
                                ChaotC Offline
                                Chaot
                                schrieb am zuletzt editiert von
                                #15

                                @liv-in-sky Geniale Arbeit von dir (mal wieder).
                                Mir würde schon die Tabelle mit den Timern reichen. Wie liest du die aus?
                                Würdest du die zur Verfügung stellen?

                                @mickym Der Device Manager funktioniert bei mir nicht weil er einen MQTT Broker braucht. Der Sonoff Adapter scheint dafür nicht geeignet.
                                Kennst du eine Lösung ohne den Broker?

                                ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                liv-in-skyL 1 Antwort Letzte Antwort
                                0
                                • ChaotC Chaot

                                  @liv-in-sky Geniale Arbeit von dir (mal wieder).
                                  Mir würde schon die Tabelle mit den Timern reichen. Wie liest du die aus?
                                  Würdest du die zur Verfügung stellen?

                                  @mickym Der Device Manager funktioniert bei mir nicht weil er einen MQTT Broker braucht. Der Sonoff Adapter scheint dafür nicht geeignet.
                                  Kennst du eine Lösung ohne den Broker?

                                  liv-in-skyL Offline
                                  liv-in-skyL Offline
                                  liv-in-sky
                                  schrieb am zuletzt editiert von
                                  #16

                                  @Chaot

                                  script hier : https://forum.iobroker.net/post/484380 - läuft alles über http get befehle (axios)

                                  und in der instanz von javascript im setting axios eintragen https://forum.iobroker.net/post/484764

                                  zum testen das schedule kürzer stellen - jede minute

                                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                  ChaotC 2 Antworten Letzte Antwort
                                  0
                                  • liv-in-skyL liv-in-sky

                                    @Chaot

                                    script hier : https://forum.iobroker.net/post/484380 - läuft alles über http get befehle (axios)

                                    und in der instanz von javascript im setting axios eintragen https://forum.iobroker.net/post/484764

                                    zum testen das schedule kürzer stellen - jede minute

                                    ChaotC Offline
                                    ChaotC Offline
                                    Chaot
                                    schrieb am zuletzt editiert von
                                    #17

                                    @liv-in-sky Ah, Danke. Jetzt wird mir klar warum da nur einer kommt.

                                    ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                    1 Antwort Letzte Antwort
                                    0
                                    • liv-in-skyL liv-in-sky

                                      @Chaot

                                      script hier : https://forum.iobroker.net/post/484380 - läuft alles über http get befehle (axios)

                                      und in der instanz von javascript im setting axios eintragen https://forum.iobroker.net/post/484764

                                      zum testen das schedule kürzer stellen - jede minute

                                      ChaotC Offline
                                      ChaotC Offline
                                      Chaot
                                      schrieb am zuletzt editiert von
                                      #18

                                      @liv-in-sky Danke für die Klasse Arbeit.
                                      Ich habe jetzt nur ein Problem das etwas schräg ist.
                                      Fast alle Geräte mit Timern sind jetzt aktuell aufgeführt.
                                      Aber an meinen Aquarien habe ich 3 Geräte die einfach nicht einlesbar sind. Habe ich da an den Tasmotas irgendwas übersehen?
                                      Hostname(In Tasmota) - AQ-Deko, AQ1Tag, Aquarium2
                                      Name im ioBroker gleich.

                                      ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                      liv-in-skyL 1 Antwort Letzte Antwort
                                      0
                                      • ChaotC Chaot

                                        @liv-in-sky Danke für die Klasse Arbeit.
                                        Ich habe jetzt nur ein Problem das etwas schräg ist.
                                        Fast alle Geräte mit Timern sind jetzt aktuell aufgeführt.
                                        Aber an meinen Aquarien habe ich 3 Geräte die einfach nicht einlesbar sind. Habe ich da an den Tasmotas irgendwas übersehen?
                                        Hostname(In Tasmota) - AQ-Deko, AQ1Tag, Aquarium2
                                        Name im ioBroker gleich.

                                        liv-in-skyL Offline
                                        liv-in-skyL Offline
                                        liv-in-sky
                                        schrieb am zuletzt editiert von liv-in-sky
                                        #19

                                        @Chaot welche tasmota version haben die ?

                                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                        ChaotC 1 Antwort Letzte Antwort
                                        0
                                        • liv-in-skyL liv-in-sky

                                          @Chaot welche tasmota version haben die ?

                                          ChaotC Offline
                                          ChaotC Offline
                                          Chaot
                                          schrieb am zuletzt editiert von
                                          #20

                                          @liv-in-sky Das ist ja das rätselhafte.
                                          Gemischt zwischen 8.2.0.1 bis 8.4.0.2. Die anderen (die funktionieren) auch.

                                          ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                                          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
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          517

                                          Online

                                          32.7k

                                          Benutzer

                                          82.4k

                                          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