NEWS
Astro-Tageszeit abfragen und in Datenpunkt eintragen
-
Ich glaube, dass die Anzeige erst um 00:05 kommt, ob da beim Scriptstart auch schon was kommt, weiß ich jetzt nicht mehr, glaub ich aber nicht, wegen der zeitlichen Triggerung!
Enrico
-
Moin,
so hab das mal gemacht, sieht auch ähnlich wie bei dir aus.
Wo ändert sich denn dann die anzeige oder wird es seperat erstellt das script?
weil unter Objekte ist nichts verändert oder hinzu gekommen.
javascript.0 2018-02-22 08:52:47.743 info script.js.common.SaSu: registered 0 subscriptions and 1 schedule javascript.0 2018-02-22 08:52:47.726 info Start javascript script.js.common.SaSu javascript.0 2018-02-22 08:52:47.704 info Stop script script.js.common.SaSu
das kommt beim Neustart vom Blocky Script. `
Da steht doch genau was gemacht wurde.Script gestoppt
Script gestartet
Den schedule (Zeitplan 00:05) aus dem Script eingetragen.
Jetzt einfach mal bis 00:05 Uhr abwarten.
Grüße
-
Hätte es um 10 Uhr auf jede Minute jeder Stunde gesetzt . Aber es gab immer noch nichts . Naja schau ich morgen sonst mal
Es ist aber richtig , das ich in dem blocky die Sonnenaufgang / Untergang anwähle , die das Skript schon geschrieben hat ja ?
-
Hätte es um 10 Uhr auf jede Minute jeder Stunde gesetzt . Aber es gab immer noch nichts . Naja schau ich morgen sonst mal
Es ist aber richtig , das ich in dem blocky die Sonnenaufgang / Untergang anwähle , die das Skript schon geschrieben hat ja ? `
Du sprichst für mich in Rätzeln :shock:Für einen einfachen Test.
1. Lasse den Zeit-Trigger weg.
Also nur die beiden Steuere-Bausteine im Script.
2. Script starten
Jetzt werden die Bausteine sofort, EINMALIG ausgeführt und die Daten in Deine Datenpunkte eingetragen.
Wenn alles stimmt dann
3. Zeit-Trigger wieder einbauen.
4. Script starten
Die Astro-Zeiten werden einmalig bei Tageswechsel gesetzt.
Es ist also völlig unnötig diese mehrmals abzufragen.
Grüße
-
es möchte nicht..
anbei nochmal die aktuelle einstellung
2562_12.png -
was Möchte nicht?
Sonnenaufgang / Untergang steht doch da.
Der ändert sich nicht am Tag… erst wieder morgen.
-
es möchte nicht.. `
Wie wendy2702 geschrieben hat, es ist doch alles richtig.
Was willst Du denn noch mehr?
Du sitzt doch nicht etwa in der Raumstation "ISS". Da laufen die Astro-Zeiten etwas anders.
Grüße
-
Wie kann man den die Uhrzeit anpassen ? Sekunden benötige ich eigentlich nicht dafür `
das sich die Zeiten am Tag nicht ändern kann ich mir gut denken -_-
-
es hat sich leider, heute nacht, nichts an der darstellung der Uhrzeit geändert.
-
Zeige mal bitte nochmal dein aktuelles Blockly (bitte mal mit Export!), da muss doch irgendein Fehler drin sein! :? Welche Einstellungen haben die beiden Datenpunkte SA und SU?
Enrico
-
es möchte nicht..
anbei nochmal die aktuelle einstellung `
Wenn ich das richtig sehe fehlt der Trigger Baustein und wieso machst du ein Blockly und hast auch noch das Script von PIX laufen?
Wenn ich das richtig verstanden habe ist das ein "entweder Script" oder "Blockly" und nicht beides zusammen da beide versuchen den selben Datenpunkt zu beschreiben.
@Enrico: oder bin ich auf dem Holzweg?
-
Wenn ich das richtig sehe fehlt der Trigger Baustein und wieso machst du ein Blockly und hast auch noch das Script von PIX laufen? `
Der Trigger sollte versuchsweise rausgenommen werden, weil dann sofort bei Scriptstart der Datenpunkt beschrieben werden müsste. Deshalb hatte ich ja nochmal nach dem fertigen Blockly gefragt.
Wenn ich das richtig verstanden habe ist das ein "entweder Script" oder "Blockly" und nicht beides zusammen da beide versuchen den selben Datenpunkt zu beschreiben. `
Hast du irgendwo gesehen, dass da noch ein Script diese Datenpunkte beschreibt? Oder hast du das irgendwo rausgelesen, mir ist sowas jetzt nicht aufgefallen, aberdas wäre auch ne mögliche Fehlerquelle!
Enrico
-
Hast du irgendwo gesehen, dass da noch ein Script diese Datenpunkte beschreibt? Oder hast du das irgendwo rausgelesen, mir ist sowas jetzt nicht aufgefallen, aberdas wäre auch ne mögliche Fehlerquelle!
Enrico `
Schau mal ein paar Posts weiter oben. Da ist das Blockly gepostet und darin kann man sehen das ein "Tageszeit" Script (nehme an das von Pix) auch aktiv ist.
Mirko
-
Zeige mal bitte nochmal dein aktuelles Blockly (bitte mal mit Export!), da muss doch irgendein Fehler drin sein! :? Welche Einstellungen haben die beiden Datenpunkte SA und SU? `
Es kann aber auch noch etwas anderes sein.Ich habe vor einiger Zeit einen Fehler Blockly-Astro gefunden.
Da der damals von mir auf Github eingereicht wurde und mit einigen kurzen Bemerkungen zu den Akten gelegt wurde, habe ich mich nicht weiter gekümmert. :oops:
Wenn ich heute noch dazu komme, mache ich mal einen [Hinweis] Thema auf.
Grüße
-
Hatte bisher das PIX Script laufen.
Das habe ich jetzt mal gestoppt und ein Blockly angelegt wie von Enrico:
Als Datenpunkte nutze ich die, die mir durch das Skript angelegt worden sind.
Mal abwarten was morgen früh drin steht.
Aktuell:
-
Schau mal ein paar Posts weiter oben. Da ist das Blockly gepostet und darin kann man sehen das ein "Tageszeit" Script (nehme an das von Pix) auch aktiv ist. `
Du hast Recht, dieses Script habe ich sogar selbst am Laufen, allerdings habe ich für mein SA/SU noch einen Extra-Datenpunkt angelegt. Ich weiß gar nicht mehr warum :? , vielleicht auch wegen der Sekunden in der Anzeige! :?:
Enrico
-
-
Habe das mal auf 00:35 Uhr bei mir geändert.
Jetzt erstmal ne Nacht drüber schlafen
-
Hi,
also meine Datenpunkte wurden mit dem Blockly neu beschrieben.
Gruß
Mirko
-
Hallo,
ich habe das Skript mal komplett überarbeitet.
Skript:
! `/* System Tageszeoten ! Skript meldet Tageszeiten ! Nacht;Frühmorgens;Morgengrauen;Vormittag;Mittag;Nachmittag;Dämmerung;Abend; Basis: http://www.homematic-inside.de/tecbase/homematic/scriptlibrary/item/tageszeit-in-abschnitte-unterteilen oder hier: https://github.com/ioBroker/ioBroker.javascript#astro--funktion ! https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#getastrodate ! erstellt: 01.06.2015 von Pix 11.12.2015 getAstroDate ermittelt nun auch Sonnenaufgang und Untergang Astrotag (isAstroDay) eingebaut 23.02.2018 checkSec eingebaut (Uhrzeit sekundengenau?) andere Astrozeiten werden nun auch gespeichert Neuer Pfad 24.02.2018 Unterteilung in zwei Bereiche */ ! const sec = false; // Sekunden darstellen oder nicht const fC = false; // forceCreation ein/aus const pfad = "Astro"; // Pfad zum Objekt - Objektbaum-Hauptverzeichnis ! // ***************************************************************************** // TAGESZEITEN - T E I L ! // Tageszeiten nach eigenem Gusto (Shifts siehe schedules weiter unten) const tageszeiten = ['Nacht', // Night 'Morgendämmerung', // nightEnd 'Morgen', 'Vormittag', 'Mittag', 'Nachmittag', 'Abenddämmerung', 'Abend']; ! const idTageszeit = "javascript." + instance + "." + pfad + ".Tageszeit.current" /*Tageszeit*/, idTageszeitNext = "javascript." + instance + "." + pfad + ".Tageszeit.next"; createState(idTageszeit, "nächsten Wechsel abwarten", fC, { name: "Tageszeit", desc: "Name der Tageszeit", type: "string" }); createState(idTageszeitNext, "nächsten Wechsel abwarten", fC, { name: "nächste Tageszeit", desc: "Name der nächsten Tageszeit", type: "string" }); ! function neue_tageszeit(abschnitt) { var akt = tageszeiten[parseInt(abschnitt, 10)], // wenn aktuelles Element ist letztes, dann nächstes ist erstes :-D nxt = (abschnitt + 1 === tageszeiten.length) ? tageszeiten[0] : tageszeiten[parseInt(abschnitt + 1, 10)]; setState(idTageszeit, akt); setState(idTageszeitNext, nxt); log("neue Tagezeit: " + akt); log("nächte kommende Tagezeit: " + nxt); } ! // Nacht schedule({ astro: "night", shift: 120 }, function () { neue_tageszeit(0); }); ! // Morgengdämmerung schedule({ astro: "nightEnd" }, function () { neue_tageszeit(1); }); ! // Morgen schedule({ astro: "sunrise" }, function () { neue_tageszeit(2); }); ! // Vormittag (beginnt 120min vor Sonnenhöchststand) schedule({ astro: "solarNoon", shift: -120 }, function () { neue_tageszeit(3); }); ! // Mittag schedule({ astro: "solarNoon" }, function () { neue_tageszeit(4); }); ! // Nachmittag schedule({ astro: "solarNoon", shift: 60 }, function () { neue_tageszeit(5); }); ! // Abenddämmerung (nach Sonnenuntergang) schedule({ astro: "dusk" }, function () { neue_tageszeit(6); }); ! // Abend schedule({ astro: "night" }, function () { neue_tageszeit(7); }); ! // ***************************************************************************** // A S T R O - T E I L ! /* Objekt Astrotag Astrotag liegt zwischen Sonnauf- und untergang, Astronacht liegt zwischen Sonnenunter- und aufgang */ const idAstrotag = "javascript." + instance + "." + pfad + ".Astrotag"; createState(idAstrotag, false, fC, { type: "boolean", name: "Astrologischer Tag", desc: "Liegt die aktuelle Zeit zwischen Sonnenauf- und untergang" }); ! // Objekt für Uhrzeiten der Astrozeiten ! const astrotime = { "elements" : [ // Astrotag beginnt { "fname" : "sunrise", // function name "de" : { "name" : "Sonnenaufgang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunrise", "desc" : "top edge of the sun appears on the horizon" }, "astroday" : true //during astroday }, { "fname" : "sunriseEnd", // function name "de" : { "name" : "Ende Sonnenaufgang", "nxt" : "nächstes", "desc" : "" }, "en" : { "name" : "End of sunrise", "desc" : "bottom edge of the sun touches the horizon" }, "astroday" : true //during astroday }, { "fname" : "goldenHourEnd", // function name "de" : { "name" : "Ende der goldenen Stunde am Morgen", "nxt" : "nächstes", "desc" : "" }, "en" : { "name" : "End of golden hour", "desc" : "morning golden hour (soft light, best time for photography) ends" }, "astroday" : true //during astroday }, { "fname" : "solarNoon", // function name "de" : { "name" : "Sonnenhöchststand", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Solar noon", "desc" : "sun is in the highest position" }, "astroday" : true //during astroday }, { "fname" : "goldenHour", // function name "de" : { "name" : "Goldene Stunde (am Abend)", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Golden hour", "desc" : "evening golden hour starts" }, "astroday" : true //during astroday }, { "fname" : "sunsetStart", // function name "de" : { "name" : "Beginn Sonnenuntergang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunset starts", "desc" : "bottom edge of the sun touches the horizon" }, "astroday" : true //during astroday }, // Astronacht beginnt { "fname" : "sunset", // function name "de" : { "name" : "Sonnenuntergang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunset", "desc" : "sun disappears below the horizon, evening civil twilight starts" }, "astroday" : false //during astronight }, { "fname" : "dusk", "de" : { "name" : "Abenddämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Dusk", "desc" : "evening nautical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "nauticalDusk", "de" : { "name" : "nautische Abenddämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Nautical dusk", "desc" : "evening astronomical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "night", "de" : { "name" : "Nacht", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Night", "desc" : "dark enough for astronomical observations" }, "astroday" : false //during astronight }, { "fname" : "nadir", "de" : { "name" : "Nadir", "nxt" : "nächster", "desc" : "Fußpunkt gegenüber dem Zenit" }, "en" : { "name" : "Nadir", "desc" : "darkest moment of the night, sun is in the lowest position" }, "astroday" : false //during astronight }, { "fname" : "nightEnd", "de" : { "name" : "Nachtende", "nxt" : "nächstes", "desc" : "" }, "en" : { "name" : "Night ends", "desc" : "morning astronomical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "nauticalDawn", "de" : { "name" : "nautische Morgendämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Nautical dawn", "desc" : "morning nautical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "dawn", "de" : { "name" : "Morgendämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "dawn", "desc" : "morning nautical twilight ends, morning civil twilight starts" }, "astroday" : false //during astronight } ] }; ! function writeAstroTimes(i) { // führende Nummer zur Sortierung in Admin/Objekte var nr = (i+1 < 10) ? "0" + (i+1) : (i+1); // Erstelle Objekt, falls nicht bereits vorhanden var idAstroObject = "javascript." + instance + "." + pfad + "." + nr + " - " + astrotime.elements[i].fname; createState(idAstroObject, " ", fC, { name: astrotime.elements[i].de.nxt + " " + astrotime.elements[i].de.name + " Uhrzeit", desc: astrotime.elements[i].en.desc, type: "string" }); setTimeout(function() { // kurz warten, damit Objekte ggf. erst angelgt werden können var astrotag = getState(idAstrotag).val, temp; var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); var next_event; if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute) next_event = (astrotime.elements[i].astroday) ? tomorrow : today; // prüfen temp = getAstroDate(astrotime.elements[i].fname, next_event); } else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen) next_event = (astrotime.elements[i].astroday) ? today : tomorrow; // prüfen temp = getAstroDate(astrotime.elements[i].fname, next_event); /* // Rudimente aus altem Skript zur Erinnerung -> Nachfrage bei Bluefox sonnenuntergang = getAstroDate("sunset", tomorrow); nacht = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate("night", today) : getAstroDate("night", tomorrow); nachtende = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate("night", tomorrow) : getAstroDate("night", today); sonnenaufgang = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate("sunrise", tomorrow) : getAstroDate("sunrise", today); // es ist vor Mitternacht (bzw. vor 23:XXUhr), dann morgen, sonst heute */ } setState(idAstroObject, checkSec(temp.toLocaleTimeString()) ); }, 3 * 1000); } // Zeit mit oder ohne Sekunden anzeigen function checkSec (zeit) { if (!sec) { var newString_arr = zeit.split(":"); var newString = newString_arr[0] + ":" + newString_arr[1]; return (newString); } else return (zeit); } ! function iterateAstrotimes() { for (var i = 0; i<astrotime.elements.length; 1/i++)/{/writeastrotimes(i);/}/astrotag/checken/schedule("*/*/*",/function/()/jede/minute/if/(isastroday)/setstate(idastrotag,/true);/(!isastroday)/false);/iterateastrotimes();/});/<e=""></astrotime.elements.length;>
Das Skript ist nun unterteilt in den Bereich Tageszeiten und den Bereich Astrozeiten. Der Unterschied?
In Tageszeiten kann man selbst mit Hilfe der Shift-Funktion Tageszeiten (hier 8 verschiedene) festlegen und bestimmen, wann sie beginnen und enden sollen.
Im Astroteil werden die tatsächlichen Astrozeit-Starts ermittelt und in Objekte geschrieben. Diese Objekte sind nun durchnumeriert, damit die Reihenfolge klarer wird.
Der Pfad zu den Objekten ist nun
~~[code]~~javascript.X/Astro/[/code]
Es gibt immernoch das Bool-Objekt ~~[i]~~Astrotag[/i]. Wenn die aktuelle Zeit zwischen Sonnenaufgang und -untergang ist, dann ist Astrotag.
Die Ermittlung der Daten übernehmen die Funktionen ~~[i]~~isAstroDay()[/i] (boolean) und ~~[i]~~getAstroDate()[/i]. Ich habe die Prüfung, ob die aktuelle Zeit vor Mitternacht liegt, jetzt mal auskommentiert. Mal sehen, wie sich das langfristig auswirkt.
Die Erstellung der Objekte beim ersten Durchlauf darf nicht länger als 3s dauern. Es gibt ein ~~[i]~~setTimeout()[/i], das man anpassen kann, wenn die Zeit nicht reicht.
Und die größte Änderung:
Alle Informationen über die Astrozeiten liegen nun in der Konstante ~~[i]~~astrotime[/i] als Objekt vor. Sie können so zentral an einer Stelle leicht erweitert oder geändert werden (Sprachen, Beschreibungen).
Eine Kleinigkeit:
Ich habe hier gelesen, dass einige User die Sekundenanzeige überflüssig finden. Um sie auszuschalten, einfach die Konstant ~~[i]~~sec[/i] auf ~~[i]~~false[/i] stellen (aktuell Zeile 20).
Viel Spaß!
Gruß,
Pix~~[color]~~27.2.2018 EDIT: neue Version einige Posts weiter: http://forum.iobroker.net/viewtopic.php ... 67#p129167[/color]