unsaved

Begonnen von der-Lolo, 17 Januar 2015, 14:14:09

Vorheriges Thema - Nächstes Thema

der-Lolo

Hallo Zusammen,
wäre es nicht toll wenn man sich anschauen könnte welche Änderungen noch nicht gespeichert sind?
Ich stelle mir das so vor das ein Befehl unsaved - die DEFs ausspukt die verändert wurden aber noch nicht gespeichert sind...

betateilchen

Dazu müsste fhem die gespeicherte Konfiguration komplett neu einlesen und mit der gesamten laufenden Konfiguration vergleichen. Fhem selbst weiss nicht, was noch nicht gesichert wurde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

#2
das wäre aber kein besonders eleganter ansatz.

wenn man das feature in fhem einbauen würde wäre ein timestamp der beim define oder modify im $hash gesetzt wird und ein timestamp der bei save gesetzt und die man vergleichen kann glaube ich der bessere weg. oder sogar nur ein flag das bei save zurück gesetzt wird. das könnte man sogar in der devspec beim list verwenden.

du kannst das aber einfachen mit zwei notifys selber bauen:

eines auf global:(DEFINED|MODIFIED) in dem du mit setreading $NAME unsaved changed ein 'unsaved' reading im betreffenden device erzeugst und ein zweites auf global:(SAVE|INITIALIZED|REREADCFG|SHUTDOWN) in dem du all diese unsaved readings mit deletereading .* unsaved wieder löschst.

das erste notify kannst du auch noch um ATTR|DELETEATTR erweitern dann bekommst du auch attribut änderungen mit.

mit einem list .* unsaved bekommst du alle nicht gespeicherten devices mit dem timestamp der letzten änderung.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Und wohin speicherst Du die Timestamps bei gelöschten Devices?

In der configDB ist eine diff-Funktion bereits länger enthalten, ich arbeite gerade an einer Erweiterung, damit man mit "configdb diff all current" genau die nicht gespeicherten Änderungen sehen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

für gelöschte devices kann man ein drittes notify auf global::DELETED verwenden das die device in einen dummy steckt.

sich mit einem diff device basiert beliebige änderungen zwischen beliebigen versionsständen ausgeben zu lassen wäre in der tat nett.

aber warum gibst du current an? wäre nicht lastSaved oder ein zeitpunkt besser um die aktuelle mit einer vorigen version zu vergleichen?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

#5
Zitat von: justme1968 am 17 Januar 2015, 16:51:22
aber warum gibst du current an?

Weil ich ein Unterscheidungskriterium brauche. Und weil Du die configDB und ihre Möglichkeiten nicht kennst.

Die allgemeine Syntax des bereits existierenden Befehles lautet:

configdb diff <device> <version>

Damit kann man für ein beliebiges Device die Konfigurationseinträge zwischen der aktuellen (gespeicherten) und einer vorherigen (gespeicherten) Version vergleichen.


compare device: wz_Harmony in current version 0 (left) to version: 1 (right)
+--+--------------------------------------------------------------------+--+--------------------------------------------------------------------+
| 1|define wz_Harmony harmony 192.168.123.188                           | 1|define wz_Harmony harmony 192.168.123.188                           |
| 2|attr wz_Harmony userattr Beleuchtung Beleuchtung_map structexclude  | 2|attr wz_Harmony userattr Beleuchtung Beleuchtung_map structexclude  |
| 3|attr wz_Harmony Beleuchtung allLights                               | 3|attr wz_Harmony Beleuchtung allLights                               |
|  |                                                                    * 4|attr wz_Harmony event-on-change-reading .*                          *
| 4|attr wz_Harmony group 00 Harmony                                    | 5|attr wz_Harmony group 00 Harmony                                    |
| 5|attr wz_Harmony room 60 Fernbedienung                               | 6|attr wz_Harmony room 60 Fernbedienung                               |
+--+--------------------------------------------------------------------+--+--------------------------------------------------------------------+


Im Beispiel wurde das Attribut event-on-change-reading in der aktuellen Version gelöscht.

Das "current" würde dann (neu) kennzeichnen, dass mit der im Speicher befindlichen Version verglichen werden soll.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

