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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Script Radar-Kontrolle und Koordinaten Übersetzer

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

Script Radar-Kontrolle und Koordinaten Übersetzer

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
94 Beiträge 10 Kommentatoren 10.5k Aufrufe 11 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.
  • liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    schrieb am zuletzt editiert von liv-in-sky
    #1

    wer möchte testen - anzeige, ob auf dem arbeitsweg (oder anderes) eine radarkontolle ist

    es werden die daten von blitzer.de abholt und mit opencagedata.com werden die koordinaten in straßennamen verwandelt - sollte auch für länder um deutschland herum funktionieren

    • gebraucht wird ein account und der api key von: https://opencagedata.com/ - kostenlos
    • datenpunkte sind unter javascript.x.CheckRadar
    • die koordinaten von und zurück zum wohnort müssen beide eingegeben werden - also für hinfahrt die koordinaten und für die rückfahrt die koordinaten
    • bitte das ergebnis auch mit der karte auf blitzer.de gegen-checken
    • es können auch einfach nur die adresse zu koordinaten abgefragt werden - siehe bild unten

    //by @liv-in-sky   15.1.2021 13:10
    //dank an @JayR  https://forum.iobroker.net/topic/37979/blitzer-%C3%BCber-api-abfragen
    
    const  myBASE_URL="https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box="
    const config = getObject('system.config');
    const mylat =  config.common.latitude; //*/"48.427656" //
    const mylong = config.common.longitude; //*/"13.211891"// 48.427656, 13.211891
    
    
    
    //WICHTIG - IN BEIDE RICHTUNGEN EINTRAGEN
    const myLATITUDE_START= [mylat      ,"48.402426",mylat      ,"48.647364",mylat      ,"48.566209",mylat      ,"48.474108",mylat      ,"48.827975"];  //Daheim,Freising,Daheim,Mainburg,Daheim,Au,Dahei,Moosburg.Daheim,Gögging
    const myLONGITUDE_START=[mylong     ,"11.744568",mylong     ,"11.784530",mylong     ,"11.741535",mylong     ,"11.967363",mylong     ,"11.778147"];
    const myLATITUDE_DEST=  ["48.402426",mylat      ,"48.647364",mylat      ,"48.566209",mylat      ,"48.474108",mylat      ,"48.827975",mylat      ];       //Freising,Daheim,Mainburg,Daheim,Au,Daheim,Moosburg,Daheim,Gögging,Daheim
    const myLONGITUDE_DEST= ["11.744568",mylong     ,"11.784530",mylong     ,"11.741535",mylong     ,"11.967363",mylong     ,"11.778147",mylong     ];
    
    
    const APIKEY_GEOCODING="4dd2056xxxxxxxxxxxxxxx
    
    const myStandardMarker=mylat+","+mylong  //          
    
    let mySchedule="  */15 8-20 * * *"
    
    let myRes=[];
    let kurzBlitzerAnzeige=[];
    let counterAbfrage;
    let myAddressDatabase=[];
    
    function getContent( LATITUDE_START,LONGITUDE_START,LATITUDE_DEST,LONGITUDE_DEST) {
       // kein async!
       return new Promise((resolve) => {
          
           // kein async!
           const url = myBASE_URL + LATITUDE_START + "," + LONGITUDE_START + "," + LATITUDE_DEST + "," + LONGITUDE_DEST
         //  log(url)
           request(url, function (err, response, json) { //log(json.length);log(err)
                                                                                                      //    let  myjson=Testing2
                                                                                                      //    log("get die Blitzer  "+myjson.pois[0].lat)
        //   log(JSON.stringify(response))
          // log(json)
           //log(response.body)
           //log(json.indexOf("<"))
           json=json.replace(/\n/gm,"")
                     if(json.indexOf("<")>=0)  json=json.replace(/.+?({.+)/,"$1")      
                      ////  log(json)  
            if(err==null && json.length>25) {////log("hat key")
                                                                                                      //  if(json.length>25 && err==null) {log("hat key") 
                                                                                                    
                        const myjson = JSON.parse(json).pois;
                   ////     log(JSON.stringify(json))
                        let myBlitzRes=[]; let myOldLat=""; let myOldLng="";
                           for(let i=0;i<myjson.length;i++){
                             if(myOldLat!=myjson[0].lat && myOldLng!=myjson[0].lng )            //  for(let i=0;i<myjson.pois.length;i++){
                                     myBlitzRes.push({
                                             lat: myjson[0].lat,
                                             lng: myjson[0].lng
                                                                                                      //   lat: myjson.pois[0].lat,
                                                                                                      // lng: myjson.pois[0].lng
                                     });
                                     myOldLat=myjson[0].lat
                                     myOldLng=myjson[0].lng
    
                           } resolve(myBlitzRes)
           } else{resolve(["empty"])}
           });
       });
    }
    
    
    function getAddress(lat, long) {
    
       // kein async!
       return new Promise((resolve) => {
    
       let gefunden=false
       for (let i=0;i<myAddressDatabase.length;i++){
           if(lat==myAddressDatabase[i].lat && long==myAddressDatabase[i].long){
               myRes=myAddressDatabase[i].address
               gefunden=true
           }
       }
     if(gefunden) {//log("hab es gefunden " + myRes);
                   resolve(myRes)} else{
            counterAbfrage++;
           // kein async!
           let geoCodeUrl = 'https://api.opencagedata.com/geocode/v1/json'
           geoCodeUrl = geoCodeUrl + '?' + 'key=' + APIKEY_GEOCODING + '&q=' + lat + ',' + long + '&pretty=1'
         //  log(geoCodeUrl)
           request(geoCodeUrl, function (err, response, json) {
             //  log(JSON.parse(json).results[0].formatted);
             if (err==null){
                 // log(JSON.stringify(response))
         //  log("--------------- "+json)
           //log(response.body)
               const myRes = JSON.parse(json).results[0].formatted;
               // Direkte Rückgabe des Wertes:
               //log(myRes)
               myAddressDatabase.push({
                   "lat":lat,
                   "long":long,
                   "address":myRes
               })
               resolve(myRes)} else {resolve("keine Adress-Auflösung möglich")}
           });
       }
       });
    }
    
    async function doStuff() {
       kurzBlitzerAnzeige=[];
       //für einzelne Koordinaten Abfrage 
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.Daheim"))) {
           await createStateAsync("CheckRadar.Daheim", myStandardMarker,{type: "string", name: "Daheim", role: "value", read: true, write: true, } ); }
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.MYBlitzer"))) {
           await createStateAsync("CheckRadar.MYBlitzer", "",{type: "string", name: "MYBlitzer-für Überwachung", role: "value", read: true, write: true, } ); }        
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage"))) {
           await createStateAsync("CheckRadar.EinzelAbfrage.Abfrage", "leer", {type: "string", name: "Einzelabfrage Abfrage - Komma Sep", role: "value", read: true, write: true, } ); }
       //if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.AbfrageLng"))) {
         //  await createStateAsync("CheckRadar.EinzelAbfrage.AbfrageLng", {type: "string", name: "Einzelabfrage AbfrageLng", role: "value", read: true, write: true, } ); }   
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage-Ergebnis"))) {
           await createStateAsync("CheckRadar.EinzelAbfrage.Abfrage-Ergebnis", "leer",{type: "string", name: "Einzelabfrage Abfrage-Ergebnis", role: "value", read: true, write: true, } ); }      
       //-------------------------------
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar.DailyAbrage"))) {
           counterAbfrage=0;//log( counterAbfrage.toString())
           await createStateAsync("CheckRadar.DailyAbrage", 0,{type: "number", name: "DailyAbrage-Koordinaten", role: "value", read: true, write: true, } ); }
                                                                                       else{counterAbfrage= (await getStateAsync("javascript." + instance + ".CheckRadar.DailyAbrage")).val}
       for(let b=0;b<myLATITUDE_START.length;b++){
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer"))) {
           await createStateAsync("CheckRadar."+b+".StandortBlitzer", {type: "string", name: "StandortBlitzer", role: "value", read: true, write: true, } ); }
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten1"))) {
           await createStateAsync("CheckRadar."+b+".StandortBlitzerKoordinaten1", {type: "string", name: "StandortBlitzerKoordinaten1", role: "value", read: true, write: true, } ); } 
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten2"))) {
           await createStateAsync("CheckRadar."+b+".StandortBlitzerKoordinaten2", {type: "string", name: "StandortBlitzerKoordinaten2", role: "value", read: true, write: true, } ); }
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer"))) {
           await createStateAsync("CheckRadar."+b+".ZusätzlicheBlitzer", "",{type: "string", name: "ZusätzlicheBlitzer", role: "value", read: true, write: true, } ); }   
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".StandardMarker"))) {
           await createStateAsync("CheckRadar."+b+".StandardMarker", {type: "string", name: "StandardMarker", role: "value", read: true, write: true, } ); }                
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".Abfahrt"))) {
           await createStateAsync("CheckRadar."+b+".Abfahrt", {type: "string", name: "Start", role: "value", read: true, write: true, } ); }
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".Destination"))) {
           await createStateAsync("CheckRadar."+b+".Destination", {type: "string", name: "Destination", role: "value", read: true, write: true, } ); }  
       if (!(await existsStateAsync("javascript." + instance + ".CheckRadar."+b+".ZielKoordinaten"))) {
           await createStateAsync("CheckRadar."+b+".ZielKoordinaten", {type: "string", name: "ZielKoordinaten -  wenn nicht Daheim", role: "value", read: true, write: true, } ); }  
    
    //   for(let c=0;c<myLATITUDE_DEST.length;c++){
           if(myLATITUDE_DEST[b]!=mylat) await setStateAsync("javascript." + instance + ".CheckRadar."+b+".ZielKoordinaten",myLATITUDE_DEST[b]+","+myLONGITUDE_DEST[b])
      // }    
    
      // await setStateAsync("javascript." + instance + ".CheckRadar.MYBlitzer","")
       const myBlitzer = await getContent(myLATITUDE_START[b],myLONGITUDE_START[b],myLATITUDE_DEST[b],myLONGITUDE_DEST[b]);
       ////log("meine blitzer  "+JSON.stringify(myBlitzer))
       //let myVon=await getAddress(myLATITUDE_START[b],myLONGITUDE_START[b])
        setState("javascript." + instance + ".CheckRadar."+b+".Abfahrt",await getAddress(myLATITUDE_START[b],myLONGITUDE_START[b]))
     //  let myNach=await getAddress(myLATITUDE_DEST[b],myLONGITUDE_DEST[b])
        setState("javascript." + instance + ".CheckRadar."+b+".Destination",await getAddress(myLATITUDE_DEST[b],myLONGITUDE_DEST[b]))
    //   log(myVon+"  "+myNach)
       let myRes2=[];
       if(myBlitzer[0]!="empty") {
           setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten1",myBlitzer[0].lat+","+myBlitzer[0].lng);
           setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzerKoordinaten2",myBlitzer[0].lat+";"+myBlitzer[0].lng);
           setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myBlitzer[0].lat+";"+myBlitzer[0].lng);
          
             //   log(myBlitzer[0].lat);  log(myBlitzer[0].lng)
                 
                for(let i=0;i<myBlitzer.length;i++){
                  //  await getAddress(myBlitzer[i].lat, myBlitzer[i].lng);
                    myRes2.push(await getAddress(myBlitzer[i].lat, myBlitzer[i].lng))
                } 
                //log(myRes.toString())
               //// log( "------"+myRes.toString())
                 kurzBlitzerAnzeige.push(myRes2[0]);
                setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer",myRes2[0]);log(myRes2[0])
                let addBlitzer=""
                for( let a=1;a<myRes2.length;a++){
                     if(myRes2[a]!=myRes2[a-1]){; //log(a+":"+myRes[a]);setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",myRes[a]);
                                              addBlitzer=addBlitzer+";"+myRes2[a] }
                }  setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",addBlitzer);
                
                //setState("javascript." + instance + ".CheckRadar."+b+".ZusätzlicheBlitzer",myRes[1]);
             //   setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myRes[0]);
            
    } else {/*log("KEINE BLITZER !!!!!");*/ setState("javascript." + instance + ".CheckRadar."+b+".StandortBlitzer","Keine Blitzer");
                                       setState("javascript." + instance + ".CheckRadar."+b+".StandardMarker",myStandardMarker);
    }  setState("javascript." + instance + ".CheckRadar.DailyAbrage",counterAbfrage) ;
      
    
    }
    let alterWert="";let myGesamt=""
    //log(kurzBlitzerAnzeige.length.toString())
    for(let d=0;d<kurzBlitzerAnzeige.length;d++) {
           if(alterWert!=kurzBlitzerAnzeige[d]) { //log("alt: "+alterWert+"    neu: "+kurzBlitzerAnzeige[d])
               myGesamt=myGesamt+kurzBlitzerAnzeige[d].replace(", Germany","")+"</br>"
               alterWert=kurzBlitzerAnzeige[d] }
      } setState("javascript." + instance + ".CheckRadar.MYBlitzer",myGesamt)
       }
    
    
    schedule( mySchedule, function () { 
    doStuff();
    });
    doStuff();
    
    schedule("0 0 * * *", async function () {
    setState("javascript." + instance + ".CheckRadar.DailyAbrage",0) 
    });
    
    on({id: "javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage", change: "any"}, async function (obj) {
     var value = obj.state.val;
     var oldValue = obj.oldState.val;
     if (existsState("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage") && getState("CheckRadar.EinzelAbfrage.Abfrage").val!="leer") {
     let myValueArr=value.split(",")
     let myAbfrage=await getAddress(myValueArr[0],myValueArr[1]);
     setState("javascript." + instance + ".CheckRadar.EinzelAbfrage.Abfrage-Ergebnis",myAbfrage)
     setState("javascript." + instance + ".CheckRadar.DailyAbrage",counterAbfrage)}
    });
    
    
    
    
    
    
    

    • minimale ansicht
      Image 1.png

       //@liv-in-sky 2020  5.11.2020-17: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=true;                          // 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 mySchedule1=" */7 * * * * ";                       //  
    
    let keineBlitzerAnzeigen=false;                      //bei false  wird alles angezeigt
    
    let farbeError="lightblue"
    let styleError="b" 
    //---------------------------------------
    
    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
    var htmlFeld1='Instanz';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
    var htmlFeld2='Alive';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
    var htmlFeld3='Status';         var Feld3lAlign="right";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
    //-----------------------------------
    
    
    //hier werden die styles für die tabelle definiert
    //ÜBERSCHRIFT ÜBER TABELLE
    let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
    let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
    const htmlFeldUeber='ioBroker Dienste';              // Ü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="3";                   // Linie nur unter Spaltenüberschrift - 
    const farbeLinieUnterUeberschrift="white";
    const groesseUeberschrift=16;
    const UeberschriftStyle="normal"                     // möglich "bold"
    //GANZE TABELLE
    let abstandZelle="1";
    let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let farbeGeradeZeilen="#151515";                        //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=false;                // ein- oder ausblenden der spatlen-überschriften
    const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
    const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
    const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
    const htmlFarbTableColorGradient2="#424242";          //  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="none";                            // 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;  http-equiv=\"refresh\" content=\"30\"; 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>";
    /*
    table td:first-child {}  //1
    table td:nth-child(2) {} //2
    table td:nth-child(3) {} //3
    table td:last-child {}   //4
    */
    
    //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
    
       	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>";
    var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                       "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
    //------------------------------------------------------
    
    
    var htmlTabUeber="";
    var htmlOut="";
    var mix;
    var counter;
    //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
    var val1; var val0; var val2;
    
    function writeHTML(){
    
    
    htmlOut="";
    htmlTabUeber2=""
    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_1+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 !!!---------------------------------------------------------------------
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    
    let mySelktor="javascript."+instance+".CheckRadar.*.StandortBlitzer"
    $(mySelktor).each(function(id, i) {           // hier eigene schleife definieren
            var ida = id.split('.');
             if(existsState(id) && existsState(id.replace("StandortBlitzer","Abfahrt")) && existsState(id.replace("StandortBlitzer","Destination"))) {
              if(keineBlitzerAnzeigen){   
                 if(getState(id).val!="Keine Blitzer") {  
                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                 val0=getState(id.replace("StandortBlitzer","Abfahrt")).val.replace(/.+, \d+ (.+),.+/,"$1")
                 val1=getState(id.replace("StandortBlitzer","Destination")).val.replace(/.+, \d+ (.+),.+/,"$1")
                 getState(id).val!="Keine Blitzer" ? val2="<font color=\""+farbeError+"\"><"+styleError+">"+getState(id).val.replace(", Germany","")  : val2=getState(id).val.replace(", Germany","") 
                 tabelleBind(); }            
                 } else{
                      counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                      val0=getState(id.replace("StandortBlitzer","Abfahrt")).val.replace(/.+, \d+ (.+),.+/,"$1")
                      val1=getState(id.replace("StandortBlitzer","Destination")).val.replace(/.+, \d+ (.+),.+/,"$1")
                      getState(id).val!="Keine Blitzer" ? val2="<font color=\""+farbeError+"\"><"+styleError+">"+getState(id).val.replace(", Germany","")  : val2=getState(id).val.replace(", Germany","")
                      tabelleBind();
                 }
    
          //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
              
    } }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
    
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    
          tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
         
    } // function ende
    
    //MAIN:
     
    schedule(mySchedule1,  function () { 
     writeHTML();
     if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }); 
    writeHTML();                                   //     <tdalign
    
     function tabelleBind(){
       //  counter=counter+mehrfachTabelle;
           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></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></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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\" align="+Feld3lAlign+">&ensp;"+val2+"&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></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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&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></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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                   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=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            "; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                              } 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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&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=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&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></tr>";}
                                              } break;}                                          
    
    
             case 4:  // counter=counter+8;
                       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  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                       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=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                    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></tr>";} //teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } 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  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                       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=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                    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></tr>";} // teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } break;}                                    
            } //switch ende
    
    }
    
    function tabelleFinish() {
    
    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></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></tr>");        
                     if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</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></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></tr>");
                     if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</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></tr>");    
                     if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&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></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);
    
    
    }
    
    
    
    
    

    • ganze tabelle

    Image 4.png

     //@liv-in-sky 2020  5.11.2020-17: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=true;                          // 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 mySchedule1=" */7 * * * * ";                       //jede minute  
    
    let farbeError="lightblue"
    let styleError="b" 
    //---------------------------------------
    
    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
    var htmlFeld1='VON';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
    var htmlFeld2='';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
    var htmlFeld3='NACH';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
    var htmlFeld4='';        var Feld4lAlign="center";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
    var htmlFeld5='BLITZER';        var Feld5lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
    
    //-----------------------------------
    
    
    //ÜBERSCHRIFT ÜBER TABELLE
    let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
    let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
    const htmlFeldUeber='ioBroker Instanzen';              // Ü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="lightblue";
    const htmlFarbZweiteTabelle="lightblue";                // Farbe der Überschrift bei jeder 2.ten Tabelle
    const htmlFarbTableColorUber="lightblue";               // Ü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="3";                   // Linie nur unter Spaltenüberschrift - 
    const farbeLinieUnterUeberschrift="lightblue";
    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="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let weite="650";                                     //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="13px";
    //FELDER UND RAHMEN
    let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
    const htmlFarbFelderschrift="#3ca1c3";                  // SchriftFarbe der Felder
    const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
    const htmlFarbTableColorGradient1="blue";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
    const htmlFarbTableColorGradient2="black";          //  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="rows";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
    const htmlSpalte1Weite="150";                   //  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 align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&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>";
                           //------------------------------------------------------
    
    
    
    var htmlOut="";
    var mix;
    var counter;
    var val1; var val2; var val0; var val3; var val4;
    var htmlTabUeber="";
    function writeHTML(){
    
    
    
    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!!!------------------------------------------------------------
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    
    let mySelktor="javascript."+instance+".CheckRadar.*.StandortBlitzer"
    $(mySelktor).each(function(id, i) {           // hier eigene schleife definieren
            var ida = id.split('.');
             if(existsState(id) && existsState(id.replace("StandortBlitzer","Abfahrt")) && existsState(id.replace("StandortBlitzer","Destination"))) {
              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
              val0=getState(id.replace("StandortBlitzer","Abfahrt")).val.replace(", Germany","")
              val1=" ▶️▶️▶️ "
              val2=getState(id.replace("StandortBlitzer","Destination")).val.replace(", Germany","")
              val3=" ▶️▶️▶️ "
              getState(id).val!="Keine Blitzer" ? val4="<font color=\""+farbeError+"\"><"+styleError+">"+getState(id).val.replace(", Germany","")  : val4=getState(id).val.replace(", Germany","") 
    
    
         tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
        
       }})
    
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    
          tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
         
    } // function ende
    
    //MAIN:
     
    schedule(mySchedule1,  function () {
     writeHTML();
     if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }); 
     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+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>"; break; } else
                                      {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>"; break; } 
           
            case 2: if(counter%4==0){
                       if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld5lAlign+">"+val4+"</td>"; } 
                                  else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";} break;
                   }else{
                                  if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                  else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} break;}
                                       
            case 3:  if(counter%2==0)   {
                     if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td  align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                  else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\" color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                   else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";}
                                             } break;} else{
                     if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>"; } 
                                  else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                   else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td align="+Feld5lAlign+">"+val4+"</td></tr>";}
                                             } break; }
    
            case 4:  if(counter%8==0)   {
                     if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val4+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val3+"</td>"; } 
                                      else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                   else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} 
                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</td>";}}
                                             } break;} else{
                     if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val3+"</td>"; } 
                                      else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">"+val4+"</td>";} 
                                                   else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">"+val0+"</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val1+"</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val2+"</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val3+"</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">"+val4+"</td></tr>";} 
                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >"+val0+"</td><td align="+Feld2lAlign+">"+val1+"</td><td align="+Feld3lAlign+">"+val2+"</td><td align="+Feld4lAlign+">"+val3+"</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld5lAlign+">"+val4+"</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></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></tr>");        
                     if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</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></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></tr>");
                     if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</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></tr>");    
                     if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&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);
     
    
    
    }
    
    
    
    

    • landkartenansicht:
      siehe:
      https://forum.iobroker.net/post/516400

    anim-gif14.gif
    zusatztrick mit eigenem icon für zuhause:
    Image 15.png

    leider kann ich keine route bestimmen - blitzer de nimmt einfach alle möglichen routen bzw evtl sogar nur einen umkreis und zeigt alle blitzer an
    um das auszuwerten, ob das in der route liegen kann, müßte ich das selbst berechnen - zum einen glaube ich, bekomm ich das mathematisch nicht hin und zum anderen kenne ich keine seite, die mir das ausrechnen könnte
    ich bräuchte den abstand zwischen den beiden punkten und müßte kontrollieren, ob der blitzer da drin liegt
    
    sorry - besser gehts im moment nicht
    

    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

    O 1 Antwort Letzte Antwort
    3
    • liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von liv-in-sky
      #2

      Script wurde upgedatet -

      möchte man das script nur als übersetzer von koordinaten zu einer adresse nutzen, ist das auch möglich - wenn die const myLATITUDE_START=[] (also leer ist) wird keine route berechnet, aber das script wartet auf koordinaten zur adressübersetzung

      falls das alte script schon lief, alle datenpunkte löschen - habe sie unbenannt

      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

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

        Script wurde upgedatet -

        möchte man das script nur als übersetzer von koordinaten zu einer adresse nutzen, ist das auch möglich - wenn die const myLATITUDE_START=[] (also leer ist) wird keine route berechnet, aber das script wartet auf koordinaten zur adressübersetzung

        falls das alte script schon lief, alle datenpunkte löschen - habe sie unbenannt

        grrfieldG Offline
        grrfieldG Offline
        grrfield
        schrieb am zuletzt editiert von
        #3

        Danke - Funktioniert super! Hat beim Installieren auch gleich einen Blitzer auf meinem Weg gemeldet. Könntest Du vielleicht noch einen State vorsehen, in dem steht, ob auf irgendeinem der Wege ein Blitzer erkannt wurde oder auch die Gesamtzahl der erkannten Blitzer - z. B. "CheckRadar.BlitzerErkannt" {type: 'boolean'} oder {type: 'number'}'? Damit ließe sich in Vis einfach ein eine View anzeigen oder verbergen, wenn auf einem der Wege Blitzer sind. Ich könnte das auch selbst einbauen, müßte dann Dein Skript aber bei jeder Änderung neu anpassen.

        liv-in-skyL 1 Antwort Letzte Antwort
        0
        • grrfieldG grrfield

          Danke - Funktioniert super! Hat beim Installieren auch gleich einen Blitzer auf meinem Weg gemeldet. Könntest Du vielleicht noch einen State vorsehen, in dem steht, ob auf irgendeinem der Wege ein Blitzer erkannt wurde oder auch die Gesamtzahl der erkannten Blitzer - z. B. "CheckRadar.BlitzerErkannt" {type: 'boolean'} oder {type: 'number'}'? Damit ließe sich in Vis einfach ein eine View anzeigen oder verbergen, wenn auf einem der Wege Blitzer sind. Ich könnte das auch selbst einbauen, müßte dann Dein Skript aber bei jeder Änderung neu anpassen.

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

          @grrfield

          bisher habe ich so eine übersicht

          Image 4.png

          ich habe noch ein wenig probleme zu erkennen, was es eigentlich anzeigt

          • einmal zeigte es mir nur einen blitzer an, wenn die richtige richtung im script angegeben war (nur bei hin - nicht bei zurück)
          • gestern zeigte es einen blitzer in beiden routen (hin und zurück) an
          • wenn mehrere blitzer auf einer tour angezeigt werden (was bisher nur einmal war), ist das im moment nicht berücksichtigt - arbeite dran
          • die routen von blitzer sind eher seltsam - es kommen blitzer vor, die eigentlich eher im umkreis der routen liegen - wie im beispielbild - 2te zeile - von freising zu mir nachhause komme ich niemals in Oberding vorbei - ich kannte das nicht mal - auf der karte sieht es so aus

          Image 5.png

          ich schau mal wegen dem datenpunkt

          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

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

            @grrfield

            bisher habe ich so eine übersicht

            Image 4.png

            ich habe noch ein wenig probleme zu erkennen, was es eigentlich anzeigt

            • einmal zeigte es mir nur einen blitzer an, wenn die richtige richtung im script angegeben war (nur bei hin - nicht bei zurück)
            • gestern zeigte es einen blitzer in beiden routen (hin und zurück) an
            • wenn mehrere blitzer auf einer tour angezeigt werden (was bisher nur einmal war), ist das im moment nicht berücksichtigt - arbeite dran
            • die routen von blitzer sind eher seltsam - es kommen blitzer vor, die eigentlich eher im umkreis der routen liegen - wie im beispielbild - 2te zeile - von freising zu mir nachhause komme ich niemals in Oberding vorbei - ich kannte das nicht mal - auf der karte sieht es so aus

            Image 5.png

            ich schau mal wegen dem datenpunkt

            grrfieldG Offline
            grrfieldG Offline
            grrfield
            schrieb am zuletzt editiert von
            #5

            @liv-in-sky Ich habe mich auch schon gefragt, wie die Routen berechnet werden - es gibt ja immer mehrere Möglichkeiten, zum Ziel zu kommen. Wenn mal ein Blitzer in der Umgebung zuviel gefunden wird, ist das ja nicht so schlimm ;-) Bei mir wurden heute zweimal Blitzer in beiden Richtungen angezeigt.
            Ich habe in meiner Vis auf einem Tablet neben der Haustür ein "Service"-Feld, das normalerweise leer ist und in dem Karten zu Störungsmeldungen (z. B. Homematic-Servicemeldungen, Duty-Cycle usw.) priorisiert angezeigt werden können. Dort möchte ich eine Radarwarnung einblenden, wenn auf meiner Strecke Störungen sind - für eine Strecke habe ich das jetzt bereits angepaßt.

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

              @grrfield

              bisher habe ich so eine übersicht

              Image 4.png

              ich habe noch ein wenig probleme zu erkennen, was es eigentlich anzeigt

              • einmal zeigte es mir nur einen blitzer an, wenn die richtige richtung im script angegeben war (nur bei hin - nicht bei zurück)
              • gestern zeigte es einen blitzer in beiden routen (hin und zurück) an
              • wenn mehrere blitzer auf einer tour angezeigt werden (was bisher nur einmal war), ist das im moment nicht berücksichtigt - arbeite dran
              • die routen von blitzer sind eher seltsam - es kommen blitzer vor, die eigentlich eher im umkreis der routen liegen - wie im beispielbild - 2te zeile - von freising zu mir nachhause komme ich niemals in Oberding vorbei - ich kannte das nicht mal - auf der karte sieht es so aus

              Image 5.png

              ich schau mal wegen dem datenpunkt

              grrfieldG Offline
              grrfieldG Offline
              grrfield
              schrieb am zuletzt editiert von
              #6

              @liv-in-sky Was mir gerade noch eingefallen ist: Bei einer Radarwarnung könnte noch eine Telegram-Message abgesendet werden: z. B. unter
              if(myBlitzer[0]!="empty") {
              in Zeile 120 etwas wie
              sendTo("telegram.0", {
              text: "Blitzer entdeckt: "+myRes[0]
              });
              einfügen.

              liv-in-skyL 1 Antwort Letzte Antwort
              0
              • grrfieldG grrfield

                @liv-in-sky Ich habe mich auch schon gefragt, wie die Routen berechnet werden - es gibt ja immer mehrere Möglichkeiten, zum Ziel zu kommen. Wenn mal ein Blitzer in der Umgebung zuviel gefunden wird, ist das ja nicht so schlimm ;-) Bei mir wurden heute zweimal Blitzer in beiden Richtungen angezeigt.
                Ich habe in meiner Vis auf einem Tablet neben der Haustür ein "Service"-Feld, das normalerweise leer ist und in dem Karten zu Störungsmeldungen (z. B. Homematic-Servicemeldungen, Duty-Cycle usw.) priorisiert angezeigt werden können. Dort möchte ich eine Radarwarnung einblenden, wenn auf meiner Strecke Störungen sind - für eine Strecke habe ich das jetzt bereits angepaßt.

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

                @grrfield letztlich kommt es darauf an, wieviele routen man selbst oder evtl noch für den partner anzeigen möchte

                daher habe ich die tabelle oben gemacht - die sehr viel platz braucht - man könnte auch das table script ändern und nur felder mit blitzer anzeigen lassen - ohne von und zu - vileicht von un zu nur mit stadt namen - dann ist alles viel kleiner

                ich mach mal eine kleine version

                das mit dem telegram ist sicher gut - aber das mussman über ein eigenes blockly machen- es gibt ja so viele melde-geber: mail, echo, whatsapp, sayit, ..... - da werd ich nicht mehr fertig -)

                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
                • grrfieldG grrfield

                  @liv-in-sky Was mir gerade noch eingefallen ist: Bei einer Radarwarnung könnte noch eine Telegram-Message abgesendet werden: z. B. unter
                  if(myBlitzer[0]!="empty") {
                  in Zeile 120 etwas wie
                  sendTo("telegram.0", {
                  text: "Blitzer entdeckt: "+myRes[0]
                  });
                  einfügen.

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

                  @grrfield

                  was hälst du von sowas - minimal ansicht - im moment habe ich die keine blitzer eingeblendet, weil keiner da ist - normal sollen nur zeilen angezeigt werden, die blitzer haben

                  Image 6.png

                  das ganze ist dann ziemlich klein und kann in einer ecke angezeigt werden

                  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

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

                    @grrfield

                    was hälst du von sowas - minimal ansicht - im moment habe ich die keine blitzer eingeblendet, weil keiner da ist - normal sollen nur zeilen angezeigt werden, die blitzer haben

                    Image 6.png

                    das ganze ist dann ziemlich klein und kann in einer ecke angezeigt werden

                    grrfieldG Offline
                    grrfieldG Offline
                    grrfield
                    schrieb am zuletzt editiert von
                    #9

                    @liv-in-sky Sieht gut aus, aber die Spalte für die Blitzer (wo die eigentliche Information steht) ist im Verhältnis zu den anderen ziemlich klein. Ich habe das jetzt erstmal so gelöst:
                    Blitzer.png
                    (Die Farben kommen auf dem Tablet etwas anders raus)
                    Die Strecke wollte ich noch in der Überschrift Radarkontrolle unterbringen, und bei Blitzern auf mehreren Strecken erscheint der nächste dann darunter.

                    liv-in-skyL 1 Antwort Letzte Antwort
                    0
                    • grrfieldG grrfield

                      @liv-in-sky Sieht gut aus, aber die Spalte für die Blitzer (wo die eigentliche Information steht) ist im Verhältnis zu den anderen ziemlich klein. Ich habe das jetzt erstmal so gelöst:
                      Blitzer.png
                      (Die Farben kommen auf dem Tablet etwas anders raus)
                      Die Strecke wollte ich noch in der Überschrift Radarkontrolle unterbringen, und bei Blitzern auf mehreren Strecken erscheint der nächste dann darunter.

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

                      @grrfield im ersten post sind noch neue tabellen scripte - aber du hast ja schon eine lösung gefunden

                      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

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

                        @grrfield im ersten post sind noch neue tabellen scripte - aber du hast ja schon eine lösung gefunden

                        grrfieldG Offline
                        grrfieldG Offline
                        grrfield
                        schrieb am zuletzt editiert von
                        #11

                        @liv-in-sky Danke, schaue ich mir. Die hatte ich noch gar nicht gesehen.

                        1 Antwort Letzte Antwort
                        0
                        • liv-in-skyL Offline
                          liv-in-skyL Offline
                          liv-in-sky
                          schrieb am zuletzt editiert von
                          #12

                          jetzt habe ich wieder so einen "wirren" fall - die gelben striche ist: daheim

                          Image 1.png

                          daheim - freising nix
                          freising - daheim - blitzer

                          daher der rat , immer beide richtungen als route eintragen

                          obwohl - in keiner route würde man über Volkenschwand fahren - in einer route könne man das . die 2te route müßte man 15km nach norden fahren um dann 35 km nach süden zu fahren

                          aber besser eine meldung zu viel - als zu wenig

                          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

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

                            jetzt habe ich wieder so einen "wirren" fall - die gelben striche ist: daheim

                            Image 1.png

                            daheim - freising nix
                            freising - daheim - blitzer

                            daher der rat , immer beide richtungen als route eintragen

                            obwohl - in keiner route würde man über Volkenschwand fahren - in einer route könne man das . die 2te route müßte man 15km nach norden fahren um dann 35 km nach süden zu fahren

                            aber besser eine meldung zu viel - als zu wenig

                            grrfieldG Offline
                            grrfieldG Offline
                            grrfield
                            schrieb am zuletzt editiert von
                            #13

                            @liv-in-sky Bei mir auch gerade: ein Blitzer wird nur auf dem Hinweg angezeigt, und der ist auch noch in vollkommen anderer Richtung 9 km von meiner Route entfernt. Ist aber nicht so schlimm, Hauptsache man bekommt eine Warnung und kann dann selbst einschätzen, ob man da langfährt. Die einzige Gefahr ist, daß mehrere Blitzer da sind und nur der "falsche" angezeigt wird.

                            liv-in-skyL 1 Antwort Letzte Antwort
                            0
                            • grrfieldG grrfield

                              @liv-in-sky Bei mir auch gerade: ein Blitzer wird nur auf dem Hinweg angezeigt, und der ist auch noch in vollkommen anderer Richtung 9 km von meiner Route entfernt. Ist aber nicht so schlimm, Hauptsache man bekommt eine Warnung und kann dann selbst einschätzen, ob man da langfährt. Die einzige Gefahr ist, daß mehrere Blitzer da sind und nur der "falsche" angezeigt wird.

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

                              @grrfield check ich nochmal im script

                              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
                              • liv-in-skyL Offline
                                liv-in-skyL Offline
                                liv-in-sky
                                schrieb am zuletzt editiert von liv-in-sky
                                #15

                                script im ersten post upgedatet!

                                @grrfield - habe einen zusätzlichen datenpunkt, der zusätzliche blitzer pro route anzeigt - habe bis jetzt keine - wäre gut, wenn du das testen könntest und den dp beobachtest - ob überhaupt mal etwas reingeschrieben wird

                                @ALL
                                landkarte mit blitzer und heimatkoordinaten

                                mit dem open street map widget kann man sich das ganze auf karte angezeigt werden - es gibt dafür neue datenpunkte, die marker dafür schreiben. grundsätzlich werden routen, die keinen blitzer haben auf den heimatstandort anzeigen, daher muss im script jetzt auch die variable myStandardMarker angegebene werden (heimstandort!)

                                hier mal mein setting des widgets:

                                • ich habe 5 routen und daher brauche ich 5 marker im widget
                                • in jedem marker wird der dp StandardMarker der route eingetragen
                                  zb: javascript.0.CheckRadar.0.StandardMarker, javascript.0.CheckRadar.1.StandardMarker, javascript.0.CheckRadar.2.StandardMarker, .... bis 4
                                • Tausche Längengrat mit Breitengrad muss angeklickt sein!

                                Image 5.png

                                das ganze sieht dann so aus:

                                • schwarz daheim
                                • rot blitzer

                                Image 7.png

                                das widget zum download gibt es hier https://forum.iobroker.net/post/520890 - einfach unbenötigte marker löschen und wer mehr benötigt : dazufügen

                                • noch ein kleiner zusatztrick:
                                  wenn man einfach einen marker zusätzlich am ende angibt, kann man dort ein eigenes bild setzen für den marker - als dp nimmt man javascript.0.CheckRadar.Daheim
                                  sieht dann so aus:
                                  roter punkt: blitzer
                                  iobroker symbol: daheim

                                Image 12.png
                                Image 15.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

                                grrfieldG efxzE 2 Antworten Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  script im ersten post upgedatet!

                                  @grrfield - habe einen zusätzlichen datenpunkt, der zusätzliche blitzer pro route anzeigt - habe bis jetzt keine - wäre gut, wenn du das testen könntest und den dp beobachtest - ob überhaupt mal etwas reingeschrieben wird

                                  @ALL
                                  landkarte mit blitzer und heimatkoordinaten

                                  mit dem open street map widget kann man sich das ganze auf karte angezeigt werden - es gibt dafür neue datenpunkte, die marker dafür schreiben. grundsätzlich werden routen, die keinen blitzer haben auf den heimatstandort anzeigen, daher muss im script jetzt auch die variable myStandardMarker angegebene werden (heimstandort!)

                                  hier mal mein setting des widgets:

                                  • ich habe 5 routen und daher brauche ich 5 marker im widget
                                  • in jedem marker wird der dp StandardMarker der route eingetragen
                                    zb: javascript.0.CheckRadar.0.StandardMarker, javascript.0.CheckRadar.1.StandardMarker, javascript.0.CheckRadar.2.StandardMarker, .... bis 4
                                  • Tausche Längengrat mit Breitengrad muss angeklickt sein!

                                  Image 5.png

                                  das ganze sieht dann so aus:

                                  • schwarz daheim
                                  • rot blitzer

                                  Image 7.png

                                  das widget zum download gibt es hier https://forum.iobroker.net/post/520890 - einfach unbenötigte marker löschen und wer mehr benötigt : dazufügen

                                  • noch ein kleiner zusatztrick:
                                    wenn man einfach einen marker zusätzlich am ende angibt, kann man dort ein eigenes bild setzen für den marker - als dp nimmt man javascript.0.CheckRadar.Daheim
                                    sieht dann so aus:
                                    roter punkt: blitzer
                                    iobroker symbol: daheim

                                  Image 12.png
                                  Image 15.png

                                  grrfieldG Offline
                                  grrfieldG Offline
                                  grrfield
                                  schrieb am zuletzt editiert von
                                  #16

                                  @liv-in-sky Danke - ich beobachte das und gebe Bescheid, sobald mehrere Blitzer gemeldet werden.

                                  liv-in-skyL 1 Antwort Letzte Antwort
                                  0
                                  • grrfieldG grrfield

                                    @liv-in-sky Danke - ich beobachte das und gebe Bescheid, sobald mehrere Blitzer gemeldet werden.

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

                                    @grrfield

                                    finde eigentlich die karte am besten - habe sie 5*5cm in der vis - freu mich immer, wenn ein neuer blitzer auftaucht :-)

                                    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

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

                                      script im ersten post upgedatet!

                                      @grrfield - habe einen zusätzlichen datenpunkt, der zusätzliche blitzer pro route anzeigt - habe bis jetzt keine - wäre gut, wenn du das testen könntest und den dp beobachtest - ob überhaupt mal etwas reingeschrieben wird

                                      @ALL
                                      landkarte mit blitzer und heimatkoordinaten

                                      mit dem open street map widget kann man sich das ganze auf karte angezeigt werden - es gibt dafür neue datenpunkte, die marker dafür schreiben. grundsätzlich werden routen, die keinen blitzer haben auf den heimatstandort anzeigen, daher muss im script jetzt auch die variable myStandardMarker angegebene werden (heimstandort!)

                                      hier mal mein setting des widgets:

                                      • ich habe 5 routen und daher brauche ich 5 marker im widget
                                      • in jedem marker wird der dp StandardMarker der route eingetragen
                                        zb: javascript.0.CheckRadar.0.StandardMarker, javascript.0.CheckRadar.1.StandardMarker, javascript.0.CheckRadar.2.StandardMarker, .... bis 4
                                      • Tausche Längengrat mit Breitengrad muss angeklickt sein!

                                      Image 5.png

                                      das ganze sieht dann so aus:

                                      • schwarz daheim
                                      • rot blitzer

                                      Image 7.png

                                      das widget zum download gibt es hier https://forum.iobroker.net/post/520890 - einfach unbenötigte marker löschen und wer mehr benötigt : dazufügen

                                      • noch ein kleiner zusatztrick:
                                        wenn man einfach einen marker zusätzlich am ende angibt, kann man dort ein eigenes bild setzen für den marker - als dp nimmt man javascript.0.CheckRadar.Daheim
                                        sieht dann so aus:
                                        roter punkt: blitzer
                                        iobroker symbol: daheim

                                      Image 12.png
                                      Image 15.png

                                      efxzE Offline
                                      efxzE Offline
                                      efxz
                                      schrieb am zuletzt editiert von
                                      #18

                                      @liv-in-sky

                                      moin, cooles feature, dass du dir da ausgedacht hast..

                                      nur mit dem Trick Marker 0. am Ende verstehe ich nicht. an welchem Ende meinst du?

                                      liv-in-skyL 1 Antwort Letzte Antwort
                                      0
                                      • efxzE efxz

                                        @liv-in-sky

                                        moin, cooles feature, dass du dir da ausgedacht hast..

                                        nur mit dem Trick Marker 0. am Ende verstehe ich nicht. an welchem Ende meinst du?

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

                                        @efxz du hast für jeden datenpunkt standardmarker einen marker im widget eingetragen - die zeigen etwas an, wenn ein blitzer drin steht - wenn kein blitzer drin ist, werden deine standardmarker mit deiner heimadresse überschrieben - dann machst du noch einen marker im script und dieser liegt dann auch ÜBR deiner heimadrese und allen ohne blitzer - damit ist daheim immer ein eigenes symbol

                                        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

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

                                          @efxz du hast für jeden datenpunkt standardmarker einen marker im widget eingetragen - die zeigen etwas an, wenn ein blitzer drin steht - wenn kein blitzer drin ist, werden deine standardmarker mit deiner heimadresse überschrieben - dann machst du noch einen marker im script und dieser liegt dann auch ÜBR deiner heimadrese und allen ohne blitzer - damit ist daheim immer ein eigenes symbol

                                          efxzE Offline
                                          efxzE Offline
                                          efxz
                                          schrieb am zuletzt editiert von
                                          #20

                                          @liv-in-sky

                                          kann dir immer noch nicht folgen.. den extra Datenpunkt mit meinen Heimatkoord. unter 1. oder 2. hinzufügen?

                                          ![Bild Text](52d71a09-7a14-4044-9c01-a8c9d0e54cb2-image.png Bild Link)

                                          liv-in-skyL 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

                                          870

                                          Online

                                          32.4k

                                          Benutzer

                                          81.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