- ioBroker Community Home
- Deutsch
- Skripten / Logik
- JavaScript
- Script für Formel 1 - Kalender, Ergebnisse und Wertungen
NEWS
Script für Formel 1 - Kalender, Ergebnisse und Wertungen
-
@nashra reicht dir die Tabelle?
Die Buttons sind mit dem Material Design Widgets gemacht + css
außerdem sind die Farben Bindings mit Bezug auf Seitennamen der vis, würde etwas komplizierter werden.@stenmic sagte in Script für Formel 1:
@nashra reicht dir die Tabelle?
Ja, würde schon reichen
Die Buttons sind mit dem Material Design Widgets gemacht + css
außerdem sind die Farben Bindings mit Bezug auf Seitennamen der vis, würde etwas komplizierter werden.css wäre schon gut wenn sie dabei ist
Gruß Ralf
Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
-
Hallo, cool wäre es noch wenn man direkt ein Jahr auswählen könnte.
Rennkalender/Rennergebnisse
@sigi234 sagte in Script für Formel 1:
Hallo, cool wäre es noch wenn man direkt ein Jahr auswählen könnte.
Rennkalender/Rennergebnisse
gute Idee, werd ich noch machen
-
moin,
Hier ein Script für die Formel 1was kann es:
- Rennkalender (1950 - aktuelle Session)
- Rennergebnisse (aktuelle Session)
- Fahrer und Konstrukteur WM (aktuelle Session)
Die Daten werden von "Ergast" über https://api.jolpi.ca/ergast/ geholt.
Wer testen will kann gerne mitmachen.
Als erstes müssen die Datenpunkte angelegt werden.
Folgendes Skript unter Skripte/JavaScript anlegen und einmal ausführen.
Damit werden die notwendigen Datenpunkte unter “ 0_userdata.0.Formel1“ angelegt.Datenpunkte
// Kalender createState('0_userdata.0.Formel1.Kalender.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr_zurueck',false,{name: 'Jahr_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_vor',false,{name: 'Jahr_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_aktuell',false,{name: 'Jahr_aktuell',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr',0,{name: 'Anzahl_Rennen_Aktuelles_Jahr',role: 'value',type: 'number'}); // Rennergebnisse createState('0_userdata.0.Formel1.Rennergebnisse.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Rennen_Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Fahrerwertung createState('0_userdata.0.Formel1.Fahrerwertung.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Konstrukteur createState('0_userdata.0.Formel1.Konstrukteur.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'});Danach die folgenden 4 Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)Kalender
// ################################################ // Formel1 Kalender v1.01 // by stenmic // ################################################ var Farbe_fuer_naechstes_Rennen, Blocker_api, X, Kalender, Blocker_nextRace, Date2, spanIN, VIS, spanOUT; // ################################################ Farbe_fuer_naechstes_Rennen = '#26b1e6'; // ################################################ function textReplace(haystack, needle, replacement) { needle = needle.replace(/([-()\\[\\]{}+?*.$\^|,:#<!\\\])/g, '\\$1') .replace(/\x08/g, '\\x08'); return haystack.replace(new RegExp(needle, 'g'), replacement); } Blocker_api = false; on({ id: '0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((1950 <= (obj.state ? obj.state.val : '')) && (Blocker_api == false)) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/races/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Kalender.json' /* json */, response.data, true); await wait(500); Blocker_api = false; } else { await wait(500); setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); Blocker_api = false; } }); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_zurueck' /* Jahr_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1950 < getState('0_userdata.0.Formel1.Kalender.Jahr').val) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_vor' /* Jahr_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_aktuell' /* Jahr_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); schedule('{"time":{"exactTime":true,"start":"00:30"},"period":{"days":1}}', async () => { if (getState('0_userdata.0.Formel1.Kalender.Jahr').val != parseFloat(formatDate(new Date(), 'JJJJ'))) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); schedule("1,16,31,46 4-23 * * 0,6", async () => { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); on({ id: '0_userdata.0.Formel1.Kalender.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennkalender ',getState('0_userdata.0.Formel1.Kalender.Jahr').val,' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, ('Rennkalender ' + String(getState('0_userdata.0.Formel1.Kalender.Jahr').val)), true); } X = 0; Kalender = []; Blocker_nextRace = false; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.' + String(X))) == null)) { if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join(''))) != null) { Date2 = [formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join('')))), 'T.M.'),' • ',formatDate(getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))), 'S.mm'),' Uhr'].join(''); } else { Date2 = formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['',X,'.date'].join('')))), 'T.M.'); } if (getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))).getTime() + 14400000 >= (new Date().getTime())) { if (Blocker_nextRace == false) { spanIN = ['<span style="color:',Farbe_fuer_naechstes_Rennen,';">'].join(''); spanOUT = '</span>'; Blocker_nextRace = true; } else { spanIN = ''; spanOUT = ''; } } else { spanIN = ''; spanOUT = ''; } VIS = { 'Rennen': [spanIN,X + 1,spanOUT].join(''), 'Datum': [spanIN,Date2,spanOUT].join(''), 'Grand Prix': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.raceName'].join(''))),spanOUT].join(''), 'Strecke': [spanIN,[' <a href="',textReplace(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.url'].join(''))), '//en.', '//de.'),'" target="_blank" style="text-decoration: none; color: inherit;">',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.circuitName'].join(''))),'</a>'].join(''),spanOUT].join(''), 'Location': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.Location.locality'].join(''))),spanOUT].join('') }; Kalender.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Kalender.VIS_json' /* VIS_json */, JSON.stringify(Kalender), true); if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { if (getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val != X) { setState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr' /* Anzahl_Rennen_Aktuelles_Jahr */, X, true); } } }); 'MRData.RaceTable.Races.';Rennergebnisse
// ################################################ // Formel1 Rennergebnisse v1.02 // by stenmic // ################################################ var Farbe_fuer_Ausgefallen, Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Fast_Lap, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Blocker_api, X, Anzahl_Fahrer, Rennen, Position, Aenderung, Start, Zeit, spanINFahrer, spanOUTFahrer, spanINTeam, spanOUTTeam, Aenderung2, spanINFastLap, spanOUTFastLap, Punkte, VIS; // ################################################ Farbe_fuer_Ausgefallen = '#e55a52'; Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Fast_Lap = '#DA5EBA'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1 < getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == 0) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, 30, true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val, true); } }); schedule('{"time":{"exactTime":true,"start":"00:31"},"period":{"days":1}}', async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',formatDate(new Date(), 'JJJJ'),'/1/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr' /* Rennen_Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); }); Blocker_api = false; on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (Blocker_api == false) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/',(obj.state ? obj.state.val : ''),'/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.json' /* json */, response.data, true); if ((obj.state ? obj.state.val : '') > getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, (obj.state ? obj.state.val : ''), true); } await wait(500); Blocker_api = false; } else { await wait(500); if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } Blocker_api = false; } }); } }); schedule("2,17,32,47 4-23 * * 0,6", async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; X = 0; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ'),' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ')].join('')), true); } while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Anzahl_Fahrer = X + 1; X = (typeof X === 'number' ? X : 0) + 1; } X = 0; Rennen = []; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Position = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); Aenderung = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) != 0) { Start = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))); } else { Start = 'Box'; Aenderung = Anzahl_Fahrer - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == 'Finished') { Zeit = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Time.time'].join(''))); } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+1 Lap') { Zeit = '+1 Runde'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+2 Laps') { Zeit = '+2 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+3 Laps') { Zeit = '+3 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+4 Laps') { Zeit = '+4 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+5 Laps') { Zeit = '+5 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+6 Laps') { Zeit = '+6 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+7 Laps') { Zeit = '+7 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+8 Laps') { Zeit = '+8 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+9 Laps') { Zeit = '+9 Runden'; } else { Zeit = ['<span style="color:',Farbe_fuer_Ausgefallen,';">Ausfall</span>'].join(''); Position = ''; Aenderung = 'Ausfall'; } if ([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } if (Aenderung == 'Ausfall') { Aenderung2 = ''; } else if (Aenderung == 0) { Aenderung2 = '='; } else if (Aenderung > 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else if (Aenderung < 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.rank'].join(''))) == 1) { spanINFastLap = ['<span style="color:',Farbe_Fast_Lap,';">'].join(''); spanOUTFastLap = '</span>'; } else { spanINFastLap = ''; spanOUTFastLap = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))) != 0) { Punkte = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))); } else { Punkte = ''; } VIS = { 'Position': Position, 'Change': Aenderung2, 'Fahrer': [spanINFahrer,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join(''))),spanOUTFahrer].join(''), 'Team': [spanINTeam,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))),spanOUTTeam].join(''), 'Grid': Start, 'Runden': getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.laps'].join(''))), 'Zeit': Zeit, 'Punkte': Punkte, 'Fast Lap': [spanINFastLap,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.Time.time'].join(''))),spanOUTFastLap].join('') }; Rennen.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Rennergebnisse.VIS_json' /* VIS_json */, JSON.stringify(Rennen), true); });Fahrerwertung
// ################################################ // Formel1 Fahrerwertung v1.01 // by stenmic // ################################################ var Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINFahrer, spanOUTFahrer, spanINTeam, VIS, spanOUTTeam; // ################################################ Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Fahrerwertung.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.DriverStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.Driver.driverId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.driverId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if ([getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))), 'Change': Change, 'Fahrer': [spanINFahrer,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.nationality'].join(''))),spanOUTFahrer].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.wins'].join(''))), 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))),spanOUTTeam].join('') }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Fahrerwertung.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });Konstrukteur
// ################################################ // Formel1 Konstrukteur v1.01 // by stenmic // ################################################ var Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINTeam, VIS, spanOUTTeam; // ################################################ Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Konstrukteur.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.ConstructorStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.Constructor.constructorId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.constructorId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))), 'Change': Change, 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.nationality'].join(''))),spanOUTTeam].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.wins'].join(''))) }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Konstrukteur.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == getState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });So sollte es dann aussehen

