configDB und Temperaturlisten?

Begonnen von Morgennebel, 11 September 2017, 10:45:02

Vorheriges Thema - Nächstes Thema

Morgennebel

Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

betateilchen

Funktioniert aber irgendwie nicht richtig.

Ein

set HMinfo tempList save

liefert als Rückmeldung

file: ././tempList.cfg error:Error on reading ././tempList.cfg from database!

Offenbar wird bei einem save zuerst versucht, eine ggf. nicht vorhandene Datei zu lesen - warum auch immer.

Und die Pfadangabe ././ müsste mir auch mal bitte jemand erklären.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#17
Nachtrag: Die Meldung mit dem Lesefehler der Datei ././tempList.cfg erscheint sogar dann, wenn die Datei mit dieser Pfadangabe in der Datenbank vorhanden ist.


Ok. Die Datei in der Datenbank darf nicht leer sein. Eine Leerzeile reicht schon, um das save auszuführen.

Aber wieso wird die Datei überhaupt erst gelesen, wenn ein "save" ausgeführt 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!

betateilchen

Nachtrag 2:

"get HMinfo configCheck" meckert trotzdem noch rum:


templist mismatch
    sz_TC_Climate: sz_TC_Climate not found in file ././tempList.cfg
    wz_TC_Climate: wz_TC_Climate not found in file ././tempList.cfg


ein "configdb fileshow ././tempList.cfg" liefert völlig korrekt:


entities:sz_TC_Climate
R_P1_0_tempListSat>24:00 17.0
R_P1_1_tempListSun>24:00 17.0
R_P1_2_tempListMon>24:00 17.0
R_P1_3_tempListTue>24:00 17.0
R_P1_4_tempListWed>24:00 17.0
R_P1_5_tempListThu>24:00 17.0
R_P1_6_tempListFri>24:00 17.0
R_P2_0_tempListSat>24:00 17.0
R_P2_1_tempListSun>24:00 17.0
R_P2_2_tempListMon>24:00 17.0
R_P2_3_tempListTue>24:00 17.0
R_P2_4_tempListWed>24:00 17.0
R_P2_5_tempListThu>24:00 17.0
R_P2_6_tempListFri>24:00 17.0
R_P3_0_tempListSat>24:00 17.0
R_P3_1_tempListSun>24:00 17.0
R_P3_2_tempListMon>24:00 17.0
R_P3_3_tempListTue>24:00 17.0
R_P3_4_tempListWed>24:00 17.0
R_P3_5_tempListThu>24:00 17.0
R_P3_6_tempListFri>24:00 17.0
entities:wz_TC_Climate
R_P1_0_tempListSat> 24:00 17.0
R_P1_1_tempListSun> 24:00 17.0
R_P1_2_tempListMon> 24:00 17.0
R_P1_3_tempListTue> 24:00 17.0
R_P1_4_tempListWed> 24:00 17.0
R_P1_5_tempListThu> 24:00 17.0
R_P1_6_tempListFri> 24:00 17.0
R_P2_0_tempListSat> 24:00 17.0
R_P2_1_tempListSun> 24:00 17.0
R_P2_2_tempListMon> 24:00 17.0
R_P2_3_tempListTue> 24:00 17.0
R_P2_4_tempListWed> 24:00 17.0
R_P2_5_tempListThu> 24:00 17.0
R_P2_6_tempListFri> 24:00 17.0
R_P3_0_tempListSat> 24:00 17.0
R_P3_1_tempListSun> 24:00 17.0
R_P3_2_tempListMon> 24:00 17.0
R_P3_3_tempListTue> 24:00 17.0
R_P3_4_tempListWed> 24:00 17.0
R_P3_5_tempListThu> 24:00 17.0
R_P3_6_tempListFri> 24:00 17.0



-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

././ Ist kein Problem. Ergibt sich und ist schlicht etwas  einfacher.
Klar sollte die datei existieren. Ok, ohne habe ich nicht probiert.

Das mit dem nicht finden verstehe ich nicht.
Was passiert beim save? Wird ins file geschrieben? Was?

betateilchen

was in die Datei geschrieben wurde, siehst Du in meinem vorherigen Beitrag.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Aber vielleicht solltest Du Dich erstmal um die immer noch kaputte 10_CUL_HM.pm kümmern, die quer durchs Forum immer mehr Installationen zerschießt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

da habe ich mich schon gekümmert. sollte wieder gehen, seit heute Morgen (SVN).

Das mit
set hm tempListG save
kann ich nicht glauben. da sollten die Devices aller deiner RTs geschrieben werden. Sind das nur die zwei? halt, das sind 2 TCs.

Ich denke gerade daran, die alte Version von CUL_HM neu einzulagern. dann sollte es wieder passen und wir können noch einmal testen.

Hast du noch Probleme mit der SVN Version?







betateilchen

OK, lass uns versuchen, die Probleme bei den tempList zu lösen. Vielleicht sollten wir Stück für Stück vorgehen.

1. Problem: das erstmalige Speichern mit "set hm tempList save" funktioniert nicht

(dieses Problem ist unabhängig davon, ob man mit fhem.cfg oder configDB arbeitet!)

