Zur besten Antwort gewählt
Jul 25, 2019 - 13:06
das sollte so gehen:
var url = "http://api.weather.com/v2/pws/observations/current?stationId=IOBERTIE6&for
mat=json&units=m&apiKey=84b4902129cc409bb4902129cc909b1b";
var http = require('http');
var req = http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
var tbody = JSON.parse( body );
console.log(tbody.observations[0].metric.temp);
var Temperatur = tbody.observations[0].metric.temp;
console.log(Temperatur);
// schreibe Temperatur in Gateway Variable (String Typ)
executeDeviceCommand(
"Variablen",
"dataTemperatur_C",
{"value":"setValue","ext":Temperatur},
function(err) {
err && console.error(err);
}
);
});
});
Von
der inhalt von deinem json befindet sich hier:
temperatur ist hier:
tbody.observations[0].metric.temp;
wenn du z.b. windgeschwindigkeit suchst ist das:
tbody.observations[0].metric.windSpeed;
aber wenn du die luftfeuchte suchst ist sie hier versteckt :)
beachte das jetzt metric weg ist
tbody.observations[0].humidity;
Von
einfach die url im browser eingeben und dann sich das json anschauen:
http://api.weather.com/v2/pws/observations/current?stationId=IOBERTIE6&format=json&units=m&apiKey=84b4902129cc409bb4902129cc909b1b
dann verstehst du wie es aufgebaut ist
Von
Vielen Dank funktioniert.
Kannst du mir auch noch schreiben wie ich noch andere Daten hinzufügen kann.
windSpeed
windGust
precipRate
precipTotal
humidity
Windrichtung wäre auch noch klasse. (müsste winddir sein)
Habe da leider nicht wirklich ein plan von Script schreiben. Wäre toll wenn du das auch noch machen könntest
Dann hast du was bei mir gut.
mfg Manuel
Von
Dann poste deine gateway variablen für alles wie du haben möchtesr. So wie oben nei deiner frage...Mache ich dann morgen.
Von
windSpeed = windgeschwindigkeit
windGust = windgeschwindigkeit max
precipRate = Niederschlag
precipTotal = Niederschlag Tag
humidity = Luftfeuchtigkeit
winddir = Windrichtung
Variablen des Gateway austauschen sollte ich aber selbst können
Danke nochmals
Von
var url = "http://api.weather.com/v2/pws/observations/current?stationId=IOBERTIE6&format=json&units=m&apiKey=84b4902129cc409bb4902129cc909b1b";
var http = require('http');
var req = http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
var tbody = JSON.parse( body );
var Temperatur = tbody.observations[0].metric.temp;
var WindGeschwindigkeit = tbody.observations[0].metric.windSpeed;
var WindGeschwindigkeitMax = tbody.observations[0].metric.windGust;
var Niederschlag = tbody.observations[0].metric.precipRate;
var NiederschlagTag = tbody.observations[0].metric.precipTotal;
var Luftfeuchtigkeit = tbody.observations[0].humidity;
var Windrichtung = tbody.observations[0].winddir;
console.log(Temperatur);
console.log(WindGeschwindigkeit);
console.log(WindGeschwindigkeitMax);
console.log(Niederschlag);
console.log(NiederschlagTag);
console.log(Luftfeuchtigkeit);
console.log(Windrichtung);
// schreibe Temperatur in Gateway Variable (String Typ)
executeDeviceCommand(
"Variablen",
"dataTemperatur_C",
{"value":"setValue","ext":Temperatur},
function(err) {
err && console.error(err);
}
);
});
});
Von
Vielen Dank alles prima.
Habe es nun auch verstanden.
Von
super :)
Von
Hallo,
ich habe ein ähnliches Anliegen, deshalb füge ich das mal hier ein.
Ich möchte meine Wetterdaten (am wichtigsten ist mir die Aussentemperatur) meiner Netatmo Wetterstation per Script in Vareablen auf meiner CCU3 Übertragen, damit ich hier in Abhängikeit der Daten weitere Programme erstellen kann.
Hintergrund: Meine Lüftungsanlage schaltet sich in Abhängigkeit der Luftfeuchtigkeit der Innenräume ein. Ich möchte dieses erweitern, das die Lüftungsanlage nur dann in Betrieb geht, wenn auch die Aussentemperatur niedriger als die Innentemperatur.
Da hier das Hauptprogramm auf der CCU3 läuft möchte ich daher die Daten nach Möglichkeit nur übergeben, damit ich in der CCU damit weiterarbeiten kann.
Ich freue mich über eure Hilfe!
Gruß
Von
ähnlich heisst nicht gleich....also musst du schon etwas mehr informationen geben. wie heisst die variable,von welchem typ in der ccu und welches script meinst du, das von automation manager???
hier kannst du schonmal aus dem browser testen wie dasklappt mit einer variable:
http://<CCU-IP>:8181/herbert.exe?state=dom.GetObject('NameDerSysVar').State(3.8)
schreibt 3.8 in die variable vom typ zahl
Von
Das werde ich ausprobieren. Vielen Dank erst einmal dafür.
Also im Automationsmanager genauer gesagt im Skript Editor frage ich meinen Außentemperatursensor ab. Wenn ich dieses Script (var Temperatur = "temp";
getDeviceStatus(
"Wetterstation",
"To Fu (Außen)",
{"value":"temp"},
function(err, status) {
err && console.error(err.message);
console.log(status);
}
); ) dort teste wird mir auch die aktuelle Temperatur angezeigt.
Diese Zahl soll dann am besten in die CCU übertragen werden. Bis jetzt habe ich es mit einer Systemvareable Typ Zahl versucht. Die Vareable heisst auf der CCU Aussen.
Von
Mein komplettes script siht so aus:
getDeviceStatus(
"Wetterstation",
"To Fu (Außen)",
{"value":"temp"},
function(err, status) {
err && console.error(err.message);
console.log(status);
}
);
var Temperatur="temp";
executeDeviceCommand(
"_progs&sysvars",
"gw2_Innen",
{"value":"rawStringValue","ext":"Temperatur"},
function(err) {
err && console.error(err.message);
}
);
Wenn ich das Script im AM Teste, läuft es auch durch. Es wird aber keine Zahl in meine Systemvareable geschrieben. Auch die Zeit der letzten Aktualisierung der Vareable ändert sich nicht.
Von
getDeviceStatus(
"Wetterstation",
"To Fu (Außen)",
{"value":"temp"},
function(err, status) {
err && console.error(err.message);
console.log(status);
executeDeviceCommand(
"_progs&sysvars",
"gw2_Innen",
{"value":"rawStringValue","ext":status},
function(err) {
err && console.error(err.message);
}
);
}
);
das sollte jetztz gehen
deine variable scheint aber vom wert string zu sein
Von
Der Wert wird abgerufen, aber danach erscheint die Fehlermeldung: command is invalid
Was genau heisst "deine variable scheint aber vom wert string zu sein"? Ich bin im Scripten blutiger Anfänger, sorry!
Von
value":"rawStringValue","ext":status},
Von
bei mir sieht für zeichenkette so der aktion block:
executeDeviceCommand(
"_progs&sysvars",
"gw1_Alt_Super",
{"value":"rawStringValue","ext":"ja"},
function(err) {
err && console.error(err.message);
}
);
Von
dort schreibe ich ja in die variable
Von
für eine variable vom typ zahl ist die aktion so bei mir
executeDeviceCommand(
"_progs&sysvars",
"gw1_code_zahl",
{"value":"rawFloatValue","ext":"1.4","scale":"0.1"},
function(err) {
err && console.error(err.message);
}
);
Von
also erzeuge erstmal das snippet welches die temperatur abfragt mit dem button status einfügen und poste es hier
Von
dann erzeuge ein snipet code mit dem button aktion welches in die variable ccu etwas schreiben soll, den wert gibst du z.b. 12.5 selbst ein...dann poste den code hier
Von
Also, habe jetzt noch einmal getestet. Habe jetzt einfach mal einen Festen Wert schreiben lassen. Das Funktioniert auch:
executeDeviceCommand(
"_progs&sysvars",
"gw2_Innen",
{"value":"rawStringValue","ext":"4"},
function(err) {
err && console.error(err.message);
}
);
Also funktioniert in dem Script die Übergabe des ausgelesenen Wertes des Sensors zu dem Script Baustein der den Wert in die Vareable schreiben soll nicht.
Von
wie ich schon sagte...zuerst ist deine ccu variable nicht vom typ zahl sondern eine string (zeichenkette) variable. Also das ist schon mal falsch wenn du auf temperaturen reagieren willst, kleiner oder grösser...gleich.
oben habe ich dir gezeigt wie der baustein für eine zahl variable der ccu ist...hier nochmal
executeDeviceCommand(
"_progs&sysvars",
"gw1_code_zahl",
{"value":"rawFloatValue","ext":"1.4","scale":"0.1"},
function(err) {
err && console.error(err.message);
}
);
dort wird dann 1.4 in die variable geschrieben.
dann solltest du einen baustein deiner temperatur abfrage im script, mit dem button status einfügen, dann sollte sowas kommen:
getDeviceStatus(
"Wohnzimmer",
"Wandtermostat",
{"value":"themoTActualTemp","extMeta":"-10.0-50.0","scale":"0.1"},
function(err, status) {
err && console.error(err.message);
console.log(status);
}
);
das solltest du dann hier posten
jetzt erstelllst du eine variable auf der ccu vom typ zahl und nicht zeichenkette und importierst du sie in neo...dann erstellst du im scripteditor von automation manager mit dem button aktion einfügen so was für deine variable:
executeDeviceCommand(
"_progs&sysvars",
"gw1_code_zahl",
{"value":"rawFloatValue","ext":"1.4","scale":"0.1"},
function(err) {
err && console.error(err.message);
}
);
bei wert gibst du selbst einen wert und postest ausgabe hier
dann erstelle ich dir den code mt welchem deine abgefragte temperatur in die variable der ccu geschrieben wird.
Von
Sorry ich hatte das mit den unterschiedlichen Systemvareablen an dem Tag nicht "geschnallt"
Nun habe ich wieder die passende Zeit gefunden um deine "Anweisungen" abzuarbeiten.
Hier nun die gewünschten Angaben:
Vareable vom Typ Zahl:
executeDeviceCommand(
"_progs&sysvars",
"gw2_Aussen",
{"value":"rawFloatValue","ext":"2","scale":"0.1"},
function(err) {
err && console.error(err.message);
}
);
Abfrage des Gerätestatus:
getDeviceStatus(
"Wetterstation",
"To Fu (Außen)",
{"value":"temp"},
function(err, status) {
err && console.error(err.message);
console.log(status);
}
);
-----
executeDeviceCommand(
"_progs&sysvars",
"gw2_Aussen",
{"value":"rawFloatValue","ext":"1.4","scale":"0.1"},
function(err) {
err && console.error(err.message);
}
);
Wenn ich das Script ausführe wird auch 1.40 in der Vareable "Aussen" in der CCU gesetzt.
In der Debug Ausgabe erscheint:
13:18:42Skript Temperatur Aussen in Vareable CCU Schreiben hat gestartet.
13:18:43Skript Temperatur Aussen in Vareable CCU Schreiben hat geendet.
Ich hoffe, dass sind nun alle erforderlichen Angaben. Bei deiner Frage zur "Ausgabe" bin ich mir da nicht sicher.
Vielen Dank im Voraus!
Neuen Kommentar hinzufügen