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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Habe ein Problem in Typescript ....Fehler im Script

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    11
    1
    423

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.9k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    817

Habe ein Problem in Typescript ....Fehler im Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 102 Aufrufe 2 Beobachtet
  • Ä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.
  • G Offline
    G Offline
    Grisu73
    schrieb am zuletzt editiert von Homoran
    #1

    Hallo zusammen,

    kennt sich jemand mit Typescript aus ? Habe ein Script um Proplanta aus zu lesen.....leider mit Fehlern...

    ich habe in Typescrpt noch nichts gemacht....jemand Zeit mal nach den Fehlern zu schauen ?

    Danke Micha

    // ########################################################################################################
    // Proplanta Wetter auswerten
    // Version 1.0 - alpha
    ########################################################################################################
    // @ts-check
    "use strict";
    /// <reference types="node" />
    /// <reference types="iobJS" />
    /// <reference types="myOwn" />
    ///< script> var exports = {}; < / script>
    
    //based on: https://svn.fhem.de/fhem/trunk/fhem/FHEM/59_PROPLANTA.pm
    //https://github.com/ioBroker/AdapterRequests/issues/87
    
    /**************************************************************************************************
    * Initiale Optionen
    **************************************************************************************************/
    //Welcher Ort soll abgefragt werden?
    let country: string = "de"; //at, ch, fr, it
    let ort: string = "Dresden";
    let plz: string = "01157"; //eventuell kann hier auch der Ortsname verwendet werden
    
    //Wo sollen die Daten abgelegt werden?
    let ppBaseObjPath: string = 'javascript.' + instance + '.wetter.proplanta';
    
    /**************************************************************************************************
    * TypeScript Definitionen
    **************************************************************************************************/
    //import request = require("request");
    
    type stateValueType = "number" | "text" | "image" | "textBool" | "textList";
    
    interface iRequestOptions {
    		url: string;
    		headers: any;
    }
    /**************************************************************************************************
    * Lokale Definitionen
    **************************************************************************************************/
    let baseUrls = {
            "de" : "https://www.proplanta.de/Wetter/profi-wetter.php?SITEID=60&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
            "at" : "https://www.proplanta.de/Wetter-Oesterreich/profi-wetter-at.php?SITEID=70&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
            "ch" : "https://www.proplanta.de/Wetter-Schweiz/profi-wetter-ch.php?SITEID=80&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
            "fr" : "https://www.proplanta.de/Wetter-Frankreich/profi-wetter-fr.php?SITEID=50&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter-Frankreich&wT=",
            "it" : "https://www.proplanta.de/Wetter-Italien/profi-wetter-it.php?SITEID=40&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter-Italien&wT=",
        };
    
        
    const intensity = {
        "keine" : 0,
        "nein" : 0,
        "gering" : 1,
        "leicht" : 1,
        "ja" : 1,
        "mäßig" : 2,
        "m&auml;&szlig;ig" : 2,
        "stark" : 3,
    }
    
    const timeObjs = [{
        id: '00Uhr',
        name:'0 Uhr',
        search:'0|',
    },{
        id: '03Uhr',
        name:'3 Uhr',
        search:'3|',
    },{
        id: '06Uhr',
        name:'6 Uhr',
        search:'6|',
    },{
        id: '09Uhr',
        name:'9 Uhr',
        search:'9|',
    },{
        id: '12Uhr',
        name:'12 Uhr',
        search:'12|',
    },{
        id: '15Uhr',
        name:'15 Uhr',
        search:'15|',
    },{
        id: '18Uhr',
        name:'18 Uhr',
        search:'18|',
    },{
        id: '21Uhr',
        name:'21 Uhr',
        search:'21|',
    }];
    
    /**************************************************************************************************
    * generische Funktionen
    **************************************************************************************************/
    
    function stripTagSpecial(data:string):string {
        //entfernt allt tags, bei img tags, lässt es die srcr stehen:
        data = data.replace(/(<script(.|\n|\r)+?(?=<\/sc)<\/script>|<style(.|\n|\r)+?(?=<\/)<\/style>)/ig, "");
        //data = data.replace( /((\.gif|\.png|\.jpg|\.jpeg|\.ico|\.bmp|\.xbm|\.pdf|\.svg|\.tif|\.tiff))([^>]+)>/ig,
        data = data.replace( /<img([^>]+)>/ig,
            function ($0, $1) {
                //logInfo($0,$1);
                if ($0.indexOf('symbole/') >0) {
                    let src = $0.indexOf('src=');
                    let alt = $0.indexOf('alt=');
                    if ((alt > -1) && (src > -1)) {
                        let srcs = $0.substring(src + 5).split(/["']/)[0];
                        let altss = $0.substring(alt + 5).split(/["']/)[0];
                        return srcs + '##' + altss;
                    }
                }
                return ""; //($1 ? $1 + "" : $0)
            }
        );
        data = data.replace(/(&nbsp;|<([^>]+)>)/ig, '');
        data = data.replace(/&#48;/g, '0').replace(/&#49;/g, '1').replace(/&#50;/g, '2').replace(/&#51;/g, '3').replace(/&#52;/g, '4').replace(/&#53;/g, '5').replace(/&#54;/g, '6').replace(/&#55;/g, '7').replace(/&#56;/g, '8').replace(/&#57;/g, '9');
        return data.replace(/&#([^;]+);/g, '');
        
    }
    
    function stripTables(data:string):string {
        return data.replace(/<\/tr>/ig, "\n").replace(/<\/table>/ig, "XXTABLEENDXX").replace(/<\/td>/ig, "|");
    }
    
    function getValue(body:string, start:string, end:string):string {
        let startp:number =body.indexOf(start) + start.length;
        if (startp >= 0) {
            let stopp:number =body.indexOf(end,startp);
            if (stopp >=0) {
                return body.substring(startp,stopp);
            }
            return body.slice(startp);   
        }
        return '';
    }
    
    function getPart(data:{body:string, text:string}, search:string):void {
        let searchp:number = data.body.indexOf(search);
        if (searchp >= 0) {
            data.text = data.body.substring(0,searchp);
            data.body = data.body.slice(searchp + search.length);
        }
    }
    
    function addLine(data:{body:string, text:string}, start:string, end:string, id:string, type: stateValueType):string[] {
        let mvs = getValue(data.text, start, end).split('|');
    
        for(let i=0;i<4;i++) {
            mySetState('d' + String(i) + '.' + id, mvs[i], type);
        }
        return mvs;
    }
    
    function mySetState(id:string, value:string, type: stateValueType){
        try {
        if (type === 'number') {
            let xValue:any = value.replace(/[^0-9$.,]/g, '').replace(',','.');
            //logInfo(ppBaseObjPath + '.' + id,type, value, ' - ',xValue,' - ',Number(xValue));
            if (isNaN(xValue)) {
                xValue = 0;
            }
            setState(ppBaseObjPath + '.' + id,Number(xValue));
        } else if (type === 'image') {
            let data = value.split('##');
            //logInfo(ppBaseObjPath + '.' + id,type,data);
            setState(ppBaseObjPath + '.' + id+'Image', data[0]);
            setState(ppBaseObjPath + '.' + id, data[1]);
        } else if (type === 'textBool') {
                let b = (value.trim() == 'ja');
                //logInfo(ppBaseObjPath + '.' + id,type,b);
                setState(ppBaseObjPath + '.' + id, b);
        } else if (type === 'textList') {
            //logInfo(ppBaseObjPath + '.' + id,type,value);
            setState(ppBaseObjPath + '.' + id, intensity[value.trim()]);
        } else { //if (type === 'text') {
            //logInfo(ppBaseObjPath + '.' + id,type,value);
            setState(ppBaseObjPath + '.' + id, value.trim());
        }
        } catch(err) {
            logError(err,' can not set ',id,value,type);
        }
    }
    
    function addBlock(data:{body:string, text:string}, nextend:string, id:string, type: stateValueType) {
        getPart(data,nextend);
        //logInfo(id);
        for(let j=0;j<8;j++) {
            addLine(data,timeObjs[j].search, '|\n',timeObjs[j].id + '.' + id, type);
        }
    }
    /**************************************************************************************************
    * Implementierung
    **************************************************************************************************/
    function initializeWetterReadout():void {
        //logInfo('initialisiere Script ' + name + '!');
        createState(ppBaseObjPath + '.aktuell.Temperatur', '', false, {
            name: 'Temperatur',
            type: "number",
            role: 'value',
            unit: '°C',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Luftdruck', '', false, {
            name: 'Luftdruck',
            type: "number",
            role: 'value',
            unit: 'hPa',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Wetterzustand', '', false, {
            name: 'Wetterzustand',
            type: "string",
            role: 'text',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.WetterzustandImage', '', false, {
            name: 'Wetterzustand Image',
            type: "string",
            role: 'text.url',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.relativeFeuchte', '', false, {
            name: 'relative Feuchte',
            type: "number",
            role: 'value',
            unit: '%',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Taupunkt', '', false, {
            name: 'Taupunkt',
            type: "number",
            role: 'value',
            unit: '°C',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Sichtweite', '', false, {
            name: 'Sichtweite',
            type: "number",
            role: 'value',
            unit: 'km',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Wolkenuntergrenze', '', false, {
            name: 'Höhe der Wolkenuntergrenze',
            type: "number",
            role: 'value',
            unit: 'm',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Windrichtung', '', false, {
            name: 'Windrichtung',
            type: "string",
            role: 'text',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.WindrichtungImage', '', false, {
            name: 'Windrichtung Image',
            type: "string",
            role: 'text.url',
            read: true,
            write: false});
        createState(ppBaseObjPath + '.aktuell.Windgeschwindigkeit', '', false, {
            name: 'Windgeschwindigkeit',
            type: "number",
            role: 'value',
            unit: 'km/h',
            read: true,
            write: false});
    
        for(let i=0;i<4;i++) {
            createState(ppBaseObjPath + '.d' + String(i) + '.Datum', 0, false, {
                name: 'Datum',
                type: "string",
                role: 'text',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMax', 0, false, {
                name: 'maximale Temperatur',
                type: "number",
                role: 'value',
                unit: '°C',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMaxGefuehlt', 0, false, {
                name: 'maximale gefühlte Temperatur',
                type: "number",
                role: 'value',
                unit: '°C',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMin', 0, false, {
                name: 'minimale Temperatur',
                type: "number",
                role: 'value',
                unit: '°C',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMinGefuehlt', 0, false, {
                name: 'minimale gefühlte Temperatur',
                type: "number",
                role: 'value',
                unit: '°C',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMinNacht', 0, false, {
                name: 'minimale Temperatur der folgenden Nacht',
                type: "number",
                role: 'value',
                unit: '°C',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.NiederschlagsrisikoTag', 0, false, {
                name: 'Niederschlagsrisiko tagsüber',
                type: "number",
                role: 'value',
                unit: '%',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.NiederschlagsrisikoNacht', 0, false, {
                name: 'Niederschlagsrisiko nachts',
                type: "number",
                role: 'value',
                unit: '%',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.Niederschlagsstunden', 0, false, {
                name: 'Niederschlagsstunden',
                type: "number",
                role: 'value',
                unit: 'h',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.Bodenfrost', 0, false, {
                name: 'Bodenfrost',
                type: "boolean",
                role: 'value',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.Verdunstung', 0, false, {
                name: 'Verdunstung',
                type: "number",
                role: 'value',
                read: true,
                write: false,
                states: {   0: "kein",
                            1: "gering",
                            2: "mäßig",
                            3: "stark"}
                });
            createState(ppBaseObjPath + '.d' + String(i) + '.Taubildung', 0, false, {
                name: 'Taubildung',
                type: "number",
                role: 'value',
                read: true,
                write: false,
                states: {   0: "kein",
                            1: "gering",
                            2: "mäßig",
                            3: "stark"}
            });
            createState(ppBaseObjPath + '.d' + String(i) + '.relativeFeuchteTag', '', false, {
                name: 'relative Feuchte Tag',
                type: "number",
                role: 'value',
                unit: '%',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.relativeFeuchteNacht', '', false, {
                name: 'relative Feuchte Nacht',
                type: "number",
                role: 'value',
                unit: '%',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.Sonnenscheindauer', '', false, {
                name: 'Sonnenscheindauer',
                type: "number",
                role: 'value',
                unit: '%',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.UV-Index', '', false, {
                name: 'UV-Index',
                type: "number",
                role: 'value',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.Globalstrahlung', '', false, {
                name: 'Globalstrahlung',
                type: "number",
                role: 'value',
                unit: 'kWh/qm',
                read: true,
                write: false});
    
            for(let j=0;j<8;j++) {
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Wetterzustand', '', false, {
                    name: 'Wetterzustand',
                    type: "string",
                    role: 'text',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WetterzustandImage', '', false, {
                    name: 'Wetterzustand',
                    type: "string",
                    role: 'text.url',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Temperaturverlauf', '', false, {
                    name: 'Temperaturverlauf',
                    type: "number",
                    role: 'value',
                    unit: '°C',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Niederschlagsrisiko', '', false, {
                    name: 'Niederschlagsrisiko',
                    type: "number",
                    role: 'value',
                    unit: '%',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Niederschlagsmenge', '', false, {
                    name: 'Niederschlagsmenge',
                    type: "number",
                    role: 'value',
                    unit: 'mm',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Luftfeuchtigkeit', '', false, {
                    name: 'Relative Luftfeuchtigkeit',
                    type: "number",
                    role: 'value',
                    unit: '%',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Verdunstung', '', false, {
                    name: 'Verdunstung',
                    type: "number",
                    role: 'value',
                    read: true,
                    write: false,
                    states: {   0: "kein",
                                1: "gering",
                                2: "mäßig",
                                3: "stark"}
                    });
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Bodentemperatur', '', false, {
                    name: 'Relative Luftfeuchtigkeit',
                    type: "number",
                    role: 'value',
                    unit: '°C',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Bedeckungsgrad', '', false, {
                    name: 'Bedeckungsgrad des Himmels',
                    type: "number",
                    role: 'value',
                    unit: '%',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windrichtung', '', false, {
                    name: 'Windrichtung',
                    type: "string",
                    role: 'text',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WindrichtungImage', '', false, {
                    name: 'Windrichtung',
                    type: "string",
                    role: 'text.url',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WindrichtungGrad', '', false, {
                    name: 'WindrichtungGrad',
                    type: "number",
                    role: 'value',
                    unit: '°',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windgeschwindigkeit', '', false, {
                    name: 'Windgeschwindigkeit',
                    type: "number",
                    role: 'value',
                    unit: 'km/h',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windstärke', '', false, {
                    name: 'Windstärke',
                    type: "number",
                    role: 'value',
                    unit: 'Bft',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windböen', '', false, {
                    name: 'Windböen',
                    type: "number",
                    role: 'value',
                    unit: 'km/h',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Luftdruck', '', false, {
                    name: 'Luftdruck',
                    type: "number",
                    role: 'value',
                    unit: 'hPa',
                    read: true,
                    write: false});
                createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Nullgradgrenze', '', false, {
                    name: 'Luftdruck',
                    type: "number",
                    role: 'value',
                    unit: 'm',
                    read: true,
                    write: false});
            }
            createState(ppBaseObjPath + '.d' + String(i) + '.Niederschlagsmengein24h', '', false, {
                name: 'Niederschlagsmenge in 24 Stunden',
                type: "number",
                role: 'value',
                unit: 'mm',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.morgens.Wetterzustand', '', false, {
                name: 'Wetterzustand morgens',
                type: "string",
                role: 'text',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.morgens.WetterzustandImage', '', false, {
                name: 'Wetterzustand morgens',
                type: "string",
                role: 'text.url',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.tagsüber.Wetterzustand', '', false, {
                name: 'Wetterzustand tagsüber',
                type: "string",
                role: 'text',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.tagsüber.WetterzustandImage', '', false, {
                name: 'Wetterzustand tagsüber',
                type: "string",
                role: 'text.url',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.abends.Wetterzustand', '', false, {
                name: 'Wetterzustand abends',
                type: "string",
                role: 'text',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.abends.WetterzustandImage', '', false, {
                name: 'Wetterzustand abends',
                type: "string",
                role: 'text.url',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.nachts.Wetterzustand', '', false, {
                name: 'Wetterzustand abends',
                type: "string",
                role: 'text',
                read: true,
                write: false});
            createState(ppBaseObjPath + '.d' + String(i) + '.nachts.WetterzustandImage', '', false, {
                name: 'Wetterzustand abends',
                type: "string",
                role: 'text.url',
                read: true,
                write: false});
        }
        //initiales lesen
        readProplantaWetter();
    }
    
    function readProplantaWetter():void {
        let baseurl =baseUrls[country];
        if (baseurl == null || typeof baseurl === undefined) {
            logError('flasche Länderbezeichnung!');
        }
        baseurl = baseurl.replace(/#PLZ#/ig, plz).replace(/#ORT#/ig, ort);
        //logInfo("baseurl=",baseurl);
        try {
    		let options:iRequestOptions = {
    			url: baseurl,
    			headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'}
            };
            
    		request(options, function (error, response, body):void {
                if (!error && response.statusCode == 200) {			  // kein Fehler, Inhalt in body
                    body=body.replace(/(\s*\t|<\s*\/*br\s*>)\s*/g, ' ');
                    body=body.replace(/(\n|\r)/g, '');
                    let start:number =body.indexOf('id="table_INHALT_MITTE"');                
                    if (start>-1) { body=body.slice(start); }
                    //logInfo('XXX-START-XXX');                
                    body=stripTagSpecial(stripTables(body));
                    body=body.replace(/\n\s*(\|\s*)+\n/g, '\n').replace(/\s+\|\s*/g, '|');
                    //logInfo(body);
                    //logInfo('XXX-END-XXX');
                    
                    let result : {body:string, text:string}
                    //aktuelles Wetter
                    start = body.indexOf('Wetter Aktuell|');
                    if (start > -1) {
                        result = {
                            body:body=body.slice(start),
                            text:''
                        }
                        getPart(result,'XXTABLEENDXX');//Wetterprognose start
                        //logInfo('Wetter Aktuell');
                        mySetState('aktuell.Temperatur',getValue(result.text, 'Temperatur||', '|\n'),'number');
                        mySetState('aktuell.Luftdruck',getValue(result.text, 'Luftdruck||', '|\n'),'number');
    
                        mySetState('aktuell.Wetterzustand',getValue(result.text, 'Wetterzustand||', '|\n'),'image');
    
                        mySetState('aktuell.relativeFeuchte',getValue(result.text, 'relative Feuchte||', '|\n'),'number');
                        mySetState('aktuell.Taupunkt',getValue(result.text, 'Taupunkt||', '|\n'),'number');
                        mySetState('aktuell.Sichtweite',getValue(result.text, 'Sichtweite||', '|\n'),'number');
                        mySetState('aktuell.Wolkenuntergrenze',getValue(result.text, 'Wolkenuntergrenze||', '|\n'),'number');
    
                        mySetState('aktuell.Windrichtung',getValue(result.text, 'Windrichtung||', '|\n'),'image');
    
                        mySetState('aktuell.Windgeschwindigkeit',getValue(result.text, 'Windgeschwindigkeit||', '|\n'),'number');
    
                        //logInfo('--',getValue(result.text, 'Temperatur||', '|\n').replace(/\D/g,''),'-- Temperatur');
                        //logInfo('--',getValue(result.text, 'Luftdruck||', '|\n').replace(/\D/g,''),'-- Luftdruck');
                        //logInfo('--',getValue(result.text, 'Wetterzustand||', '|\n'),'-- Wetterzustand');
                        //logInfo('--',getValue(result.text, 'relative Feuchte||', '|\n').replace(/\D/g,''),'-- relative Feuchte');
                        //logInfo('--',getValue(result.text, 'Taupunkt||', '|\n').replace(/\D/g,''),'-- Taupunkt');
                        //logInfo('--',getValue(result.text, 'Sichtweite||', '|\n').replace(/\D/g,''),'-- Sichtweite');
                        //logInfo('--',getValue(result.text, 'Wolkenuntergrenze||', '|\n').replace(/\D/g,''),'-- Wolkenuntergrenze');
                        //logInfo('--',getValue(result.text, 'Windrichtung||', '|\n'),'-- Windrichtung');
                        //logInfo('--',getValue(result.text, 'Windgeschwindigkeit||', '|\n').replace(/\D/g,''),'-- Windgeschwindigkeit');
                    } else {
                        start = body.indexOf('Wetterprognose');
                        if (start < 0) {
                            throw new Error('auf der Webseite fehlen Daten!!');
                        }
                        //logInfo(start);
                        body=body.slice(start);
                        result = {
                            body:body=body.slice(start),
                            text:''
                        }
                    }
                    getPart(result,'Wetterzustand|');//Wetterprognose start
                    //logInfo('Wetterprognose');
                    //logInfo(result);
                    addLine(result, 'Datum|', '|\n', 'Datum', 'text');
                    addLine(result, 'max. Temperatur|', '|\n', 'TemperaturMax','number');
                    addLine(result, 'hlte max. Temp.|', '|\n', 'TemperaturMaxGefuehlt','number');
                    addLine(result, 'min. Temperatur|', '|\n', 'TemperaturMin','number');
                    addLine(result, 'hlte min. Temp.|', '|\n', 'TemperaturMinGefuehlt','number');
                    addLine(result, 'Nacht|', '|\n', 'TemperaturMinNacht','number');
                    addLine(result, 'Niederschlagsrisiko tags�ber|', '|\n', 'NiederschlagsrisikoTag','number');
                    addLine(result, 'Niederschlagsrisiko nachts|', '|\n', 'NiederschlagsrisikoNacht','number');
                    addLine(result, 'Niederschlagsstunden|', '|\n', 'Niederschlagsstunden','number');
                    addLine(result, 'Bodenfrost|', '|\n', 'Bodenfrost', 'textBool');
                    addLine(result, 'Verdunstung|', '|\n', 'Verdunstung', 'textList');
                    addLine(result, 'Taubildung|', '|\n', 'Taubildung', 'textList');
                    addLine(result, 'Feuchte des Tages|', '|\n', 'relativeFeuchteTag','number');
                    addLine(result, 'Feuchte der Nacht|', '|\n', 'relativeFeuchteNacht','number');
                    addLine(result, 'Sonnenscheindauer|', '|\n', 'Sonnenscheindauer','number');
                    addLine(result, 'UV-Index|', '|\n', 'UV-Index','number');
                    addLine(result, 'Globalstrahlung|', '|\n', 'Globalstrahlung','number');
    
                    addBlock(result, 'Temperaturverlauf|', 'Wetterzustand','image');
                    addLine(result,'morgens|', '|\n','morgens.Wetterzustand','image');
                    addLine(result,'tags�ber|', '|\n','tagsüber.Wetterzustand','image');
                    addLine(result,'abends|', '|\n','abends.Wetterzustand','image');
                    addLine(result,'nachts|', '|\n','nachts.Wetterzustand','image');
    
                    addBlock(result, 'Niederschlagsrisiko|', 'Temperaturverlauf','number');
                    addBlock(result, 'Niederschlagsmenge', 'Niederschlagsrisiko','number');
    
                    addBlock(result, 'Relative Luftfeuchtigkeit|', 'Niederschlagsmenge','number');
                    addLine(result,'in 24 Stunden|', '|\n','Niederschlagsmengein24h','number');
    
                    addBlock(result, 'Verdunstung|', 'Luftfeuchtigkeit','number');
                    addBlock(result, 'Bodentemperatur (in 5 cm H&ouml;he)|', 'Verdunstung','textList');
                    addBlock(result, 'Bedeckungsgrad des Himmels|', 'Bodentemperatur','number');
                    addBlock(result, 'Windrichtung Kompass|', 'Bedeckungsgrad','number');
                    addBlock(result, 'Windrichtung Grad|', 'Windrichtung','image');
                    addBlock(result, 'Windgeschwindigkeit|', 'WindrichtungGrad','number');
                    addBlock(result, 'Windst�rke|', 'Windgeschwindigkeit','number');
                    addBlock(result, 'max. Windb�en|', 'Windstärke','number');
                    addBlock(result, 'Luftdruck|', 'Windböen','number');
                    addBlock(result, 'Nullgradgrenze|', 'Luftdruck','number');
                    addBlock(result, 'Astrodaten|', 'Nullgradgrenze','number');
                    /*
                    logInfo('--',getValue(result.body, 'Sonnenaufgang|', '|\n'),'-- Sonnenaufgang');
                    logInfo('--',getValue(result.body, 'Sonnenuntergang|', '|\n'),'-- Sonnenuntergang');
                    logInfo('--',getValue(result.body, 'Mondaufgang|', '|\n'),'-- Mondaufgang');
                    logInfo('--',getValue(result.body, 'Monduntergang|', '|\n'),'-- Monduntergang');
                    logInfo('--',getValue(result.body, 'D�mmerungsanfang|', '|\n'),'-- Dämmerungsanfang');
                    logInfo('--',getValue(result.body, 'D�mmerungsende|', '|\n'),'-- Dämmerungsende');
                    logInfo('--',getValue(result.body, 'Mondphase|', '|\n'),'-- Mondphase');
                    */
    			} else {
    				//logInfo("StatusCode="+response.statusCode);
    				//logError(error);							   // Error beim Einlesen
    				log(error,'error');
    			}
    		});
    	} catch (e) {
    		//logError('Fehler (try) leseWebseite: ' + e);
    		log('Fehler (try) leseWebseite: ','error');
    	}
    }
    
    initializeWetterReadout();
    
    /*
     # *  *  * *  *  command to execute
     # ¦ ¦ ¦ ¦ ¦
     # ¦ ¦ ¦ ¦ ¦
     # ¦ ¦ ¦ ¦ +----- day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
     # ¦ ¦ ¦ +---------- month (1 - 12)
     # ¦ ¦ +--------------- day of month (1 - 31)
     # ¦ +-------------------- hour (0 - 23)
     # +------------------------- min (0 - 59)
    */
    schedule("* */3 * * *", readProplantaWetter);
    

    MOD-EDIT: Code in code-tags gesetzt!

    OliverIOO 1 Antwort Letzte Antwort
    0
    • G Grisu73

      Hallo zusammen,

      kennt sich jemand mit Typescript aus ? Habe ein Script um Proplanta aus zu lesen.....leider mit Fehlern...

      ich habe in Typescrpt noch nichts gemacht....jemand Zeit mal nach den Fehlern zu schauen ?

      Danke Micha

      // ########################################################################################################
      // Proplanta Wetter auswerten
      // Version 1.0 - alpha
      ########################################################################################################
      // @ts-check
      "use strict";
      /// <reference types="node" />
      /// <reference types="iobJS" />
      /// <reference types="myOwn" />
      ///< script> var exports = {}; < / script>
      
      //based on: https://svn.fhem.de/fhem/trunk/fhem/FHEM/59_PROPLANTA.pm
      //https://github.com/ioBroker/AdapterRequests/issues/87
      
      /**************************************************************************************************
      * Initiale Optionen
      **************************************************************************************************/
      //Welcher Ort soll abgefragt werden?
      let country: string = "de"; //at, ch, fr, it
      let ort: string = "Dresden";
      let plz: string = "01157"; //eventuell kann hier auch der Ortsname verwendet werden
      
      //Wo sollen die Daten abgelegt werden?
      let ppBaseObjPath: string = 'javascript.' + instance + '.wetter.proplanta';
      
      /**************************************************************************************************
      * TypeScript Definitionen
      **************************************************************************************************/
      //import request = require("request");
      
      type stateValueType = "number" | "text" | "image" | "textBool" | "textList";
      
      interface iRequestOptions {
      		url: string;
      		headers: any;
      }
      /**************************************************************************************************
      * Lokale Definitionen
      **************************************************************************************************/
      let baseUrls = {
              "de" : "https://www.proplanta.de/Wetter/profi-wetter.php?SITEID=60&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
              "at" : "https://www.proplanta.de/Wetter-Oesterreich/profi-wetter-at.php?SITEID=70&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
              "ch" : "https://www.proplanta.de/Wetter-Schweiz/profi-wetter-ch.php?SITEID=80&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter&wT=",
              "fr" : "https://www.proplanta.de/Wetter-Frankreich/profi-wetter-fr.php?SITEID=50&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter-Frankreich&wT=",
              "it" : "https://www.proplanta.de/Wetter-Italien/profi-wetter-it.php?SITEID=40&PLZ=#PLZ#&STADT=#ORT#&WETTERaufrufen=stadt&Wtp=&SUCHE=Wetter-Italien&wT=",
          };
      
          
      const intensity = {
          "keine" : 0,
          "nein" : 0,
          "gering" : 1,
          "leicht" : 1,
          "ja" : 1,
          "mäßig" : 2,
          "m&auml;&szlig;ig" : 2,
          "stark" : 3,
      }
      
      const timeObjs = [{
          id: '00Uhr',
          name:'0 Uhr',
          search:'0|',
      },{
          id: '03Uhr',
          name:'3 Uhr',
          search:'3|',
      },{
          id: '06Uhr',
          name:'6 Uhr',
          search:'6|',
      },{
          id: '09Uhr',
          name:'9 Uhr',
          search:'9|',
      },{
          id: '12Uhr',
          name:'12 Uhr',
          search:'12|',
      },{
          id: '15Uhr',
          name:'15 Uhr',
          search:'15|',
      },{
          id: '18Uhr',
          name:'18 Uhr',
          search:'18|',
      },{
          id: '21Uhr',
          name:'21 Uhr',
          search:'21|',
      }];
      
      /**************************************************************************************************
      * generische Funktionen
      **************************************************************************************************/
      
      function stripTagSpecial(data:string):string {
          //entfernt allt tags, bei img tags, lässt es die srcr stehen:
          data = data.replace(/(<script(.|\n|\r)+?(?=<\/sc)<\/script>|<style(.|\n|\r)+?(?=<\/)<\/style>)/ig, "");
          //data = data.replace( /((\.gif|\.png|\.jpg|\.jpeg|\.ico|\.bmp|\.xbm|\.pdf|\.svg|\.tif|\.tiff))([^>]+)>/ig,
          data = data.replace( /<img([^>]+)>/ig,
              function ($0, $1) {
                  //logInfo($0,$1);
                  if ($0.indexOf('symbole/') >0) {
                      let src = $0.indexOf('src=');
                      let alt = $0.indexOf('alt=');
                      if ((alt > -1) && (src > -1)) {
                          let srcs = $0.substring(src + 5).split(/["']/)[0];
                          let altss = $0.substring(alt + 5).split(/["']/)[0];
                          return srcs + '##' + altss;
                      }
                  }
                  return ""; //($1 ? $1 + "" : $0)
              }
          );
          data = data.replace(/(&nbsp;|<([^>]+)>)/ig, '');
          data = data.replace(/&#48;/g, '0').replace(/&#49;/g, '1').replace(/&#50;/g, '2').replace(/&#51;/g, '3').replace(/&#52;/g, '4').replace(/&#53;/g, '5').replace(/&#54;/g, '6').replace(/&#55;/g, '7').replace(/&#56;/g, '8').replace(/&#57;/g, '9');
          return data.replace(/&#([^;]+);/g, '');
          
      }
      
      function stripTables(data:string):string {
          return data.replace(/<\/tr>/ig, "\n").replace(/<\/table>/ig, "XXTABLEENDXX").replace(/<\/td>/ig, "|");
      }
      
      function getValue(body:string, start:string, end:string):string {
          let startp:number =body.indexOf(start) + start.length;
          if (startp >= 0) {
              let stopp:number =body.indexOf(end,startp);
              if (stopp >=0) {
                  return body.substring(startp,stopp);
              }
              return body.slice(startp);   
          }
          return '';
      }
      
      function getPart(data:{body:string, text:string}, search:string):void {
          let searchp:number = data.body.indexOf(search);
          if (searchp >= 0) {
              data.text = data.body.substring(0,searchp);
              data.body = data.body.slice(searchp + search.length);
          }
      }
      
      function addLine(data:{body:string, text:string}, start:string, end:string, id:string, type: stateValueType):string[] {
          let mvs = getValue(data.text, start, end).split('|');
      
          for(let i=0;i<4;i++) {
              mySetState('d' + String(i) + '.' + id, mvs[i], type);
          }
          return mvs;
      }
      
      function mySetState(id:string, value:string, type: stateValueType){
          try {
          if (type === 'number') {
              let xValue:any = value.replace(/[^0-9$.,]/g, '').replace(',','.');
              //logInfo(ppBaseObjPath + '.' + id,type, value, ' - ',xValue,' - ',Number(xValue));
              if (isNaN(xValue)) {
                  xValue = 0;
              }
              setState(ppBaseObjPath + '.' + id,Number(xValue));
          } else if (type === 'image') {
              let data = value.split('##');
              //logInfo(ppBaseObjPath + '.' + id,type,data);
              setState(ppBaseObjPath + '.' + id+'Image', data[0]);
              setState(ppBaseObjPath + '.' + id, data[1]);
          } else if (type === 'textBool') {
                  let b = (value.trim() == 'ja');
                  //logInfo(ppBaseObjPath + '.' + id,type,b);
                  setState(ppBaseObjPath + '.' + id, b);
          } else if (type === 'textList') {
              //logInfo(ppBaseObjPath + '.' + id,type,value);
              setState(ppBaseObjPath + '.' + id, intensity[value.trim()]);
          } else { //if (type === 'text') {
              //logInfo(ppBaseObjPath + '.' + id,type,value);
              setState(ppBaseObjPath + '.' + id, value.trim());
          }
          } catch(err) {
              logError(err,' can not set ',id,value,type);
          }
      }
      
      function addBlock(data:{body:string, text:string}, nextend:string, id:string, type: stateValueType) {
          getPart(data,nextend);
          //logInfo(id);
          for(let j=0;j<8;j++) {
              addLine(data,timeObjs[j].search, '|\n',timeObjs[j].id + '.' + id, type);
          }
      }
      /**************************************************************************************************
      * Implementierung
      **************************************************************************************************/
      function initializeWetterReadout():void {
          //logInfo('initialisiere Script ' + name + '!');
          createState(ppBaseObjPath + '.aktuell.Temperatur', '', false, {
              name: 'Temperatur',
              type: "number",
              role: 'value',
              unit: '°C',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Luftdruck', '', false, {
              name: 'Luftdruck',
              type: "number",
              role: 'value',
              unit: 'hPa',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Wetterzustand', '', false, {
              name: 'Wetterzustand',
              type: "string",
              role: 'text',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.WetterzustandImage', '', false, {
              name: 'Wetterzustand Image',
              type: "string",
              role: 'text.url',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.relativeFeuchte', '', false, {
              name: 'relative Feuchte',
              type: "number",
              role: 'value',
              unit: '%',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Taupunkt', '', false, {
              name: 'Taupunkt',
              type: "number",
              role: 'value',
              unit: '°C',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Sichtweite', '', false, {
              name: 'Sichtweite',
              type: "number",
              role: 'value',
              unit: 'km',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Wolkenuntergrenze', '', false, {
              name: 'Höhe der Wolkenuntergrenze',
              type: "number",
              role: 'value',
              unit: 'm',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Windrichtung', '', false, {
              name: 'Windrichtung',
              type: "string",
              role: 'text',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.WindrichtungImage', '', false, {
              name: 'Windrichtung Image',
              type: "string",
              role: 'text.url',
              read: true,
              write: false});
          createState(ppBaseObjPath + '.aktuell.Windgeschwindigkeit', '', false, {
              name: 'Windgeschwindigkeit',
              type: "number",
              role: 'value',
              unit: 'km/h',
              read: true,
              write: false});
      
          for(let i=0;i<4;i++) {
              createState(ppBaseObjPath + '.d' + String(i) + '.Datum', 0, false, {
                  name: 'Datum',
                  type: "string",
                  role: 'text',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMax', 0, false, {
                  name: 'maximale Temperatur',
                  type: "number",
                  role: 'value',
                  unit: '°C',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMaxGefuehlt', 0, false, {
                  name: 'maximale gefühlte Temperatur',
                  type: "number",
                  role: 'value',
                  unit: '°C',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMin', 0, false, {
                  name: 'minimale Temperatur',
                  type: "number",
                  role: 'value',
                  unit: '°C',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMinGefuehlt', 0, false, {
                  name: 'minimale gefühlte Temperatur',
                  type: "number",
                  role: 'value',
                  unit: '°C',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.TemperaturMinNacht', 0, false, {
                  name: 'minimale Temperatur der folgenden Nacht',
                  type: "number",
                  role: 'value',
                  unit: '°C',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.NiederschlagsrisikoTag', 0, false, {
                  name: 'Niederschlagsrisiko tagsüber',
                  type: "number",
                  role: 'value',
                  unit: '%',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.NiederschlagsrisikoNacht', 0, false, {
                  name: 'Niederschlagsrisiko nachts',
                  type: "number",
                  role: 'value',
                  unit: '%',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.Niederschlagsstunden', 0, false, {
                  name: 'Niederschlagsstunden',
                  type: "number",
                  role: 'value',
                  unit: 'h',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.Bodenfrost', 0, false, {
                  name: 'Bodenfrost',
                  type: "boolean",
                  role: 'value',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.Verdunstung', 0, false, {
                  name: 'Verdunstung',
                  type: "number",
                  role: 'value',
                  read: true,
                  write: false,
                  states: {   0: "kein",
                              1: "gering",
                              2: "mäßig",
                              3: "stark"}
                  });
              createState(ppBaseObjPath + '.d' + String(i) + '.Taubildung', 0, false, {
                  name: 'Taubildung',
                  type: "number",
                  role: 'value',
                  read: true,
                  write: false,
                  states: {   0: "kein",
                              1: "gering",
                              2: "mäßig",
                              3: "stark"}
              });
              createState(ppBaseObjPath + '.d' + String(i) + '.relativeFeuchteTag', '', false, {
                  name: 'relative Feuchte Tag',
                  type: "number",
                  role: 'value',
                  unit: '%',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.relativeFeuchteNacht', '', false, {
                  name: 'relative Feuchte Nacht',
                  type: "number",
                  role: 'value',
                  unit: '%',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.Sonnenscheindauer', '', false, {
                  name: 'Sonnenscheindauer',
                  type: "number",
                  role: 'value',
                  unit: '%',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.UV-Index', '', false, {
                  name: 'UV-Index',
                  type: "number",
                  role: 'value',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.Globalstrahlung', '', false, {
                  name: 'Globalstrahlung',
                  type: "number",
                  role: 'value',
                  unit: 'kWh/qm',
                  read: true,
                  write: false});
      
              for(let j=0;j<8;j++) {
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Wetterzustand', '', false, {
                      name: 'Wetterzustand',
                      type: "string",
                      role: 'text',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WetterzustandImage', '', false, {
                      name: 'Wetterzustand',
                      type: "string",
                      role: 'text.url',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Temperaturverlauf', '', false, {
                      name: 'Temperaturverlauf',
                      type: "number",
                      role: 'value',
                      unit: '°C',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Niederschlagsrisiko', '', false, {
                      name: 'Niederschlagsrisiko',
                      type: "number",
                      role: 'value',
                      unit: '%',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Niederschlagsmenge', '', false, {
                      name: 'Niederschlagsmenge',
                      type: "number",
                      role: 'value',
                      unit: 'mm',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Luftfeuchtigkeit', '', false, {
                      name: 'Relative Luftfeuchtigkeit',
                      type: "number",
                      role: 'value',
                      unit: '%',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Verdunstung', '', false, {
                      name: 'Verdunstung',
                      type: "number",
                      role: 'value',
                      read: true,
                      write: false,
                      states: {   0: "kein",
                                  1: "gering",
                                  2: "mäßig",
                                  3: "stark"}
                      });
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Bodentemperatur', '', false, {
                      name: 'Relative Luftfeuchtigkeit',
                      type: "number",
                      role: 'value',
                      unit: '°C',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Bedeckungsgrad', '', false, {
                      name: 'Bedeckungsgrad des Himmels',
                      type: "number",
                      role: 'value',
                      unit: '%',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windrichtung', '', false, {
                      name: 'Windrichtung',
                      type: "string",
                      role: 'text',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WindrichtungImage', '', false, {
                      name: 'Windrichtung',
                      type: "string",
                      role: 'text.url',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.WindrichtungGrad', '', false, {
                      name: 'WindrichtungGrad',
                      type: "number",
                      role: 'value',
                      unit: '°',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windgeschwindigkeit', '', false, {
                      name: 'Windgeschwindigkeit',
                      type: "number",
                      role: 'value',
                      unit: 'km/h',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windstärke', '', false, {
                      name: 'Windstärke',
                      type: "number",
                      role: 'value',
                      unit: 'Bft',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Windböen', '', false, {
                      name: 'Windböen',
                      type: "number",
                      role: 'value',
                      unit: 'km/h',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Luftdruck', '', false, {
                      name: 'Luftdruck',
                      type: "number",
                      role: 'value',
                      unit: 'hPa',
                      read: true,
                      write: false});
                  createState(ppBaseObjPath + '.d' + String(i) + '.' + timeObjs[j].id + '.Nullgradgrenze', '', false, {
                      name: 'Luftdruck',
                      type: "number",
                      role: 'value',
                      unit: 'm',
                      read: true,
                      write: false});
              }
              createState(ppBaseObjPath + '.d' + String(i) + '.Niederschlagsmengein24h', '', false, {
                  name: 'Niederschlagsmenge in 24 Stunden',
                  type: "number",
                  role: 'value',
                  unit: 'mm',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.morgens.Wetterzustand', '', false, {
                  name: 'Wetterzustand morgens',
                  type: "string",
                  role: 'text',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.morgens.WetterzustandImage', '', false, {
                  name: 'Wetterzustand morgens',
                  type: "string",
                  role: 'text.url',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.tagsüber.Wetterzustand', '', false, {
                  name: 'Wetterzustand tagsüber',
                  type: "string",
                  role: 'text',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.tagsüber.WetterzustandImage', '', false, {
                  name: 'Wetterzustand tagsüber',
                  type: "string",
                  role: 'text.url',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.abends.Wetterzustand', '', false, {
                  name: 'Wetterzustand abends',
                  type: "string",
                  role: 'text',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.abends.WetterzustandImage', '', false, {
                  name: 'Wetterzustand abends',
                  type: "string",
                  role: 'text.url',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.nachts.Wetterzustand', '', false, {
                  name: 'Wetterzustand abends',
                  type: "string",
                  role: 'text',
                  read: true,
                  write: false});
              createState(ppBaseObjPath + '.d' + String(i) + '.nachts.WetterzustandImage', '', false, {
                  name: 'Wetterzustand abends',
                  type: "string",
                  role: 'text.url',
                  read: true,
                  write: false});
          }
          //initiales lesen
          readProplantaWetter();
      }
      
      function readProplantaWetter():void {
          let baseurl =baseUrls[country];
          if (baseurl == null || typeof baseurl === undefined) {
              logError('flasche Länderbezeichnung!');
          }
          baseurl = baseurl.replace(/#PLZ#/ig, plz).replace(/#ORT#/ig, ort);
          //logInfo("baseurl=",baseurl);
          try {
      		let options:iRequestOptions = {
      			url: baseurl,
      			headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'}
              };
              
      		request(options, function (error, response, body):void {
                  if (!error && response.statusCode == 200) {			  // kein Fehler, Inhalt in body
                      body=body.replace(/(\s*\t|<\s*\/*br\s*>)\s*/g, ' ');
                      body=body.replace(/(\n|\r)/g, '');
                      let start:number =body.indexOf('id="table_INHALT_MITTE"');                
                      if (start>-1) { body=body.slice(start); }
                      //logInfo('XXX-START-XXX');                
                      body=stripTagSpecial(stripTables(body));
                      body=body.replace(/\n\s*(\|\s*)+\n/g, '\n').replace(/\s+\|\s*/g, '|');
                      //logInfo(body);
                      //logInfo('XXX-END-XXX');
                      
                      let result : {body:string, text:string}
                      //aktuelles Wetter
                      start = body.indexOf('Wetter Aktuell|');
                      if (start > -1) {
                          result = {
                              body:body=body.slice(start),
                              text:''
                          }
                          getPart(result,'XXTABLEENDXX');//Wetterprognose start
                          //logInfo('Wetter Aktuell');
                          mySetState('aktuell.Temperatur',getValue(result.text, 'Temperatur||', '|\n'),'number');
                          mySetState('aktuell.Luftdruck',getValue(result.text, 'Luftdruck||', '|\n'),'number');
      
                          mySetState('aktuell.Wetterzustand',getValue(result.text, 'Wetterzustand||', '|\n'),'image');
      
                          mySetState('aktuell.relativeFeuchte',getValue(result.text, 'relative Feuchte||', '|\n'),'number');
                          mySetState('aktuell.Taupunkt',getValue(result.text, 'Taupunkt||', '|\n'),'number');
                          mySetState('aktuell.Sichtweite',getValue(result.text, 'Sichtweite||', '|\n'),'number');
                          mySetState('aktuell.Wolkenuntergrenze',getValue(result.text, 'Wolkenuntergrenze||', '|\n'),'number');
      
                          mySetState('aktuell.Windrichtung',getValue(result.text, 'Windrichtung||', '|\n'),'image');
      
                          mySetState('aktuell.Windgeschwindigkeit',getValue(result.text, 'Windgeschwindigkeit||', '|\n'),'number');
      
                          //logInfo('--',getValue(result.text, 'Temperatur||', '|\n').replace(/\D/g,''),'-- Temperatur');
                          //logInfo('--',getValue(result.text, 'Luftdruck||', '|\n').replace(/\D/g,''),'-- Luftdruck');
                          //logInfo('--',getValue(result.text, 'Wetterzustand||', '|\n'),'-- Wetterzustand');
                          //logInfo('--',getValue(result.text, 'relative Feuchte||', '|\n').replace(/\D/g,''),'-- relative Feuchte');
                          //logInfo('--',getValue(result.text, 'Taupunkt||', '|\n').replace(/\D/g,''),'-- Taupunkt');
                          //logInfo('--',getValue(result.text, 'Sichtweite||', '|\n').replace(/\D/g,''),'-- Sichtweite');
                          //logInfo('--',getValue(result.text, 'Wolkenuntergrenze||', '|\n').replace(/\D/g,''),'-- Wolkenuntergrenze');
                          //logInfo('--',getValue(result.text, 'Windrichtung||', '|\n'),'-- Windrichtung');
                          //logInfo('--',getValue(result.text, 'Windgeschwindigkeit||', '|\n').replace(/\D/g,''),'-- Windgeschwindigkeit');
                      } else {
                          start = body.indexOf('Wetterprognose');
                          if (start < 0) {
                              throw new Error('auf der Webseite fehlen Daten!!');
                          }
                          //logInfo(start);
                          body=body.slice(start);
                          result = {
                              body:body=body.slice(start),
                              text:''
                          }
                      }
                      getPart(result,'Wetterzustand|');//Wetterprognose start
                      //logInfo('Wetterprognose');
                      //logInfo(result);
                      addLine(result, 'Datum|', '|\n', 'Datum', 'text');
                      addLine(result, 'max. Temperatur|', '|\n', 'TemperaturMax','number');
                      addLine(result, 'hlte max. Temp.|', '|\n', 'TemperaturMaxGefuehlt','number');
                      addLine(result, 'min. Temperatur|', '|\n', 'TemperaturMin','number');
                      addLine(result, 'hlte min. Temp.|', '|\n', 'TemperaturMinGefuehlt','number');
                      addLine(result, 'Nacht|', '|\n', 'TemperaturMinNacht','number');
                      addLine(result, 'Niederschlagsrisiko tags�ber|', '|\n', 'NiederschlagsrisikoTag','number');
                      addLine(result, 'Niederschlagsrisiko nachts|', '|\n', 'NiederschlagsrisikoNacht','number');
                      addLine(result, 'Niederschlagsstunden|', '|\n', 'Niederschlagsstunden','number');
                      addLine(result, 'Bodenfrost|', '|\n', 'Bodenfrost', 'textBool');
                      addLine(result, 'Verdunstung|', '|\n', 'Verdunstung', 'textList');
                      addLine(result, 'Taubildung|', '|\n', 'Taubildung', 'textList');
                      addLine(result, 'Feuchte des Tages|', '|\n', 'relativeFeuchteTag','number');
                      addLine(result, 'Feuchte der Nacht|', '|\n', 'relativeFeuchteNacht','number');
                      addLine(result, 'Sonnenscheindauer|', '|\n', 'Sonnenscheindauer','number');
                      addLine(result, 'UV-Index|', '|\n', 'UV-Index','number');
                      addLine(result, 'Globalstrahlung|', '|\n', 'Globalstrahlung','number');
      
                      addBlock(result, 'Temperaturverlauf|', 'Wetterzustand','image');
                      addLine(result,'morgens|', '|\n','morgens.Wetterzustand','image');
                      addLine(result,'tags�ber|', '|\n','tagsüber.Wetterzustand','image');
                      addLine(result,'abends|', '|\n','abends.Wetterzustand','image');
                      addLine(result,'nachts|', '|\n','nachts.Wetterzustand','image');
      
                      addBlock(result, 'Niederschlagsrisiko|', 'Temperaturverlauf','number');
                      addBlock(result, 'Niederschlagsmenge', 'Niederschlagsrisiko','number');
      
                      addBlock(result, 'Relative Luftfeuchtigkeit|', 'Niederschlagsmenge','number');
                      addLine(result,'in 24 Stunden|', '|\n','Niederschlagsmengein24h','number');
      
                      addBlock(result, 'Verdunstung|', 'Luftfeuchtigkeit','number');
                      addBlock(result, 'Bodentemperatur (in 5 cm H&ouml;he)|', 'Verdunstung','textList');
                      addBlock(result, 'Bedeckungsgrad des Himmels|', 'Bodentemperatur','number');
                      addBlock(result, 'Windrichtung Kompass|', 'Bedeckungsgrad','number');
                      addBlock(result, 'Windrichtung Grad|', 'Windrichtung','image');
                      addBlock(result, 'Windgeschwindigkeit|', 'WindrichtungGrad','number');
                      addBlock(result, 'Windst�rke|', 'Windgeschwindigkeit','number');
                      addBlock(result, 'max. Windb�en|', 'Windstärke','number');
                      addBlock(result, 'Luftdruck|', 'Windböen','number');
                      addBlock(result, 'Nullgradgrenze|', 'Luftdruck','number');
                      addBlock(result, 'Astrodaten|', 'Nullgradgrenze','number');
                      /*
                      logInfo('--',getValue(result.body, 'Sonnenaufgang|', '|\n'),'-- Sonnenaufgang');
                      logInfo('--',getValue(result.body, 'Sonnenuntergang|', '|\n'),'-- Sonnenuntergang');
                      logInfo('--',getValue(result.body, 'Mondaufgang|', '|\n'),'-- Mondaufgang');
                      logInfo('--',getValue(result.body, 'Monduntergang|', '|\n'),'-- Monduntergang');
                      logInfo('--',getValue(result.body, 'D�mmerungsanfang|', '|\n'),'-- Dämmerungsanfang');
                      logInfo('--',getValue(result.body, 'D�mmerungsende|', '|\n'),'-- Dämmerungsende');
                      logInfo('--',getValue(result.body, 'Mondphase|', '|\n'),'-- Mondphase');
                      */
      			} else {
      				//logInfo("StatusCode="+response.statusCode);
      				//logError(error);							   // Error beim Einlesen
      				log(error,'error');
      			}
      		});
      	} catch (e) {
      		//logError('Fehler (try) leseWebseite: ' + e);
      		log('Fehler (try) leseWebseite: ','error');
      	}
      }
      
      initializeWetterReadout();
      
      /*
       # *  *  * *  *  command to execute
       # ¦ ¦ ¦ ¦ ¦
       # ¦ ¦ ¦ ¦ ¦
       # ¦ ¦ ¦ ¦ +----- day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
       # ¦ ¦ ¦ +---------- month (1 - 12)
       # ¦ ¦ +--------------- day of month (1 - 31)
       # ¦ +-------------------- hour (0 - 23)
       # +------------------------- min (0 - 59)
      */
      schedule("* */3 * * *", readProplantaWetter);
      

      MOD-EDIT: Code in code-tags gesetzt!

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von OliverIO
      #2

      @Grisu73

      Und du postest noch deine Erkenntnisse zu den Fehlern?

      Wenn du diesen Post nur an Leute adressierst die wissen was proplanta ist und das selber einsetzen, alles gut. Dann will ich Nix gesagt haben.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      1
      • T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von ticaki
        #3

        Hab ner KI vorgeworfen und die reklamiert dann mal gleich das in Zeile 4 die // vor dem kommentar fehlen - hab dann aufgehört weiter zu gucken, das kann dir jede AI sagen dafür braucht es kein hirnschmalz :)

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        OliverIOO 1 Antwort Letzte Antwort
        1
        • T ticaki

          Hab ner KI vorgeworfen und die reklamiert dann mal gleich das in Zeile 4 die // vor dem kommentar fehlen - hab dann aufgehört weiter zu gucken, das kann dir jede AI sagen dafür braucht es kein hirnschmalz :)

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von OliverIO
          #4

          @ticaki

          Allerdings ist es meiner Meinung nach aktuell immer noch so ist, das man Grundlagen der Programmierung kennen muss. Wenn du absolut blank bist, verstehst du nichtmal die Ausgabe der KI und gibst beim 3 Versuch auf.
          Die Eisntiegshürden sind zwar wirklich gering geworden, aber man muss das auch lernen wollen und auch die prompts richtig formulieren. sonst kommt nur schrott raus.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          T 1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            Grisu73
            schrieb am zuletzt editiert von
            #5

            OK.habs...alles gut danke

            1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @ticaki

              Allerdings ist es meiner Meinung nach aktuell immer noch so ist, das man Grundlagen der Programmierung kennen muss. Wenn du absolut blank bist, verstehst du nichtmal die Ausgabe der KI und gibst beim 3 Versuch auf.
              Die Eisntiegshürden sind zwar wirklich gering geworden, aber man muss das auch lernen wollen und auch die prompts richtig formulieren. sonst kommt nur schrott raus.

              T Nicht stören
              T Nicht stören
              ticaki
              schrieb am zuletzt editiert von
              #6

              @OliverIO sagte:

              @ticaki

              Allerdings ist es meiner Meinung nach aktuell immer noch so ist, das man Grundlagen der Programmierung kennen muss. Wenn du absolut blank bist, verstehst du nichtmal die Ausgabe der KI und gibst beim 3 Versuch auf.
              Die Eisntiegshürden sind zwar wirklich gering geworden, aber man muss das auch lernen wollen und auch die prompts richtig formulieren. sonst kommt nur schrott raus.

              Das stimmt, war mir zuviel arbeit den Text rüber zu kopieren und passend zu formatieren. Umso mehr ahnung man hat umso schneller kommt man als Ziel außer man macht sowas:

              ❯ lass den quark und gehe es richtig an - setzte agenten darauf an im internet zu suchen
                wie man das macht und obs überhaupt geht - prüfe die infos und komme dann mit neuen
                vorschlägen
              

              :D

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Antwort Letzte Antwort
              0

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

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

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

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


              Support us

              ioBroker
              Community Adapters
              Donate

              477

              Online

              32.9k

              Benutzer

              83.0k

              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