NEWS
Blocky - was mache ich falsch?
-
Hallo an Alle,
was mache ich hier nur wieder falsch? Prinzipiell funktioniert es, leider nicht zu 100%.
Soll: Aktor soll bei Bewegung schalten und dann wieder ausgehen. Das Ganze aber nur zwischen Sonnenuntergang und Sonnenaufgang.
Ist: Aktor schaltet bei Bewegung, aber den ganzen Tag. D.h. die Eingrenzung zwischen Sonnenuntergang und Sonnenaufgang funktioniert nicht.
Sicherlich ist die Lösung nicht schwer, komme aber nicht drauf. Wahrscheinlich ist der zeitliche Block an der falschen Stelle.
Viele Grüße
Balu
1525_1.jpg -
Den Trigger würde ich auf „aktualisiert“ setzen. Den ersten „falls“-Baustein, der den Strahler prüft, würde ich mit „und“ ergänzen und dort die Astro Funktion hinziehen. Somit fällt der zweite verschachtelte „falls“-Baustein weg. Dann steuerst Du den Strahler mit wahr. Zusätzlich noch einen weiteren Steuer-Baustein, der den Strahler verzögert um 30 Minuten ausschaltet.
So sparst Du Dir auch den kompletten zweiten Trigger.
Probier mal und gib gern Rückmeldung.
Gesendet von iPhone mit Tapatalk
-
Hallo Stefan,
danke für deinen Input. Jetzt läuft es (Umsetzung siehe Bild). Habe zum Testen die Geräte verändert und Sonnenuntergang und -aufgang vertauscht..
Mal schauen ob es bei Sonnenuntergang funktioniert.
Viele Grüße
Balu
1525_2.jpg -
Das Problem im ersten Bild war, dass der "steuere" Block nicht in der zweiten "falls" Klammer drin war,, deshalb wurde das zweite "falls" nicht beachtet! An der Lösung kannst du ja sehen, das es jede Menge Wege nach Rom gibt!
Enrico
-
Kann es sein, dass die Astro-Funktion nur einmal nach Script-Start funktioniert?
Alle meine Scripte die bei Sonnenuntergang starten sollen, bleiben ohne Funktion.
Kann das jemand bestätigen oder geht es nur mir so?
Gruß Balu
-
Zeig doch mal bitte ein Beispiel.
Enrico
-
-
Hallo Enrico,
hier zwei Beispiele (Sonnenuntergang bei mir hier 16:32)
Gruß Balu
1525_1.jpg
1525_2.jpg -
Ist das ein HM Bewegungsmelder?
Die trigger ich anders.
Pack doch mal einen Debug-Baustein in den Trigger.
Dann kannst Du im LOG sehen ob der überhaupt startet.
Dann schau doch mal ob Deine Astrozeiten stimmen.
Export:
!
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="debug" id="M-vD.JjX#wC?S3qGe/BB" x="-687" y="-12"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="+84Za%BiKQHPNHbyG(N^"><field name="TEXT">test</field></shadow> <block type="convert_from_date" id="0,:_rdSmLn9IQHV6?i2_"><mutation format="false" language="false"></mutation> <field name="OPTION">hh:mm</field> <value name="VALUE"><block type="time_astro" id="Ac`+=HqFPWPrrICLXt7f"><field name="TYPE">sunset</field> <field name="OFFSET">0</field></block></value></block></value> <next><block type="debug" id="]V7r;LFZBPjks8Pj:xs+"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="+84Za%BiKQHPNHbyG(N^"><field name="TEXT">test</field></shadow> <block type="convert_from_date" id="-uXXdCJ*@o|n[Oa,X1-9"><mutation format="false" language="false"></mutation> <field name="OPTION">hh:mm</field> <value name="VALUE"><block type="time_astro" id="T_^j1b0hI*c[_eG%y-P+"><field name="TYPE">sunrise</field> <field name="OFFSET">0</field></block></value></block></value></block></next></block></xml> !
Und "STATE" ist meist wahr/unwahr true/false.
Grüße
-
Hallo,
hab es mal abgeändert (mit Debug):
Ergebnis:
17:38:57.518 [info] javascript.0 Stop script script.js.common.Licht_AZ_Tuer 17:38:57.535 [info] javascript.0 Start javascript script.js.common.Licht_AZ_Tuer 17:38:57.535 [info] javascript.0 script.js.common.Licht_AZ_Tuer: false 17:38:57.535 [info] javascript.0 script.js.common.Licht_AZ_Tuer: Tue Nov 28 2017 07:54:52 GMT+0100 (Mitteleuropäische Zeit) 17:38:57.535 [info] javascript.0 script.js.common.Licht_AZ_Tuer: Tue Nov 28 2017 16:34:07 GMT+0100 (Mitteleuropäische Zeit) 17:38:57.535 [info] javascript.0 script.js.common.Licht_AZ_Tuer: registered 0 subscriptions and 0 schedules
Astrozeiten sollten also stimmen. Und bzgl. dem Bewegungsmelder: ja, es ist einer von HM.
Gruß Balu
1525_3.jpg -
Hab jetzt nur mal die Astrozeiten ausgewertet. Es muss wohl an der ersten Abfrage liegen. Die aktuelle Zeit liegt dementsprechend nicht dazwischen. Nur wieso?
Sonnenuntergang, Sonnenaufgang und aktuelle Zeit passen.
- 17:50:26.215 [info] javascript.0 Stop script script.js.common.Licht_AZ_Tuer_Test
17:50:26.220 [info] javascript.0 Start javascript script.js.common.Licht_AZ_Tuer_Test 17:50:26.220 [info] javascript.0 script.js.common.Licht_AZ_Tuer_Test: false 17:50:26.220 [info] javascript.0 script.js.common.Licht_AZ_Tuer_Test: 17:50:26 17:50:26.220 [info] javascript.0 script.js.common.Licht_AZ_Tuer_Test: Tue Nov 28 2017 07:54:52 GMT+0100 (Mitteleuropäische Zeit) 17:50:26.220 [info] javascript.0 script.js.common.Licht_AZ_Tuer_Test: Tue Nov 28 2017 16:34:07 GMT+0100 (Mitteleuropäische Zeit) 17:50:26.220 [info] javascript.0 script.js.common.Licht_AZ_Tuer_Test: registered 0 subscriptions and 0 schedules
Gruß Balu
1525_4.jpg -
Das sieht ja schon mal gut aus.
Die Ausgabe von "false" ist Dir auch klar?
Das ist das Ergebnis von Deiner Bedingung "Wert von xyz =0 <u>UND</u> Zeit zwischen …....."
Bei einer UND Bedingung müssen BEIDE Aussagen WAHR sein.
Da Deine Lampe wohl aus war (LEVEL=0) stimmt die zweite Bedingung nicht.
Und da haben wir's.
Ist die aktuelle Zeit zwischen Sonnenuntergang und Sonnenaufgang? -->Ergibt immer FALSE
Zeitbereiche die über den Tageswechsel gehen muss man anders abfragen.
Liegt aktuelle Zeit zwischen Sonnenuntergang und 23:59
<u>ODER</u>
Liegt die aktuelle Zeit zwischen 00:00 und Sonnenaufgang
Grüße
-
Mit Zeiten arbeiten ist recht kompliziert.
Falls Du mehrere Sachen mit Sonnenaufgang und -untergang machen möchtest, schau Dir mal dieses Blockly an.
http://forum.iobroker.net/viewtopic.php … tro#p48209
Grüße
-
Habe es jetzt so umgesetzt und funktioniert erst einmal. Sollte dann hoffentlich auch nach 00:00 Uhr gehen
Danke für deine Hilfe.
Eine andere Frage: wie kann ich Werte in einer Variablen speichern? Im konkreten Fall den Wert von "Sonnenmittag". Am liebsten wäre mir, wenn der Wert in einen Datenpunkt geschrieben werden würde. So wie ich es versuche funktioniert es nicht. Muss ich zuerst eine Variable anlegen oder geschieht das automatisch?
Oder kann ich die Werte aus dem Skript
// Astrozeiten für heute - V1.0 log("====================="); log("Astro Werte für heute"); log("====================="); //----------------------------------------------------------------- var nightEnd = getAstroDate("nightEnd"); log(" (0) nightEnd (Ende der Nacht)........................: " + nightEnd.toLocaleTimeString()); var nauticalDawn = getAstroDate("nauticalDawn"); log(" (1) nauticalDawn (naut. Dämmerung Morgens)...........: " + nauticalDawn.toLocaleTimeString()); var dawn = getAstroDate("dawn"); log(" (2) dawn (Dämmerung Morgens).........................: " + dawn.toLocaleTimeString()); var sunrise = getAstroDate("sunrise"); log(" (3) sunrise (Sonnenaufgang)..........................: " + sunrise.toLocaleTimeString()); var sunriseEnd = getAstroDate("sunriseEnd"); log(" (4) sunriseEnd (Ende des Sonnenaufgangs).............: " + sunriseEnd.toLocaleTimeString()); var goldenHourEnd = getAstroDate("goldenHourEnd"); log(" (5) goldenHourEnd (Ende der Golden Hour VM)..........: " + goldenHourEnd.toLocaleTimeString()); var solarNoon = getAstroDate("solarNoon"); log(" (6) solarNoon (Mittag)...............................: " + solarNoon.toLocaleTimeString()); var goldenHour = getAstroDate("goldenHour"); log(" (7) goldenHour (Start der Golden Hour NM)............: " + goldenHour.toLocaleTimeString()); var sunsetStart = getAstroDate("sunsetStart"); log(" (8) sunsetStart (Start des Sonnenuntergangs).........: " + sunsetStart.toLocaleTimeString()); var sunset = getAstroDate("sunset"); log(" (9) sunset (Sonnenuntergang).........................: " + sunset.toLocaleTimeString()); var dusk = getAstroDate("dusk"); log("(10) dusk (Dämmerung Abends)..........................: " + dusk.toLocaleTimeString()); var nauticalDusk = getAstroDate("nauticalDusk"); log("(11) nauticalDusk (naut. Dämmerung Abends)............: " + nauticalDusk.toLocaleTimeString()); var night = getAstroDate("night"); log("(12) night (Start der Nacht)..........................: " + night.toLocaleTimeString()); var nadir = getAstroDate("nadir"); log("(13) nadir (Mitternacht)..............................: " + nadir.toLocaleTimeString()); log("====================="); var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); var tomorrowNight = getAstroDate("night", tomorrow); log("Night starts tomorrow at " + tomorrowNight.toLocaleTimeString());
automatisch in Datenpunkte schreiben? Im Log zeigt er mir folgende Werte an:
18:35:33.488 [info] javascript.0 Stop script script.js.common.Astrozeiten 18:35:33.495 [info] javascript.0 Start javascript script.js.common.Astrozeiten 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: ===================== 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: Astro Werte für heute 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: ===================== 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (0) nightEnd (Ende der Nacht)........................: 06:01:26 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (1) nauticalDawn (naut. Dämmerung Morgens)...........: 06:39:20 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (2) dawn (Dämmerung Morgens).........................: 07:18:50 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (3) sunrise (Sonnenaufgang)..........................: 07:54:52 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (4) sunriseEnd (Ende des Sonnenaufgangs).............: 07:58:43 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (5) goldenHourEnd (Ende der Golden Hour VM)..........: 08:47:20 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (6) solarNoon (Mittag)...............................: 12:14:29 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (7) goldenHour (Start der Golden Hour NM)............: 15:41:39 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (8) sunsetStart (Start des Sonnenuntergangs).........: 16:30:16 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (9) sunset (Sonnenuntergang).........................: 16:34:07 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (10) dusk (Dämmerung Abends)..........................: 17:10:09 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (11) nauticalDusk (naut. Dämmerung Abends)............: 17:49:39 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (12) night (Start der Nacht)..........................: 18:27:33 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: (13) nadir (Mitternacht)..............................: 00:14:29 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: ===================== 18:35:33.496 [info] javascript.0 script.js.common.Astrozeiten: Night starts tomorrow at 18:27:08
Gruß Balu
1525_6.jpg
1525_5.jpg -
Eine andere Frage: wie kann ich Werte in einer Variablen speichern? `
Mit Blockly globale Variablen (State) geht mit dem Baustein "Zustand erzeugen".
Die findest Du dann unter Objekte/Javascrip.0.
Ich habe Dir mal ein Beispiel gemacht.
Script 1x Starten und wieder beenden.
Damit werden die Variablen angelegt.
Export:
!
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="create" id="AV^rbElg]V*Y7a6{.a]L" x="63" y="113"><field name="NAME">Sonnenaufgang</field> <statement name="STATEMENT"><block type="create" id="L`pgki4hz7qYrBas|sg5"><field name="NAME">Sonnenuntergang</field></block></statement></block> <block type="comment" id="zpl3%ouxz+|Kzu/{{QVW" x="83" y="234"><field name="COMMENT">Jeden Tag um 00:01 Uhr</field> <next><block type="schedule" id="u,*D2BbzoUO6VN,jtjVN"><field name="SCHEDULE">1 0 * * *</field> <statement name="STATEMENT"><block type="control" id="K/koHmN?NeusI_YfMw]8"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Sonnenaufgang</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="time_astro" id="X?^;i?qe+k|A/B.Eeo!E"><field name="TYPE">sunrise</field> <field name="OFFSET">0</field></block></value> <next><block type="control" id="B)]VVSxyMSuzRP0|NQej"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Sonnenuntergang</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="time_astro" id="e88~:IM:Isfm)QVjN#d#"><field name="TYPE">sunset</field> <field name="OFFSET">0</field></block></value></block></next></block></statement></block></next></block></xml> !
Das Script startet immer um 00:01 Uhr und füllt die Variablen mit den aktuellen Astrozeiten.
Kannst Du beliebig erweitern.
Grüße
-
Danke, echt klasse wie einem geholfen wird, danke rantanplan. Werde ich später mal umsetzen.
Gruß Balu
-
In deinem Post mit den vielen Ausschnitten ist bei Bild 5 ein Fehler zu sehen.
Da ist der ausführende Teil unter der "falls"-Bedingung, nicht in der "falls"-Bedingung. Und dann noch, ist da ein Dimmer an den LED-Spots? Wenn nicht muss da wahr oder eben für aus false rein. Oder soll das für die Verzögerung sein??
Enrico
Edit: Ok, ich habe grad gesehen, dass da ja LEVEL steht, also Dimmer! :oops: Aber soll das Licht sofort beim Schließen der Tür wieder ausgehen?
-
Danke für den Hinweis, werde es ändern.
An den LED-Spots hängt ein Dimmer, richtig. Und die Spots sollen nur auf 30% hochfahren. Dass es gleich wieder ausgehen soll ist richtig (Tür schließen - Licht aus)
Gruß Balu
-
Also ohne näher zu schauen, muss das erste steuere oben in die zange geschoben werden, nicht darunter
Gesendet von meinem F5121 mit Tapatalk