NEWS
Subscribe/on Optimierung
-
Ich frage immer mehr Statusänderungen ab. Z. B. so:
/*Alarm extern EIN execute*/ on({ id:"hm-rega.0.1234.ProgramExecute", change: 'any' }, function () { setState("VIS.ExternAlarmZustandsanzeige", 1); log ("Setze EAZA auf 1", 'info'); setState (idSayIt, "Der externe Alarm wurde aktiviert!"); }); /*externer_alarm_an*/ on({ id:"hm-rega.0.11111", change: 'gt' }, function () { setState("VIS.ExternAlarmZustandsanzeige", 2); log ("Setze EAZA auf 2", 'info'); setState (idSayIt, "Der externe Alarm ist nun scharf!"); }); /*externer_alarm_aus*/ on({ id:"hm-rega.0.11111", change: 'lt' }, function () { setState("VIS.ExternAlarmZustandsanzeige", 0); log ("Setze EAZA auf 0", 'info'); setState (idSayIt, "Der externe Alarm wurde deaktiviert!"); });
Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann?
Z. B. die letzten beiden on's greifen ja auf die selbe CCU Variable zurück.
Denn irgendwann, befürchte ich, habe ich 100 von den On's
Was sagen die Profis?
Viele Grüße,
Fitti
3435_screenshot__21_.png -
Hallo Fitti,
@Fitti:Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann?
Z. B. die letzten beiden on's greifen ja auf die selbe CCU Variable zurück. `
ich kann dir nicht sagen, wieviel CPU-Last das so braucht. Ich habe ziemlich viele davon und merke keinen Geschweindigkeitsverlust verglichen mit Zeiten, als ich noch wenige hatte.Die Abfrage von Rega Daten ist nicht optimal. Der Rega Adapter aktualisisert nicht permanent, sondern in einem (einstellbaren) Intervall. Daher kommen die Daten eher schubweise.
Langfristig solltest du darüber nachdenken, die gesamte Logik in ioBroker zu portieren und die CCU nur noch als Hardwareschnittstelle zu den Homematic-Komponenten und Wartungszugang (zB für Direktverknüpfungen) sehen.
Ich habe das im ersten Quartal 2015 auch Schritt für Schritt, Programm für Programm gemacht. Ich habe CCU-Programme zuerst in ioBroker nachgebaut und dann erstmal deaktiviert. Als ich völlig sicher war, dass alles lief, habe ich sie gelöscht. Ich muss meine CCU nicht mehr neustarten. Nur bei FW-Updates und gelegentlich nach dem Anlernen von Komponenten. Das war früher leider nicht so. IoBroker bietet die Möglichkeit, durch einen weitere Javascript-Instanz eine Testumgebung für neue Skripte zu nutzen. Das macht das ganze System so stabil, auch wenn man viel probiert und entwickelt. Versuch das mal auf einer CCU :lol:
Also versuch mal, deine Alarmanlage in ioBroker Javascript nachzubauen. Wir helfen gern weiter.
Grüße,
Pix
-
Ich frage mich, ob ich das nicht eleganter - und vor allem auch Ressourcenschonender machen kann? `
Was die CPU-Last betrifft, ist Deine Lösung sicherlich optimal; bezüglich des Speicherverbrauchs eher nicht, aber Speicher ist heutzutage meist ausreichend vorhanden, denn er kostet fast nichts mehr.
@pix:Langfristig solltest du darüber nachdenken, die gesamte Logik in ioBroker zu portieren und die CCU nur noch als Hardwareschnittstelle zu den Homematic-Komponenten und Wartungszugang (zB für Direktverknüpfungen) sehen. `
So sehe ich das auch. Programmerweiterungen für die RegaHss per ioBroker sehe ich nicht als sinnvoll an.Nach und nach kann man die CCU-Programme nach ioBroker portieren. Per ioBroker-Javascript sollte besser nur auf die HM-RPC-Schnittstelle(n) zugegriffen werden.
@Fitty:…die letzten beiden on's greifen ja auf die selbe CCU Variable zurück. `
Ob man das sinnvoll mit einem Auslöser machen kann, hängt vom Datenpunkttyp ab ("boolean" oder "number") und falls "number" davon, wie welche Werte verändert werden. -
Danke erst einmal für die Antworten! ~~![](</s><URL url=)<link_text text="http://www.smiliesuche.de/smileys/grins ... s-0016.gif">http://www.smiliesuche.de/smileys/grinsende/grinsende-smilies-0016.gif</link_text>" />
Habe "nur" 1GB auf der Banane - nach längerer Laufzeit ist dann nur noch 340MB frei. Mir ist nicht bewusst, ob man hier RAM erweitern kann? Ne, denke nicht.
Welche Hardware nutzt ihr denn so? Im Moment läuft die CCU2 sehr gut. Trotz der knapp 80 Skripte und 170 Aktoren.
Mit ioBroker hatte ich mal hier und da schon ein Problem. Ich schiebe es dann auf die Banane. Netzteil war auch schon ein Sorgenkind. Ich glaube aber, dass der Speicher irgendwann raus rennt. Dann ist das System einfach nicht mehr erreichbar.
Ob man das sinnvoll mit einem Auslöser machen kann, hängt vom Datenpunkttyp ab ("boolean" oder "number") und falls "number" davon, wie welche Werte verändert werden. `
In diesem Fall ist es boolean.Dann wäre der Code so ungefähr? (ist von unterwegs mal zusammengeschrieben, wie ich es mir denke. Kann gerade nicht testen - geht aber um das prinzipielle)
/*externer_alarm_an/aus*/ on({ id:"hm-rega.0.11111", change: 'any' }, function (extern_alarm_wert) { if (extern_alarm_wert === true ) { setState("VIS.ExternAlarmZustandsanzeige", 2); log ("Setze EAZA auf 2", 'info'); setState (idSayIt, "Der externe Alarm ist nun scharf!"); } else { setState("VIS.ExternAlarmZustandsanzeige", 0); log ("Setze EAZA auf 0", 'info'); setState (idSayIt, "Der externe Alarm wurde deaktiviert!"); } });
Viele Grüße,
Fitti~~
-
Hallo Fitti,
die meisten werden den RasPi2 nutzen. Der hat auch nur 1GB RAM. Ich habe bei Cubietruck und Cubox i4 mit je 2GB RAM den subjektiven Eindruck, dass es dort runder läuft, auch wenn die nur eine dualcore CPU besitzen.
Das RAM könnte also tatsächlich eine Rolle spielen. Erweitern kann man es IMHO bei keinem einplatinencomputer. Wenn dann das swappen anfängt, hängt alles an der Geschwindigkeit und Qualität der swap Partition.
Gruß
Rainer
Gesendet von meinem LIFETAB_S785X mit Tapatalk
-
In diesem Fall ist es boolean.
Dann wäre der Code so ungefähr? `
Nicht ganz., sondern:/*externer_alarm_an/aus*/ on("hm-rega.0.11111", function (dp) { if (dp.newState.val) { setState("VIS.ExternAlarmZustandsanzeige", 2); log ("Setze EAZA auf 2", 'info'); setState (idSayIt, "Der externe Alarm ist nun scharf!"); } else { setState("VIS.ExternAlarmZustandsanzeige", 0); log ("Setze EAZA auf 0", 'info'); setState (idSayIt, "Der externe Alarm wurde deaktiviert!"); } });
Wenn das Programm bezüglich Speicherverbrauch optimiert werden soll, dann etwa so:
var wert; var text; function ausgabe() { setState("VIS.ExternAlarmZustandsanzeige", wert); log ("Setze EAZA auf " + wert, 'info'); setState (idSayIt, "Der externe Alarm " + text); } /*Alarm extern EIN execute*/ on({id:"hm-rega.0.1234.ProgramExecute", change: 'any' }, function () { wert = 1; text = "wurde aktiviert!"; ausgabe(); }); /*externer_alarm_an/aus*/ on("hm-rega.0.11111", function (dp) { if (dp.newState.val) { wert = 2; text = "ist nun scharf!"; } else { wert = 0; text = "wurde deaktiviert!"; } ausgabe(); });
Eine echte Speicherersparnis hat man aber wohl nur, wenn die Scripte compiliert werden.
-
Nicht ganz., sondern:
… `
Danke. Werde das heute Abend mal ausprobieren. ~~![](</s><URL url=)<link_text text="http://www.smiliesuche.de/smileys/zwink ... s-0022.gif">http://www.smiliesuche.de/smileys/zwinkernde/zwinkernde-smilies-0022.gif</link_text>" />
Fitti~~