- 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
-
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.
-
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 sagte in Script für Formel 1:
Danach die beiden folgenden Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)
Kalenderavascript.0 2024-11-15 21:45:27.107 error at process.processImmediate (node:internal/timers:485:21) javascript.0 2024-11-15 21:45:27.107 error at Immediate._onImmediate (C:\SmartHome\node_modules\iobroker.javascript\main.js:1732:17) javascript.0 2024-11-15 21:45:27.107 error at C:\SmartHome\node_modules\iobroker.javascript\main.js:2322:17 javascript.0 2024-11-15 21:45:27.107 error at prepareScript (C:\SmartHome\node_modules\iobroker.javascript\main.js:2224:37) javascript.0 2024-11-15 21:45:27.107 error at createVM (C:\SmartHome\node_modules\iobroker.javascript\main.js:1956:21) javascript.0 2024-11-15 21:45:27.107 error at new Script (node:vm:117:7) javascript.0 2024-11-15 21:45:27.106 error SyntaxError: Invalid regular expression: /([-()[]{}+?*.$\^|,:#<!\])/g: Nothing to repeat javascript.0 2024-11-15 21:45:27.106 error ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ javascript.0 2024-11-15 21:45:27.106 error needle = needle.replace(/([-()[]{}+?*.$\^|,:#<!\])/g, '\\$1') javascript.0 2024-11-15 21:45:27.106 error script.js.Test.F1_Kalender compile failed: at script.js.Test.F1_Kalender:14 javascript.0 2024-11-15 21:45:27.104 info Start JavaScript script.js.Test.F1_Kalender (Javascript/js)
Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@stenmic sagte in Script für Formel 1:
Danach die beiden folgenden Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)
Kalenderavascript.0 2024-11-15 21:45:27.107 error at process.processImmediate (node:internal/timers:485:21) javascript.0 2024-11-15 21:45:27.107 error at Immediate._onImmediate (C:\SmartHome\node_modules\iobroker.javascript\main.js:1732:17) javascript.0 2024-11-15 21:45:27.107 error at C:\SmartHome\node_modules\iobroker.javascript\main.js:2322:17 javascript.0 2024-11-15 21:45:27.107 error at prepareScript (C:\SmartHome\node_modules\iobroker.javascript\main.js:2224:37) javascript.0 2024-11-15 21:45:27.107 error at createVM (C:\SmartHome\node_modules\iobroker.javascript\main.js:1956:21) javascript.0 2024-11-15 21:45:27.107 error at new Script (node:vm:117:7) javascript.0 2024-11-15 21:45:27.106 error SyntaxError: Invalid regular expression: /([-()[]{}+?*.$\^|,:#<!\])/g: Nothing to repeat javascript.0 2024-11-15 21:45:27.106 error ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ javascript.0 2024-11-15 21:45:27.106 error needle = needle.replace(/([-()[]{}+?*.$\^|,:#<!\])/g, '\\$1') javascript.0 2024-11-15 21:45:27.106 error script.js.Test.F1_Kalender compile failed: at script.js.Test.F1_Kalender:14 javascript.0 2024-11-15 21:45:27.104 info Start JavaScript script.js.Test.F1_Kalender (Javascript/js)
@sigi234 is ja komisch...


hab eben meine Struktur unter Objekte nochmal komplett gelöscht und neu angelegt, wie ich es beschrieben habe.
Bei mir kommt kein Fehler. Es ist auch kein zusätzliches NPM-Modul notwendigt.Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
-
@stenmic sagte in Script für Formel 1:
Danach die beiden folgenden Skripte anlegen (unter Skripte/JavaScript) und starten.
(am Anfang der Skripte können Farben eingestellt werden)
Kalenderavascript.0 2024-11-15 21:45:27.107 error at process.processImmediate (node:internal/timers:485:21) javascript.0 2024-11-15 21:45:27.107 error at Immediate._onImmediate (C:\SmartHome\node_modules\iobroker.javascript\main.js:1732:17) javascript.0 2024-11-15 21:45:27.107 error at C:\SmartHome\node_modules\iobroker.javascript\main.js:2322:17 javascript.0 2024-11-15 21:45:27.107 error at prepareScript (C:\SmartHome\node_modules\iobroker.javascript\main.js:2224:37) javascript.0 2024-11-15 21:45:27.107 error at createVM (C:\SmartHome\node_modules\iobroker.javascript\main.js:1956:21) javascript.0 2024-11-15 21:45:27.107 error at new Script (node:vm:117:7) javascript.0 2024-11-15 21:45:27.106 error SyntaxError: Invalid regular expression: /([-()[]{}+?*.$\^|,:#<!\])/g: Nothing to repeat javascript.0 2024-11-15 21:45:27.106 error ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ javascript.0 2024-11-15 21:45:27.106 error needle = needle.replace(/([-()[]{}+?*.$\^|,:#<!\])/g, '\\$1') javascript.0 2024-11-15 21:45:27.106 error script.js.Test.F1_Kalender compile failed: at script.js.Test.F1_Kalender:14 javascript.0 2024-11-15 21:45:27.104 info Start JavaScript script.js.Test.F1_Kalender (Javascript/js)
@sigi234 oh man ich habs gefunden....
Der Editor vom Forum baut mist!Hier der Code unter Bearbeiten

und hier der Code im Spoiler

Die erste Zeile ist richtig.
Ich kann sie hier nirgends als Code einfügen, nur diesen Screenshot

Update:
Mit Kalender v1.01 gefixt -
@sigi234 oh man ich habs gefunden....
Der Editor vom Forum baut mist!Hier der Code unter Bearbeiten

und hier der Code im Spoiler

Die erste Zeile ist richtig.
Ich kann sie hier nirgends als Code einfügen, nur diesen Screenshot

Update:
Mit Kalender v1.01 gefixtBitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@sigi234 is ja komisch...


hab eben meine Struktur unter Objekte nochmal komplett gelöscht und neu angelegt, wie ich es beschrieben habe.
Bei mir kommt kein Fehler. Es ist auch kein zusätzliches NPM-Modul notwendigt.Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
@stenmic sagte in Script für Formel 1:
Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
Ja, läuft alles einwandfrei. Top Arbeit.

Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
Moin, alles installiert und läuft, Top :+1:
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.
-
@stenmic sagte in Script für Formel 1:
Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
Ja, läuft alles einwandfrei. Top Arbeit.

@sigi234 sagte in Script für Formel 1:
@stenmic sagte in Script für Formel 1:
Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
Ja, läuft alles einwandfrei. Top Arbeit.

sehr schön…
beim Rennen kannst aber noch 4 Spalten mehr einblenden 😉 -
@sigi234 sagte in Script für Formel 1:
@stenmic sagte in Script für Formel 1:
Hast du mal das Skript für die Rennen getestet? sind beide unabhängig voneinander.
Ja, läuft alles einwandfrei. Top Arbeit.

sehr schön…
beim Rennen kannst aber noch 4 Spalten mehr einblenden 😉 -
Update...
Die WM Stände sind jetzt auch fertig, ging schneller als gedacht.
Wenn einer schon die ersten beide Skripte nutzt, bitte nochmal die Datenpunkte anlegen.@stenmic sagte in Script für Formel 1:
Update...
Die WM Stände sind jetzt auch fertig, ging schneller als gedacht.
Wenn einer schon die ersten beide Skripte nutzt, bitte nochmal die Datenpunkte anlegen.Läuft, super Job :+1:
Würdest Du noch deine View zur Verfügung stellen, gefällt mir.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.
-
@stenmic sagte in Script für Formel 1:
Update...
Die WM Stände sind jetzt auch fertig, ging schneller als gedacht.
Wenn einer schon die ersten beide Skripte nutzt, bitte nochmal die Datenpunkte anlegen.Läuft, super Job :+1:
Würdest Du noch deine View zur Verfügung stellen, gefällt mir. -
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.
Hallo, cool wäre es noch wenn man direkt ein Jahr auswählen könnte.
Rennkalender/Rennergebnisse
Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Immer Daten sichern! -
@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