der-Lolo

Ich kenne das unsaved feature von unseren Maschinen, und nutze es sehr oft.
Den Ansatz mit den notifys finde ich schonmal gut, das es mit config.db sogar noch einfacher sein dürfte klingt logisch.

Ich stehe einfach oft vor der frage ob ich auch alles was ich speichern wollte gespeichert habe bevor ich ein Shutdown & Restart absetze.
Wenn es unsave gäbe müsste es aber auch ein "rückgängig" geben damit man in der Hand hat was man speichert..

betateilchen

#7
Es würde ja prinzipiell schon reichen, wenn nach irgendeiner Änderung der Text "Save config" im Frontend einfach in rot erscheinen würde.
Den Vorschlag hatte ich vor langer Zeit schonmal hier im Forum gebracht - aber es gab keine Reaktion darauf.

Zitat von: der-Lolo am 17 Januar 2015, 17:01:06
Wenn es unsave gäbe müsste es aber auch ein "rückgängig" geben

nennt sich "configdb recover <desiredVersion>" 8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

der-Lolo

Ja, die Vorzüge von cofing.cb würde ich gerne nutzen - aber vor dem einrichten und dem gebastelt bei nicht Funktion habe ich ein bisschen sorge...

betateilchen

#9
Mit solchen unbegründeten Vorurteilen solltest Du auch besser die Finger von der configDB lassen.

Davor muss man keine Sorgen haben. Sorgen müssen nur die Leute haben, die meinen, sie wären schlauer als ihre Datenbank selbst. Und Leute, die mit der Datenbank Dinge tun wollen, für die die Datenbank nicht vorgesehen ist.

Die meisten "Probleme" mit der configDB, über die irgendwelche User hier im Forum klagen, sind dem zwanghaften Trieb zuzuschreiben, irgendwann selbst mit irgendwelchen Tools in der Datenbank rumpfuschen zu wollen - wozu es keine Notwendigkeit gibt. Ich habe eine ganze Menge fhem-Installationen mit configDB laufen, irgendeinen Grund, in der Datenbank selbst irgendwas ändern zu wollen, gab es hier noch nie.

Die zweithäufigste Fehlerursache ist fehlendes Linux-Grundwissen (insbesondere was Rechte betrifft) obwohl man auch davon eigentlich gar nicht viel braucht, um die configDB einzurichten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

"configdb diff all current" liefert:


