NEWS
[gelöst] Probleme mit sql logging (früher:Button Zustand bei Neustart einlesen)
-
Hallo,
hab mal wieder ein Problem, dass ich nicht gelöst bekomme.
Ich habe einen Button in der vis-Oberfläche und der schaltet eine selbsterzeugte Variable. Das funktioniert auch alles und diese ist unter Objekte->"javascript.0.Badezimmer.E-Heizung-Zeitsteuerung" sichtbar und ändert sich auch und die vis Oberfläche reagiert ebenfalls entsprechend.
Jetzt möchte ich gerne bei einem ioBroker Neustart wissen, wie denn der letzte Zustand war, daher habe ich die Variable als Historie konfiguriert und er speichert diese auch in meinem sql-Adapter aber irgendwie scheint nicht jeder 0 und 1 Zustand protokolliert zu werden. Aktuell sieht es so aus, als wenn er immer den 1 Zustand speichert und nicht den 0, hatte aber auch schon den umgekehrten Fall. Wenn ich mir die letzten 100-Daten aus dem History-Adapter ausgeben lasse, dann kommen da nur die 1er-Werte drin vor, aber nicht die 0'er. Meine Idee war, beim Start den aktuellsten Wert aus demHistory-Adapter zu holen und den dann weiterzuverwenden, dass ist durch diesen "Fehler" aber nicht möglich, da ich immer nur 1 zurückbekomme.
Wo ist da mein Gedankenfehler, dass das so nicht funktioniert. Müsste der Historieadapter nicht alles protokollieren? Die Variable wird bei subscribe ordentlich ausgelöst, daran kann es nicht liegen.
raw-Werte der History-Konfig:
{ "from": "system.adapter.javascript.0", "ts": 1513028661310, "common": { "name": "Badezimmer.E-Heizung-Zeitsteuerung", "role": "javascript", "type": "mixed", "custom": { "sql.0": { "enabled": true, "changesOnly": true, "debounce": "", "retention": 0, "changesRelogInterval": 0, "changesMinDelta": 0, "storageType": "" } } }, "native": {}, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "javascript.0.Badezimmer.E-Heizung-Zeitsteuerung", "type": "state" }
-
Das mit der history ist merkwürdig klinkt nach einen Bug.
Ich verstehe aber nicht warum du das machen willst?
iObroker behält bei einen Neustart seine object states also warum aus history lesen und setzen?
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Hallo Dutchman,
hab es gerade ausprobiert und Du hast Recht funktioniert einwandfrei. Habe ich sicherlich vor längerer Zeit auch mal so probiert und da funktioniert es nicht, keine Ahnung weshalb.
Bzgl. sql-Adapter: Soll/Kann ich da noch weiter evaluieren?
Ich hab mal einen aktuellen Screenshot angehängt und darin sieht man, dass die Variable auf 0 steht aber der History-Adapter dies nicht mitbekommen hat
Viele Grüße Gerd.
1154_snip_20180110161803.png -
Hmm ändere Mal bitten deinen topic Title in Probleme mit sql logging (ersten thread Editieren) da muss Wert anders ran
Im Log kommt nichts ungewöhnliches wenn du die Variable änderst?
Wie sehen deine SQL Einstellungen aus für diesen Datenpunkt ?
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Hallo Dutchman,
die Konfig für den Datenpunkt siehst Du im ersten Beitrag, da habe ich die JSON davon. Im Log passiert nichts. Identisches Verhalten, habe ich auch bei 2 anderen Knöpfen, da sieht das genauso aus. Wenn ich die Knöpfe subscribe, dann wird sowohl bei 0 als auch bei 1 ausgelöst. Wenn ich dann jedesmal in eine weitere (neue) Variable schreibe und diese ebenfalls mitprotokolliere im History-Adapter, dann tritt da auch dieser Effekt auf, daher dürfte es nicht mit den Buttons zu tun haben.
Viele Grüße Gerd.
-
naja, der "Debouce"- Wert ist leer, also wird das Default aus dem Adapter genommen. Was ist denn da eingestellt?
Wie lange ist das auf dem anderen Zustand? Lang genug?
Am Ende wäre eine Idee mal den sql-Adapter in "Debug" zu schalten und zu schauen was dann so über die Zeit im Log steht nachdem du mal hin- und her geschaltet hast
-
naja, der "Debouce"- Wert ist leer, also wird das Default aus dem Adapter genommen. Was ist denn da eingestellt?
Wie lange ist das auf dem anderen Zustand? Lang genug?
Am Ende wäre eine Idee mal den sql-Adapter in "Debug" zu schalten und zu schauen was dann so über die Zeit im Log steht nachdem du mal hin- und her geschaltet hast `
Danke für den Hinweis den SQL in Debug zu schalten, hätte ich auch mal drauf kommen können:
2018-01-10 17:44:54.470 - [31merror[39m: Caught by controller[20]: 2018-01-10 17:44:35.656 - debug: sql.0 Min-Delta reached javascript.0.Badezimmer.E-Heizung-Zeitsteuerung, last-value=1, new-value=0, ts=1515602675657 2018-01-10 17:44:54.470 - [31merror[39m: Caught by controller[25]: 2018-01-10 17:44:37.593 - debug: sql.0 Min-Delta reached javascript.0.Badezimmer.E-Heizung-Zeitsteuerung, last-value=0, new-value=1, ts=1515602677595
Demnach hat er es erkannt und er sollte es speichern, lt. Tabelle des History-Adapters hat er es aber nicht gemacht.
sql ist wie folgt eingestellt
1154_snip_20180110175137.png -
Also denounce time von 10000 sind 10s innerhalb dessen der Wert sich nicht ändern darf. Ansonsten wird nur der „stabile“ =letzte wert geloggt. Also die 1
Du schaltest also für die eingestellte debounce Zeit zu schnell. Setz mal den Wert runter.
Ansonsten steht da noch mehr im log? Das „caught by js-controller“ weist auf nen Fehler hin bei irgendwas …
-
Hallo apollon77,
die Entprellzeit war es nicht, habe den Fehler jetzt aber gefunden. Die korrekte Lösung leider noch nicht!
Ich habe beim Anlegen mit createState einen Defaultwert true mitgegeben. Der Schalter vom Typ tplFancyToggleswitch schickt aber 0 oder 1, also einen Zahlenwert.
Es sieht also so aus, als ob der sql-Adapter jetzt nur Booleans loggen möchte und die 0 oder 1 Werte einfach ignoriert.
Wenn ich auf die Variable subscribe und einfach nochmal bei 1 den Wert auf true setze und bei 0 auf false, wird alles korrekt protokolliert. In ioBroker ist der Variablen Typ auf misc gesetzt. Kann man in der mySQL nachträglich den Typ ändern oder ist diese Variable für "immer" mit dem falschen Typ verbunden? Ein Neuanlegen hat nichts gebracht.
Viele Grüße Gerd.
-
Wenn Du nicht in der DB den typ ändern willst dann kannst Du versuchen bei dem Datenopunkt in den SQL-EInstellungen den "Speichern als" Typ (im Standard leer) auf Boolean zu setzen. Dann sollte 0/1 in false/true umgewandelt werden beim Speichern.
Versuch mal
-
Wenn Du nicht in der DB den typ ändern willst dann kannst Du versuchen bei dem Datenopunkt in den SQL-EInstellungen den "Speichern als" Typ (im Standard leer) auf Boolean zu setzen. Dann sollte 0/1 in false/true umgewandelt werden beim Speichern.
Versuch mal `
Hallo,funktioniert leider nicht. Hab es auf "Logikwert" umgestellt und es wird nicht protokolliert. Zur Sicherheit habe ich noch javascript und sql neu gestartet, trotzdem kein Erfolg. Danach habe ich dann wieder meinen Workaround eingeschaltet und es hat geklappt.
Gibt es irgendwelche Möglichkeiten dieses "nicht protokollieren" per Script zu erkennen? Würde das dann bei mir einbauen, da ich immer mal wieder Variablen mit anderen Dingen/Typen fülle aufgrund von Änderungen im Script und da würde ich schon gerne sichergehen, dass der sql-Adapter dass auch ordentlich protokolliert. Die Überwachung müsste ja nur für eigene Variablen gemacht werden.
Viele Grüße Gerd.
-
naja ich denke nicht as er "Nicht "richtig arbeitet … er stellt ggf keine Änderung des wertes fest und loggt deswegen nichts .. also ist komplett korrekt.
Geht es wenn du "nur änderungen loggen" raus nimmst?
-
naja ich denke nicht as er "Nicht "richtig arbeitet … er stellt ggf keine Änderung des wertes fest und loggt deswegen nichts .. also ist komplett korrekt.
Geht es wenn du "nur änderungen loggen" raus nimmst? `
Leider nein, hatte ich auch schon probiert, dann funktioniert es auch nicht. -
Ok, dann bleibt dir nur das fixen des Datentyps der ID direkt in der DB und potz. löschen falscher Daten und am besten immer an Datentypen halten :-))