Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. RSS Parser

NEWS

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

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

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

RSS Parser

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
48 Beiträge 11 Kommentatoren 11.9k Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von Jey Cee
    #14

    Hallo,

    mich lies der RSS-Feed nicht los. Deshalb habe ich noch etwas rumgespielt und doch auf den Inhalt zugegriffen.

    Das String-Datum aus der Titelzeile wird umgewandelt und in die Dauer bis zum Überflug berechnet. Vergangene Überflüge werden nicht mehr in die Tabelle eingefügt.

    @Griesemer:

    Wie würdest du denn die Anzeige der Spielfilme abhängig von der Uhrzeit des Aufrufes der View einschränken?

    Also nur die Filme anzeigen die noch kommen.

    Vielleicht kriege ich das beim TV-Programm ja auch noch hin.

    Javascript Raumstation von spotthestation.nas.gov einlesen:
    ALTE VERSION VON April 2016 (neue Version im nächsten Spoiler)

    /* VIS RSS ISS
    Bringt einen RSS-Feed der ISS als Tabelle in ioBroker
    setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
    Pushover-Adapter benötigt
    für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
    erstellt: 09.11.2015 von Pix (auf Basis von Bluefox Code) für Griesemer
    10.11.2015 Umbau auf RSS-Fed der ISS als Basis für neue VIS View "ISS"
               check_aktuell prüft, ob Feld des RSS Feeds ein vergangenes oder zukünftiges Datum liefert
               zeitbis prüft gibt die Dauer bis zum Überflug als String zurück
    01.01.2016 Einlesen auch bei Optin-Zuschaltung
    07.01.2016 Optin optimiert
    17.01.2016 Meldung, wenn Sichtbarkeit zwischen angegebenen Zeiten
               "instanz" in Variable gesetzt
    25.01.2016 Optin aus leert die Tabelle
    26.01.2016 Struktur verbessert
    04.02.2016 globale Pushfunktion eingeführt
    01.03.2016 Optin Log Subscriptions durch Regexp Funktion in anderem Skript ersetzt
    30.03.2016 OptinPush Fehler beseitigt
    06.04.2016 Code optimiert
               Möglichkeit anderer Stationen als ISS berücksichtigt
               Link geändert (HTTPS)
    12.04.2016 Meldungen werden erst kurz vor dem Überflug gesendet
    15.04.2016 Berechnung der Differenz aus Überflugzeit und Jetztzeit in ms
    19.04.2016 Überprüfung, ob Überflüge existieren, wenn nicht, Ausgabe
    
    todo: In einer Funktion die Überflugzeit extrahieren und als Objekt mit den DP veraltet, relativ, total, Stunde, Minute, etc. zurückgeben.
          Wetter und Sichtweite in Benachrichtigung einbauen
    */
    var logging = false;
    var instanz = 'javascript.2';
    var idAnwesenheit = "javascript.0.Anwesenheit"/*Status Anwesenheit*/,
        idNachtruhe =   "javascript.0.Nachtruhe"/*Nachtruhe*/;
    var link = 'https://spotthestation.nasa.gov/sightings/xml_files/Germany_None_Bottrop.xml'; // A N P A S S E N!!!!!
    // ab hier nix mehr ändern    
    createState('RSS-Feed.ISS.Tabelle', {
        name: 'RSS Feed ISS-Sichtung Tabelle', 
        type: 'string', 
        desc: 'NASA ISS Sichtungen RSS Feed als HTML Tabelle'
    });
    createState('RSS-Feed.Optin', true, {
        name: 'Optin RSS Feeds abrufen', 
        type: 'boolean', 
        desc: 'Sollen RSS-Feeds abgerufen werden?'
    });
    createState('Optin.Dienste.RSS.ISS.Sichtbarkeit.Push', true, {
        name: 'Optin Sichtbarkeit ISS Push melden', 
        desc: 'Sollen die heutige ISS Sichtbarkeit per Pushnachricht gemeldet werden?',
        type: 'boolean'
    });
    createState('Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Anwesenheit', 1, {
        name: 'Priorität der Pushmeldung bei Anwesenheit',
        desc: 'Mit welcher Priorität soll die Nachricht bei Anwesenheit gesendet werden?',
        type: 'number'
    });
    createState('Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Nachtruhe', 1, {
        name: 'Priorität der Pushmeldung bei Nachtruhe',
        desc: 'Mit welcher Priorität soll die Nachricht bei nachtruhe gesendet werden?',
        type: 'number'
    });
    createState('Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Abwesenheit', 1, {
        name: 'Priorität der Pushmeldung bei Abwesenheit',
        desc: 'Mit welcher Priorität soll die Nachricht bei Abwesenheit gesendet werden?',
        type: 'number'
    });
    var idOptin =                    instanz + '.RSS-Feed.Optin',
        idOptinPush =                instanz + '.Optin.Dienste.RSS.ISS.Sichtbarkeit.Push',
        idOptinPushPrioAnwesenheit = instanz + '.Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Anwesenheit',
        idOptinPushPrioNachtruhe =   instanz + '.Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Nachtruhe',
        idOptinPushPrioAbwesenheit = instanz + '.Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Abwesenheit',
        idFeedTabelle =              instanz + '.RSS-Feed.ISS.Tabelle';
    function meldung_push (text, titel, prio) {
        var optin_push = getState(idOptinPush).val;
        if (optin_push) { // wenn Optin
            var dienst = 1; // Pushover
            push(dienst, text, titel, prio);
        } // Ende Optin
    }
    function sichtbarkeit_melden (ueberflugzeit, station) {
        var anwesenheit = getState(idAnwesenheit).val,
            nachtruhe = getState(idNachtruhe).val;
        // Wenn zwischen zwei Uhrzeiten, dann Pushmeldung
        // Nur bei Dunkelheit
        // ggf Variablen (wenn zwischen Astro Sonnenuntergang und Uhrzeit)
        var pushprio,
            betreff = 'ioBroker Meldung',
            nachricht = 'Die ' + station + ' überfliegt heute um ' + formatDate(ueberflugzeit, "SS:mm");
         // prio festlegen
        if (anwesenheit == 1) { // anwesend
            if (nachtruhe === 0) pushprio = getState(idOptinPushPrioAnwesenheit).val; // wach am Tag
            else pushprio = getState(idOptinPushPrioNachtruhe).val; 
        } else pushprio = getState(idOptinPushPrioAbwesenheit).val;
         var jetzt = new Date();
         // ******************** Meldung erst kurz vor Überflug
        var diff = ueberflugzeit - jetzt;
        var tag = Math.floor(diff / (1000*60*60*24));
        diff = diff % (1000*60*60*24);
        var std = Math.floor(diff / (1000*60*60));
        diff = diff % (1000*60*60);
        var min = Math.floor(diff / (1000*60));
        diff = diff % (1000*60);
    
        log('Differenz berechnen: Überflugzeit (' + ueberflugzeit + ') - Jetzt (' + jetzt + ') = ' + (ueberflugzeit - jetzt) + 'ms, also ' + tag + ' Tage ' + std + ' std ' + min + ' min');
        //1h = 60min = 60* 60 Sekunden = 3.600 * 1.000 ms = 3.600.000ms
        // Meldung pünktlich absetzen nach Millisekunden
        nachricht += ', also in ' + min + ' Minuten Ihren Wohnort!';
        if (ueberflugzeit - jetzt <= (3600000 / 2) ) { // 1/2h
            meldung_push(nachricht, betreff, pushprio);
        }
    }
    function uhrzeit_extrahieren (beschreibung) {
        /* Beispiel Input 
        <description>Date: Sunday Jan 17, 2016 
     		Time: 5:13 AM 
     		Duration: less than  1 minute 
     		Maximum Elevation: 20° 
     		Approach: 20° above ENE 
     		Departure: 17° above ENE</description> 
        */
        var beschreibung_nur_uhrzeit_grob =  beschreibung.split('Time: '); // Teilen vor 'Time: '
        if (logging) log('nach Split 1: "' + beschreibung_nur_uhrzeit_grob[1] + '"');
    
        var beschreibung_nur_uhrzeit_grob2 = beschreibung_nur_uhrzeit_grob[1].split(' '); // Teilen bei Leerzeichen zwischen Zeit und AM/PM
        if (logging) log('nach Split 2: "' + beschreibung_nur_uhrzeit_grob2[0] + '"');
    
        var beschreibung_tageszeit =         beschreibung_nur_uhrzeit_grob2[1]; //.substring(0,2); // extrahiert AM oder PM, Beispiel AM
        if (logging) log('Tagezeit: ' + beschreibung_tageszeit);
    
        var beschreibung_nur_uhrzeit_fein =  beschreibung_nur_uhrzeit_grob2[0].split(':');
        var beschreibung_stunde =            beschreibung_nur_uhrzeit_fein[0]; // Beispiel 5
        var beschreibung_minute =            beschreibung_nur_uhrzeit_fein[1]; // Beispiel 13
    
        var minute = parseInt(beschreibung_minute);
        var stunde_amerikanisch = parseInt(beschreibung_stunde);
        var stunde = beschreibung_tageszeit == 'PM' ? stunde_amerikanisch + 12 : stunde_amerikanisch;
        if (logging) log('Stunde: ' + stunde_amerikanisch + ' ' + beschreibung_tageszeit + ' > ' + stunde + ' Minute: ' + minute);
    
        var uhrzeit_ohne_datum = new Date ();
        uhrzeit_ohne_datum.setHours(stunde);
        uhrzeit_ohne_datum.setMinutes(minute);
        if (logging) log(uhrzeit_ohne_datum); // ist die Zeit heute 
         return (uhrzeit_ohne_datum);
    }
     function check_heute_noch(zeit_ueberflug) {
        var heute = new Date();
        /*var jahr = heute.getFullYear();
        var monat = heute.getMonth();
        var tag = heute.getDate();
        var std = heute.getHours();
        var min = heute.getMinutes();
        var jetzt = new Date(jahr, monat, tag, std, min);*/
    
        var heute_noch = (zeit_ueberflug > heute /*jetzt*/) ? true : false;      
        return(heute_noch);
    }
     function datum_station_extrahieren (titelzeile) { // Übergabe String wie "2015-11-05 ISS Sighting"
        var titelzeile_array = titelzeile.split(' ');               // String nach Leerzeichen trennen und nur das Datum am Anfang auslösen
        var datum_sichtung_string = titelzeile_array[0].split('-'); // ersten Teil des Strings nach Bindestrich trennen
        var datum_sichtung = new Date(datum_sichtung_string[0],datum_sichtung_string[1]-1,datum_sichtung_string[2]); // An -1 beim Monat denken (0=Jan, 11=Dez)
        var station_sichtung = titelzeile_array[1]; // ISS oder anderer Stationsname
        return({
            'DatumSichtung':   datum_sichtung,
            'StationSichtung': station_sichtung 
        });
    }
     function zeitbis (datum_ueberflug) { // // Übergabe "Thu Nov 19 2015 00:00:00 GMT+0100" -> heute; morgen; übermorgen; noch X Tage
        var heute = new Date();
        heute.setHours(0); // Es gilt nur das Datum, daher Mitternacht
        heute.setMinutes(0); 
        heute.setSeconds(0); 
        heute.setMilliseconds(0); 
        heute = heute.getTime();
        ueberflug = datum_ueberflug.getTime();
        var tagesdauer = 1000 * 60 * 60 * 24; // 1000ms * 60 = 1min * 60 = 1std * 24 = 1Tag
        var restzeit = (ueberflug - heute) / tagesdauer;
        var restzeit_string;
        switch (restzeit) {
            case 0:
                restzeit_string = 'heute';
            break;
            case 1:
                restzeit_string = 'morgen';
            break;
            case 2:
                restzeit_string = 'übermorgen';
            break;
            default:
                restzeit_string = 'in ' + restzeit + ' Tagen';
            break;
        }
        //log('Zeit bis Überflug: ' + restzeit);
        return(restzeit_string);
    }
     function check_aktuell (datum_ueberflug){ // Übergabe "Thu Nov 19 2015 00:00:00 GMT+0100"
        var heute = new Date();
        heute.setHours(0); // Es gilt nur das Datum, daher Mitternacht
        heute.setMinutes(0); 
        heute.setSeconds(0); 
        heute.setMilliseconds(0);   
    
        var vorbei;
        if (datum_ueberflug < heute) vorbei = true;
        else vorbei = false;
        return(vorbei);
    }
     function RSS_einlesen () { // alle 5 Minuten
        var optin = getState(idOptin).val;
        var parseString = require('xml2js').parseString;
        var request = require('request');
         if (optin) request(link, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                parseString(body, {
                    explicitArray: false,
                    mergeAttrs: true
                },
                function (err, result) {
                    //log(JSON.stringify(result, null, 2));
                    if (err) log("Fehler: " + err, 'error');
                    else {   
                        // Titel oben, Inhalt darunter (wie in der Zeitung)
                        var tabelle ='';
                        var titelzeile,           // Inhalt des RSS-Feeds title
                            datum_ueberflug,      // Überflug im Datumsformat
                            datum_relativ,        // Dauer bis Überflug als String
                            veraltet,             // true;false -> Verganenheit oder Zukunft
                            station;              // Name der Station (ISS, ...), wird ind er Titelzeile geliefert
                        if (typeof result.rss.channel.item !== 'undefined') { // prüfen, ob result.rss.channel.item existiert
                            for(var i = 0; i <result.rss.channel.item.length; 3/19/2015/i++)/{/titelzeile="result.rss.channel.item[i].title;" datum_ueberflug="datum_station_extrahieren(titelzeile).DatumSichtung;" mache/aus/"2015-11-05/iss/sighting"/sowas/"thu/nov/00:00:00/gmt+0100"/station="datum_station_extrahieren(titelzeile).StationSichtung;" "iss"/veraltet="check_aktuell(datum_ueberflug);" alte/einträge,/älter/als/mitternacht/nicht/zeigen./heutige,/bereits/vergangene/aber/schon/zeigen/datum_relativ="zeitbis(datum_ueberflug);" heute,/morgen,/übermorgen,/in/tagen,/.../wenn/veraltet,/eintrag/anfügen/if/(!veraltet)/tabelle/+="<tr><td>" '/('/')</td=""></result.rss.channel.item.length;>';
                                // wenn Überflug heute, dann Überflugzeit prüfen und ggf. melden
                                if (datum_relativ === 'heute') {
                                    zeit_ueberflug = uhrzeit_extrahieren(result.rss.channel.item[i].description); // übergibt extrahiertes Datum und Beschreibung mit Zeit info
                                    if (logging) log('Zeit Überflug: ' + formatDate(zeit_ueberflug)); // genaue Flugzeit in Datumformat
                                    // prüfen obe Überflugzeit in der Zukunft ist, sonst keine Meldung                           
                                    if (check_heute_noch(zeit_ueberflug)) sichtbarkeit_melden(zeit_ueberflug, station);
                                }
                            }
                        } else {
                            tabelle += '';
                            log('Derzeit keine Überflüge');
                        }
                        tabelle += '
     <caption>Anstehende Sichtungen</caption>
    | RSS-Feed |
    | --- |
    | ' + result.rss.channel.item[i].description + ' |
    | Derzeit keine Überflüge |
     ';
                        setState(idFeedTabelle, tabelle);
                    }
                });
            } else log(error, 'error');
            log('RSS-Feed ' + link + ' eingelesen');
        });   // Ende request 
    }
    schedule("*/30 * * * *", RSS_einlesen); 
    RSS_einlesen();
    // ------------------------------------------------------------------
    // Opt In setzen - Logging
    on(idOptin, function (obj) {
        log('Opt in Variable <rss-feed iss-Überflüge="">auf <' + obj.state.val + '> gesetzt ', 'info');
        if (obj.state.val) RSS_einlesen();
        else setState(idFeedTabelle, ' ');
    });</rss-feed>
    

    Skript von Januar 2018
    Neue Version des Skripts aus Januar 2018 löst alte Version von April 2016 ab:

    /* VIS RSS ISS
    Bringt einen RSS-Feed der ISS als Tabelle in ioBroker
    setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
    Pushover-Adapter benötigt
    für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
    erstellt: 09.11.2015 von Pix (auf Basis von Bluefox Code) für Griesemer
    10.11.2015 Umbau auf RSS-Fed der ISS als Basis für neue VIS View "ISS"
               check_aktuell prüft, ob Feld des RSS Feeds ein vergangenes oder zukünftiges Datum liefert
               relativerTag prüft gibt die Dauer bis zum Überflug als String zurück
    01.01.2016 Einlesen auch bei Optin-Zuschaltung
    07.01.2016 Optin optimiert
    17.01.2016 Meldung, wenn Sichtbarkeit zwischen angegebenen Zeiten
               "instanz" in Variable gesetzt
    25.01.2016 Optin aus leert die Tabelle
    26.01.2016 Struktur verbessert
    04.02.2016 globale Pushfunktion eingeführt
    01.03.2016 Optin Log Subscriptions durch Regexp Funktion in anderem Skript ersetzt
    30.03.2016 OptinPush Fehler beseitigt
    06.04.2016 Code optimiert
               Möglichkeit anderer Stationen als ISS berücksichtigt
               Link geändert (HTTPS)
    12.04.2016 Meldungen werden erst kurz vor dem Überflug gesendet
    15.04.2016 Berechnung der Differenz aus Überflugzeit und Jetztzeit in ms
    19.04.2016 Überprüfung, ob Überflüge existieren, wenn nicht, Ausgabe
    22.09.2016 Pushsafer eingepflegt
    28.09.2016 Text2Speech State eingefügt
    08.10.2016 Grudnlegende Änderungen: Berechnungen nur in ms
               Ausgabe des relativen Datums (heute, morgen, etc.) korrigiert
               mehr Verbesserungen (Array mit Datenanlage begonnen)
    09.10.2016 Umbau Skript: Daten werden alle 30min geparst, aber das Ergebnis wird jede Minute ausgewertet (für aktuelle relative Zeitangabe [5min bis X])
    16.10.2016 Errechnet zeitBis nun in einer extra Funktion
               relativerTag
    21.04.2017 Code angepasst, für den Fall keiner Überflüge
    30.05.2017 neue VIS-View, jetzt Optin RSS-Feed pro Feed. Also hier neues Objekt RSS ISS Optin
               createStates, roles, idVariablen
               Fehler in Optin subscription
    22.01.2018 nach US-Shutdown try & catch zur Fehlervermeidung eingefügt
               Fucntion readRSS korrigiert
    
    todo: Wetter und Sichtweite in Benachrichtigung einbauen
    createStates() nochmal checken (bei forceCreation gibt es Fehler)
    */
    const forceCreation = false;
    const logging = false;
    const idAnwesenheit = "javascript.0.Anwesenheit"/*Status Anwesenheit*/,
          idNachtruhe =   "javascript.0.Nachtruhe"/*Nachtruhe*/;
    const link = 'https://spotthestation.nasa.gov/sightings/xml_files/Germany_None_Munchen.xml';
    const idFeedTabelle =              'RSS-Feed.ISS.Tabelle',
          idResult =                   'RSS-Feed.ISS.Result',
          idText2Speech =              'RSS-Feed.ISS.text2speech',
          idZeit =                     'RSS-Feed.ISS.Zeit',
          idZeitString =               'RSS-Feed.ISS.ZeitString',
          idOptin =                    'RSS-Feed.ISS.Optin',
          idOptinPush =                'Optin.Dienste.RSS.ISS.Sichtbarkeit.Push',
          idOptinPushPrioAnwesenheit = 'Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Anwesenheit',
          idOptinPushPrioNachtruhe =   'Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Nachtruhe',
          idOptinPushPrioAbwesenheit = 'Optin.Dienste.RSS.ISS.Sichtbarkeit.Push.Prioritaet.Abwesenheit';
    // ab hier nix mehr ändern    
    createState(idFeedTabelle, " ", forceCreation, {
        name: 'RSS Feed ISS-Sichtung Tabelle', 
        type: 'string', 
        desc: 'NASA ISS Sichtungen RSS Feed als HTML Tabelle',
        role: 'html'
    });
    createState(idOptin, true, forceCreation, {
        name: 'Optin RSS Feeds abrufen',
        type: 'boolean', 
        def:  true,
        desc: 'Sollen RSS-Feeds abgerufen werden?',
        role: 'switch'
    });
    createState(idResult, " ", forceCreation, {
        name: 'Nächste ISS-Sichtung JSON', 
        type: 'string',
        desc: 'NASA ISS Sichtungen - Ergebnis der geparsten Webseite',
        role: 'json'
    });
    createState(idText2Speech, " ", forceCreation, {
        name: 'Nächste ISS-Sichtung Ansage', 
        type: 'string',
        desc: 'NASA ISS Sichtungen - nächste Sichtung optimiert für die Sprachausgabe',
        role: 'text'
    });
    createState(idZeit, 1, forceCreation, {
        name: 'Nächste ISS-Sichtung (Zeit)', 
        type: 'number',
        desc: 'NASA ISS Sichtungen - nächste Sichtung'
    });
    createState(idZeitString, " ", forceCreation, {
        name: 'Nächste ISS-Sichtung (Zeit) Zeichenkette', 
        type: 'string',
        desc: 'NASA ISS Sichtungen - nächste Sichtung',
        role: 'text'
    });
    createState(idOptinPush, true, forceCreation,{
        name: 'Optin Sichtbarkeit ISS Push melden', 
        def:  true,
        desc: 'Sollen die heutige ISS Sichtbarkeit per Pushnachricht gemeldet werden?',
        type: 'boolean',
        role: 'switch'
    });
    createState(idOptinPushPrioAnwesenheit, 1, forceCreation, {
        name: 'Priorität der Pushmeldung bei Anwesenheit',
        desc: 'Mit welcher Priorität soll die Nachricht bei Anwesenheit gesendet werden?',
        def:  1,
        type: 'number'
    });
    createState(idOptinPushPrioNachtruhe, 1, forceCreation, {
        name: 'Priorität der Pushmeldung bei Nachtruhe',
        def:  1,
        desc: 'Mit welcher Priorität soll die Nachricht bei nachtruhe gesendet werden?',
        type: 'number'
    });
    createState(idOptinPushPrioAbwesenheit, 1, forceCreation, {
        name: 'Priorität der Pushmeldung bei Abwesenheit',
        def:  1,
        desc: 'Mit welcher Priorität soll die Nachricht bei Abwesenheit gesendet werden?',
        type: 'number'
    });
    function meldung_push (text, titel, prio) {
        var optin_push = getState(idOptinPush).val;
        if (optin_push) { // wenn Optin
            var dienst = 2; //4
            var empfaenger = 'j';
            push(dienst, text, titel, prio, empfaenger);
        } // Ende Optin
    }
    function zeitBis(ueberflugzeit) {
        var jetzt = new Date();
        // ******************** Meldung erst kurz vor Überflug
        if (logging) log('FZ: ' + ueberflugzeit);
        if (logging) log('JZ: ' + jetzt.getTime());
        if (logging) log('jetzt: ' + jetzt);
        var diff = ueberflugzeit - jetzt.getTime();
        var tag = Math.floor(diff / (1000*60*60*24));
        diff = diff % (1000*60*60*24);
        var std = Math.floor(diff / (1000*60*60));
        diff = diff % (1000*60*60);
        var min = Math.floor(diff / (1000*60));
        diff = diff % (1000*60);
        return({
            'tag': tag,
            'std': std,
            'min': min + 1
        });
    }
    function meldeUeberflug (ueberflugzeit, station, relativerTag) { //minütlicher check
        if (logging) log('ÜZeit: ' + ueberflugzeit);
        var anwesenheit = getState(idAnwesenheit).val,
            nachtruhe = getState(idNachtruhe).val;
        // Wenn zwischen zwei Uhrzeiten, dann Pushmeldung
        // Nur bei Dunkelheit
        // ggf Variablen (wenn zwischen Astro Sonnenuntergang und Uhrzeit)
        var pushprio,
            betreff = 'ioBroker Meldung',
            nachricht = 'Die ' + station + ' überfliegt ' + relativerTag + ' um ' + formatDate(ueberflugzeit, "SS:mm");
         // prio festlegen
        if (anwesenheit == 1) { // anwesend
            if (nachtruhe === 0) pushprio = getState(idOptinPushPrioAnwesenheit).val; // wach am Tag
            else pushprio = getState(idOptinPushPrioNachtruhe).val; 
        } else pushprio = getState(idOptinPushPrioAbwesenheit).val;
         var tag = zeitBis(ueberflugzeit).tag;
        var std = zeitBis(ueberflugzeit).std;
        var min = zeitBis(ueberflugzeit).min;
        var jetzt = new Date ();
    
        if (logging) log('Differenz berechnen: Überflugzeit (' + ueberflugzeit + ') - Jetzt (' + jetzt.getTime()  + ') = ' + (ueberflugzeit - jetzt.getTime()) + 'ms, also ' + tag + ' Tage ' + std + ' std ' + min + ' min');
         //1h = 60min = 60* 60 Sekunden = 3.600 * 1.000 ms = 3.600.000ms
        // Meldung pünktlich absetzen nach Millisekunden
        nachricht += ', also in ' + min + ' min Ihren Wohnort!';
    
        if (ueberflugzeit - jetzt <= (3600000 / 2) ) { // 1/2h 
            if (min === 30 || min === 10 || min === 1) meldung_push(nachricht, betreff, pushprio); // nur 30, 5 und 1 Minute vor Überflug melden
        }
    }
     function extrahiereTitelzeile (titelzeile) { // Übergabe String wie "2015-11-05 ISS Sighting"
        var titelzeile_array = titelzeile.split(' ');               // String nach Leerzeichen trennen und nur das Datum am Anfang auslösen
        var datum_sichtung_string = titelzeile_array[0].split('-'); // ersten Teil des Strings nach Bindestrich trennen
        var datum_sichtung = new Date(datum_sichtung_string[0],datum_sichtung_string[1]-1,datum_sichtung_string[2]); // An -1 beim Monat denken (0=Jan, 11=Dez)
        var station_sichtung = titelzeile_array[1]; // ISS oder anderer Stationsname
        if (logging) log('Datum ohne Uhrzeit: ' + datum_sichtung + ' oder ' + datum_sichtung.getTime() + ' ms');
        return({
            'DatumSichtung':   datum_sichtung,
            'StationSichtung': station_sichtung 
        });
    }
     function extrahiereBeschreibung (beschreibung) {
        /* Beispiel Input 
        <description>Date: Sunday Jan 17, 2016 
     		Time: 5:13 AM 
     		Duration: less than  1 minute 
     		Maximum Elevation: 20° 
    		Approach: 20° above ENE 
    		Departure: 17° above ENE</description> 
        */
        var beschreibung_nur_uhrzeit_grob =  beschreibung.split('Time: ');                // Teilen vor 'Time: '
        if (logging) log('nach Split 1: "' + beschreibung_nur_uhrzeit_grob[1] + '"');
    
        var beschreibung_nur_uhrzeit_grob2 = beschreibung_nur_uhrzeit_grob[1].split(' '); // Teilen bei Leerzeichen zwischen Zeit und AM/PM
        if (logging) log('nach Split 2: "' + beschreibung_nur_uhrzeit_grob2[0] + '"');
    
        var beschreibung_tageszeit =         beschreibung_nur_uhrzeit_grob2[1];           //.substring(0,2); // extrahiert AM oder PM, Beispiel AM
        if (logging) log('Tagezeit: ' + beschreibung_tageszeit);
    
        var beschreibung_nur_uhrzeit_fein =  beschreibung_nur_uhrzeit_grob2[0].split(':');
        var beschreibung_stunde =            beschreibung_nur_uhrzeit_fein[0];            // Beispiel 5
        var beschreibung_minute =            beschreibung_nur_uhrzeit_fein[1];            // Beispiel 13
    
        var minute = parseInt(beschreibung_minute);
        var stunde_amerikanisch = parseInt(beschreibung_stunde);
        var stunde = beschreibung_tageszeit == 'PM' ? stunde_amerikanisch + 12 : stunde_amerikanisch;
        if (logging) log('Stunde: ' + stunde_amerikanisch + ' ' + beschreibung_tageszeit + ' > ' + stunde + ' Minute: ' + minute);
    
        var uhrzeit_ohne_datum = new Date (0);
        uhrzeit_ohne_datum.setHours(stunde);
        uhrzeit_ohne_datum.setMinutes(minute);
        if (logging) log('Uhrzeit ohne Datum: ' + uhrzeit_ohne_datum + ' oder ' + uhrzeit_ohne_datum.getTime() + ' ms (an Sommerzeit denken)'); // ist die Zeit ohne Datum (1.1.1970)
         return({
            'UhrzeitSichtung': uhrzeit_ohne_datum 
            // todo weitere Daten parsen
                    // Elevation
                    // Duration
                    // Approch & Departure
        });
    }
     function relativerTag (datum_ueberflug) { // Übergabe Zeitpunkt in ms seit 1.1.1970 -> heute; morgen; übermorgen; noch X Tage
        var heute = new Date();
        heute.setHours(0); // Es gilt nur das Datum, daher Mitternacht
        heute.setMinutes(0); 
        heute.setSeconds(0); 
        heute.setMilliseconds(0); 
        heute = heute.getTime();
        var ueberflug = new Date(datum_ueberflug);
        /*ueberflug.setHours(0);
        ueberflug.setMinutes(0);
        ueberflug.setMilliseconds(0);
        ueberflug = ueberflug.getTime();*/
        var tagesdauer = 1000 * 60 * 60 * 24; // 1000ms * 60 = 1min * 60 = 1std * 24 = 1Tag
        var restzeit = (ueberflug - heute) / tagesdauer;
        var restzeit_string;
        switch (restzeit) {
            case -2:
                restzeit_string = 'vorgestern';
            break;
            case -1:
                restzeit_string = 'gestern';
            break;
            case 0:
                restzeit_string = 'heute';
            break;
            case 1:
                restzeit_string = 'morgen';
            break;
            case 2:
                restzeit_string = 'übermorgen';
            break;
            default:
                if (restzeit > 2) restzeit_string = 'in ' + restzeit + ' Tagen';
                if (restzeit < 0) restzeit_string = 'vor ' + restzeit*(-1) + ' Tagen';
            break;
        }
        //log('Zeit bis Überflug: ' + restzeit);
        return(restzeit_string);
    }
     function checkVeraltet (zeitpunkt_ueberflug){ // Übergabe Zeitpunkt in ms seit 1.1.1970
        var jetzt = new Date();
        var vorbei;
        if (jetzt > zeitpunkt_ueberflug) vorbei = true;
        else vorbei = false;
        return(vorbei);
    }
     function baueSprachausgabe (ueberflugzeit, station, relativerTag) {
        var tag = zeitBis(ueberflugzeit).tag;
        var std = zeitBis(ueberflugzeit).std;
        var min = zeitBis(ueberflugzeit).min; 
    
        if (logging) log('Differenz berechnen (Sprachausgabe): Überflugzeit (' + ueberflugzeit + ') - Jetzt (' + Date.now()  + ') = ' + (ueberflugzeit - Date.now()) + 'ms, also ' + tag + ' Tage ' + std + ' std ' + min + ' min');
        // Text2Speech Aufbereitung
        var ansage_tag = (tag > 1 ) ? tag + ' Tagen' : '';
        ansage_tag = (tag === 1) ? 'einem Tag' : ansage_tag;
        ansage_tag = (tag === 0) ? '' : ansage_tag;
    
        var ansage_std = (std > 1 ) ? std + ' Stunden' : '';
        ansage_std = (std === 1) ? 'einer Stunde' : ansage_std;
        ansage_std = (std === 0) ? '' : ansage_std;
    
        var ansage_min = (min > 1 ) ? min + ' Minuten' : '';
        ansage_min = (min === 1) ? 'einer Minute' : ansage_min;
        ansage_min = (min === 0) ? '' : ansage_min;
    
        var nachricht = 'Die ' + station + ' überfliegt ' + relativerTag 
                      + ' um ' + formatDate(ueberflugzeit, "SS:mm")
                      + ' ihren Wohnort. Das ist in ' + ansage_tag 
                      + ' ' + ansage_std + ' ' + ansage_min + '.';
    
        var ansage = (ansage_tag !== 0 && ansage_std !== 0 && ansage_min !== 0) ? nachricht : 'Derzeit keine Überflüge';
        setState(idText2Speech, ansage);
    }
     function checkResult () { // jede Minute die bereits gespeicherten Daten der Webseite einlesen und mit aktueller Zeit vergleichen
        var optin = getState(idOptin).val;
        var result = JSON.parse(getState(idResult).val);
        if (optin) {
    
            // Array mit errechneten Zeiten und Daten anlegen
            // flugzeit absolut (ms), flugzeit datum, fluzeit uhrzeit, relativer tag (heute, morgen, ...), veraltet (false/true)
            var flugzeit_array = [];
    
            // HTML Ausgabe für VIS
            // Titel oben, Inhalt darunter (wie in der Zeitung)
            var tabelle ='';
    
            var titelzeile,           // Inhalt des RSS-Feeds in title
                beschreibung,         // Inhalt des RSS-Feeds in description
                datum_ueberflug,      // Überflug als Datum-Objekt
                datum_relativ,        // Dauer bis Überflug als String
                uhrzeit_ueberflug,    // Uhrzeit, bzw. ms seit Mitternacht des Flugtages
                zeitpunkt_ueberflug,  // genauer Zeitpunkt in ms seit 1.1.1970
                veraltet,             // true;false -> Überflug in der Vergangenheit
                station;              // Name der Station (ISS, ...), wird in der Titelzeile geliefert
            var next_ueberflug_string = "";
            var next_ueberflug_ms = 0;
    
            if (typeof result.rss.channel.item !== 'undefined') {           // prüfen, ob result.rss.channel.item existiert
                for(var i = 0; i < result.rss.channel.item.length; i++) {   // JSON-Result durchgehen
    
                    titelzeile = result.rss.channel.item[i].title;                                   // "2016-10-07 ISS Sighting"
                    beschreibung = result.rss.channel.item[i].description;
                    if (logging) log('############ ' + (i+1) + '. Eintrag im ISS-Plan ##################');
                    datum_ueberflug =   extrahiereTitelzeile(titelzeile).DatumSichtung;              // mache aus "2015-11-05 ISS Sighting" sowas "Thu Nov 05 2015 00:00:00 GMT+0100"
                    station =           extrahiereTitelzeile(titelzeile).StationSichtung;            // mache aus "2015-11-05 ISS Sighting" sowas "ISS"
                    datum_relativ =     relativerTag(datum_ueberflug);                               // heute, morgen, übermorgen, in 3 Tagen, ...
                    uhrzeit_ueberflug = extrahiereBeschreibung(beschreibung).UhrzeitSichtung;        // Kommendes Datum und Uhrzeit der Überflüge im Array (wobei Datum bereits aus Titelzeile kommt)
                    uhrzeit_ueberflug.setHours(uhrzeit_ueberflug.getHours()+1);                      // eine Stunde Unterschied zwischen CET und CEST
    
                    zeitpunkt_ueberflug = datum_ueberflug.getTime() + uhrzeit_ueberflug.getTime();   // Datum UND Uhrzeit seit Mitternacht, also gesamte Zeit seit 1.1.1970
                    veraltet = checkVeraltet(zeitpunkt_ueberflug);                                   // Zeitpunkt schon vorbei? boolean;
    
                    // HTML: wenn nicht veraltet, Eintrag anfügen
                    // todo: description auch noch aufschlüsseln (Elevation, Duration, etc.)
                    if (!veraltet) tabelle += '';
    
                    // Array: Überflugzeit, Überflug Datum Mitternacht, Überflug Uhrzeit ohne Datum, Zeit bis Überflug in relativen Tagen (heute, morgen, übermorgen, in X Tagen), Überflug vorbei (boolean), Stationsname
                    flugzeit_array[i] = [zeitpunkt_ueberflug, datum_ueberflug.getTime(), uhrzeit_ueberflug.getTime(), datum_relativ, veraltet, station ];
                    if (logging) {
                        log('_____ISS ARRAY ' + i + ' _______');
                        log('Überflugzeit in ms:      ' + flugzeit_array[i][0] + ' ' + formatDate(flugzeit_array[i][0], "DD.MM.YYYY SS:mm") );
                        log('Überflugzeit Datum:      ' + flugzeit_array[i][1] + ' ' + formatDate(flugzeit_array[i][1], "DD.MM.YYYY SS:mm") );
                        log('Überflugzeit Uhrzeit:    ' + flugzeit_array[i][2] + ' ' + formatDate(flugzeit_array[i][1], "DD.MM.YYYY SS:mm") );
                        log('Überflugzeit relativ:    ' + flugzeit_array[i][3]);
                        log('Überflugzeit veraltet?:  ' + flugzeit_array[i][4]);
                        log('Überflugzeit Station:    ' + flugzeit_array[i][5]);
                        log('_____ENDE ISS ARRAY _____');
                    }
                } // Ende FOR-Schleife (i)
    
                // Array durchgehen, bis nicht mehr veraltet
                // nur nächsten Überflug abspeichern (auch wenn noch andere danach kommen)
                // evtl dazu array sortieren nach überflugzeit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< http://www.w3schools.com/jsref/jsref_sort.asp
                for (var next = 0; next < flugzeit_array.length; next++) { // Array mit Überflugzeiten hochzählen
                    var pattern = /\d/g; // prüfen, ob nur nummern drin stehen (Zeit in ms), Plausibilität
                    if (pattern.test(flugzeit_array[next][0])) {
                        if (!flugzeit_array[next][4]) { // wenn nicht veraltet
                            if (logging) log('###### nächster Überflug der ' + flugzeit_array[next][5]);
                            next_ueberflug_ms = (flugzeit_array[next][0] > 0) ? flugzeit_array[next][0] : 0;
                            // setState(idZeit, next_ueberflug_ms);
                            next_ueberflug_string = (next_ueberflug_ms > 0) ? flugzeit_array[next][3] + ', ' + formatDate(next_ueberflug_ms, "SS:mm") : "keine Überflüge";
                            // setState(idZeitString, next_ueberflug_string);
                            if (flugzeit_array[next][3] === 'heute' || flugzeit_array[next][3] === 'morgen') meldeUeberflug (next_ueberflug_ms, station, flugzeit_array[next][3]); // prüfen, ob Meldung abzusetzen ist
                            baueSprachausgabe(flugzeit_array[next][0], flugzeit_array[next][5], flugzeit_array[next][3]);
                            break; // abbrechen, sobald erster Flug gefunden, welcher noch kommt
                        }
                    }
                } // Ende FOR (next)
            } else {
                tabelle += '';
                if (logging) log('Derzeit keine Überflüge');
            }
             tabelle += '
     <caption>Anstehende Sichtungen</caption>
    | RSS-Feed |
    | --- |
    | ' + datum_relativ + ' (' + station + ') |
    | ' + result.rss.channel.item[i].description + ' |
    | Derzeit keine Überflüge |
     ';     // HTML-Tabelle schließen
            setState(idFeedTabelle, tabelle);
            setState(idZeit, next_ueberflug_ms);
            setState(idZeitString, next_ueberflug_string);
            if (logging) log('ISS Daten aktualisiert');   // bedenke: minütliches log
        } // Ende Optin
    }
     function readRSS () { // nur alle 30 Minuten Webseite einlesen
        var optin = getState(idOptin).val;
        var parseString = require('xml2js').parseString;
        var request = require('request');
         if (optin) try {
            request(link, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    error_flag = false;
                    parseString(body, {
                        explicitArray: false,
                        mergeAttrs: true
                    },
                    function (err, ergebnis) {
                        //log(JSON.stringify(ergebnis, null, 2));
                        if (err) {
                            log("Fehler: " + err, 'error');
                            setState(idResult, " ");
                            error_flag = true;
                        } else {
                            setState(idResult, JSON.stringify(ergebnis, null, 2)); // Ergebnis des Parsens abspeichern
                            log('RSS-Feed ' + link + ' eingelesen');
                            error_flag = false;
                            checkResult();
                        }
                    });
                } else {
                    log("Fehler Request: " + error, 'error'); // Falls Nasa-Seite nicht erreichbar
                    error_flag = true;
                }
            });   // Ende request 
        } catch (fehler) {
            log('Fehler (try): ' + fehler, 'error');
            error_flag = true;
        }
    }
    var error_flag = false; // checkResult ruft bereits abgespeicherte Daten auf. Falls diese Daten falsch/kaputt sind, error_flag true
    readRSS();
    schedule("*/30 * * * *", readRSS); // Webseite aus dem Netz einlesen
    schedule("*/1 * * * *", function () {
        if (error_flag) {
            setState(idText2Speech, "Es sind keine Flugdaten abrufbar.");
            setState(idFeedTabelle, "
    Es gibt Probleme
    beim Einlesen der Daten
    ");
            setState(idResult, " ");
            setState(idZeit, 1);
            setState(idZeitString, " ");
        } else checkResult(); // Eingelesene Daten aus Datenpunkt auswerten (spart Internetzugriffe)
    }); 
    // ------------------------------------------------------------------
    // Opt In setzen - Logging
    on(idOptin, function (obj) {
        log('Opt in Variable <rss-feed iss-Überflüge="">auf <' + obj.state.val + '> gesetzt ', 'info');
        if (obj.state.val) readRSS();
        else setState(idFeedTabelle, ' ');
    });
    

    Alte View:
    View:
    261_bildschirmfoto_2015-11-10_um_16.10.42.jpg

    Neue View:
    261_bildschirmfoto_2016-04-06_um_17.34.23.jpg

    CSS

    /* Table Klasse = rss_feed */
    .rss_feed {
        border-collapse: collapse;
        border-spacing: 0;
    }
    .rss_feed caption {
        display: none;
    }
    /* ### Table head (Spaltentitel) ### */
    /* Überschrift weglassen */
    .rss_feed thead {
        display:none;
    }
    /* LAYOUT ÜBEREINANDER ************** */
    /* ### Table head (Spaltentitel) ### */
    /* Überschrift weglassen */
    .rss_feed thead {
        display:none;
    }
    /* ### Inhalt des Feeds ### */
    /* beide Spalten */
    .rss_feed tr {
        text-align: left;
    }
    /* Tablerow mit Titel */
    .rss_feed tr:nth-child(odd) {
        color: rgba(240,240,250,1);
        font-size: 110%;
        font-weight: 800;
    }
    /* Tablerow mit inhalt */
    .rss_feed tr:nth-child(even) {
        color: rgba(240,240,250,1);
        font-size: 80%;
    }
    .rss_feed tr:nth-child(even) td {
        padding-bottom: 2em;   
    }
    

    Viele Grüße,
    Pix

    EDIT 06.04.2016 17:20Uhr Skript optimiert und neuen Link verarbeitet (jetzt https). Ausserdem die Möglichkeit eingebaut, auch andere Stationen auszuwerten. Die Seite liefert nicht nur Daten zur ISS.

    EDIT 19.04.2016 12:20Uhr Skript wertet Fehler besser aus, wenn XML-Feed nicht wie erwartet. Benachrichtigung, ob Überflug jetzt pro Überflug nur einmal kurz vor Ereignis (0-30min davor).

    EDIT 22.01.2018 Neue Skriptversion mit Try & Catch - FUnktion, um ausfallenden Nasa-Server / Intenetverbindung abzufangen.

    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      mc-hollin
      schrieb am zuletzt editiert von
      #15

      Hallo Pix,

      ist echt verrückt wie einen iobroker in seinen Bann ziehen kann :shock: .

      Werde mir deine Lösung auf jeden Fall mal genauer anschauen.

      Bin gerade im Lernmodus.

      Gruß

      Holger
      1518_pv.txt

      1 Antwort Letzte Antwort
      0
      • G Offline
        G Offline
        Griesemer
        schrieb am zuletzt editiert von
        #16

        @pix:

        Habt Ihr auch noch Ideen? `
        Vielleicht wäre das ein Thema für einen flexibel konfigurierbaren RSS-Adapter. Ich könnte dazu allerdings nicht viel beitragen :)

        Beste Grüße

        Griesemer

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #17

          Hallo,

          ein flexibel konfigurierbarer Adapter ist vermutlich deshalb ein Problem, weil die RSS-Quellen natürlich sehr unterschiedlich sind und vor allem die Ausgabe von jedem User unterschiedlich gewünscht wird. Dafür ist ein individuelles CSS nötig.

          Aber vielleicht gibt es noch RSS-Feeds die nützlich, aber unbekannt/versteckt im Netz sind.

          Und hat jemand eine Idee, wie ich von ioBroker Javascript einen Kalendereintrag erzeugen kann?

          Gruß,

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mc-hollin
            schrieb am zuletzt editiert von
            #18

            @Griesemer:

            Vielleicht wäre das ein Thema für einen flexibel konfigurierbaren RSS-Adapter. Ich könnte dazu allerdings nicht viel beitragen :) `
            Das war auch mein Gedanke.

            Deswegen habe ich mal meinen ersten Adapter gestartet.

            iobroker.rss

            Hab da ein paar Ideen.

            Mal schauen wie ich damit zurecht komme.

            Zumindest wird das Grundgerüst schon mal in der Testumgebung angezeigt.

            Ich werde den Adapter dann unter GIT stellen.

            Ist aber alles Neuland.

            Gruß

            Holger

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              mc-hollin
              schrieb am zuletzt editiert von
              #19

              Bin leider noch nicht weiter gekommen, aber ich hätte noch einen RSS ;)

              http://forum.iobroker.net/feed.php

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von
                #20

                Hallo,

                es gibt derzeit ein Problem mit dem Dienst http://spotthestation.nasa.gov :cry:

                Daher funktioniert das o.g. Skript zur Zeit nicht und führt zum Absturz der entsprechenden Javascript Instanz. Das zeigt anschaulich, weshalb man Skripte, die auf fremden Daten basieren, nur in einer separaten Javscript-Instanz nutzen sollte.

                Wer es nutzt, sollte das Skript vorerst deaktivieren.

                Gruß

                Pix

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Antwort Letzte Antwort
                0
                • P Offline
                  P Offline
                  pix
                  schrieb am zuletzt editiert von
                  #21

                  Hallo,

                  habe das http://forum.iobroker.net/viewtopic.php?f=21&t=1683#p14391 angepasst. Es gab einige Fehler/Mängel:

                  • Link ist jetzt eine XML von spotthestation via https

                  • Die Seite liefert nicht nur Daten zur ISS, sondern auch zu anderen Stationen (zB "https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwj_npb_qPrLAhXMjSwKHZ4oDoQQFggfMAA&url=http%3A%2F%2Fwww.nasa.gov%2Fcontent%2Fprogress-61p-cargo-craft&usg=AFQjCNEZ4_5593os7mPd_KPQAWEV7Sk-MQ"). Der Titel der Station wird nun mit ausgegeben (View und Pushmeldung)

                  • Code optimiert und korrigiert

                  Gruß,

                  Pix

                  EDIT: 22.1.2018 Link zum Skript aktualisiert

                  ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    pix
                    schrieb am zuletzt editiert von
                    #22

                    Hallo,

                    hab das http://forum.iobroker.net/viewtopic.php?f=21&t=1683#p14391 nochmal verbessert:

                    • Benachrichtigung, ob Überflug, nun einmalig 0-30min vor Ereignis

                    • Besserer Umgang mit Fehlern, falls XML keinen Überflug meldet

                    Gruß

                    Pix

                    EDIT: 22.1.2018 Link zum Skript aktualisiert

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Antwort Letzte Antwort
                    0
                    • N Offline
                      N Offline
                      nathan1312
                      schrieb am zuletzt editiert von
                      #23

                      Hallo,

                      ich habe mir über die tolle Anleitung von pix erfolgreich den tagesschau-feed auf meine vis-oberfläche geholt. Ich möchte jedoch die Darstellung für meine Zwecke ein wenig anpassen. Im Moment werden alle Nachrichten untereinander (Schlagzeile und Nachricht abwechselnd) geschrieben. Das ist von der Aufteilung her gut so, nur hab ich leider nicht unbegrenzt Platz zur Verfügung. Ich möchte lieber anstatt allen Nachrichten gleichzeitig nur jeweils eine aus der Liste anzeigen lassen. Die Nachrichten sollen dann im 30 sek Rhythmus durchwechseln.

                      Wie schaffe ich es also, aus der html-Tabelle im Datenpunkt auf die einzelnen Einträge zuzugreifen, und mir diese im Wechsel anzeigen zu lassen?

                      Vielen Dank für jede Hilfe!

                      Beste Grüße!

                      1 Antwort Letzte Antwort
                      0
                      • C Offline
                        C Offline
                        C1500
                        schrieb am zuletzt editiert von
                        #24

                        Servus Zusammen,

                        genau das was nathan1312 gemacht hat, suche ich gerade.

                        Bzw. genial wäre das durchwechseln der Nachrichten

                        Entweder n-tv, N24 oder tagesschau Feed´s:

                        n-tv: https://www.n-tv.de/rss

                        N24: https://www.welt.de/feeds/topnews.rss

                        Tagesschau: http://www.tagesschau.de/download/xml/rss2

                        Bräuchte das für meine MagicMirror auf dem eine iob.vis läuft ;o)

                        Gruß Peer

                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          pix
                          schrieb am zuletzt editiert von
                          #25

                          Hallo,

                          hier kannst du ein Skript, das setInterval nutzt, finden. Damit lasse ich mir alle 10s eine andere Webcam/Regenradar/etc. anzeigen.

                          http://forum.iobroker.net/viewtopic.php … 981#p17070

                          Gruß

                          Pix

                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            senger1985
                            schrieb am zuletzt editiert von Jey Cee
                            #26

                            Hallo,

                            ich habe nach der Anleitung von pix, das Script in eine zweite JS-Instanz eingepflegt und für meinen RSS-Feed, den ich auslesen lassen möchte umgeschrieben.

                            Nur leider bekomme ich in der ersten Spalte "NaN…" angezeigt.

                            Hier das Script:

                            /* VIS TV Programm
                            
                            Bringt einen RSS-Feed als Tabelle in ioBroker
                            setzt die Library xml2js voraus (in Javascript Einstellungen zufügen)
                            
                            für http://forum.iobroker.net/viewtopic.php?f=21&t=1683
                            
                            erstellt: 08.11.2015 von Pix (auf Basis von Bluefox Code) für Griesemer
                            */
                            
                            createState('RSS-Feed.VBB.Tabelle', {write: true, read: true, name: 'RSS Feed VBB Tabelle', type: 'string', desc: 'VBB RSS Feed als HTML Tabelle'});
                            createState('RSS-Feed.Optin', true, {write: true, read: true, name: 'Optin RSS Feeds abrufen', type: 'boolean', desc: 'Sollen RSS-Feeds abgerufen werden?'});
                            
                            var link = 'http://www.vbb.de/de/broken_lifts.xml';
                            
                            var idOptin = 'RSS-Feed.Optin',
                                optin_beschreibung = 'RSS Feed',
                                idFeedTabelle = 'RSS-Feed.VBB.Tabelle';
                            
                            function RSS_einlesen () { // alle 5 Minuten
                                var optin = getState(idOptin).val;
                                var parseString = require('xml2js').parseString;
                                var request = require('request');
                            
                                if (optin) request(link, function (error, response, body) {
                                    if (!error && response.statusCode == 200) {
                            
                                        parseString(body, {
                                            explicitArray: false,
                                            mergeAttrs: true
                                        },
                                        function (err, result) {
                                            //log(JSON.stringify(result, null, 2));
                                            if (err) {
                                                log("Fehler: " + err);
                                            } else {                                                               
                                                var tabelle ='';
                                                for(var i = 0; i <result.rss.channel.item.length; i++)/{/tabelle/+="<tr><td>" result.rss.channel.item[i].vbb-name/'</td=""></result.rss.channel.item.length;>';
                                                }
                                                tabelle += '
                            
                            | Station | Status | Aktuelle Meldung |
                            | --- | --- | --- |
                            | ' + result.rss.channel.item[i].title + ' | ' + result.rss.channel.item[i].description + ' |
                            
                            ';  
                                                setState(idFeedTabelle, tabelle);
                                            }
                                        });
                                    } else  {
                                        log(error);
                                    }
                                });   // Ende request 
                                log('RSS-Feed ' + link + ' eingelesen');
                            }
                            
                            schedule("*/10 * * * *", RSS_einlesen); 
                            RSS_einlesen();
                            
                            // Opt In setzen - Logging
                            on( { 
                                id: idOptin,
                                change: 'ne'
                            }, function (obj) {
                                if (obj.newState.val === false || obj.newState.val =='false') {
                                    log('Opt in Variable <' + optin_beschreibung + ' Push> auf <aus '/+/obj.newstate.val="">gesetzt ', 'info');
                                } else if (obj.newState.val === true || obj.newState.val =='true') {
                                    log('Opt in Variable <' + optin_beschreibung + ' Push> auf <ein '/+/obj.newstate.val="">gesetzt ', 'info');
                                }
                            });
                            

                            Kann mir da vielleicht jemand sagen, warum "result.rss.channel.item_[i].vbb-name" dieses Resultat ausgibt?

                            Vielen Dank

                            1 Antwort Letzte Antwort
                            0
                            • L Offline
                              L Offline
                              lalam
                              schrieb am zuletzt editiert von
                              #27

                              Hallo @ *,

                              bohre gerade meine LED Matrix Anzeige auf 2x (8x128) auf und würde gern in der unteren Zeile einen Newsfeed laufen lassen. Habe das Script auf einem separaten JS-Adapter installiert, finde jetzt aber die Daten nicht. Wo schreibt der das hin?????? Oder mache ich da einen Denkfehler?

                              Danke und Grüße

                              Lars

                              Bin ich blöd! Habs gefunden :-)

                              Ich versuche es mal umzuschreiben dass jeweils die 5 aktuellsten Headlines in eine Variable geschrieben werden - das Matrix Display gibt nur eine Zeichenkette aus …

                              1 Antwort Letzte Antwort
                              0
                              • marcusklM Offline
                                marcusklM Offline
                                marcuskl
                                schrieb am zuletzt editiert von
                                #28

                                Wo finde ich jetzt den aktuellen Skript ?

                                Host: Intel Nuc6cayh (16GB Ram, 240GB SSD) mit Proxmox.

                                Iobroker VM, InfluxDB LXC, Pihole LXC, Tasmoadmin LXC, Easy2connect VM

                                1 Antwort Letzte Antwort
                                0
                                • P pix

                                  Danke, freut mich!

                                  Hab nochmal ne andere Formatierung eingebaut. Für diesen Inhalt ist diese Darstellung besser:

                                  261_bildschirmfoto_2015-11-09_um_17.50.12.jpg

                                  CSS:

                                  /* LAYOUT ÜBEREINANDER ************** */
                                  
                                  /* ### Table head (Spaltentitel) ### */
                                  /* Überschrift weglassen */
                                  .rss_feed thead {
                                      display:none;
                                  }
                                  
                                  /* ### Inhalt des Feeds ### */
                                  /* beide Spalten */
                                  .rss_feed tr {
                                      text-align: left;
                                  }
                                  
                                  /* Tablerow mit Titel */
                                  .rss_feed tr:nth-child(odd) {
                                      color: rgba(230,230,250,1);
                                      font-size: 110%;
                                      font-weight: 800;
                                  }
                                  
                                  /* Tablerow mit inhalt */
                                  .rss_feed tr:nth-child(even) {
                                      color: rgba(230,230,250,1);
                                      font-size: 80%;
                                  }
                                  
                                  .rss_feed tr:nth-child(even) td {
                                      padding-bottom: 2em;   
                                  }
                                  
                                  

                                  Scriptteil ersetzen

                                  } else {      
                                                      /* 
                                                      // Titel links, Inhalt rechts
                                                      var tabelle ='';
                                                      for(var i = 0; i <result.rss.channel.item.length; i++)/{/tabelle/+="<tr><td>" result.rss.channel.item[i].title/'</td=""></result.rss.channel.item.length;>';
                                                      }
                                                      */
                                                      // Titel oben, INhalt darunter (wie in der Zeitung)
                                                      var tabelle ='
                                  
                                  | Titel | Beschreibung |
                                  | --- | --- |
                                  | ' + result.rss.channel.item[i].description + ' |
                                  
                                  ';
                                                      for(var i = 0; i <result.rss.channel.item.length; i++)/{/tabelle/+="<tr><td>" result.rss.channel.item[i].title/'</td=""></result.rss.channel.item.length;>';
                                                      }
                                                      tabelle += '
                                  
                                  | RSS-Feed |
                                  | --- |
                                  | ' + result.rss.channel.item[i].description + ' |
                                  
                                  ';  
                                                      setState(idFeedTabelle, tabelle);
                                                  }`
                                  

                                  Gruß

                                  Pix

                                  AphofisA Offline
                                  AphofisA Offline
                                  Aphofis
                                  schrieb am zuletzt editiert von
                                  #29

                                  @pix
                                  Wie und wo hast du das denn alles eingebunden!? Das sieht echt toll aus! Ich bin noch iobroker neuling und könnte eine wenig Griff unter die Flügel gebrauchen.
                                  Gruß Gordon

                                  P 1 Antwort Letzte Antwort
                                  0
                                  • AphofisA Aphofis

                                    @pix
                                    Wie und wo hast du das denn alles eingebunden!? Das sieht echt toll aus! Ich bin noch iobroker neuling und könnte eine wenig Griff unter die Flügel gebrauchen.
                                    Gruß Gordon

                                    P Offline
                                    P Offline
                                    pix
                                    schrieb am zuletzt editiert von
                                    #30

                                    @Aphofis Such mal nach "Mal zeigen will" oder so, da sind viele VIS Views vorgestellt.

                                    Gruß
                                    Pix

                                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                    AphofisA 1 Antwort Letzte Antwort
                                    0
                                    • P pix

                                      @Aphofis Such mal nach "Mal zeigen will" oder so, da sind viele VIS Views vorgestellt.

                                      Gruß
                                      Pix

                                      AphofisA Offline
                                      AphofisA Offline
                                      Aphofis
                                      schrieb am zuletzt editiert von
                                      #31

                                      @pix OK Danke

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        senger1985
                                        schrieb am zuletzt editiert von
                                        #32

                                        @pix könntest du mal bitte über mein Script (Post 27) schauen und mir sagen, warum er mir die Daten nicht ausgibt?

                                        1 Antwort Letzte Antwort
                                        0
                                        • P Offline
                                          P Offline
                                          pix
                                          schrieb am zuletzt editiert von
                                          #33

                                          Hallo Senger1985,

                                          das o.g. Skript ist ganz schön zerhauen (durch die Änderung der Forensoftware). Du müsstest eigentlich das Originalskript aus deiner Installation neu posten.

                                          Kannst du dir aber sparen, denn es liegt nicht am Skript.
                                          Der Link zur XML-Datei funktioniert nicht mehr bzw. die Information wird nicht mehr darin bereitgestellt:
                                          Bildschirmfoto 2019-10-29 um 09.17.15.jpg

                                          Gruß
                                          Pix

                                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                          S 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          790

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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