!!!Wichtig!!!
für die Initialisierung muss man jetzt unter den Datenpunkten einmalig bei allen 4 Bereichen den "aktuell" Button ausführen.
Am besten auch in dieser Reihenfolge:
Kalender.Jahr_aktuell
Rennergebnisse.Rennen_aktuell
Fahrerwertung.Rennen_aktuell
Konstrukteur.Rennen_aktuellBeispiel für den Kalender

Danach können die vor, zurück und aktuell Button genutzt werden.
Für die VIS sind jeweilige Datenpunkte für Überschriften und Tabellen vorhanden
Ueberschrift_VIS (html widget mit binding)
VIS_json
Für die Darstellung der Json Tabelle (VIS_json) empfehle ich https://github.com/inventwo/ioBroker.vis-inventwo
Geht aber glaube ich nur für VIS1
das Standard widget geht aber auch.
Würde mich freuen wenn einige von euch die Skripte testen und eventuelle Fehler melden würden.
So sieht es bei mir am Ende aus:
Info... die Strecken im Kalender sind mit wikipedia verlinkt.




Eigentlich sollte alles fehlerfrei funktionieren aber eventuell muss ich nächste Saison nachbessern falls er zu Fehlermeldungen wegen dem Jahr kommt. Dass kann ich jetzt noch nicht wirklich alles prüfen.
@stenmic Hallo stenmic, vielen Dank für Deine Tolle Arbeit, ich bin allerdings frisch dabei mir einen Raspberry einzurichten und VIS zu erstellen. Bei der JSON Table-Widget, wo muß ich Ueberschrift_VIS und VIS_json eintragen? Vielen Dank. :grimacing:
-
@stenmic Hallo stenmic, vielen Dank für Deine Tolle Arbeit, ich bin allerdings frisch dabei mir einen Raspberry einzurichten und VIS zu erstellen. Bei der JSON Table-Widget, wo muß ich Ueberschrift_VIS und VIS_json eintragen? Vielen Dank. :grimacing:
@thorsten4-71 sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
Ueberschrift_VIS

