NEWS
REDIS will be back
-
Also ich habe bis auf den JavaScript Adapter alles auf dem aktuellen Stand.
Beim JavaScript habe ich die 2.3 installiert.
Nach den ganzen Updates gestern habe ich den redis nochmals gelöscht und dann neu installiert .
Nach der von Bluefox empfohlen Aenderung des Bindings läuft es jetzt augenscheinlich sauber.
Ich hatte Anfangs diverse gemeldete JavaScript Fehler , welche ich jedoch darauf zurückführen würde, dass bei diversen Objekten noch kein Inhalt da war, denn das hat sich nach kurzer Zeit beruhigt.
Ich habe allerdings nach allen Installationen jeweils immer einen Reboot gemacht.
Bei mir läuft alles was mit Hardware , Kommunikation und History (sql) zu tun hat auf den Host01. Dort rennt auch der Redis.
Auf Host02 läuft alles was mit vis zu tun hat, dieser arbeitet als Slave und ebenfals der 3. Host, welcher nur für Sayit und Squeezbox zuständig ist.
Wenn Fehlermeldungen kommen, dass Datenpunkte nicht vorhanden sind würde ich mit der cli mal versuchen zu schauen, ob diese als Key schon vorhanden sind.
Gruß
Silvio
-
Habe heute nach update von host auf 0.11.0 und allen anderen Update versucht redis zu starten.
Der javascript adapter wird laufend neu gestartet
wenn ich redis ausschalte geht es ?
Gruß Stephan `
Was steht im Logs?Ich vermute, dass da bei
getState('blabla').val
Abstürzt.
Ich werde in der nächsten version dann getState abändern:
> If state does not exist, it will be returned following object: ****{val: null, notExist: true}****
-
Hallo Bluefox es kommt folgender Log eintrag
Gruss Stephan
-
Hallo Bluefox es kommt folgender Log eintrag
filename="redis.JPG" index="0">~~
Gruss Stephan `
So wie ich vermutet habe.Du musst checken ob
getState('blbabla') !== null
-
Hallo,
ich habe heute mal auf redis umgeschwenkt, es funktioniert auch alles gut und sehr performant. Allerdings habe ich eine sehr große Datenstruktur unterhalb von javascript. Diese Werte werden nicht automatisch wieder gefüllt. Gibt es eine Möglichkeit alle states vorher zu exportieren und nach dem Wechsel auf redis wieder einzuspielen? Über den Struktur Ex-/Import wird leider nur die Struktur geschrieben, nicht aber die values. Durch die fehlenden Values laufen natürlich die meisten meiner Skripte nicht und es werden somit auch die Daten nicht neu gefüllt.
Danke und Gruß
-
Hallo,
ich habe heute mal auf redis umgeschwenkt, es funktioniert auch alles gut und sehr performant. Allerdings habe ich eine sehr große Datenstruktur unterhalb von javascript. Diese Werte werden nicht automatisch wieder gefüllt. Gibt es eine Möglichkeit alle states vorher zu exportieren und nach dem Wechsel auf redis wieder einzuspielen? Über den Struktur Ex-/Import wird leider nur die Struktur geschrieben, nicht aber die values. Durch die fehlenden Values laufen natürlich die meisten meiner Skripte nicht und es werden somit auch die Daten nicht neu gefüllt.
Danke und Gruß `
Leider momentan nicht.Aber ich kann mir gut vorstellen einen JS-Skript zu schreiben welches alle States ausliest und als JSON speichert.
Und auch ein Skript welches dann bei REDIS die Werte einspielt. Sollte 10 Zeilen sein. Vielleicht hilft dir jemand.
-
Hallo,
ich habe heute mal auf redis umgeschwenkt, es funktioniert auch alles gut und sehr performant. Allerdings habe ich eine sehr große Datenstruktur unterhalb von javascript. Diese Werte werden nicht automatisch wieder gefüllt. Gibt es eine Möglichkeit alle states vorher zu exportieren und nach dem Wechsel auf redis wieder einzuspielen? Über den Struktur Ex-/Import wird leider nur die Struktur geschrieben, nicht aber die values. Durch die fehlenden Values laufen natürlich die meisten meiner Skripte nicht und es werden somit auch die Daten nicht neu gefüllt.
Danke und Gruß `
Leider momentan nicht.Aber ich kann mir gut vorstellen einen JS-Skript zu schreiben welches alle States ausliest und als JSON speichert.
Und auch ein Skript welches dann bei REDIS die Werte einspielt. Sollte 10 Zeilen sein. Vielleicht hilft dir jemand. `
ok. Habe mir jetzt "Quick&Dirty" die setState befehle ins Log ausgeben lassen und nach der Umstellung in ein Skript gepackt. Nu sind alle States wieder da und regis läuft fehlerfrei bis jetzt.
-
Kannst Du Dein quick & Dirty Skript posten?
Gesendet von iPad mit Tapatalk
-
Kannst Du Dein quick & Dirty Skript posten?
Gesendet von iPad mit Tapatalk `
Hab mich jetzt noch kurz mit dem Schreiben in eine Datei befasst und folgendes Skript genutzt:
var fs = require('fs'); var cacheSelectorState = $('state[state.id=javascript.0.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; string = "setState('"+id+"', '"+val+"');\n"; fs.appendFileSync("/opt/iobroker/states.txt", string); });
Damit werden alle states aus javascript.0.* in die Datei /opt/iobroker/states.txt als setState Kommando geschrieben. Diese Kommandos kann man dann nach der Umstellung auf redis einfach in ein neues Skript packen und einmalig ausführen.
-
perfekt!
Danke!!
-
string = "setState('"+id+"', '"+val+"');\n"; ```` `
Damit sind alle Werte nach der Abarbeitung der setState() vom Typ "string". Das dürfte einige Warnungen des JS-Adapters erzeugen und Probleme machen, wenn man mit den Werten rechnen will.
-
string = "setState('"+id+"', '"+val+"');\n"; ```` `
Damit sind alle Werte nach der Abarbeitung der setState() vom Typ "string". Das dürfte einige Warnungen des JS-Adapters erzeugen und Probleme machen, wenn man mit den Werten rechnen will. `
var fs = require('fs'); var cacheSelectorState = $('state[state.id=javascript.0.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; type = getObject(id).common.type; if(type == "number") { string = "setState('"+id+"', "+val+");\n"; } else { string = "setState('"+id+"', '"+val+"');\n"; } fs.appendFileSync("/opt/iobroker/states.txt", string); });
So kann man auch noch den Type abfragen und entsprechend den String ändern. Das hatte ich noch nicht bedacht.
Wie gut, dass es Foren gibt
-
So kann man auch noch den Type abfragen und entsprechend den String ändern. Das hatte ich noch nicht bedacht. `
Fehlt noch der Test auf Type "boolean". Oder besservar fs = require('fs'); var cacheSelectorState = $('state[state.id=javascript.0.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; var zk = "setState('"+id+"', "+val+");\n"; if(typeof val === "string") zk = "setState('"+id+"', '"+val+"');\n"; fs.appendFileSync("/opt/iobroker/states.txt", zk); });
-
So kann man auch noch den Type abfragen und entsprechend den String ändern. Das hatte ich noch nicht bedacht. `
Fehlt noch der Test auf Type "boolean". Oder besservar fs = require('fs'); var cacheSelectorState = $('state[state.id=javascript.0.*]'); cacheSelectorState.each(function (id, i) { var val = getState(id).val; var zk = "setState('"+id+"', "+val+");\n"; if(typeof val === "string") zk = "setState('"+id+"', '"+val+"');\n"; fs.appendFileSync("/opt/iobroker/states.txt", zk); }); ```` `
Dabei fallen aber bei mir wieder werte durch die als "number" gespeichert sind.
-
Dabei fallen aber bei mir wieder werte durch die als "number" gespeichert sind. `
Sind die Werte wirklich als "number" gespeichert oder ist nur common.type = "number" ?typeof val ermittelt den tatsächlich gespeicherten Typ.
-
Dabei fallen aber bei mir wieder werte durch die als "number" gespeichert sind. `
Sind die Werte wirklich als "number" gespeichert oder ist nur common.type = "number" ?typeof val ermittelt den tatsächlich gespeicherten Typ. `
Jap. typeof val liefert für die Werte number zurück. Gerade getestet.
-
Dabei fallen aber bei mir wieder werte durch die als "number" gespeichert sind. `
Weshalb dann das ? -
Ich hab da mal ne frage! Lässt sich auch n externer REDIS - Server einbinden? Ich hab iobroker auf einen pi laufen und könnte einen REDIS-Server auf der Synology betreiben! Geht sowas und würde sowas Sinn machen?
Gruß Johnny
-
Dem iobroker ist am Ende egal wo der läuft. Du gibts ja eine IP und nen Port an und dahin verbindet er sich.
Also: sollte kein Problem sein.
"localhost" hat ggf weniger Netzwerklatenz, aber das ist quasi auch schon alles
-
Danke für die Info! Jetzt bloß noch ne frage, wo stelle ich bei iobroker dann die IP und den Port für den redis ein?
Gruß Johnny