NEWS
Wichtiger Hinweis für Redis Installationen!
-
Hi,
English version below ...
wer ioBroker mit Redis einsetzt - vor allem wenn auch die Objects im Redis liegen - muss bitte sicherstellen das eine Systemeinstellung korrekt gesetzt ist. Auf diese haben wir leider keinen direkten Einfluss weil er von dem Betriebssystem abhängt wo der Redis-Server installiert ist und läuft.
Am Ende geht es um die eingestellte Locale des Systems. Die Locale hat einen Einfluss wie im Redis Zeichenketten verglichen werden, was ggf zu falschen Antworten führen kann.
Systemeinstellung testen
Um zu testen ob etwas geändert werden muss gibt es zwei Wege:
1.) Über
redis-clian der Kommandozeile die Redis-Shell öffnen und dannEVAL "return 'c-i.t' >= 'c.' and 'c-i.t' < 'c.香'" 1 1ausführen. Wenn das Ergebnis (nil) ist 8siehe Grafik unten) ist alles ok und nichts muss geändert werden. Sollte das Ergebnis allerdings "1" sagen, so ist die Locale falsch eingestellt und muss korrigiert werden2.) An einer normalen SSH Shell
localeeingeben und schauen was bei "LANG" gesetzt ist, wenn die Ausgabe "LANG=C" (oder "LANG=" (nichts)) enthält, noch schauen ob bei "LC_ALL" etwas gesetzt ist. Falls eins davon zB "en-GB.UTF-8" oder "de-DE.UTF-8" oder ein anderer String als "C" bzw "leer" ist , so muss dieser korrigiert werden.So ist es ok!

Systemeinstellung korrigieren
Um die Einstellung zu korrigieren gibt es drei Optionen
Option 1: Konfiguration Redis-Server anpassen
Dazu muss das Service-File des Redis-Services editiert werden.
- Hierzu mittels
systemctl status redis-serverden Pfad des Service Files rausfinden

- Dann das Service File editieren mit dem Texteditor (und mit sudo) Eurer Wahl (im Falle hier ist es in /lib/systemd/system/redis-server.service). Dort unter [Service] (das gibts schon) eine Zeile einfügen, dass es dann so aussieht:
... [Service] Environment="LC_ALL=C" ...- Danach mittels
sudo systemctl daemon-reloaddas Service aktualisieren das die Änderungen bekannt sind - Mit
sudo systemctl restart redisden Dienst neu starten oder Rebooten.
Danach bitte Test wiederholen.
Option 2: Systemweite Änderung
Hierzu gilt aber zu bedenken das das ggf auch andere Auswirkungen haben kann (nicht auf ioBroker! aber ggf auf andere Software). Wenn auf dem System nur ioBroker und Redis läuft oder nur der Redis dann ist das ggf der einfachste Weg.
sudo localectl set-locale LANG=CDann Rebooten. Dann gern nochmal das obige testen, was jetzt gefixt sein sollte.
Wir planen das mit js-controller 4.1 (Q4/22) das zu prüfen und die User darauf hinzuweise, bis dahin muss es allerdings so reichen :-)
Option 3: via Redis Config:
siehe https://forum.iobroker.net/post/1114246
English version:
Hi,
if you use ioBroker with Redis - especially if the objects are located in Redis - please make sure that one system setting is set correctly. Unfortunately we have no direct influence on this because it depends on the operating system where the Redis server is installed and running.
At the end it is about the set locale of the system. The locale has an influence on how strings are compared in Redis, which can lead to wrong answers.
Test system settings
To test if something has to be changed there are two ways:
-
Open the Redis shell via
redis-cliat the command line and thenEVAL "return 'c-i.t' >= 'c.' and 'c-i.t' < 'c.香'" 1 1execute. If the result is (nil) (see graphic below) everything is ok and nothing needs to be changed. However, if the result says "1", then the locale is set incorrectly and needs to be corrected. -
At a normal SSH shell type
localeand look what is set at "LANG", if the output contains "LANG=C" (or "LANG=" (nothing)), still look if something is set at "LC_ALL". If one of them is e.g. "en-GB.UTF-8" or "de-DE.UTF-8" or another string than "C" or "empty" it must be corrected.
So it is ok!

Correct system setting
There are three options to correct the setting
Option 1: Adjust the configuration of the Redis server.
To do this, the service file of the Redis service must be edited.
- Use
systemctl status redis-serverto find out the path of the service file.