compare device: all in current version 0 (left) to version: -1 (right)
+-----+-----------------------------------------------------------------------------------+-----+-----------------------------------------------------------------------------------+
|  142|define bd_RT_Weather CUL_HM 21C0B801                                               |  142|define bd_RT_Weather CUL_HM 21C0B801                                               |
|  143|define bd_RT_WindowRec CUL_HM 21C0B803                                             |  143|define bd_RT_WindowRec CUL_HM 21C0B803                                             |
|  144|define bd_RT_remote CUL_HM 21C0B806                                                |  144|define bd_RT_remote CUL_HM 21C0B806                                                |
|     |                                                                                   *  145|define blubberTest dummy                                                           *
|  145|define btLumia630_bt PRESENCE local-bluetooth B8:4F:D5:D4:27:3A                    |  146|define btLumia630_bt PRESENCE local-bluetooth B8:4F:D5:D4:27:3A                    |
|  146|define cal_Command notify Kalender_Command:modeStarted.* { calCommand("$EVENT") }  |  147|define cal_Command notify Kalender_Command:modeStarted.* { calCommand("$EVENT") }  |
|  147|define calendar RSS png 192.168.123.241 ./FHEM/calendar.layout                     |  148|define calendar RSS png 192.168.123.241 ./FHEM/calendar.layout                     |
+-----+-----------------------------------------------------------------------------------+-----+-----------------------------------------------------------------------------------+
|  150|define cubie_dev PRESENCE lan-ping 192.168.123.242 60 60                           |  151|define cubie_dev PRESENCE lan-ping 192.168.123.242 60 60                           |
|  151|define dew_all dewpoint dewpoint out_Balkon                                        |  152|define dew_all dewpoint dewpoint out_Balkon                                        |
|  152|define dew_state dewpoint dewpoint out_Balkon T H D                                |  153|define dew_state dewpoint dewpoint out_Balkon T H D                                |
*  153|define difftest dummy                                                              *     |                                                                                   |
|  154|define esszimmer RSS png 192.168.123.241 ./FHEM/esszimmer.layout                   |  154|define esszimmer RSS png 192.168.123.241 ./FHEM/esszimmer.layout                   |
|  155|define ez_Licht_Tisch CUL_HM 26C5FE02                                              |  155|define ez_Licht_Tisch CUL_HM 26C5FE02                                              |
|  156|define ez_TV CUL_HM 24E6BF                                                         |  156|define ez_TV CUL_HM 24E6BF                                                         |
+-----+-----------------------------------------------------------------------------------+-----+-----------------------------------------------------------------------------------+
| 1417|attr n_sz3l room 60 Fernbedienung                                                  | 1417|attr n_sz3l room 60 Fernbedienung                                                  |
| 1418|attr n_sz3s group HMFB03                                                           | 1418|attr n_sz3s group HMFB03                                                           |
| 1419|attr n_sz3s room 60 Fernbedienung                                                  | 1419|attr n_sz3s room 60 Fernbedienung                                                  |
* 1420|attr n_tts1 disable 0                                                              * 1420|attr n_tts1 disable 1                                                              *
| 1421|attr n_wz1l group HMFB05                                                           | 1421|attr n_wz1l group HMFB05                                                           |
| 1422|attr n_wz1l room 60 Fernbedienung                                                  | 1422|attr n_wz1l room 60 Fernbedienung                                                  |
| 1423|attr n_wz1l showtime 1                                                             | 1423|attr n_wz1l showtime 1                                                             |
+-----+-----------------------------------------------------------------------------------+-----+-----------------------------------------------------------------------------------+
| 1908|attr wztablet verbose 5                                                            | 1908|attr wztablet verbose 5                                                            |
| 1909|attr zoom group RSS fh.j65.de                                                      | 1909|attr zoom group RSS fh.j65.de                                                      |
| 1910|attr zoom room 97 RSS                                                              | 1910|attr zoom room 97 RSS                                                              |
* 1911|#created Sat Jan 17 17:05:28 2015                                                  * 1911|#created Sat Jan 17 17:47:08 2015                                                  *
+-----+-----------------------------------------------------------------------------------+-----+-----------------------------------------------------------------------------------+


Die nicht gesicherte (laufende) Konfiguration befindet sich rechts in der Tabelle.
Gegenüber der gespeicherten Version gab es folgende Änderungen:


  • das device blubberTest wurde neu angelegt
  • das device difftest wurde gelöscht
  • im device n_tts1 wurde das attribut disable von 0 auf 1 geändert
  • im letzten diff-Block steht in der letzten Zeile immer der Timestamp der verglichenen Versionen
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: der-Lolo am 17 Januar 2015, 14:14:09
wäre es nicht toll wenn man sich anschauen könnte welche Änderungen noch nicht gespeichert sind?

übrigens: Danke für den Vorschlag :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

der-Lolo

Ich habe keine Vorurteile bzgl. config.db - ich habe mich nur mittlerweile daran gewöhnt die fhem.cfg per Oberfläche zu bearbeiten, wenn man das beherzigt gibt es ja auch keine kaum Probleme mit der fhem.cfg.

betateilchen

Zitat von: der-Lolo am 17 Januar 2015, 19:22:20
Ich habe keine Vorurteile bzgl. config.db

das liest sich für mich hier aber völlig anders:

Zitataber vor dem einrichten und dem gebastelt bei nicht Funktion

Man kann (und muss!) auch bei der configDB alles über die fhem-Oberfläche bearbeiten. Wobei Du da eigentlich keinerlei Unterschiede feststellen wirst, da die configDB komplett transparent eingebunden ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

ich hab eben hier: http://forum.fhem.de/index.php/topic,31293.msg247380.html#msg247380 einen patch gepostet mit dem der 'Save Config' link rot wird sobald es nicht gespeicherte änderungen gibt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968