VIS_json

Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
moin,
Hier ein Script für die Formel 1was kann es:
- Rennkalender (1950 - aktuelle Session)
- Rennergebnisse (aktuelle Session)
- Fahrer und Konstrukteur WM (aktuelle Session)
Die Daten werden von "Ergast" über https://api.jolpi.ca/ergast/ geholt.
Wer testen will kann gerne mitmachen.
Als erstes müssen die Datenpunkte angelegt werden.
Folgendes Skript unter Skripte/JavaScript anlegen und einmal ausführen.
Damit werden die notwendigen Datenpunkte unter “ 0_userdata.0.Formel1“ angelegt.Datenpunkte
// Kalender createState('0_userdata.0.Formel1.Kalender.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr_zurueck',false,{name: 'Jahr_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_vor',false,{name: 'Jahr_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_aktuell',false,{name: 'Jahr_aktuell',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr',0,{name: 'Anzahl_Rennen_Aktuelles_Jahr',role: 'value',type: 'number'}); // Rennergebnisse createState('0_userdata.0.Formel1.Rennergebnisse.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Rennen_Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Fahrerwertung createState('0_userdata.0.Formel1.Fahrerwertung.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Konstrukteur createState('0_userdata.0.Formel1.Konstrukteur.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'});Danach die folgenden 4 Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)Kalender
// ################################################ // Formel1 Kalender v1.01 // by stenmic // ################################################ var Farbe_fuer_naechstes_Rennen, Blocker_api, X, Kalender, Blocker_nextRace, Date2, spanIN, VIS, spanOUT; // ################################################ Farbe_fuer_naechstes_Rennen = '#26b1e6'; // ################################################ function textReplace(haystack, needle, replacement) { needle = needle.replace(/([-()\\[\\]{}+?*.$\^|,:#<!\\\])/g, '\\$1') .replace(/\x08/g, '\\x08'); return haystack.replace(new RegExp(needle, 'g'), replacement); } Blocker_api = false; on({ id: '0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((1950 <= (obj.state ? obj.state.val : '')) && (Blocker_api == false)) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/races/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Kalender.json' /* json */, response.data, true); await wait(500); Blocker_api = false; } else { await wait(500); setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); Blocker_api = false; } }); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_zurueck' /* Jahr_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1950 < getState('0_userdata.0.Formel1.Kalender.Jahr').val) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_vor' /* Jahr_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_aktuell' /* Jahr_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); schedule('{"time":{"exactTime":true,"start":"00:30"},"period":{"days":1}}', async () => { if (getState('0_userdata.0.Formel1.Kalender.Jahr').val != parseFloat(formatDate(new Date(), 'JJJJ'))) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); schedule("1,16,31,46 4-23 * * 0,6", async () => { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); on({ id: '0_userdata.0.Formel1.Kalender.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennkalender ',getState('0_userdata.0.Formel1.Kalender.Jahr').val,' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, ('Rennkalender ' + String(getState('0_userdata.0.Formel1.Kalender.Jahr').val)), true); } X = 0; Kalender = []; Blocker_nextRace = false; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.' + String(X))) == null)) { if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join(''))) != null) { Date2 = [formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join('')))), 'T.M.'),' • ',formatDate(getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))), 'S.mm'),' Uhr'].join(''); } else { Date2 = formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['',X,'.date'].join('')))), 'T.M.'); } if (getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))).getTime() + 14400000 >= (new Date().getTime())) { if (Blocker_nextRace == false) { spanIN = ['<span style="color:',Farbe_fuer_naechstes_Rennen,';">'].join(''); spanOUT = '</span>'; Blocker_nextRace = true; } else { spanIN = ''; spanOUT = ''; } } else { spanIN = ''; spanOUT = ''; } VIS = { 'Rennen': [spanIN,X + 1,spanOUT].join(''), 'Datum': [spanIN,Date2,spanOUT].join(''), 'Grand Prix': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.raceName'].join(''))),spanOUT].join(''), 'Strecke': [spanIN,[' <a href="',textReplace(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.url'].join(''))), '//en.', '//de.'),'" target="_blank" style="text-decoration: none; color: inherit;">',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.circuitName'].join(''))),'</a>'].join(''),spanOUT].join(''), 'Location': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.Location.locality'].join(''))),spanOUT].join('') }; Kalender.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Kalender.VIS_json' /* VIS_json */, JSON.stringify(Kalender), true); if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { if (getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val != X) { setState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr' /* Anzahl_Rennen_Aktuelles_Jahr */, X, true); } } }); 'MRData.RaceTable.Races.';Rennergebnisse
// ################################################ // Formel1 Rennergebnisse v1.02 // by stenmic // ################################################ var Farbe_fuer_Ausgefallen, Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Fast_Lap, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Blocker_api, X, Anzahl_Fahrer, Rennen, Position, Aenderung, Start, Zeit, spanINFahrer, spanOUTFahrer, spanINTeam, spanOUTTeam, Aenderung2, spanINFastLap, spanOUTFastLap, Punkte, VIS; // ################################################ Farbe_fuer_Ausgefallen = '#e55a52'; Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Fast_Lap = '#DA5EBA'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1 < getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == 0) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, 30, true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val, true); } }); schedule('{"time":{"exactTime":true,"start":"00:31"},"period":{"days":1}}', async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',formatDate(new Date(), 'JJJJ'),'/1/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr' /* Rennen_Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); }); Blocker_api = false; on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (Blocker_api == false) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/',(obj.state ? obj.state.val : ''),'/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.json' /* json */, response.data, true); if ((obj.state ? obj.state.val : '') > getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, (obj.state ? obj.state.val : ''), true); } await wait(500); Blocker_api = false; } else { await wait(500); if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } Blocker_api = false; } }); } }); schedule("2,17,32,47 4-23 * * 0,6", async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; X = 0; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ'),' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ')].join('')), true); } while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Anzahl_Fahrer = X + 1; X = (typeof X === 'number' ? X : 0) + 1; } X = 0; Rennen = []; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Position = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); Aenderung = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) != 0) { Start = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))); } else { Start = 'Box'; Aenderung = Anzahl_Fahrer - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == 'Finished') { Zeit = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Time.time'].join(''))); } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+1 Lap') { Zeit = '+1 Runde'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+2 Laps') { Zeit = '+2 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+3 Laps') { Zeit = '+3 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+4 Laps') { Zeit = '+4 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+5 Laps') { Zeit = '+5 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+6 Laps') { Zeit = '+6 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+7 Laps') { Zeit = '+7 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+8 Laps') { Zeit = '+8 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+9 Laps') { Zeit = '+9 Runden'; } else { Zeit = ['<span style="color:',Farbe_fuer_Ausgefallen,';">Ausfall</span>'].join(''); Position = ''; Aenderung = 'Ausfall'; } if ([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } if (Aenderung == 'Ausfall') { Aenderung2 = ''; } else if (Aenderung == 0) { Aenderung2 = '='; } else if (Aenderung > 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else if (Aenderung < 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.rank'].join(''))) == 1) { spanINFastLap = ['<span style="color:',Farbe_Fast_Lap,';">'].join(''); spanOUTFastLap = '</span>'; } else { spanINFastLap = ''; spanOUTFastLap = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))) != 0) { Punkte = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))); } else { Punkte = ''; } VIS = { 'Position': Position, 'Change': Aenderung2, 'Fahrer': [spanINFahrer,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join(''))),spanOUTFahrer].join(''), 'Team': [spanINTeam,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))),spanOUTTeam].join(''), 'Grid': Start, 'Runden': getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.laps'].join(''))), 'Zeit': Zeit, 'Punkte': Punkte, 'Fast Lap': [spanINFastLap,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.Time.time'].join(''))),spanOUTFastLap].join('') }; Rennen.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Rennergebnisse.VIS_json' /* VIS_json */, JSON.stringify(Rennen), true); });Fahrerwertung
// ################################################ // Formel1 Fahrerwertung v1.01 // by stenmic // ################################################ var Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINFahrer, spanOUTFahrer, spanINTeam, VIS, spanOUTTeam; // ################################################ Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Fahrerwertung.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.DriverStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.Driver.driverId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.driverId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if ([getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))), 'Change': Change, 'Fahrer': [spanINFahrer,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.nationality'].join(''))),spanOUTFahrer].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.wins'].join(''))), 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))),spanOUTTeam].join('') }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Fahrerwertung.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });Konstrukteur
// ################################################ // Formel1 Konstrukteur v1.01 // by stenmic // ################################################ var Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINTeam, VIS, spanOUTTeam; // ################################################ Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Konstrukteur.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.ConstructorStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.Constructor.constructorId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.constructorId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))), 'Change': Change, 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.nationality'].join(''))),spanOUTTeam].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.wins'].join(''))) }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Konstrukteur.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == getState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });So sollte es dann aussehen