- Then edit the service file with the text editor (and with sudo) of your choice (in the case here it is in /lib/system/system/redis-server.service). There under [Service] (that already exists) insert a line, that it looks like this:
... [Service] Environment="LC_ALL=C" ...- Afterwards with
sudo systemctl daemon-reloadupdate the service so that the changes are known. - Restart or reboot the service with
sudo systemctl restart redis.
After that please repeat the test.
Option 2: System wide change
But keep in mind that this may have other effects (not on ioBroker! but possibly on other software). If the system runs only ioBroker and Redis or only Redis then this might be the easiest way.
sudo localectl set-locale LANG=CThen reboot. Then test the above again, which should be fixed now.
Option 3: via Redis Config:
see https://forum.iobroker.net/post/1114246
We plan to test this with js-controller 4.1 (Q4/22) and inform the users about it, but until then it has to do like this :-)
Ingo
Ich hab noch eine Kombination.
Ich verwende redis in einem docker container auf alpine basis.
alpine hat erst einmal keine locale.
daher lässt sich 2) nicht abfragen. Aber wenn ich es richtig interpretiere,
dann geht ihr immer vom stand ohne locale aus und andere lokalisationen führen ggfs zu Problemen.
dann dürfte es mit alpine keine probleme geben- ergibt bei mir
(nil)
- Hierzu mittels
-
Hallo Ingo,
seit erscheinen dieses Threads hat mich das Thema "Redis" etwas mehr beschäftigt. Ich bin Neueinsteiger bei Redis, und die Informationen im Web bezüglich der Einstellungen zur Redis Datenbank und locale sagen nicht wirklich viel aus. Beziehungsweise, in der Dokumentation von Redis finde ich nichts zu diesem Thema. Auf dieser Seite konnte ich zumindest schon einmal herausfinden das der große Unterschied von c zu x.UTF-8 an der Single-/Multibyte-Unicode-Kodierung liegt.
Dennoch bleibt bei mir die ein oder andere Frage noch offen.Aktuell habe ich zwei Container (LXD/LXC) aufgesetzt, je einen für ioBroker und Redis. Beide mit der Einstellung "LOKALE=de-DE.UTF-8".
1.) Muss ich beide Container auf "LANG=C" umstellen, oder reicht es die Konfiguration des Redis-Server anzupassen?
2.) Kann die Umstellung während des laufenden Betriebs vorgenommen, bzw. sollte ioBroker vorher gestoppt, oder gar auf "jsonl:jsonl" umgestellt werden?
3.) Wie verhält es sich mit mySQL/MariaDB, sollte hier auch die locale beachtet und auf "LANG=C" umgestellt werden?
Eventuell kannst du mir etwas weiterhelfen.
Dankeschön
Gruß, Karsten@hydrotec
1.) redis Server reicht.
2.) gute Frage, weiß ich nicht. Ich denke geht im Betrieb aber sicher ist iobroker stoppen, redis konfig ändern und neu starten, iobroker neu starten
3.) keine Ahnung wie eine MySQL da tickt und ob Bzw wie relevant das da ist bei queries. -
Ich hab noch eine Kombination.
Ich verwende redis in einem docker container auf alpine basis.
alpine hat erst einmal keine locale.
daher lässt sich 2) nicht abfragen. Aber wenn ich es richtig interpretiere,
dann geht ihr immer vom stand ohne locale aus und andere lokalisationen führen ggfs zu Problemen.
dann dürfte es mit alpine keine probleme geben- ergibt bei mir
(nil)
- ergibt bei mir
-
Hi ich komme nicht auf die Schell
andy@debian:~$ redis-cli -bash: redis-cli: Kommando nicht gefunden. -
Hi ich komme nicht auf die Schell
andy@debian:~$ redis-cli -bash: redis-cli: Kommando nicht gefunden.@ostseereiter sagte in Wichtiger Hinweis für Redis Installationen!:
Hi ich komme nicht auf die Schell
Läuft denn redis?
sudo systemctl status redis -
Hi ich komme nicht auf die Schell
andy@debian:~$ redis-cli -bash: redis-cli: Kommando nicht gefunden. -
@thomas-braun
Ist wohl nicht installiert braucht man das?andy@debian:~$ sudo systemctl status redis [sudo] Passwort für andy: Unit redis.service could not be found. -
@thomas-braun
Ist wohl nicht installiert braucht man das?andy@debian:~$ sudo systemctl status redis [sudo] Passwort für andy: Unit redis.service could not be found.Um
redis-cliaufzurufen braucht es die redis-tools. Da ist das nämlich drin.
Bei dir läuft aber gar kein redis. Was haste also vor?
Oder läuft da was anderes?
systemctl status redis-server.service redis.service -
Um
redis-cliaufzurufen braucht es die redis-tools. Da ist das nämlich drin.
Bei dir läuft aber gar kein redis. Was haste also vor?
Oder läuft da was anderes?
systemctl status redis-server.service redis.service@thomas-braun sagte in Wichtiger Hinweis für Redis Installationen!:
systemctl status redis-server.service redis.service
Ich habe nix vor dann ist es ja ok wenn ich es nicht installiert habe. Dann ist ja alles im grünen Bereich. Ich wüsste auch gar nicht wozu man das braucht.
andy@debian:~$ systemctl status redis-server.service redis.service Unit redis-server.service could not be found. Unit redis.service could not be found. -
@thomas-braun sagte in Wichtiger Hinweis für Redis Installationen!:
systemctl status redis-server.service redis.service
Ich habe nix vor dann ist es ja ok wenn ich es nicht installiert habe. Dann ist ja alles im grünen Bereich. Ich wüsste auch gar nicht wozu man das braucht.
andy@debian:~$ systemctl status redis-server.service redis.service Unit redis-server.service could not be found. Unit redis.service could not be found.@ostseereiter naja schon etwas verwirrend. Nutzt du nun redis als db oder nicht? Wenn ein „iob status“ nicht sagt das es als redis läuft dann ist dieser thread für dich komplett irrelevant
-
@ostseereiter naja schon etwas verwirrend. Nutzt du nun redis als db oder nicht? Wenn ein „iob status“ nicht sagt das es als redis läuft dann ist dieser thread für dich komplett irrelevant
@apollon77 sagte in Wichtiger Hinweis für Redis Installationen!:
iob status
ok alles klar dann ist ja gut.
iobroker is running on this host. Objects type: jsonl States type: jsonl -
@hydrotec
1.) redis Server reicht.
2.) gute Frage, weiß ich nicht. Ich denke geht im Betrieb aber sicher ist iobroker stoppen, redis konfig ändern und neu starten, iobroker neu starten
3.) keine Ahnung wie eine MySQL da tickt und ob Bzw wie relevant das da ist bei queries.Danke für die Unterstützung :-)
Hab es in der Redis-Konfiguration umgestellt. Jetzt passt es.
Zu 2.), da bin ich den sicheren Weg gegangen.
ioBroker gestoppt und wieder auf jsonl:jsonl umgestellt. Dann den redis.service gestoppt, und die Datenbank auf redis-cli mitflushallzurückgesetzt. Die Zeile bei [Service] eingefügt, und einen reload service, sowie ein reboot von Redis ausgeführt. Anschließend ioBroker wieder auf redis:redis umgestellt und neu gestartet.
Zu3.), dann lass ich mal die Finger weg, sollte es Probleme geben, kann man ja immer noch Hand anlegen. ;-)Angenehmes Wochenende noch :sunglasses:
Gruß, Karsten -
Danke für die Unterstützung :-)
Hab es in der Redis-Konfiguration umgestellt. Jetzt passt es.
Zu 2.), da bin ich den sicheren Weg gegangen.
ioBroker gestoppt und wieder auf jsonl:jsonl umgestellt. Dann den redis.service gestoppt, und die Datenbank auf redis-cli mitflushallzurückgesetzt. Die Zeile bei [Service] eingefügt, und einen reload service, sowie ein reboot von Redis ausgeführt. Anschließend ioBroker wieder auf redis:redis umgestellt und neu gestartet.
Zu3.), dann lass ich mal die Finger weg, sollte es Probleme geben, kann man ja immer noch Hand anlegen. ;-)Angenehmes Wochenende noch :sunglasses:
Gruß, Karsten -
Hallo,
da ich meine States in Redis habe wollte ich bei mir auch mal die Systemeinstellungen checken und ggf. gerade ziehen.
Den 2. Weg mit dem locale-Befehl krieg ich ja noch hin aber was ist denn das für ein lustiges (chinesisches?) Zeichen im 1. Weg??
Wie gibt man den das ein? :confused:EVAL "return 'c-i.t' >= 'c.' and 'c-i.t' < 'c.香'" 1 1Gruß Steffen
-
Hallo,
da ich meine States in Redis habe wollte ich bei mir auch mal die Systemeinstellungen checken und ggf. gerade ziehen.
Den 2. Weg mit dem locale-Befehl krieg ich ja noch hin aber was ist denn das für ein lustiges (chinesisches?) Zeichen im 1. Weg??
Wie gibt man den das ein? :confused:EVAL "return 'c-i.t' >= 'c.' and 'c-i.t' < 'c.香'" 1 1Gruß Steffen
@steff sagte in Wichtiger Hinweis für Redis Installationen!:
Wie gibt man den das ein?
Copy & Paste?
Geht z. B. mit der rechten Maustaste in einem Terminal. -
@steff sagte in Wichtiger Hinweis für Redis Installationen!:
Wie gibt man den das ein?
Copy & Paste?
Geht z. B. mit der rechten Maustaste in einem Terminal.ahh..., das war ja leicht :blush: Das ich im Terminal auch mit copy&paste via rechte Maustaste arbeiten kann wusste ich noch gar nicht!
Vielen Dank für den Tip!
-
Hallo zusammen,
ich habe Redis in einem Docker auf meiner Synology laufen. Iobroker ist ein Multihost mit dem Master als (Buanet)Docker auf der Synology und einen Raspi als Slave. Der Master liefert "(nil)" und der Slave liefert "(integer) 1". In Redis werden nur die States und nicht die Objekte abgelegt.Schau ich mit jetzt mit locate die System an:
- Redis Server ( LC_ALL=C):

