Zur besten Antwort gewählt
Mrz 11, 2017 - 13:14
Mit Hilfe von Sebastian hier
http://answers.mediola.com/2258553/Wu...
habe ich das script was du brauchst :)
Du musst im Gateway einige System variablen anlegen, am besten vom typ string
dann musst du bei wunderground einen api key bekommen
im script den eintragen, sowie eine station,
diese siehst du wenn du auf wunderground gehst und deine stadt dort einträgst
wie im bild hier
also wäre das für mich
INORDRHE799
dann in neo automation manager dieses script
// bitte eintragen
var key = "xxxxxxxxxxx";
var station = "YYYYYYYYYYY";
var startAktualisierung = "<observation_time>Last Updated on "; // letzter update start
var endAktualisierung = "</observation_time>"; // letzter update end
var startBedingungen = "<weather>"; // start wetterbedingungen
var endBedingungen = "</weather>"; // ende wetterbedingungen
var startTemperatur_C = "<temp_c>"; // start temperatur # ZAHL
var endTemperatur_C = "</temp_c>"; //ende temperatur # ZAHL
var startWind_kmh = "<wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var endWind_kmh = "</wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var startWindboeen = "<wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var endWindboeen = "</wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var startWindrichtung = "<wind_dir>"; // windrichtung
var endWindrichtung = "</wind_dir>"; // windrichtung
var startWindbedingungen = "<wind_string>"; // windbedingungen
var endWindbedingungen = "</wind_string>"; // windbedingungen
var startLuftdruck = "<pressure_mb>"; // Luftdruck #ZAHL
var endLuftdruck = "</pressure_mb>"; // Luftdruck #ZAHL
var startLuftdrucktrend = "<pressure_trend>"; //Luftdrucktrend
var endLuftdrucktrend = "/pressure_trend>"; //Luftdrucktrend
var startLuftfeuchte = "<relative_humidity>"; //Luftfeuchte
var endLuftfeuchte = "</relative_humidity>"; //Luftfeuchte
var url = "http://api.wunderground.com/api/" + key + "/conditions/lang:DL/q/pws:" + station + ".xml";
var position = 0;
var start_position = 0;
var end_position = 0;
var data_length = 0;
var parseData = function(body) {
start_position = body.indexOf(startAktualisierung) + startAktualisierung.length; // Anfangsposition
end_position = body.indexOf(endAktualisierung); // Endeposition
data_length = end_position - start_position;
var dataAktualisierung = body.substring(start_position, start_position + data_length) ;
start_position = body.indexOf(startBedingungen) + startBedingungen.length; // Anfangsposition
end_position = body.indexOf(endBedingungen); // Endeposition
data_length = end_position - start_position;
var dataBedingungen = body.substring(start_position, start_position + data_length) ;
// log('Bedingungen ' + dataBedingungen , "info");
start_position = body.indexOf(startTemperatur_C) + startTemperatur_C.length; // Anfangsposition
end_position = body.indexOf(endTemperatur_C); // Endeposition
data_length = end_position - start_position;
var dataTemperatur_C = body.substring(start_position, start_position + data_length) ;
// log('Temperatur_C ' + dataTemperatur_C , "info");
start_position = body.indexOf(startWind_kmh) + startWind_kmh.length; // Anfangsposition
end_position = body.indexOf(endWind_kmh); // Endeposition
data_length = end_position - start_position;
var dataWind_kmh = body.substring(start_position, start_position + data_length) ;
// log('Wind_kmh ' + dataWind_kmh , "info");
start_position = body.indexOf(startWindboeen) + startWindboeen.length; // Anfangsposition
end_position = body.indexOf(endWindboeen); // Endeposition
data_length = end_position - start_position;
var dataAWindboeen = body.substring(start_position, start_position + data_length) ;
// log('Windboeen ' + dataAWindboeen , "info");
start_position = body.indexOf(startWindrichtung) + startWindrichtung.length; // Anfangsposition
end_position = body.indexOf(endWindrichtung); // Endeposition
data_length = end_position - start_position;
var dataWindrichtung = body.substring(start_position, start_position + data_length) ;
// log('Windrichtung ' + dataWindrichtung , "info");
start_position = body.indexOf(startWindbedingungen) + startWindbedingungen.length; // Anfangsposition
end_position = body.indexOf(endWindbedingungen); // Endeposition
data_length = end_position - start_position;
var dataWindbedingungen = body.substring(start_position, start_position + data_length) ;
// log('Windbedingungen ' + dataWindbedingungen , "info");
start_position = body.indexOf(startLuftdruck) + startLuftdruck.length; // Anfangsposition
end_position = body.indexOf(endLuftdruck); // Endeposition
data_length = end_position - start_position;
var dataLuftdruck = body.substring(start_position, start_position + data_length) ;
// log('Luftdruck ' + dataLuftdruck , "info");
start_position = body.indexOf(startLuftdrucktrend) + startLuftdrucktrend.length; // Anfangsposition
end_position = body.indexOf(endLuftdrucktrend); // Endeposition
data_length = end_position - start_position - 1;
var dataLuftdrucktrend = body.substring(start_position, start_position + data_length) ;
// log('Luftdrucktrend ' + dataLuftdrucktrend , "info");
start_position = body.indexOf(startLuftfeuchte) + startLuftfeuchte.length; // Anfangsposition
end_position = body.indexOf(endLuftfeuchte); // Endeposition
data_length = end_position - start_position;
var dataLuftfeuchte = body.substring(start_position, start_position + data_length) ;
// console.log('Luftfeuchte ' + dataLuftfeuchte );
// schreibe Temperatur in Gateway Variable (String Typ)
executeDeviceCommand(
"mediola",
"STRING [DE]",
{"value":"setValue","ext": dataTemperatur_C},
function(err) {
err && console.error(err);
}
);
// schreibe Luftdruck in Gateway Variable (String Typ)
executeDeviceCommand(
"mediola",
"STRING [01]",
{"value":"setValue","ext": dataLuftdruck},
function(err) {
err && console.error(err);
}
);
}
// Anfrage an API.
var http = require('http');
var req = http.get(url, function(res) {
var body = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
parseData(body);
});
});
req.on('error', function(err) {
console.error(err);
});
ich habe jetzt nur temperatur und luftdruck in gateway variablen übertragen
wenn du alles machen willst musst du das script dann einfach mit
// schreibe Luftdruck in Gateway Variable (String Typ)
executeDeviceCommand(
"mediola",
"STRING [01]",
{"value":"setValue","ext": dataLuftdruck},
function(err) {
err && console.error(err);
}
);
solchen teilen erweiterndass geht über das zahnradsymbol im script editor
natürlich brauchst du auch einen auslöser der diesen script triggert, das kann einfach eine uhrzeit sein im sobald teil.
hoffe es klappt bei dir dann :)
Von
Hallo zdenko33
Vielen Dank für deine Mühe! Ich werde das mal ausprobieren...
Von
Hallo zdenko33
Ich habe nun versucht, das Script, wie du es beschrieben hast, zu erstellen. Leider derzeit noch ohne Erfolg. Mein Link im API und Station funktioniert im Broser, aber ich kann keine Werte auslesen. Hier steht immer ein "?" Ich gehe mal davon aus, dass für jedes Wort, wo "var" davor steht, eine eigene Systemvariable angelegt werden muss. Wie sieht dies bei den Wörtern "parseData" und ganz zum Schluss bei den Wörtern "http", "req", "body" aus?
LG Martin
Von
Du musst nicht jede variable auswerten
Wichtig ist der teil // schreibe variable luftdruck in gateway variable
Diese gateway variable muss angelegt werden
Und dann im script editor klickst du links auf aktion
Und wählst die angelegte variable
Dieses machst du für jede variable die du angelegt hast oder du auseerten willst.
Diese aktionscripte machst du oben hinter jeder // log zeile, abhängig welche werte du auseerten willst
Von
Hallo zdenko33
Ich habe nun eine Systemvariable vom Typ String angelegt, diese im Scripteditor brav verknüpft und lese diese Variable als Test in der Visualisierung aus. Leider zeigt diese mir nur ein "?" an. Der Link mit API und Station funktioniert allerdings einwandfrei im Broser. Ich starte das Script über einem Button, der einen HTTPS Befehl sendet. Was mache ich noch falsch?
Von
Du musst schon das script hier posten...sonst kann ich es dir nicht sagen.
Von
// bitte eintragen
var key = "88dad9da3388c665";
var station = "IOBERSTE72";
var startAktualisierung = "<observation_time>Last Updated on "; // letzter update start
var endAktualisierung = "</observation_time>"; // letzter update end
var startBedingungen = "<weather>"; // start wetterbedingungen
var endBedingungen = "</weather>"; // ende wetterbedingungen
var startTemperatur_C = "<temp_c>"; // start temperatur # ZAHL
var endTemperatur_C = "</temp_c>"; //ende temperatur # ZAHL
var startWind_kmh = "<wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var endWind_kmh = "</wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var startWindboeen = "<wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var endWindboeen = "</wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var startWindrichtung = "<wind_dir>"; // windrichtung
var endWindrichtung = "</wind_dir>"; // windrichtung
var startWindbedingungen = "<wind_string>"; // windbedingungen
var endWindbedingungen = "</wind_string>"; // windbedingungen
var startLuftdruck = "<pressure_mb>"; // Luftdruck #ZAHL
var endLuftdruck = "</pressure_mb>"; // Luftdruck #ZAHL
var startLuftdrucktrend = "<pressure_trend>"; //Luftdrucktrend
var endLuftdrucktrend = "/pressure_trend>"; //Luftdrucktrend
var startLuftfeuchte = "<relative_humidity>"; //Luftfeuchte
var endLuftfeuchte = "</relative_humidity>"; //Luftfeuchte
var url = "http://http://api.wunderground.com/api/88dad9da3388c665/conditions/lang:DL/q/pws:IOBERSTE72.xml";
var position = 0;
var start_position = 0;
var end_position = 0;
var data_length = 0;
var parseData = function(body) {
start_position = body.indexOf(startAktualisierung) + startAktualisierung.length; // Anfangsposition
end_position = body.indexOf(endAktualisierung); // Endeposition
data_length = end_position - start_position;
var dataAktualisierung = body.substring(start_position, start_position + data_length) ;
start_position = body.indexOf(startBedingungen) + startBedingungen.length; // Anfangsposition
end_position = body.indexOf(endBedingungen); // Endeposition
data_length = end_position - start_position;
var dataBedingungen = body.substring(start_position, start_position + data_length) ;
// log('Bedingungen ' + dataBedingungen , "info");
start_position = body.indexOf(startTemperatur_C) + startTemperatur_C.length; // Anfangsposition
end_position = body.indexOf(endTemperatur_C); // Endeposition
data_length = end_position - start_position;
var dataTemperatur_C = body.substring(start_position, start_position + data_length) ;
// log('Temperatur_C ' + dataTemperatur_C , "info");
start_position = body.indexOf(startWind_kmh) + startWind_kmh.length; // Anfangsposition
end_position = body.indexOf(endWind_kmh); // Endeposition
data_length = end_position - start_position;
var dataWind_kmh = body.substring(start_position, start_position + data_length) ;
// log('Wind_kmh ' + dataWind_kmh , "info");
start_position = body.indexOf(startWindboeen) + startWindboeen.length; // Anfangsposition
end_position = body.indexOf(endWindboeen); // Endeposition
data_length = end_position - start_position;
var dataAWindboeen = body.substring(start_position, start_position + data_length) ;
// log('Windboeen ' + dataAWindboeen , "info");
start_position = body.indexOf(startWindrichtung) + startWindrichtung.length; // Anfangsposition
end_position = body.indexOf(endWindrichtung); // Endeposition
data_length = end_position - start_position;
var dataWindrichtung = body.substring(start_position, start_position + data_length) ;
// log('Windrichtung ' + dataWindrichtung , "info");
start_position = body.indexOf(startWindbedingungen) + startWindbedingungen.length; // Anfangsposition
end_position = body.indexOf(endWindbedingungen); // Endeposition
data_length = end_position - start_position;
var dataWindbedingungen = body.substring(start_position, start_position + data_length) ;
// log('Windbedingungen ' + dataWindbedingungen , "info");
start_position = body.indexOf(startLuftdruck) + startLuftdruck.length; // Anfangsposition
end_position = body.indexOf(endLuftdruck); // Endeposition
data_length = end_position - start_position;
var dataLuftdruck = body.substring(start_position, start_position + data_length) ;
// log('Luftdruck ' + dataLuftdruck , "info");
start_position = body.indexOf(startLuftdrucktrend) + startLuftdrucktrend.length; // Anfangsposition
end_position = body.indexOf(endLuftdrucktrend); // Endeposition
data_length = end_position - start_position - 1;
var dataLuftdrucktrend = body.substring(start_position, start_position + data_length) ;
// log('Luftdrucktrend ' + dataLuftdrucktrend , "info");
start_position = body.indexOf(startLuftfeuchte) + startLuftfeuchte.length; // Anfangsposition
end_position = body.indexOf(endLuftfeuchte); // Endeposition
data_length = end_position - start_position;
var dataLuftfeuchte = body.substring(start_position, start_position + data_length) ;
// console.log('Luftfeuchte ' + dataLuftfeuchte );
// schreibe Temperatur in Gateway Variable (String Typ)
// executeDeviceCommand(
// "mediola",
// "STRING [DE]",
// {"value":"setValue","ext": dataTemperatur_C},
// function(err) {
// err && console.error(err);
// }
// );
// schreibe Luftdruck in Gateway Variable (String Typ)
//executeDeviceCommand(
// "mediola",
// "STRING [01]",
// {"value":"setValue","ext": dataLuftdruck},
// function(err) {
// err && console.error(err);
// }
//);
// schreibe Luftdruck in Gateway Variable (String Typ)
executeDeviceCommand(
"Systemvariablen",
"Luftdruck[01]",
{"value":"setValue","ext":"dataLuftdruck"},
function(err) {
err && console.error(err);
}
);
}
// Anfrage an API.
var http = require('http');
var req = http.get(url, function(res) {
var body = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
parseData(body);
});
});
req.on('error', function(err) {
console.error(err);
});
Von
Die zeile var url ist nicht gleich wie im script oben
Ist deine variable vom typ string im gateway?
Von
Ausserdem steht bei dir dataLuftdruck in anfzeichen, bei mir nicht
Siehe den code genauer an
Von
{"value":"setValue","ext":"dataLuftdruck"},
Muss so
{"value":"setValue","ext": dataLuftdruck },
Von
Ich hatte einen Fehler in der Zeile var url... hier war 2x http drinnen. Ich habe nun alles ausgebessert, aber es funktioniert noch immer nicht. Ich sehe immer ein "?" Symbol, wenn ich die Variable dataLuftdruck auslesen will. Wenn ich im Script Manager mit dem Button Aktion einfügen die Variable auswähle, dann steht immer die Variable dataLuftdruck unter Anführungszeichen. Ich habe dies nun mit und ohne Anführungszeichen probiert, doch es bleibt leider immer beim "?" auf der Visualisierung. Die angelegte Systemvariable ist vom Typ String System Variable.
Von
Gibt's beim Script Manager einen Debug Modus um zu sehen, ob die einzelnen Variablen im Script überhaupt richtig ausgelesen werden? Danke für die Hilfe!
Von
Ich habe heute dein script getestet
Es gehr
Du musst die var url=
So schreiben wie in meinem script oben und nicht selber verändern. Der apikey und station sind schon ganz oben angelegt
Du musst eine weitere variable anlegen am gateway
Vergiss diese luftdruck
Lege eine neue und nenne sie test
Die anführungszeichen sollen weg nur data...
Von
Debug gibt es nicht abe sie werden ausgelesen
Du kannst im neo server verzeichniss schauen was die log datei schreibt
Von
In log datei kannst du sehen ob dein http button funktioniert als auslöser
Von
Du hast neo server auf dem gateway
Versuche auf einem pc diesen zu installieren
Vielleicht macht der probleme
Von
So, Ich habe nun alles so gemacht, wie du es vorgeschlagen hast...... Leider immer das Selbe Zeichen und keine Anzeige des Wertes... Ich gebe nun schön langsam auf..
Von
Mach doch nur ein script welches du als aktion einfügst. Es soll deine variable mit einem zeichen befüllen. Z.b. t
Speicherst es überträgst und als auslöser ein http button
Mal sehen ob die variable befüllt wird
Von
Gute Idee, das mach ich noch..
Von
Das scheint das Problem zu sein.... Ich kann einfach keine Werte in Systemvariablen über das Script schreiben...
Von
Wenn ich allerdings direkt mit einem Button auf die Variable schreibe, dann wird mir der Wert visualisiert.
Von
Dann melde dich beim support
Oder installiere neo servver auf pc zum testen
Von
Hallo, wollte das Script auch zum laufen bringen. Bisher eher erfolglos.
Funktioniert dieses Script nun bei jemand ?
Habe die V5+ mit dem NEO server
API KEY habe ich und auch meine eigene Station.
Variable habe ich erstmal nur eine angelegt. unter Raum " Variablen" --> dataTemperatur_C
Wenn ich das Script ausführe wird die Variable immer mit 0 beschrieben.
Hoffe jemand kann helfen. :-)
Hier nochmal das Script:
// bitte eintragen
var key = "84b4902xxxxxxxxxxxxxc909b1b";
var station = "IOxxxxxx6";
var startAktualisierung = "<observation_time>Last Updated on "; // letzter update start
var endAktualisierung = "</observation_time>"; // letzter update end
var startBedingungen = "<weather>"; // start wetterbedingungen
var endBedingungen = "</weather>"; // ende wetterbedingungen
var startTemperatur_C = "<temp_c>"; // start temperatur # ZAHL
var endTemperatur_C = "</temp_c>"; //ende temperatur # ZAHL
var startWind_kmh = "<wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var endWind_kmh = "</wind_kph>"; // ende Windgeschwindigkeit # ZAHL
var startWindboeen = "<wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var endWindboeen = "</wind_gust_kph>"; // Windboeengeschwindigkeit # ZAHL
var startWindrichtung = "<wind_dir>"; // windrichtung
var endWindrichtung = "</wind_dir>"; // windrichtung
var startWindbedingungen = "<wind_string>"; // windbedingungen
var endWindbedingungen = "</wind_string>"; // windbedingungen
var startLuftdruck = "<pressure_mb>"; // Luftdruck #ZAHL
var endLuftdruck = "</pressure_mb>"; // Luftdruck #ZAHL
var startLuftdrucktrend = "<pressure_trend>"; //Luftdrucktrend
var endLuftdrucktrend = "/pressure_trend>"; //Luftdrucktrend
var startLuftfeuchte = "<relative_humidity>"; //Luftfeuchte
var endLuftfeuchte = "</relative_humidity>"; //Luftfeuchte
var url = "http://api.wunderground.com/api/" + key + "/conditions/lang:DL/q/pws:" + station + ".xml";
var position = 0;
var start_position = 0;
var end_position = 0;
var data_length = 0;
var parseData = function(body) {
start_position = body.indexOf(startAktualisierung) + startAktualisierung.length; // Anfangsposition
end_position = body.indexOf(endAktualisierung); // Endeposition
data_length = end_position - start_position;
var dataAktualisierung = body.substring(start_position, start_position + data_length) ;
start_position = body.indexOf(startBedingungen) + startBedingungen.length; // Anfangsposition
end_position = body.indexOf(endBedingungen); // Endeposition
data_length = end_position - start_position;
var dataBedingungen = body.substring(start_position, start_position + data_length) ;
// log('Bedingungen ' + dataBedingungen , "info");
start_position = body.indexOf(startTemperatur_C) + startTemperatur_C.length; // Anfangsposition
end_position = body.indexOf(endTemperatur_C); // Endeposition
data_length = end_position - start_position;
var dataTemperatur_C = body.substring(start_position, start_position + data_length) ;
// log('Temperatur_C ' + dataTemperatur_C , "info");
start_position = body.indexOf(startWind_kmh) + startWind_kmh.length; // Anfangsposition
end_position = body.indexOf(endWind_kmh); // Endeposition
data_length = end_position - start_position;
var dataWind_kmh = body.substring(start_position, start_position + data_length) ;
// log('Wind_kmh ' + dataWind_kmh , "info");
start_position = body.indexOf(startWindboeen) + startWindboeen.length; // Anfangsposition
end_position = body.indexOf(endWindboeen); // Endeposition
data_length = end_position - start_position;
var dataAWindboeen = body.substring(start_position, start_position + data_length) ;
// log('Windboeen ' + dataAWindboeen , "info");
start_position = body.indexOf(startWindrichtung) + startWindrichtung.length; // Anfangsposition
end_position = body.indexOf(endWindrichtung); // Endeposition
data_length = end_position - start_position;
var dataWindrichtung = body.substring(start_position, start_position + data_length) ;
// log('Windrichtung ' + dataWindrichtung , "info");
start_position = body.indexOf(startWindbedingungen) + startWindbedingungen.length; // Anfangsposition
end_position = body.indexOf(endWindbedingungen); // Endeposition
data_length = end_position - start_position;
var dataWindbedingungen = body.substring(start_position, start_position + data_length) ;
// log('Windbedingungen ' + dataWindbedingungen , "info");
start_position = body.indexOf(startLuftdruck) + startLuftdruck.length; // Anfangsposition
end_position = body.indexOf(endLuftdruck); // Endeposition
data_length = end_position - start_position;
var dataLuftdruck = body.substring(start_position, start_position + data_length) ;
// log('Luftdruck ' + dataLuftdruck , "info");
start_position = body.indexOf(startLuftdrucktrend) + startLuftdrucktrend.length; // Anfangsposition
end_position = body.indexOf(endLuftdrucktrend); // Endeposition
data_length = end_position - start_position - 1;
var dataLuftdrucktrend = body.substring(start_position, start_position + data_length) ;
// log('Luftdrucktrend ' + dataLuftdrucktrend , "info");
start_position = body.indexOf(startLuftfeuchte) + startLuftfeuchte.length; // Anfangsposition
end_position = body.indexOf(endLuftfeuchte); // Endeposition
data_length = end_position - start_position;
var dataLuftfeuchte = body.substring(start_position, start_position + data_length) ;
// console.log('Luftfeuchte ' + dataLuftfeuchte );
// schreibe Temperatur in Gateway Variable (String Typ)
executeDeviceCommand(
"Variablen",
"dataTemperatur_C",
{"value":"setValue","ext": dataTemperatur_C},
function(err) {
err && console.error(err);
}
);
}
// Anfrage an API.
var http = require('http');
var req = http.get(url, function(res) {
var body = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
parseData(body);
});
});
req.on('error', function(err) {
console.error(err);
});
Von
Hi, habe dies auch versucht.
In der Skript Debug Ausgabe erhalte ich leider Keine Werte
13:33:40Skript WETTER hat gestartet.
13:33:41
13:33:42
13:33:42
13:33:42Skript WETTER hat geendet.
thats all.
Hat dies jemand zum laufen gebracht?
Neuen Kommentar hinzufügen