FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: roman1528 am 02 Februar 2016, 14:18:29

Titel: [gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 02 Februar 2016, 14:18:29
Moin

Gibt es ein Reading welches z.B. auf 1 gesetzt ist wenn die aktuelle Config nicht gespeichert ist?Wenn ja, wo kann ich es finden bzw. woher weiß FHEMWeb dass die Config nicht gespeichert ist?

Wenn nicht, kann man sich solch ein Reading anlegen?

Ich möchte mir in FTUI nämlich eine Benachrichtgung einbauen wenn die Config nicht gespeichert ist.

Grüße^^
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: Hans Franz am 02 Februar 2016, 17:03:25
Könnte so gehen:
define savestate dummy
attr savestate userReadings savestate {@structChangeHist}

define global_notify notify global:.* set savestate 1


Lasse mich aber gerne eines Besseren belehren.

Gruß
Hans

Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 02 Februar 2016, 19:15:20
Zitat von: Hans Franz am 02 Februar 2016, 17:03:25
Könnte so gehen:
define savestate dummy
attr savestate userReadings savestate {@structChangeHist}

define global_notify notify global:.* set savestate 1


Das machts leider nicht.
Davon mal abgesehen, dass ich nicht weiß was {@structChangeHist} ist...

Hatte das notify auf global:SAVE.* gestzt. das läuft 1A wenn ich speichere. Aber nichts setzt den dummy wenn die Config verändert ist.

Grüße^^
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: Hans Franz am 02 Februar 2016, 19:21:02
{@structChangeHist} in der Kommandozeile ergibt bei mir (bei rotem Fragezeichen) die Anzahl der modifizierten Änderungen. Ergibt Null (oder Nichts) nach dem Sichern. Ist aus FHEMWEB geklaut.

Gruß
Hans

Edit:
Zitatmodifizierten Änderungen
So'n Quatsch ;)
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: marvin78 am 02 Februar 2016, 19:35:40
Dass es auf global:SAVE nichts macht ist klar (wobei das nichtmal stimmt). Es soll ja auch dann was tun, wenn du andere Dinge machst, als speichern. Du musst das notify entweder, wie von Hans Franz beschrieben, auf

global:.*

setzen oder auf sowas

global:(ATTR|DEFINED|DELETED|DELETEATTR|MODIFIED|RENAMED|SAVE).*
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: betateilchen am 02 Februar 2016, 19:56:30
define unsaved at +*00:00:10 { if(@structChangeHist) {CommandSetReading(undef,'unsaved unsaved 1')} else {CommandSetReading(undef,'unsaved unsaved 0')} }
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 02 Februar 2016, 20:20:41
Zitat von: marvin78 am 02 Februar 2016, 19:35:40
Dass es auf global:SAVE nichts macht ist klar

Das habe ich nicht behauptet! Wenn ich auf Save-Config klicke wird dieses event ausgelöst und würde mir den Dummy zurück setzen.

Dann klappt also das hier nicht:
define savestate dummy
attr savestate userReadings savestate {@structChangeHist}


wobei ich mit userReadings schon öfter Probleme hatte dass sie nicht gesetzt werden. Z.B. bei WebViewControl und GPIO. Auch hier nicht.
Aber bei z.B. GDS funktionieren die userReadings.... <<< Anderes Thema...

Ich werde das mit {@structChangeHist} weiter testen...

Und natürlich den Vorschlag von betateilchen. Wobei da nur "Chinesisch" für mich steht  ;D

Danke schon mal für die Antworten. Ich werde testen, testen, testen

Grüße^^
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: marvin78 am 02 Februar 2016, 20:23:28
Das userReading kann nur wirken, wenn ein Event ausgelöst wird. Das passiert über das notify (für Änderungen eben NICHT auf SAVE sondern auf eben diese Änderung).
Titel: Antw:Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 02 Februar 2016, 20:31:53
Ja gut...

Man sollte einfach nicht darüber nachdenken wie das funktionieren soll... Aber so läuft es natürlich.

define savestate dummy
attr savestate userReadings savestate {@structChangeHist}

define notify_savestate notify global:.* set savestate 1


Danke an alle^^
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: marvin78 am 02 Februar 2016, 20:36:52
Man sollte einfach nicht darüber nachdenken wie das funktionieren soll

Doch. Genau das sollte man. Dann kommt man nämlich nicht auf die Idee, es anders zu machen, als vorgeschlagen, weil man weiß, warum es so vorgeschlagen wurde.
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: betateilchen am 02 Februar 2016, 20:37:57
und meine Lösung braucht nur ein einziges device und nicht zwei - und keine userReadings :P
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 03 Februar 2016, 00:01:57
Zitat von: betateilchen am 02 Februar 2016, 20:37:57
und meine Lösung braucht nur ein einziges device und nicht zwei - und keine userReadings :P

Die Readings sind aber von Vorteil. Habe den Dummy gleich noch 2 spendiert  um Text und HEX-Farbe an FTUI zu übergeben :)
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: Hans Franz am 03 Februar 2016, 00:41:18
betateilchens Lösung ist eindeutig eleganter. Das Reading steckt nun im at und du kannst auch dem at noch weitere Readings hinzufügen.
Du kannst das aber auch alles in das notify stecken:
define global_notify notify global:.* {(@structChangeHist) ? CommandSetReading(undef,'global_notify unsaved 1') : CommandSetReading(undef,'global_notify unsaved 0')}


