Antworten
Jul 20, 2017 - 08:27
Das Script auf der CCU2 ist schon etwas komplexer weil man auch die Standortkoordinaten und natürlich auch die Jahreszeit berücksichtigen muss.
Ob man das Script auf Javascript in den Automation Manager umschreiben kann weiß ich nicht.
Vielleicht hat das jemand mal hier gemacht und kann was dazu sagen.
Jul 20, 2017 - 08:35
im AM steht dafür ja eine Funktion zur Verfügung: Astro; hier kann man auch eine zeitliche Differenz angeben (also zB 1h nach Untergang). Wichtig ist dafür, das ma in der Gateway-Konfiguration bzw dem Server, wo der AM läuft, die korrekte Position angegeben wird ( auf dem ersten Reiter des Gateways im NEO ConfigTool)
Je nachdem, was man plant, stimmen allerdings diese Zeitpunkte nicht mit dem Helligkeitsempfinden überein. Dann muss man mit einem entsprechendem Offset arbeuten oder die Helligkeit mess.
en und auswerten (siehe HM-Sen-MDIR-O2: Nutzung der Helligkei für Aussenlicht)
Jul 20, 2017 - 09:06
Dazu nutzte ich das Astronomie Modul.
Die Werte werden berechnet aus Formeln aus "Practical Astronomy with your Calculator or Spreadsheet" von Peter Duffet-Smith und Jonathan Zwart.
Das ganze kannst Du sicher auch in Javascript umschreiben.
Quellcode ist hier zu finden.
Generiert wird daraus ein Grafik die kann man dann ebenfalls als Webseitenelement in NEO einbinden.
Sieht dann in NEO so aus:
Jul 20, 2017 - 13:57
würde mich ja schon über Sonnenaufgang und Sonnenuntergang Zeiten freuen.
vielleicht hat ja jemand eine Lösung im Javaskript
Jul 21, 2017 - 10:37
http://rolfrost.de/sunservice.html
der code für AM
longtd und lattd für eigene stadt anpassen
var date = new Date();
var jahr = date.getFullYear();
var monat = date.getMonth();
var tag = date.getDay();
var longtd = 8.65;
var lattd = 50.11;
var zeitzone = 2;
var https = require('http');
var options = {
host: 'rolfrost.de',
path: '/sunservice.html?year=' + jahr + ';month=' + monat + ';day=' + tag + ';long=' + longtd + ';lat=' + lattd + ';tz=' + zeitzone,
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
try {
var data = JSON.parse(json);
// unsere antwort liegt hier:
console.log('sunrise= ' + data.sunrise);
console.log('sunset= ' + data.sunset);
} catch (e) {
console.log('Error parsing JSON!');
}
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
speichert man das script, und testet mit dem play button, werden in einem fenster die sunrise und sunset ausgegeben
möchte man jetzt die daten in eine gateway variable vom typ string schreiben
zuerst 2 gateway variablen im neo anlegen, mit dem namen sunrise oder aufgang, raum sun, typ string und eine mit dem namen sunset oder untergang, auch raum sun, typ string.
für die variable sunrise und den raum sun, so einen code anlegen
executeDeviceCommand(
"sun",
"sunrise",
{"value":"setValue","ext":data.sunrise},
function(err) {
err && console.error(err);
}
);
diesen code oben einfügen unter die zeile :
// unsere antwort liegt hier:
für die variable sunset und den raum sun so ein code:
executeDeviceCommand(
"sun",
"sunset",
{"value":"setValue","ext":data.sunset},
function(err) {
err && console.error(err);
}
);
diesen hinter dem code oben einfügen
kompletter script:
var date = new Date();
var jahr = date.getFullYear();
var monat = date.getMonth();
var tag = date.getDay();
var longtd = 8.65;
var lattd = 50.11;
var zeitzone = 2;
var https = require('http');
var options = {
host: 'rolfrost.de',
path: '/sunservice.html?year=' + jahr + ';month=' + monat + ';day=' + tag + ';long=' + longtd + ';lat=' + lattd + ';tz=' + zeitzone,
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
try {
var data = JSON.parse(json);
// data is available here:
console.log('sunrise= ' + data.sunrise);
console.log('sunset= ' + data.sunset);
executeDeviceCommand(
"sun",
"sunrise",
{"value":"setValue","ext":data.sunrise},
function(err) {
err && console.error(err);
}
);
executeDeviceCommand(
"sun",
"sunset",
{"value":"setValue","ext":data.sunset},
function(err) {
err && console.error(err);
}
);
} catch (e) {
console.log('Error parsing JSON!');
}
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
jetzt im am manager einen task machen, im sobald block zeit nehmen, uhrzeit=00:01
jeden tag
im dann teil dann dieses script
die 2 variablen visualisieren
Jul 22, 2017 - 05:15
Hier noch eine API die glaube ich etwas professioneller ist.
https://sunrise-sunset.org/api
Aug 19, 2017 - 07:01
// lokale Längen- und Breitenangabe
var latitude = "51.46";
var longitude = "7.16";
var ts = new Date();
// wenn man für "morgen" berechnen will
// ts.setDate(ts.getDate() + 1);
var date = ts.getFullYear() + '-' + ('0' + (ts.getMonth() + 1)).slice(-2) + '-' + ('0' + ts.getDate()).slice(-2);
var url = "https://api.sunrise-sunset.org/json?formatted=0&lat=" + latitude + "&lng=" + longitude + "&date=" + date;
var http = require('https');
var req = http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += String(chunk);
});
res.on('end', function() {
var jbody = JSON.parse( body );
var status = jbody.status;
var curDate, sunrise, sunset, twilight_begin, twilight_end;
if (status == "OK") {
// Zeitangaben sind alle in UTC und müssen daten umformatiert werden
var d = new Date(Date.parse(jbody.results.sunrise));
curDate = ('0' + d.getDate()).slice(-2) + '.' + ('0' + (d.getMonth() + 1)).slice(-2) + '.' + d.getFullYear();
sunrise = d.toTimeString().slice(0,5);
d = new Date(Date.parse(jbody.results.sunset));
sunset = d.toTimeString().slice(0,5);
d = new Date(Date.parse(jbody.results.civil_twilight_begin));
twilight_begin = d.toTimeString().slice(0,5);
d = new Date(Date.parse(jbody.results.civil_twilight_end));
twilight_end = d.toTimeString().slice(0,5);
}
executeDeviceCommand(
"HomeServer",
"astro_date",
{"value":"setValue","ext":curDate},
function(err) {
err && console.error(err);
}
);
executeDeviceCommand(
"HomeServer",
"astro_sunrise",
{"value":"setValue","ext":sunrise},
function(err) {
err && console.error(err);
}
);
executeDeviceCommand(
"HomeServer",
"astro_sunset",
{"value":"setValue","ext":sunset},
function(err) {
err && console.error(err);
}
);
executeDeviceCommand(
"HomeServer",
"astro_twilight_begin",
{"value":"setValue","ext":twilight_begin},
function(err) {
err && console.error(err);
}
);
executeDeviceCommand(
"HomeServer",
"astro_twilight_end",
{"value":"setValue","ext":twilight_end},
function(err) {
err && console.error(err);
}
);
// weitere Rückgabewerte:
// day_length
// solar_noon
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end
});
});
Von
Habe keine CCU
Dachte das geht vielleicht mit einer API
Neuen Kommentar hinzufügen