!!!Wichtig!!!
für die Initialisierung muss man jetzt unter den Datenpunkten einmalig bei allen 4 Bereichen den "aktuell" Button ausführen.
Am besten auch in dieser Reihenfolge:
Kalender.Jahr_aktuell
Rennergebnisse.Rennen_aktuell
Fahrerwertung.Rennen_aktuell
Konstrukteur.Rennen_aktuellBeispiel für den Kalender

Danach können die vor, zurück und aktuell Button genutzt werden.
Für die VIS sind jeweilige Datenpunkte für Überschriften und Tabellen vorhanden
Ueberschrift_VIS (html widget mit binding)
VIS_json
Für die Darstellung der Json Tabelle (VIS_json) empfehle ich https://github.com/inventwo/ioBroker.vis-inventwo
Geht aber glaube ich nur für VIS1
das Standard widget geht aber auch.
Würde mich freuen wenn einige von euch die Skripte testen und eventuelle Fehler melden würden.
So sieht es bei mir am Ende aus:
Info... die Strecken im Kalender sind mit wikipedia verlinkt.




Eigentlich sollte alles fehlerfrei funktionieren aber eventuell muss ich nächste Saison nachbessern falls er zu Fehlermeldungen wegen dem Jahr kommt. Dass kann ich jetzt noch nicht wirklich alles prüfen.
@stenmic endlich wieder was zum spielen!

hab mal angefangen das für iQontrol zu basteln...
kalender:

rennergebnisse:

ist sicher noch ausbaufähig... umschalten der 4 listen, zeilenfarben, ...
am handy schauts auch noch nicht so prickelnd auswas ich nicht ganz verstehe:
// ################################################ Farbe_fuer_Ausgefallen = '#e55a52'; Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Fast_Lap = '#DA5EBA'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################was hats mit dem hulk und haas zu tun? warum da andere farbe?

gruß vom Woody
HAPPINESS is not a DESTINATION, it's a WAY of LIFE! -
@stenmic endlich wieder was zum spielen!

hab mal angefangen das für iQontrol zu basteln...
kalender:

rennergebnisse:

ist sicher noch ausbaufähig... umschalten der 4 listen, zeilenfarben, ...
am handy schauts auch noch nicht so prickelnd auswas ich nicht ganz verstehe:
// ################################################ Farbe_fuer_Ausgefallen = '#e55a52'; Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Fast_Lap = '#DA5EBA'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################was hats mit dem hulk und haas zu tun? warum da andere farbe?