oder wenn ich die Umgebungsvariable LC_ALL leer lasse:

-
IOB Master:

-
IOB Slave

Und nu? 🤔 Ich vermute, bei der aktuellen Konfiguration könnte es zu Problemen kommen. Risiko ist vermutlich nicht sooo hoch, da nur die States in Redis landen.
- Redis Server ( LC_ALL=C):
-
Hallo zusammen,
ich habe Redis in einem Docker auf meiner Synology laufen. Iobroker ist ein Multihost mit dem Master als (Buanet)Docker auf der Synology und einen Raspi als Slave. Der Master liefert "(nil)" und der Slave liefert "(integer) 1". In Redis werden nur die States und nicht die Objekte abgelegt.Schau ich mit jetzt mit locate die System an:
- Redis Server ( LC_ALL=C):

oder wenn ich die Umgebungsvariable LC_ALL leer lasse:

-
IOB Master:

-
IOB Slave

Und nu? 🤔 Ich vermute, bei der aktuellen Konfiguration könnte es zu Problemen kommen. Risiko ist vermutlich nicht sooo hoch, da nur die States in Redis landen.
@dominic151617 Also mit "nur States" hast du aktuell kein Risiko ... Auch mit Objects wäre es ok weil dwr Master korrekt ist - falls Du aber mal Slave zum Master machst wäre es Problematisch.
Was Du jetzt tust obliegt Dir :-) Ich würde den Slave fixen dann vergisst Du es später nicht :-)
- Redis Server ( LC_ALL=C):
-
@dominic151617 Also mit "nur States" hast du aktuell kein Risiko ... Auch mit Objects wäre es ok weil dwr Master korrekt ist - falls Du aber mal Slave zum Master machst wäre es Problematisch.
Was Du jetzt tust obliegt Dir :-) Ich würde den Slave fixen dann vergisst Du es später nicht :-)
@apollon77
Danke! Ansich schiebe ich eine Neuinstallation schon vor mir her, für dich ich mir eine Strategie zurechtlegen muss. Vielleicht mach ich das dann zu erst und schaue anschließend, wie es aussieht. -
Hallo Leute!
Habe soeben diesen Thread hier entdeckt.
Wollte das natürlich sogleich überprüfen haben jetzt jedoch folgendes Problem:Ich habe ein Multihost System mit einem Master und einem Slave. (Beides Raspery Pi's).
Beim Slave habe ich jedoch folgendes Problem:
Das System arbeitet definitiv mit Redis:
pi@ioBroker-RasPi:~ $ iob status iobroker is running on this host. At least one iobroker host is running. Objects type: jsonl States type: redisDie Redis-Tools sind installiert!
Bei diversen Abfragen kommen jedoch folgende Antworten:
pi@ioBroker-RasPi:~ $ sudo systemctl status redis Unit redis.service could not be found. pi@ioBroker-RasPi:~ $ redis-cli -bash: redis-cli: Kommando nicht gefunden.Kann mir hier jemand weiterhelfen?