Zitat von: martinp876 am 11 Februar 2018, 21:30:44
Klar sollte die datei existieren. Ok, ohne habe ich nicht probiert.

Aktuell wird bei einem "set hm tempList save" ab Zeile 759 versucht, eine tempList zu lesen.
Wenn dies nicht funktioniert, wird das Speichern komplett abgebrochen.


    my ($err,@RLines) = FileRead($fName);
    return "file: $fName error:$err"  if ($err);


Wie soll nach Deiner Vorstellung eine tempList erstmalig in eine FHEM Installation kommen, wenn sie nicht per "save" angelegt werden kann, weil es sie noch nicht gibt?

Für mich wäre es richtiger, bei einem Fehler nach FileRead() die Verarbeitung bis zum FileWrite() zu überspringen und dann die neue Datei zu schreiben. Der Abbruch der Verarbeitung an dieser Stelle ist m.E. kein korrektes Verhalten und vermutlich auch gar nicht so gewünscht.

-----------------------
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: martinp876 am 12 Februar 2018, 21:08:59
Wie das mit configdb und readfile zusammenspielt idt mir noch nicht klar.

Das ist nicht schlimm :)

Die Funktionen FileRead() und FileWrite() wurden seinerzeit in die fhem.pl eingebaut, damit sich Modulentwickler überhaupt keine Gedanken machen zu brauchen, ob ein Anwender mit fhem.cfg oder configDB arbeitet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#25
Hallo Martin,

Dir ist hoffentlich klar, dass Deine heutige Änderung an HMInfo eine ziemliche Katastrophe ist? Warum fängst Du jetzt wieder damit an, direkt ins Dateisystem zu schreiben, anstatt FileWrite() zu verwenden? Das ist doch völliger Unfug.

Es macht überhaupt keinen Sinn, die Existenz einer Datei im Filesystem zu prüfen und darauf zu reagieren. Bei einem FHEM Anwender, der mit configDB arbeitet, wird es dieses Datei im Dateisystem nie geben. Und in dem Fall nützt es auch überhaupt nichts, dieses Datei in das Dateisystem zu schreiben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Hier mal mein Vorschlag, das Thema möglichst einfach zu lösen.


Index: 98_HMinfo.pm
===================================================================
--- 98_HMinfo.pm (revision 16204)
+++ 98_HMinfo.pm (working copy)
@@ -700,10 +700,10 @@
   my %dl =("Sat"=>0,"Sun"=>1,"Mon"=>2,"Tue"=>3,"Wed"=>4,"Thu"=>5,"Fri"=>6);
   my $ret;
   
-  if (not -f $fName) { #create file if necessary
-    open(aSave, ">$fName") || return("Can't open $fName: $!");
-    print aSave "#init\n";
-  }
+#  if (not -f $fName) { #create file if necessary
+#    open(aSave, ">$fName") || return("Can't open $fName: $!");
+#    print aSave "#init\n";
+#  }

   if    ($action eq "save"){
#    foreach my $eN(HMinfo_getEntities("d")){#search and select channel
@@ -758,7 +758,8 @@
     my  @oldList;
     
     my ($err,@RLines) = FileRead($fName);
-    return "file: $fName error:$err"  if ($err);
+#    return "file: $fName error:$err"  if ($err);
+    push (@RLines, "#init") if ($err);
     my $skip = 0;
     foreach(@RLines){
       chomp;
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

Hm. Ich denke ich habe das close vergessen.
Klar wird erst gelesen.
Das file schreiben legt nur ein leeres file an. Dann existiert es. Das muss configdb nicht wissen, denke ich.
Was ist die kathastrophe?

betateilchen

#28
Zitat von: martinp876 am 17 Februar 2018, 23:27:34
Was ist die kathastrophe?

Es funktioniert immer noch nicht mit configDB.

Nochmal...

Zitat von: betateilchen am 17 Februar 2018, 19:51:08
Es macht überhaupt keinen Sinn, die Existenz einer Datei im Filesystem zu prüfen und darauf zu reagieren. Bei einem FHEM Anwender, der mit configDB arbeitet, wird es dieses Datei im Dateisystem nie geben. Und in dem Fall nützt es auch überhaupt nichts, dieses Datei in das Dateisystem zu schreiben.

Du schreibst eine Datei direkt ins Filesystem und versuchst dann, mit FileRead() diese Datei zu lesen. Bei Benutzern, die mit configDB arbeiten, versucht FileRead() automatisch, diese Datei aus der Datenbank zu lesen, wo sie immer noch nicht existiert. Und dann wird das "tempList save" nach wie vor abgebrochen.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Alles was Du tun muss, um das Problem zu lösen, ist folgendes:

1. Baue die Prüfung auf die Dateiexistenz und das Anlegen im Dateisystem wieder aus, das ist völlig überflüssig und hilft überhaupt nicht.

2. Sorge dafür, dass nach dem FileRead() im Fehlerfall nicht abgebrochen wird, sondern schreibe einen dummy-Eintrag in das dann leere array @RLines (damit es in Folge nicht zu perl warnings wegen uninitialize values kommt)


-    return "file: $fName error:$err"  if ($err);
+    push (@RLines, "#init") if ($err);


Fertig. Schon funktionieren die tempList sowohl mit fhem.cfg als auch mit configDB.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!