@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
was hats mit dem hulk und haas zu tun? warum da andere farbe?
Da wird dein Favoriten Team/Fahrer farblich in der Liste hervorgehoben.
Erst nach Klick auf den Button.Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
was hats mit dem hulk und haas zu tun? warum da andere farbe?
Da wird dein Favoriten Team/Fahrer farblich in der Liste hervorgehoben.
Erst nach Klick auf den Button.@sigi234 sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
was hats mit dem hulk und haas zu tun? warum da andere farbe?
Da wird dein Favoriten Team/Fahrer farblich in der Liste hervorgehoben.
Erst nach Klick auf den Button.genau, wer keinen farbliche Unterschied haben will, einfach den hex-code rauslöschen
Beispiel…
Farbe_fuer_Team = ''; -
@stenmic Hallo stenmic, vielen Dank für Deine Tolle Arbeit, ich bin allerdings frisch dabei mir einen Raspberry einzurichten und VIS zu erstellen. Bei der JSON Table-Widget, wo muß ich Ueberschrift_VIS und VIS_json eintragen? Vielen Dank. :grimacing:
@thorsten4-71 ich werde die Tage noch meine Tabellen hier zur Verfügung stellen.
Aber im Grunde ist es nichts anderes wie bei @sigi234 -
@sigi234 sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
was hats mit dem hulk und haas zu tun? warum da andere farbe?
Da wird dein Favoriten Team/Fahrer farblich in der Liste hervorgehoben.
Erst nach Klick auf den Button.genau, wer keinen farbliche Unterschied haben will, einfach den hex-code rauslöschen
Beispiel…
Farbe_fuer_Team = ''; -
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
ich weis zwar nicht, welchen button @sigi234 da meint, aber in iQontrol reagieren .json ein bißchen anders, als in vis.
@stenmic sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
!!!Wichtig!!!
für die Initialisierung muss man jetzt unter den Datenpunkten einmalig bei allen 4 Bereichen den "aktuell" Button ausführen.Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
ich weis zwar nicht, welchen button @sigi234 da meint, aber in iQontrol reagieren .json ein bißchen anders, als in vis.
@stenmic sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
!!!Wichtig!!!
für die Initialisierung muss man jetzt unter den Datenpunkten einmalig bei allen 4 Bereichen den "aktuell" Button ausführen. -
moin,
Hier ein Script für die Formel 1was kann es:
- Rennkalender (1950 - aktuelle Session)
- Rennergebnisse (aktuelle Session)
- Fahrer und Konstrukteur WM (aktuelle Session)
Die Daten werden von "Ergast" über https://api.jolpi.ca/ergast/ geholt.
Wer testen will kann gerne mitmachen.
Als erstes müssen die Datenpunkte angelegt werden.
Folgendes Skript unter Skripte/JavaScript anlegen und einmal ausführen.
Damit werden die notwendigen Datenpunkte unter “ 0_userdata.0.Formel1“ angelegt.Datenpunkte
// Kalender createState('0_userdata.0.Formel1.Kalender.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Kalender.Jahr_zurueck',false,{name: 'Jahr_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_vor',false,{name: 'Jahr_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Jahr_aktuell',false,{name: 'Jahr_aktuell',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr',0,{name: 'Anzahl_Rennen_Aktuelles_Jahr',role: 'value',type: 'number'}); // Rennergebnisse createState('0_userdata.0.Formel1.Rennergebnisse.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Rennen_Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Fahrerwertung createState('0_userdata.0.Formel1.Fahrerwertung.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'}); // Konstrukteur createState('0_userdata.0.Formel1.Konstrukteur.json',{name: 'json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen',{name: 'json_letztes_Rennen',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.VIS_json',{name: 'VIS_json',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr',0,{name: 'Rennen_Nr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren',0,{name: 'Rennen_gefahren',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Jahr',parseFloat(formatDate(new Date(), 'JJJJ')),{name: 'Jahr',role: 'value',type: 'number'}); createState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS','UEBERSCHRIFT VIS',{name: 'Ueberschrift_VIS',role: 'value',type: 'string'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck',false,{name: 'Rennen_zurueck',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_vor',false,{name: 'Rennen_vor',role: 'button',type: 'boolean'}); createState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell',false,{name: 'Rennen_aktuell',role: 'button',type: 'boolean'});Danach die folgenden 4 Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)Kalender
// ################################################ // Formel1 Kalender v1.01 // by stenmic // ################################################ var Farbe_fuer_naechstes_Rennen, Blocker_api, X, Kalender, Blocker_nextRace, Date2, spanIN, VIS, spanOUT; // ################################################ Farbe_fuer_naechstes_Rennen = '#26b1e6'; // ################################################ function textReplace(haystack, needle, replacement) { needle = needle.replace(/([-()\\[\\]{}+?*.$\^|,:#<!\\\])/g, '\\$1') .replace(/\x08/g, '\\x08'); return haystack.replace(new RegExp(needle, 'g'), replacement); } Blocker_api = false; on({ id: '0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if ((1950 <= (obj.state ? obj.state.val : '')) && (Blocker_api == false)) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/races/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Kalender.json' /* json */, response.data, true); await wait(500); Blocker_api = false; } else { await wait(500); setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); Blocker_api = false; } }); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_zurueck' /* Jahr_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1950 < getState('0_userdata.0.Formel1.Kalender.Jahr').val) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_vor' /* Jahr_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Kalender.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Kalender.Jahr_aktuell' /* Jahr_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); schedule('{"time":{"exactTime":true,"start":"00:30"},"period":{"days":1}}', async () => { if (getState('0_userdata.0.Formel1.Kalender.Jahr').val != parseFloat(formatDate(new Date(), 'JJJJ'))) { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); schedule("1,16,31,46 4-23 * * 0,6", async () => { setState('0_userdata.0.Formel1.Kalender.Jahr' /* Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); }); on({ id: '0_userdata.0.Formel1.Kalender.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennkalender ',getState('0_userdata.0.Formel1.Kalender.Jahr').val,' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Kalender.Ueberschrift_VIS' /* Ueberschrift_VIS */, ('Rennkalender ' + String(getState('0_userdata.0.Formel1.Kalender.Jahr').val)), true); } X = 0; Kalender = []; Blocker_nextRace = false; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.' + String(X))) == null)) { if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join(''))) != null) { Date2 = [formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join('')))), 'T.M.'),' • ',formatDate(getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))), 'S.mm'),' Uhr'].join(''); } else { Date2 = formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), (['',X,'.date'].join('')))), 'T.M.'); } if (getDateObject(([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.date'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.time'].join('')))].join(''))).getTime() + 14400000 >= (new Date().getTime())) { if (Blocker_nextRace == false) { spanIN = ['<span style="color:',Farbe_fuer_naechstes_Rennen,';">'].join(''); spanOUT = '</span>'; Blocker_nextRace = true; } else { spanIN = ''; spanOUT = ''; } } else { spanIN = ''; spanOUT = ''; } VIS = { 'Rennen': [spanIN,X + 1,spanOUT].join(''), 'Datum': [spanIN,Date2,spanOUT].join(''), 'Grand Prix': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.raceName'].join(''))),spanOUT].join(''), 'Strecke': [spanIN,[' <a href="',textReplace(getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.url'].join(''))), '//en.', '//de.'),'" target="_blank" style="text-decoration: none; color: inherit;">',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.circuitName'].join(''))),'</a>'].join(''),spanOUT].join(''), 'Location': [spanIN,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.',X,'.Circuit.Location.locality'].join(''))),spanOUT].join('') }; Kalender.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Kalender.VIS_json' /* VIS_json */, JSON.stringify(Kalender), true); if (getState('0_userdata.0.Formel1.Kalender.Jahr').val == formatDate(new Date(), 'JJJJ')) { if (getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val != X) { setState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr' /* Anzahl_Rennen_Aktuelles_Jahr */, X, true); } } }); 'MRData.RaceTable.Races.';Rennergebnisse
// ################################################ // Formel1 Rennergebnisse v1.02 // by stenmic // ################################################ var Farbe_fuer_Ausgefallen, Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Fast_Lap, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Blocker_api, X, Anzahl_Fahrer, Rennen, Position, Aenderung, Start, Zeit, spanINFahrer, spanOUTFahrer, spanINTeam, spanOUTTeam, Aenderung2, spanINFastLap, spanOUTFastLap, Punkte, VIS; // ################################################ Farbe_fuer_Ausgefallen = '#e55a52'; Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Fast_Lap = '#DA5EBA'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (1 < getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == 0) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, 30, true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val, true); } }); schedule('{"time":{"exactTime":true,"start":"00:31"},"period":{"days":1}}', async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',formatDate(new Date(), 'JJJJ'),'/1/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr' /* Rennen_Jahr */, parseFloat(formatDate(new Date(), 'JJJJ')), true); } }); }); Blocker_api = false; on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (Blocker_api == false) { Blocker_api = true; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/',(obj.state ? obj.state.val : ''),'/results/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((getAttr(response.data, 'MRData.RaceTable.Races.0.season') != null) && (response.statusCode == 200)) { setState('0_userdata.0.Formel1.Rennergebnisse.json' /* json */, response.data, true); if ((obj.state ? obj.state.val : '') > getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, (obj.state ? obj.state.val : ''), true); } await wait(500); Blocker_api = false; } else { await wait(500); if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val - 1), true); } Blocker_api = false; } }); } }); schedule("2,17,32,47 4-23 * * 0,6", async () => { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Rennergebnisse.json' /* json */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; X = 0; if (getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val == getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ'),' •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Rennergebnisse.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Rennen ',getState('0_userdata.0.Formel1.Rennergebnisse.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' • ',getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.raceName'),' • ',formatDate(getDateObject(getAttr((obj.state ? obj.state.val : ''), 'MRData.RaceTable.Races.0.date')), 'T.M.JJ')].join('')), true); } while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Anzahl_Fahrer = X + 1; X = (typeof X === 'number' ? X : 0) + 1; } X = 0; Rennen = []; while (!(getAttr((obj.state ? obj.state.val : ''), ('MRData.RaceTable.Races.0.Results.' + String(X))) == null)) { Position = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); Aenderung = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))) != 0) { Start = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.grid'].join(''))); } else { Start = 'Box'; Aenderung = Anzahl_Fahrer - getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.position'].join(''))); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == 'Finished') { Zeit = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Time.time'].join(''))); } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+1 Lap') { Zeit = '+1 Runde'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+2 Laps') { Zeit = '+2 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+3 Laps') { Zeit = '+3 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+4 Laps') { Zeit = '+4 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+5 Laps') { Zeit = '+5 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+6 Laps') { Zeit = '+6 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+7 Laps') { Zeit = '+7 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+8 Laps') { Zeit = '+8 Runden'; } else if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.status'].join(''))) == '+9 Laps') { Zeit = '+9 Runden'; } else { Zeit = ['<span style="color:',Farbe_fuer_Ausgefallen,';">Ausfall</span>'].join(''); Position = ''; Aenderung = 'Ausfall'; } if ([getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } if (Aenderung == 'Ausfall') { Aenderung2 = ''; } else if (Aenderung == 0) { Aenderung2 = '='; } else if (Aenderung > 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else if (Aenderung < 0) { Aenderung2 = [Aenderung,'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.rank'].join(''))) == 1) { spanINFastLap = ['<span style="color:',Farbe_Fast_Lap,';">'].join(''); spanOUTFastLap = '</span>'; } else { spanINFastLap = ''; spanOUTFastLap = ''; } if (getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))) != 0) { Punkte = getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.points'].join(''))); } else { Punkte = ''; } VIS = { 'Position': Position, 'Change': Aenderung2, 'Fahrer': [spanINFahrer,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.givenName'].join(''))),' ',getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Driver.familyName'].join(''))),spanOUTFahrer].join(''), 'Team': [spanINTeam,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.Constructor.name'].join(''))),spanOUTTeam].join(''), 'Grid': Start, 'Runden': getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.laps'].join(''))), 'Zeit': Zeit, 'Punkte': Punkte, 'Fast Lap': [spanINFastLap,getAttr((obj.state ? obj.state.val : ''), (['MRData.RaceTable.Races.0.Results.',X,'.FastestLap.Time.time'].join(''))),spanOUTFastLap].join('') }; Rennen.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Rennergebnisse.VIS_json' /* VIS_json */, JSON.stringify(Rennen), true); });Fahrerwertung
// ################################################ // Formel1 Fahrerwertung v1.01 // by stenmic // ################################################ var Fahrer, Farbe_fuer_Fahrer, Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINFahrer, spanOUTFahrer, spanINTeam, VIS, spanOUTTeam; // ################################################ Fahrer = 'Nico Hülkenberg'; Farbe_fuer_Fahrer = '#3bb273'; Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Fahrerwertung.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Fahrerwertung.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,'/',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val - 1,'/driverstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Fahrerwertung.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.DriverStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.Driver.driverId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.driverId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Fahrerwertung.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if ([getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join('')))].join('') == Fahrer) { spanINFahrer = ['<span style="color:',Farbe_fuer_Fahrer,';">'].join(''); spanOUTFahrer = '</span>'; } else { spanINFahrer = ''; spanOUTFahrer = ''; } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.position'].join(''))), 'Change': Change, 'Fahrer': [spanINFahrer,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.givenName'].join(''))),' ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.familyName'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Driver.nationality'].join(''))),spanOUTFahrer].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.wins'].join(''))), 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.DriverStandings.',X,'.Constructors.0.name'].join(''))),spanOUTTeam].join('') }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Fahrerwertung.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val == getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Fahrerwertung.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Fahrerwertung ',getState('0_userdata.0.Formel1.Fahrerwertung.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Fahrerwertung.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });Konstrukteur
// ################################################ // Formel1 Konstrukteur v1.01 // by stenmic // ################################################ var Team, Farbe_fuer_Team, Farbe_Pfeil_UP, Farbe_Pfeil_Down, Quelle, X, Fahrerwertung, Y, Change, spanINTeam, VIS, spanOUTTeam; // ################################################ Team = 'Haas F1 Team'; Farbe_fuer_Team = '#26b1e6'; Farbe_Pfeil_UP = '#3bb273'; Farbe_Pfeil_Down = '#e55a52'; // ################################################ on({ id: '0_userdata.0.Formel1.Rennergebnisse.Rennen_gefahren' /* Rennen_gefahren */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, (getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; await wait(1000); httpGet((['https://api.jolpi.ca/ergast/f1/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { if (getAttr(response.data, 'MRData.StandingsTable.round') == null) { setState('0_userdata.0.Formel1.Konstrukteur.Jahr' /* Jahr */, ((obj.state ? obj.state.val : '') - 1), true); } } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren' /* Rennen_gefahren */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, parseFloat(getAttr(response.data, 'MRData.StandingsTable.round')), true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_zurueck' /* Rennen_zurueck */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val > 1) { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1), true); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_vor' /* Rennen_vor */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val + 1), true); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.Rennen_Nr' /* Rennen_Nr */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',(obj.state ? obj.state.val : ''),'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if ((response.statusCode == 200) && (getAttr(response.data, 'MRData.total') != 0)) { setState('0_userdata.0.Formel1.Konstrukteur.json' /* json */, response.data, true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Rennen_aktuell' /* Rennen_aktuell */, true, true); } }); }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json' /* json */, change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == 1) { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } else { httpGet((['https://api.jolpi.ca/ergast/f1/',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,'/',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val - 1,'/constructorstandings/'].join('')), { timeout: 10000, responseType: 'text' }, async (err, response) => { if (response.statusCode == 200) { setState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, response.data, true); } }); } }); on({ id: '0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen' /* json_letztes_Rennen */, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Quelle = getState('0_userdata.0.Formel1.Konstrukteur.json').val; X = 0; Fahrerwertung = []; while (!(getAttr(Quelle, ('MRData.StandingsTable.StandingsLists.0.ConstructorStandings.' + String(X))) == null)) { Y = 0; while (!(getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.Constructor.constructorId'].join(''))) == getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.constructorId'].join(''))))) { if (Y > 100) { break; } else { Y = (typeof Y === 'number' ? Y : 0) + 1; } } if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) == 0) { Change = '='; } else if (getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))) > 0) { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_UP,';"> ↑</span>'].join(''); } else { Change = [getAttr(getState('0_userdata.0.Formel1.Konstrukteur.json_letztes_Rennen').val, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',Y,'.position'].join(''))) - getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))),'<span style="color:',Farbe_Pfeil_Down,';"> ↓</span>'].join(''); } if (getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))) == Team) { spanINTeam = ['<span style="color:',Farbe_fuer_Team,';">'].join(''); spanOUTTeam = '</span>'; } else { spanINTeam = ''; spanOUTTeam = ''; } VIS = { 'Positon': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.position'].join(''))), 'Change': Change, 'Team': [spanINTeam,getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.name'].join(''))),' • ',getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.Constructor.nationality'].join(''))),spanOUTTeam].join(''), 'Punkte': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.points'].join(''))), 'Siege': getAttr(Quelle, (['MRData.StandingsTable.StandingsLists.0.ConstructorStandings.',X,'.wins'].join(''))) }; Fahrerwertung.push(VIS); X = (typeof X === 'number' ? X : 0) + 1; } setState('0_userdata.0.Formel1.Konstrukteur.VIS_json' /* VIS_json */, JSON.stringify(Fahrerwertung), true); if (getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val == getState('0_userdata.0.Formel1.Konstrukteur.Rennen_gefahren').val) { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['••• Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen •••'].join('')), true); } else { setState('0_userdata.0.Formel1.Konstrukteur.Ueberschrift_VIS' /* Ueberschrift_VIS */, (['Konstrukteurswertung ',getState('0_userdata.0.Formel1.Konstrukteur.Jahr').val,' nach ',getState('0_userdata.0.Formel1.Konstrukteur.Rennen_Nr').val,' von ',getState('0_userdata.0.Formel1.Kalender.Anzahl_Rennen_Aktuelles_Jahr').val,' Rennen'].join('')), true); } });So sollte es dann aussehen

