NEWS
[gelöst] Blockly - Temperatur senken bei Fenster auf
-
Hallo liebe Community,
ich benötige mal wieder eure Hilfe.
Ich bin aktuell dabei ein Skript zu erstellen, welches mir die Temperatur beim Fenster öffnen auf 6° absenkt und wenn alle Fenster wieder geschlossen sind, diese dann wieder auf die Ursprungstemperatur zurücksetzt. Mein Blockly Skript ist durch das viele Hin und Her probieren mittlerweile auch immer mehr komplexer geworden, das kann man bestimmt auch wieder ein bissel vereinfachen.
Bis jetzt hatte das Temperatur absenken sowie die Heizungssteuerung komplett die CCU3 übernommen, da das dort für mich als Laien und im reinen Homematic Umfeld recht einfach umgesetzt war. Durch den Einsatz unterschiedlichster Fensterkontakte out of Homematic ziehe ich jetzt alles in den iobroker um, also sowohl das Temperatur absenken als auch die Heizungssteuerung zu bestimmten Uhrzeiten.
Nun zum Blockly Skript:
Hierbei geht es um ein großes Fenster mit 3 einzelnen Fenstern welche eine Heizung steuern sollen.
Kurze Erklärung meiner Gedankengänge:
Der Trigger triggert die Datenpunkte State der Fensterkontakte ob die geändert wurden. Sobald einer auf 1, also offen geht, startet der Timeout (Im übrigen, mit nur 1nen Fenster funktioniert die ganze Geschichte auch tadellos). Und genau hier beginnt auch schon meine Problemstellung... Es gibt zusätzlich noch 2 Datenpunkte, welche über ein zusätzlich Blockly Skript befüllt werden:
öffnet und schließt man jetzt die Fenster zum Test willkürlich hintereinander wird beim ersten Mal der Datenpunkt Alle Fenster geschlossen auch richtig auf falsch gesetzt und der aktuelle Wert, welcher vorher am Thermostat eingestellt war (beispielweise 18°C)), wird auch richtig in Temperatur vor Fenster auf geschrieben. geht nun aber in der Zwischenzeit der Status kurz auf Alle Fenster geschlossen auf True und der Timeout wird nochmal angestoßen, schreibt er dann, sobald der Wert alle Fenster geschlossen auf False geht nicht den vorherigen Wert, sondern die 6°C, was nicht stimmen kann. Ich hoffe ich habe das Thema jetzt nicht zu konfus hier aufgeschrieben...
Zusätzlich gibt es noch ein Skript, welches zusätzlich noch nach den Datenpunkten schaut und ggf. auch einen befüllt. Hier ein Ausschnitt davon, da der Aufbau fortführend das Selbe bleibt:
Ich hoffe Ihr könnt mir den entscheiden Tipp geben, wie ich mein oberes Skript optimieren kann, sodass es dann wie gewünscht funktioniert.
Des Weiteren wäre es für mich auch noch sehr interessant zu wissen, ob man bestimmte Wiederholung, also bspw.: Wert vonObject ID Fensterk... = 1 oben je bspw 1 Fensterkontakt definiert und im Hauptskript dann nur auf den Namen zurückgreifen muss. Also oben jeweils 1x den Datenpunkt ausgewählt und diesen mit einen temporären Namen versehen (Fenster links) und im Hauptskript statt immer die jeweilige Object ID auszuwählen den temporären Namen ansprechen. Sodass man für das Skript beim kopieren dann nur die Datenpunkte 1x ändern muss und es läuft dann durch. Und nicht wie in meinen (schlechten) Beispiel 6x den Datenpunkten von jeden Fensterkontakt neu abklicken muss..
Vielen Dank schon mal im Voraus.
Beste Grüße
Heisenberg
-
@heisenberg0709 sagte: 3 einzelnen Fenstern welche eine Heizung steuern sollen.
Viel zu kompliziert gedacht. Es funktioniert mit einem Trigger:
-
@paul53: Vielen vielen Dank für deine Antwort.
Ich hatte dein Skript für einen neuen Gedankenanstoß zu Rate gezogen.
Das ist jetzt mein neues Skript, welches auch zu funktionieren scheint
Du kannst ja nochmal drüber schauen, ob dir nochmal ein Fehler auffällt, oder ob man es ggf. noch vereinfach kann.
Aber im Schnelltest hatte es soweit funktioniert.Was ich allerdings in deinem Skript nicht ganz verstanden habe ist die Variable soll geschlossen. Ich habe das mal soweit nachgebaut und die Variablen durch Datenpunkte ersetzt. Allerdings blieb dieser Datenpunkt dann immer unangetastet.
Beste Grüße
Heisenberg
-
@heisenberg0709 sagte: ob man es ggf. noch vereinfach kann.
Man kann: Es genügt "sonst" anstelle von "sonst falls". Der Vergleich mit 1 ist auch nicht nötig.
-
@paul53: Danke für deine schnelle Antwort.
ok, dann ist sozusagen bei falls immer der Wert true anzunehmen und 1 = true. Die Homematicdinger verstehen sonst nur 1 und 0.
Also Falls FK1 oder FK2 oder FK3 (ohne Vergleich) also true mache Steuerung auf 5°
und dann statt sonst falls NUR
Sonst mache ohne die Und Abfrage, weil bei dem sonst immer vom Gegenteil als beim ersten Falls ausgegangen wird, also false.
Habe ich das richtig verstanden?
Vielen Dank dir.
Beste Grüße
Heisenberg
-
@heisenberg0709 sagte: Habe ich das richtig verstanden?
Ja.
-
@heisenberg0709 sagte in Blockly - Temperatur senken bei Fenster auf:
Des Weiteren wäre es für mich auch noch sehr interessant zu wissen, ob man bestimmte Wiederholung, also bspw.: Wert vonObject ID Fensterk... = 1 oben je bspw 1 Fensterkontakt definiert und im Hauptskript dann nur auf den Namen zurückgreifen muss. Also oben jeweils 1x den Datenpunkt ausgewählt und diesen mit einen temporären Namen versehen (Fenster links) und im Hauptskript statt immer die jeweilige Object ID auszuwählen den temporären Namen ansprechen. Sodass man für das Skript beim kopieren dann nur die Datenpunkte 1x ändern muss und es läuft dann durch. Und nicht wie in meinen (schlechten) Beispiel 6x den Datenpunkten von jeden Fensterkontakt neu abklicken muss..
Ich habe mal so eine Variante als Beispiel für Dich erstellt, dabei habe ich mich so ungefähr an Deiner bisherigen Datenpunktstruktur orientiert.
Zum erstellen von Datenpunkten über das Blockly muss der Haken in den Einstellungen vom Javascript Adapter gesetzt sein.
Zum ausprobieren nimmst Du am Besten javascript.0, wenn bisher Deine erstellten Datenpunkte in 0_userdata.0 liegen.
Im Blockly selbst habe ich die eigentliche Logik deaktiviert, da ich nicht weiß ob das so passt, da kannst Du Deine Logik, oder die von @paul53 reinbauen. (Ich habe Heizgruppen auf der CCU, die funken mir bei probieren immer dazwischen)Hier musst Du Deine Datenpunkte auswählen
hier der Rest vom Blockly
-
@dslraser: Vielen vielen Dank dir.
Ich habe jetzt ein wenig herumgedoktort und habe dank deiner Hilfe nun auch mein Skript noch deutlich vereinfachen können. Der obere Teil deines Skripts war nur nochmal als Info, also das du Datenpunkte angelegt hast, richtig? Oder soll der dazu dienen, dass wenn ich mein Skript kopiere ich die anderen DP nicht immer händisch anlegen muss? Ich hatte dies bisweilen eigentlich immer kurz händisch gemacht, da es trotz alle dem im überschaubaren Rahmen blieb
Beim Rest hast du dann die jeweiligen Fensterkontakte/Heizungsthermostat/etc mit Datenpunkten ersetzt, sodass diese dann nur noch 1x im Skript vorkommen. Das gefällt mir sehr gut muss ich sagen. Bei denen reicht es auch aus, diese am Anfang, also beim Blocklystart auszulesen, da sich diese im Betrieb ja nicht mehr ändern? Insofern ich das richtig verstanden habe.
Hier nochmal mein neues Skript. Du kannst ja nochmal drüber schauen, ob du vielleicht noch irgendwelche Fehler entdeckst...
Vielen Dank dir.
Ich werde jetzt schon mal das Thema oben mit gelöst kennzeichen, da mir all meine Fragen schon zur vollsten Zufriedenheit perfekt beantwortet wurden. Sollte ich noch irgendetwas haben, würde ich mir dann hier in diesem Thema nochmal melden.
Beste Grüße
Heisenberg
-
@heisenberg0709 sagte in [gelöst] Blockly - Temperatur senken bei Fenster auf:
Der obere Teil deines Skripts war nur nochmal als Info, also das du Datenpunkte angelegt hast, richtig? Oder soll der dazu dienen, dass wenn ich mein Skript kopiere ich die anderen DP nicht immer händisch anlegen muss?
Der obere Teil legt die Datenpunkte über die Funktion und die Variablen selbst an.
Eigentlich muss dann immer nur der obere Teil für ein weiteres Blockly angepasst werden.EDIT: es sei denn weitere Räume/Blocklys haben mehr oder weniger Fenster als dieser Raum, dann musst Du das natürlich anpassen.
Wichtig ist auch das Dein eigener Datenpunkt eine Temperatur bzw. einen Wert enthält, die hast Du in dem Blockly beim ersten Start nicht/noch nicht.
Das Blockly wird auch nur funktionieren, wenn beim Start/Neustart des Blockly der soll Wert der Heizung nicht kleiner als 6 ist. (mein Datenpunkt zeigt bei Heizung aus z.B. nur 4.5 Grad an...)