Seite 1 von 1

Proplanta Wetterabfrage

Verfasst: 05.08.2020, 09:49
von cityofsilence
Hallo zusammen,

wenn dieses Thema im falschen Unterforum ist bitte verschieben :D

So nachdem ich mit keinem Wetteranbieter und den Daten zufrieden war habe ich in FEHM die Lösung gefunden.
Leider ist der Aufruf von Proplanta nur im HTML Format möglich.
Aktuell läuft die Abfrage über IObroker über ein TS-Script.
Nach langer Suche und nachfrage habe ich dieses gefunden und möchte es euch nicht vorenthalten.
Vielleicht kann / möchte es ja auch einer nutzen oder testen.

Code: Alles auswählen

// ########################################################################################################
// 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 = "Deine Ortschaft";
let plz: string = "Deine PLZ"; //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('falsche 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("* */1 * * *", readProplantaWetter);

Das einzige was geändert werden muss ist folgendes im Script

Code: Alles auswählen

//Welcher Ort soll abgefragt werden?
let country: string = "de"; //at, ch, fr, it
let ort: string = "Deine Ortschaft";
let plz: string = "Deine PLZ"; //eventuell kann hier auch der Ortsname verwendet werden

Hoffe ich konnte jemanden weiterhelfen :D

Super wäre natürlich dieses Script ohne IObroker auf der CCU zu nutzen aber das wird wahrscheinlich nicht möglich sein.