Gruß
Hans
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: betateilchen am 03 Februar 2016, 07:09:10
Zitat von: roman1528 am 03 Februar 2016, 00:01:57
Die Readings sind aber von Vorteil. Habe den Dummy gleich noch 2 spendiert

Irgendwann, wenn Du fhem "verstanden" hast, solltest Du über diese Aussage nochmal nachdenken ;)
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 03 Februar 2016, 12:23:53
Zitat von: betateilchen am 03 Februar 2016, 07:09:10
Irgendwann, wenn Du fhem "verstanden" hast, solltest Du über diese Aussage nochmal nachdenken ;)

Ich denke es ist ein riesiges Perl Unverständniss. Deswegen steht da für mich nur Bahnhof.

Aber klar. natürlich kann man dem notify auch Readings verpassen... Wie doof XD

Eins müsstet ihr mir aber noch verraten. Da ich ja mehrere Readings habe... Wie ist das Trennzeichen zwischen den Befehlen?


{(@structChangeHist) ? CommandSetReading(undef,'notify_savestate savestate 1'), CommandSetReading(undef,'notify_savestate color #B22222')........


{(@structChangeHist) ? CommandSetReading(undef,'notify_savestate savestate 1'); CommandSetReading(undef,'notify_savestate color #B22222')........


{(@structChangeHist) ? CommandSetReading(undef,'notify_savestate savestate 1') CommandSetReading(undef,'notify_savestate color #B22222')........


Das funktioniert schonmal alles nicht  :D

Grüße^^
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: betateilchen am 03 Februar 2016, 13:18:05
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: roman1528 am 03 Februar 2016, 13:31:02
Zitat von: betateilchen am 03 Februar 2016, 13:18:05

  • in dem was Du da tust, stehen gar keine Befehle (fhem) drin, sondern Funktionsaufrufe (perl)
  • in dem Codeschnipsel gibt es zwei Codeblöcke. Wenn Du das Beispiel von mir mit der if Abfrage verwendest, wird Dir das klarer. Die Variante mit ? und : hatte ich absichtlich nicht verwendet um genau diese jetzt bei Dir bestehende Verwirrung zu vermeiden.

Super! Ich danke dir.

Mit if/else und meinen quasi nicht vorhandenen Perl-Kenntnissen funktioniert das jetzt.


define notify_savestate notify global:.* { if(@structChangeHist) {CommandSetReading(undef,'notify_savestate savestate 1');; CommandSetReading(undef,'notify_savestate color #B22222');; CommandSetReading(undef,'notify_savestate text Config nicht<br/>gespeichert!')} else {CommandSetReading(undef,'notify_savestate savestate 0');; CommandSetReading(undef,'notify_savestate color #FFFFFF');; CommandSetReading(undef,'notify_savestate text Config<br/>gespeichert!')} }


Grüße^^
Titel: Antw:[gelöst] Reading wenn Config nicht gespeichert ist?
Beitrag von: betateilchen am 03 Februar 2016, 15:20:09
Noch kurz zur Erklärung:

CommandSetReading(undef,'notify_savestate savestate 1')

und

fhem("setReading notify_savestate savestate 1")

bewirken exakt das gleiche.

Als Entwickler verwende ich gerne die erste Variante, da ich weiß, dass aus der zweiten Variante fhem-intern auch nur ein "CommandSetReading()" gebaut wird.
Für den Anwender ist eigentlich die zweite Variante vorgesehen, weil sie sich besser "selbst erklärt".