NEWS
Script läuft nach Umzug auf anderen Server nicht mehr
-
Hey Leute,
ich habe zuletzt meinen Server aktualliert auf dem der ioBroker läuft. Nur ich habe das Problem, dass ein Script, zumindest habe ich es bei einem gemerkt, da nicht alle ständig bzw. Täglich eine Aufgabe haben. Zu meiner Vorgehensweise, ich habe auf dem alten Server ein komplettes Backup gemacht, auf dem neuen Server dieses wieder aufgespielt und gewartet, bis im Hintergrund alles mögliche nachinstalliert war. Im Anschluß habe ich die benötigten Adapter gestartet und gewartet, bis Messdaten und ähnliches geladen Waren.
Doch nun sollte das Script bei überschreiten der 25° und Helligkeit von über 2.500 Lux die Rollos runter fahren. Doch da tat sich heute nichts. Vielleicht kann mir jemand helfen.
Das Script:
/* Urlaubssteuerung für die Rollos, bei über 25 Grad fahren die Rollos runter, bei unter 25 Grad und wenn es Hell ist hoch */ var level = getState('hm-rpc.0.PEQ0181456.1.LEVEL').val; on('hm-rpc.1.0010D8A990A07B.1.ACTUAL_TEMPERATURE', function (dp) { let temp = dp.state.val; let licht = getState("hm-rpc.1.000D58A9915FBC.1.AVERAGE_ILLUMINATION").val; if(licht > 2500) { if (temp > 25) level = 25; else if (temp < 20) level = 100; if(level != getState('hm-rpc.0.PEQ0181456.1.LEVEL').val) { setState("hm-rpc.0.PEQ0181456.1.LEVEL", level); setStateDelayed("hm-rpc.0.PEQ0181557.1.LEVEL", level, 5000); /* setStateDelayed("hm-rpc.0.PEQ0181507.1.LEVEL", level, 10000); setStateDelayed("hm-rpc.0.OEQ2341971.1.LEVEL", level, 15000); */ setStateDelayed("hm-rpc.0.PEQ0181297.1.LEVEL", level, 20000); setStateDelayed("hm-rpc.0.PEQ0181518.1.LEVEL", level, 25000); setStateDelayed("hm-rpc.0.PEQ0181504.1.LEVEL", level, 30000); setStateDelayed("hm-rpc.0.PEQ0181520.1.LEVEL", level, 35000); setStateDelayed("hm-rpc.0.PEQ0181559.1.LEVEL", level, 40000); } } });
Die 2 Rollos die Auskommentiert sind, sind vom Kinderzimmer. Da muss ich mir noch was überlegen, dass diese im Zeitraum von 12 - 16 Uhr ignoriert werden. Also die sollen vor 12 Uhr und nach 16 Uhr automatisch mitlaufen. Aber das gucke ich mir im Nachgang an. Problem war, dass die Kinder beim Mittagsschlaf geweckt wurden, wenn plötzlich kälter wurde. War nicht ganz so cool. Den Schwellwert ab wann die Rollos wieder hoch gefahren werden sollen, habe ich reduziert. Da beim Original, was vorher so geplant war das Rollo x Mal hoch und runter fuhr. Vor dem Serverumzug lief alles noch wunderbar.
Und der ioBroker auf dem Alten Server ist gestoppt. Habe den Server selbst noch nicht ganz runter gefahren.
Eine Fehlermeldung zum Script gibt es im LOG nicht. Hat jemand von euch ggf. sowas schon mal erlebt und ggf. ein Tipp?
Michael
-
@raspido
Schreibe in Zeile 35 eine Log-Ausgabe, um zu sehen, was passiert.log('Temperatur: ' + temp + ' °C, Licht: ' + licht + ' lux, Rollos: ' + level + ' %');
-
@paul53 Soweit ich das richtig verstehe, sollte diese Zeile im Log oder unterm Script im Ereignismonitor was ausgeben. Nur leider gibt er dazu keine Infos aus.
Also ich finde keine Zeile mit "Temperatur", Licht oder der gleichen.
Nur Ereignisse, wie Script gestopt, gestartet und so.
Michael
-
@raspido sagte: Also ich finde keine Zeile mit "Temperatur", Licht oder der gleichen.
Du musst warten, bis der Trigger auslöst, also sich die Temperatur ändert.
-
@paul53 Okay dann warte ich mal und melde mich am Abend. Bis dahin sollte sich was tun.
-
@raspido
Im Tab "Objekte" werden die Werte der hm-rpc-Datenpunkte richtig angezeigt und aktualisiert? -
@paul53 Also bevor mir was aufgefallen ist, wurden die Werte nicht aktuallisiert. Wobei ich hatte das Gefühl, dass sich draußen bislang nicht viel geändert hatte. Aber naja das eine Problem gefunden und beseitigt. Also das Script an sich läuft wieder.
Bei den Adapter für Homematic war die Falsche Callback IP hinterlegt gewesen. Also der neue und der alte Server haben unterschiedliche IP Adressen und naja ist mir erst garnicht aufgefallen bzw. eingefallen.
Nur muss ich nun gucken, wie man es am einfachsten und besten lösen kann, dass die Rollos im Kinderzimmer (Die auskommentierten), nicht in dem Zeitraum Montag bis Freitag jeweils 12.00 Uhr bis 15.30 Uhr automatisch bewegen. In dem Zeitraum schlafen in der Regel die Tageskinder und die werden immer Wach wenn plötzlich das Rollo fährt.
Deshalb habe ich diese im Moment auskommentiert.
Michael
-
@raspido Du machst dir einfach einen Datenpunkt "Kinderzimmerrolladensperre" .
Den setzt du um 12 Uhr auf True und um 15:00 Uhr auf FalseUnd im Rolladenscript prüfst du vorm Schalten den Datenpunkt.
Das wäre eine Möglichkeit. Es gibst sich noch andere. -
@htrecksler Okay Danke für den Tipp.
Das "steuern" des Datenpunktes kann ich ja auch im gleichen Script packen oder spricht da was dagegen? Ein kleines Problem hab ich noch, wie bekomme ich die Aktuelle Uhrzeit? Ich habe in den Datenpunkten gewühlt und irgendwie noch nicht den gefunden, der "aktuell" ist
Michael
-
@raspido sagte: nicht in dem Zeitraum Montag bis Freitag jeweils 12.00 Uhr bis 15.30 Uhr automatisch bewegen
let wd = new Date().getDay(); if(compareTime('12:00', '15:30', 'not between') || wd == 0 || wd == 6) { }
-
@raspido z. B. mit einem
schedule("0 12 * * *", RolladenSperreSetzen);
schedule("0 15 * * *", RolladenSperreAufheben);
RolladenSperreSetzen bzw RolladenSperreAufheben wären in dem Fall Funktionen im Script in welchen dann der Datenpunkt auf TRUE bzw. FALSE gesetzt wird.
Der Vorteil das Ganze über einen DP zu steuern...Du kannst auch andere Ereignisse nutzen um das Fahren der Rolladen zu verhindern. Den DP kannst du ja jederzeit beeinflussen.
-
Ich habe das mit dem externen Datenpunkt gemacht. Ich denke das bringt mehr flexibiltät. Aber mal gucken ob das nun läuft, was ich da zusammengebaut habe.
Hier der Code zur Rollosteuerung:
/* Urlaubssteuerung für die Rollos, bei über 25 Grad fahren die Rollos runter, bei unter 25 Grad und wenn es Hell ist hoch */ var level = getState('hm-rpc.0.PEQ0181456.1.LEVEL').val; on('alias.0.Temperaturen.Draußen.ACTUAL', function (dp) { let temp = dp.state.val; let licht = getState("hm-rpc.1.000D58A9915FBC.1.AVERAGE_ILLUMINATION").val; if(licht > 2500) { if (temp > 25) level = 25; else if (temp < 20) level = 100; if(level != getState('hm-rpc.0.PEQ0181456.1.LEVEL').val) { setState("hm-rpc.0.PEQ0181456.1.LEVEL", level); setStateDelayed("hm-rpc.0.PEQ0181557.1.LEVEL", level, 5000); setStateDelayed("hm-rpc.0.PEQ0181297.1.LEVEL", level, 10000); setStateDelayed("hm-rpc.0.PEQ0181518.1.LEVEL", level, 15000); setStateDelayed("hm-rpc.0.PEQ0181504.1.LEVEL", level, 20000); setStateDelayed("hm-rpc.0.PEQ0181520.1.LEVEL", level, 25000); setStateDelayed("hm-rpc.0.PEQ0181559.1.LEVEL", level, 30000); //Kinderzimmer Rollos if(!getState('0_userdata.0.Hilfsdatenpunkte.Kinderzimmer_Rollo_Sperre')){ setStateDelayed("hm-rpc.0.PEQ0181507.1.LEVEL", level, 35000); setStateDelayed("hm-rpc.0.OEQ2341971.1.LEVEL", level, 40000); } } } log('Temperatur: ' + temp + ' °C, Licht: ' + licht + ' lux, Rollos: ' + level + ' %'); });
Und Hier ein Screenshot vom Blockly Code für die Steuerung des Datenpunktes:
Also wenn ich das noch richtig in Erinnerung habe aus der Vergangeheit, müsste das mit dem Abfragen des Zustands des Datenpunktes klappen. Ich habe den zur besseren Übersicht ans Ende gepackt. Also nicht wundern. So sind die ohne "Sonderprogramm" und mit "Sonderprogramm" bisschen von einander getrennt.
Michael
-
@raspido sagte: ob das nun läuft, was ich da zusammengebaut habe.
Das läuft nicht. Korrigiere Zeile 28:
if(!getState('0_userdata.0.Hilfsdatenpunkte.Kinderzimmer_Rollo_Sperre').val) {
-
@paul53 danke für den Hinweis.