Proplanta Wetterabfrage

Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI

Moderator: Co-Administratoren

Antworten
cityofsilence
Beiträge: 269
Registriert: 14.11.2018, 20:43
System: CCU
Wohnort: Bayern
Hat sich bedankt: 14 Mal
Danksagung erhalten: 17 Mal

Proplanta Wetterabfrage

Beitrag von cityofsilence » 05.08.2020, 09:49

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.
Gruß André

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“