NEWS
Bitte Hilfe bei Interpretation von Fehlermeldungen
-
Wow, seid Ihr schnell. Vielen Dank. sigi234 hat Recht. die Idee ist, aus openweathermap Werte in CCU Variablen zu schreiben.
Hier mal das Script. Aber bitte nicht lachen. Ich bin kein JavaScript Profi. Dass kann man sicher alles effizienter und eleganter programmieren. Aber so entspricht das eben meinen Fähigkeiten.
// ######################################################################### // Wetterdaten aus openweathermap holen und in homematic Variable setzen // ######################################################################### // Aktualisierung der homematic Variable bei Aktualisierung openweathermap on ({id:'openweathermap.0.forecast.current.date'/*Actual date*/, change: 'any'}, function(data) { //Werte holen und setzen //Wetter Bedingung als String var idOpenWeater = 'openweathermap.0.forecast.current.state'/*Actual state*/; var idVariable = 'hm-rega.0.29954'/*Wetter Bedingungen*/; wetterdaten = getState(idOpenWeater).val if(wetterdaten == "null"){ wetterdaten = "windstill"; }; setState(idVariable, wetterdaten); //Wetter Richtung als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.windDirection'/*Forecast for wind direction*/; var idVariable = 'hm-rega.0.29959'/*Wetter Windrichtg*/; Wetterdatenholenundsetzen(); //Wind Richtung als Angabe var idOpenWeater = 'openweathermap.0.forecast.current.windDirection'/*Forecast for wind direction*/; var idVariable = 'hm-rega.0.29958'/*Wetter Windrichtung*/; //******************* Windrichtung bestimmen*************** //*******************Nord 339-23, Nordost 24-68, Ost 69-113, SüdOst 114-158, Süd 159-203, SüdWest 204-248, West 249-293, NordWest 394-338*************** wetterdaten = getState(idOpenWeater).val if(wetterdaten == "null"){ wetterdaten = 0; }; if (wetterdaten > 23 && wetterdaten <= 68){ wetterdaten = "NordOst"; }; if (wetterdaten > 68 && wetterdaten <= 113){ wetterdaten = "Ost"; }; if (wetterdaten > 113 && wetterdaten <= 158){ wetterdaten = "SüdOst"; }; if (wetterdaten > 158 && wetterdaten <= 203){ wetterdaten = "Süd"; }; if (wetterdaten > 203 && wetterdaten <= 248){ wetterdaten = "SüdWest"; }; if (wetterdaten > 248 && wetterdaten <= 293){ wetterdaten = "West"; }; if (wetterdaten > 293 && wetterdaten <= 338){ wetterdaten = "NordWest"; }; if (wetterdaten > 338 && wetterdaten <= 360){ wetterdaten = "Nord"; }; if (wetterdaten > 0 && wetterdaten <= 23){ wetterdaten = "Nord"; }; setState(idVariable, wetterdaten); //Temperatur als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.temperature'/*Actual temperature for today*/ var idVariable = 'hm-rega.0.29955'/*Wetter Temperatur*/; Wetterdatenholenundsetzen(); //Luftfeuchtigkeit als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.humidity'/*Actual humidity*/ var idVariable = 'hm-rega.0.29956'/*Wetter Luftfeuchte*/; Wetterdatenholenundsetzen(); //Windgeschwindigkeit als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/ var idVariable = 'hm-rega.0.29960'/*Wetter Windgeschwindigkeit*/; Wetterdatenholenundsetzen(); //Aktualisierung (Zeit) var idOpenWeater = 'openweathermap.0.forecast.current.date'/*Actual date*/; var idVariable = 'hm-rega.0.29953'/*Wetter Aktualisierung*/; wetterdaten = getState(idOpenWeater).val; var date = new Date(wetterdaten); // Umwandeln in deutsches Format //Tagesdatum ermitteln var tag = date.getDate(); //Monat ermitteln var month = new Array("1","2","3","4","5","6","7","8","9","10","11","12"); var monat = month[date.getMonth()]; //Jahr ermitteln var jahr = date.getFullYear(); //Stunde ermitteln var stunde = date.getHours(); //Minute ermitteln var minute = date.getMinutes(); //Sekunde ermitteln var sekunde = date.getSeconds(); var ausgabe = tag + "." + monat + "." + jahr + " " + stunde + ":" + minute + ":" + sekunde; setState(idVariable, ausgabe); // ################################################################## // FUNKTION Holen und setzen // ################################################################## function Wetterdatenholenundsetzen() { wetterdaten = getState(idOpenWeater).val; setState(idVariable, wetterdaten); }; });
Nun aber zur Frage: das mit String und Zahl hatte ich mir auch schon überlegt. Aber wie ich das löse, das weiß ich nicht und benötige Hilfe.
-
@skorpil
Dazu gibt es zwei Möglichkeiten
Daher bitte meine Fragen beantworten -
Bespiel Duty Cycle in CCU schreiben:
// DP in SV schreiben const idDP = "hm-rega.0.NEQ1531999.0.DUTY_CYCLE"; const idSV = "hm-rega.0.30785"; setState(idSV, parseFloat(getState(idDP).val)); // Skriptstart on(idDP, function(dp) { // Wertänderung setState(idSV, parseFloat(dp.state.val)); });
-
@Homoran sagte in Bitte Hilfe bei Interpretation von Fehlermeldungen:
Was liefert das Skript für einen Wert?
Was ist der Datenpunkt für ein Typ? -
-
da der Fehler nicht immer auftritt: es scheint, dass der Adapter "openweathermap" für den Fall, daß keine Werte vorhanden sind, statt einer "Zahl" eine "null" liefert. Und das kann mein Script dann nicht mehr verarbeiten. Ich bin auch nicht sicher, ob "null" ein string oder ein logikwert ist. Irritierend.
-
@skorpil sagte:
Wrong type of hm-rega.0.29959: "object".
Wenn der Wert ein Object enthält, wird parseFloat() nicht helfen. Schau Dir den Wert mal mit einem zusätzlichen Log an.
//Wetter Richtung als Zahl idOpenWeater = 'openweathermap.0.forecast.current.windDirection'/*Forecast for wind direction*/; log(JSON.stringify(getState(idOpenWeather).val)); idVariable = 'hm-rega.0.29959'/*Wetter Windrichtg*/; Wetterdatenholenundsetzen();
Variablen nur einmal deklarieren (var nur in den Zeilen 12, 13) !
-
@skorpil sagte:
ob "null" ein string oder ein logikwert ist. Irritierend.
Dann ist das der Grund für die Warnung: null ist ein Objekt !
-
@paul53 Danke. Und wie könnte ich das abfangen? Also, irgendwas wie "wenn objekt, dann....."
-
@paul53 sagte in Bitte Hilfe bei Interpretation von Fehlermeldungen:
null ist ein Objekt !
Und wieder was gelernt....
Zitat:
parseFloat kann zudem Objekte parsen, wenn diese eine toString- oder valueOf-Methode haben. Das Ergebnis ist dasselbe, als wenn parseFloat mit dem Ergebnis einer dieser beiden Methoden ausgerufen wurde.
-
@skorpil sagte:
Und wie könnte ich das abfangen?
function Wetterdatenholenundsetzen() { wetterdaten = getState(idOpenWeater).val; if(wetterdaten) setState(idVariable, wetterdaten); }
-
@paul53 sagte in Bitte Hilfe bei Interpretation von Fehlermeldungen:
merci, ich werde testen und berichten
-
@paul53 dankeschön, das war es: "if (wetterdaten)". Denn augenscheinlich liefert der Adapter manchmal eben leere Objekte.
-
@paul53 noch eine Frage: jetzt reagiert das Script ja nur, wenn ein Wert vorhanden ist. Eben durch die Abfrage if(Variable). Wie würde man das Gegenteil programmieren, also wenn „kein“ Wert vorhanden, dann.... ich würde nämlich gerne in meine CCU Variable noch schreiben, wenn kein Wert, dann „keine Angabe“.
-
@skorpil sagte:
CCU Variable noch schreiben, wenn kein Wert, dann „keine Angabe“.
function Wetterdatenholenundsetzen() { wetterdaten = getState(idOpenWeater).val; if(wetterdaten === null) wetterdaten = 'keine Angabe'; setState(idVariable, wetterdaten); }
EDIT: Vergleich geändert, da Wert 0 ein gültiger Wert ist, der vorkommen kann.
-
@paul53 großartig! Vielen Dank u. nun ein schönes Wochenende.
PS: ...wenn es dieses Forum nicht gäbe...
-
@skorpil sagte in Bitte Hilfe bei Interpretation von Fehlermeldungen:
wenn es dieses Forum nicht gäbe...
und warum bekommt Paul dann keine "postive Bewertung"
-
@Homoran kriegt er ja gerne. Aber wie muß ich das machen?
-
...und der guten Ordnung halber noch das fertige Script. Es liest Daten aus openweathermap und schreibt sie in CCU Variablen. Sicher nicht profimäßig programmiert. Aber es läuft.
// ######################################################################### // Wetterdaten aus openweathermap holen und in homematic Variable setzen // ######################################################################### // Aktualisierung der homematic Variable bei Aktualisierung openweathermap on ({id:'openweathermap.0.forecast.current.date'/*Actual date*/, change: 'any'}, function(data) { //Werte holen und setzen //Wetter Bedingung als String var idOpenWeater = 'openweathermap.0.forecast.current.state'/*Actual state*/; var idVariable = 'hm-rega.0.29954'/*Wetter Bedingungen*/; wetterdaten = getState(idOpenWeater).val if (wetterdaten) setState(idVariable, wetterdaten); //Wetter Richtung als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.windDirection'/*Forecast for wind direction*/; //log(JSON.stringify(getState(idOpenWeater).val)); var idVariable = 'hm-rega.0.29959'/*Wetter Windrichtg*/; Wetterdatenholenundsetzen(); //Wind Richtung als Angabe var idOpenWeater = 'openweathermap.0.forecast.current.windDirection'/*Forecast for wind direction*/; var idVariable = 'hm-rega.0.29958'/*Wetter Windrichtung*/; //******************* Windrichtung bestimmen*************** //*******************Nord 339-23, Nordost 24-68, Ost 69-113, SüdOst 114-158, Süd 159-203, SüdWest 204-248, West 249-293, NordWest 394-338*************** wetterdaten = getState(idOpenWeater).val if (wetterdaten > 23 && wetterdaten <= 68){ wetterdaten = "NordOst"; }; if (wetterdaten > 68 && wetterdaten <= 113){ wetterdaten = "Ost"; }; if (wetterdaten > 113 && wetterdaten <= 158){ wetterdaten = "SüdOst"; }; if (wetterdaten > 158 && wetterdaten <= 203){ wetterdaten = "Süd"; }; if (wetterdaten > 203 && wetterdaten <= 248){ wetterdaten = "SüdWest"; }; if (wetterdaten > 248 && wetterdaten <= 293){ wetterdaten = "West"; }; if (wetterdaten > 293 && wetterdaten <= 338){ wetterdaten = "NordWest"; }; if (wetterdaten > 338 && wetterdaten <= 360){ wetterdaten = "Nord"; }; if (wetterdaten > 0 && wetterdaten <= 23){ wetterdaten = "Nord"; }; if (!wetterdaten) { wetterdaten = "keine Angabe"; setState(idVariable, wetterdaten); }; if (wetterdaten) setState(idVariable, wetterdaten); //Temperatur als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.temperature'/*Actual temperature for today*/ var idVariable = 'hm-rega.0.29955'/*Wetter Temperatur*/; Wetterdatenholenundsetzen(); //Luftfeuchtigkeit als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.humidity'/*Actual humidity*/ var idVariable = 'hm-rega.0.29956'/*Wetter Luftfeuchte*/; Wetterdatenholenundsetzen(); //Windgeschwindigkeit als Zahl var idOpenWeater = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/ var idVariable = 'hm-rega.0.29960'/*Wetter Windgeschwindigkeit*/; Wetterdatenholenundsetzen(); //Aktualisierung (Zeit) var idOpenWeater = 'openweathermap.0.forecast.current.date'/*Actual date*/; var idVariable = 'hm-rega.0.29953'/*Wetter Aktualisierung*/; wetterdaten = getState(idOpenWeater).val; var date = new Date(wetterdaten); // Umwandeln in deutsches Format //Tagesdatum ermitteln var tag = date.getDate(); //Monat ermitteln var month = new Array("1","2","3","4","5","6","7","8","9","10","11","12"); var monat = month[date.getMonth()]; if(monat.length < 2){ monat = "0" + monat; } //Jahr ermitteln var jahr = date.getFullYear(); //Stunde ermitteln var stunde = date.getHours(); var stunde = stunde.toString(); if(stunde.length < 2){ stunde = "0" + stunde; } //Minute ermitteln var minute = date.getMinutes(); var minute = minute.toString(); if(minute.length < 2){ minute = "0" + minute; } //Sekunde ermitteln var sekunde = date.getSeconds(); var sekunde = sekunde.toString(); if(sekunde.length < 2){ sekunde = "0" + sekunde; } var ausgabe = tag + "." + monat + "." + jahr + " " + stunde + ":" + minute + ":" + sekunde; setState(idVariable, ausgabe); // ################################################################## // FUNKTION Holen und setzen // ################################################################## function Wetterdatenholenundsetzen() { wetterdaten = getState(idOpenWeater).val; if (wetterdaten != null) setState(idVariable, wetterdaten); });
-
@skorpil sagte in Bitte Hilfe bei Interpretation von Fehlermeldungen:
@Homoran kriegt er ja gerne. Aber wie muß ich das machen?
Wenn du die Signaturen ausgeblendet hast, kannst du es natürlich nicht lesen :
Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
Unter jedem Beitrag befindet sich rechts unten neben "Zitieren" eine Bewertungsinfo mit einem "Bewertung hoch" ^ - dann dem Wert der Bewertung für diesen Beutrag (leider 0) und dann ein "Bewertung runter" Icon um wie auch immer geartetet schlechte Beiträge auch negativ beurteilen zu können