!!!Wichtig!!!
für die Initialisierung muss man jetzt unter den Datenpunkten einmalig bei allen 4 Bereichen den "aktuell" Button ausführen.
Am besten auch in dieser Reihenfolge:
Kalender.Jahr_aktuell
Rennergebnisse.Rennen_aktuell
Fahrerwertung.Rennen_aktuell
Konstrukteur.Rennen_aktuellBeispiel für den Kalender

Danach können die vor, zurück und aktuell Button genutzt werden.
Für die VIS sind jeweilige Datenpunkte für Überschriften und Tabellen vorhanden
Ueberschrift_VIS (html widget mit binding)
VIS_json
Für die Darstellung der Json Tabelle (VIS_json) empfehle ich https://github.com/inventwo/ioBroker.vis-inventwo
Geht aber glaube ich nur für VIS1
das Standard widget geht aber auch.
Würde mich freuen wenn einige von euch die Skripte testen und eventuelle Fehler melden würden.
So sieht es bei mir am Ende aus:
Info... die Strecken im Kalender sind mit wikipedia verlinkt.




Eigentlich sollte alles fehlerfrei funktionieren aber eventuell muss ich nächste Saison nachbessern falls er zu Fehlermeldungen wegen dem Jahr kommt. Dass kann ich jetzt noch nicht wirklich alles prüfen.
@stenmic
Danke für die tollen Scripte.
Ich bin bisher immer zu blöd dazu gewesen eine Tabelle in VIS darzustellen. Ich verwende zwar überall inventwo widgets, aber Tabellen kann ich einfach nicht.
Könntest du bitte die VIS Views als Export zur Verfügung stellen.ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.
-
@stenmic
Danke für die tollen Scripte.
Ich bin bisher immer zu blöd dazu gewesen eine Tabelle in VIS darzustellen. Ich verwende zwar überall inventwo widgets, aber Tabellen kann ich einfach nicht.
Könntest du bitte die VIS Views als Export zur Verfügung stellen. -
@chaot mach ich die Tage. Aktuell wundert mich, dass die Daten nicht aktualisiert werden. Liegt an der API… mal abwarten
@stenmic der rennkalender hat sich gestern noch aktualisiert,
die anderen 3 nicht...
nur das ergebnis wird nicht aktuell.
noch ein edith: jetzt ist auch das rennergebnis aktuell.
gruß vom Woody
HAPPINESS is not a DESTINATION, it's a WAY of LIFE! -
@stenmic der rennkalender hat sich gestern noch aktualisiert,
die anderen 3 nicht...
nur das ergebnis wird nicht aktuell.
noch ein edith: jetzt ist auch das rennergebnis aktuell.
-
@da_woody den Rennkalender aktualisiere ich über das Skript über den timestamp. Die anderen Daten kommen über die API. Diese wurde gestern sehr spät aufm Server aktualisiert.
@stenmic hmm, um 6 in der früh war bei mir trotz aktuell button in den Objekten nicht aktuell. (Ergebnis)
Nicht reproduzierbar, hab einmal auf vor geklickt, plötzlich wars aktuell. Kann auch Zufall gewesen sein...gruß vom Woody
HAPPINESS is not a DESTINATION, it's a WAY of LIFE! -
@stenmic hmm, um 6 in der früh war bei mir trotz aktuell button in den Objekten nicht aktuell. (Ergebnis)
Nicht reproduzierbar, hab einmal auf vor geklickt, plötzlich wars aktuell. Kann auch Zufall gewesen sein...@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
hab einmal auf vor geklickt, plötzlich wars aktuell. Kann auch Zufall gewesen sein...
War bei mir auch so.
Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@da_woody sagte in Script für Formel 1 - Kalender, Ergebnisse und Wertungen:
hab einmal auf vor geklickt, plötzlich wars aktuell. Kann auch Zufall gewesen sein...
War bei mir auch so.
Werde die Aktualisierung nochmal etwas verbessern. Die API is da ein bisschen umständlich, da es nicht eine gibt für alle Rennen sondern jedes Rennen einzeln abgefragt werden muss. Es muss also eine Prüfung stattfinden, was das neuste Rennen ist.
-
Werde die Aktualisierung nochmal etwas verbessern. Die API is da ein bisschen umständlich, da es nicht eine gibt für alle Rennen sondern jedes Rennen einzeln abgefragt werden muss. Es muss also eine Prüfung stattfinden, was das neuste Rennen ist.
-
@da_woody den Rennkalender aktualisiere ich über das Skript über den timestamp. Die anderen Daten kommen über die API. Diese wurde gestern sehr spät aufm Server aktualisiert.
@stenmic weils gerade aktuell ist. die sprintrennen fehlen im kalender.
geben tuts die ja anscheinend. "sprint": "http://api.jolpi.ca/ergast/f1/2024/sprint",
könntest du das irgendwie einbauen?gruß vom Woody
HAPPINESS is not a DESTINATION, it's a WAY of LIFE!
