Merkwürdige Zeilen in der fhem.cfg

Begonnen von Cluni, 22 Juni 2017, 15:20:47

Vorheriges Thema - Nächstes Thema

Cluni

Hallo zusammen,

mir waren vor einiger Zeit bereits ein paar merkwürdige Einträge in der Logdatei aufgefallen:
Unknown command elsif, try help.\
Unknown command if, try help.\
Unknown command elsif, try help.\
Unknown command if, try help.\
Unknown command elsif, try help.\
Unknown command if, try help.\
Unknown command elsif, try help.\
Unknown command if, try help.\
Unknown command elsif, try help.\


Hatte auch mal danach gesucht, wo das her kommen könnte, aber nichts gefunden.  Nun ist mir zufällig was in der fhem.cfg aufgefallen (siehe Bild im Anhang), als ich nach einem Schreibfehler suchte, der sich per Copy & Paste ziemlich verbreitet hatte in meiner Installation. Nun die große(n) Frage(n):

- Was wachen diese Zeilen in der fhem.cfg?
- Gehören sie da überhaupt hin?
- Wenn nein, wie sind sie da hinein gekommen? Ich habe die fhem.cfg kein einziges Mal per Hand editiert.
- Kann ich die Zeilen mit "./log/fhem.save:" und "Unknown command" einfach löschen und wenn ja wo am Besten (fhem-Editor oder lieber bei heruntergefahrenem fhem im nano?

Liebe Grüße und danke für die Hilfe
Bernd

CoolTux

Commandref oder Wiki. Nach global und modt suchen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

gloob

#2
Lösch die Zeilen über FHEM in den Konfigurationsdatei und speichern.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Otto123

Hi,

sieht so aus, als ob das einfach als Nachricht in deinem attr global motd drinstehen.
Du kannst einfach hergehen und den Inhalt des Attributes in der Oberfläche löschen.

Geht auch in der FHEM Kommandozeile mit attr global motd none
Dann save machen.

Sollte das beim Neustart wieder auftauchen liegt das Problem in einer Deiner Definitionen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Cluni

Danke euch allen.

Zitat von: Otto123 am 22 Juni 2017, 15:31:30
sieht so aus, als ob das einfach als Nachricht in deinem attr global motd drinstehen.
Du kannst einfach hergehen und den Inhalt des Attributes in der Oberfläche löschen.

Das hatte ich jetzt über den Hinweis von CoolTux auch gefunden, dass es da drin steht. Gehört also nicht dahin, hat keine Bedeutung und kann ich bedenkenlos löschen? Ich frag mich nur, wo das genau herkommt.

Muss das none denn in motd drin stehen, oder kann ich das ersatzlos löschen mit dem Button oder per attrdelete?

Gruß Bernd

marvin78

Das was Otto schrieb hast du gelesen? Da steht alles drin. Kommt es wieder, musst du schauen, wo der Fehler ist. Vermutlich in einer Definition von dir.

Otto123

Hallo Bernd,

nein nicht das attr löschen, bitte nur den Inhalt. Mit none verhinderst Du die Standard Sicherheitsmeldung, Ergebnis zum nächsten wirklichen Fehler..

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Cluni

@marvin: Natürlich hatte ich das gelesen, sonst hätte ich ihn ja nicht zitiert. Ich hatte nur noch ein Verständnisproblem, weshalb ich nochmal nachgefragt habe.

@Otto: Danke, genau das wollte ich wissen. Ich kannte die Funktion/Bedeutung von motd bis jetzt noch nicht...

Otto123

Dann schreib nichts rein sondern lass es leer, dann kannst Du die Bedeutung auf dem Startschirm lesen :)
-> set the global attribute motd to none to supress this message.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Cluni

Zitat von: CoolTux am 22 Juni 2017, 16:31:48
Steht hier unter Attribut motd gut beschrieben.
Jops, hatte ich auch dank der zielführenden Hinweise gelesen.

Ich habe den Mist aber wieder drin stehen nach einem Neustart. Mal suchen, wo das herkommen könnte....

CoolTux

Ich gehe von einem selbst geschriebenen notify aus.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Cluni

#12
Zitat von: CoolTux am 22 Juni 2017, 16:45:25
Ich gehe von einem selbst geschriebenen notify aus.

In der Tat! Ich habe eine Routine, die mir Timer für jeden einzelnen Rollladen anlegt. Diese Routine wird normal mitten in der Nacht ausgeführt, aber auch beim Neustart, weil die Timer nur temporär sind und dann nach einem Neustart nicht mehr da sind.
In dieser Perl-Routine werden die ats - weil sie etwas länger sind - der Übersicht halber über mehrere Zeilen geschrieben. Hier mal ein Ausschnitt:
elsif (($A_Modus_runter eq 'immer') and (AttrVal("$dev","Auto_Drehgriffkontakt","nv") ne "nv")) {
        $runter_at = "define $Rol_runter_Timername at $Runter_Zeit
{ \
if ((ReadingsVal(\"Rollladen.Automatik.abends\",\"state\",\"nv\") eq \"on\" ) and (AttrVal(\"$dev\",\"Auto_Modus_runter\",\"aus\") ne \"aus\") and (ReadingsVal(\"$A_Drehgriffkontakt\",\"state\",\"\") eq \"tilted\" )) {fhem (\"setreading $dev Automatik_automatische_Fahrt 1;;setreading $dev Automatik_Pos_vor_Geoeffnet 0;;set $dev $A_Lueften_Pos\")  } \
elsif ((ReadingsVal(\"Rollladen.Automatik.abends\",\"state\",\"nv\") eq \"on\" ) and (AttrVal(\"$dev\",\"Auto_Modus_runter\",\"aus\") ne \"aus\") and (ReadingsVal(\"$A_Drehgriffkontakt\",\"state\",\"\") eq \"open\" )) {fhem (\"setreading $dev Automatik_automatische_Fahrt 1;;setreading $dev Automatik_Pos_vor_Geoeffnet 0;;set $dev $A_Geoeffnet_Pos\") } \
elsif ((ReadingsVal(\"Rollladen.Automatik.abends\",\"state\",\"nv\") eq \"on\" ) and (AttrVal(\"$dev\",\"Auto_Modus_runter\",\"aus\") ne \"aus\") and (ReadingsVal(\"$A_Drehgriffkontakt\",\"state\",\"\") eq \"closed\" )) {fhem(\"setreading $dev Automatik_automatische_Fahrt 1;;set $dev off\") }}";
}


Und das stößt beim Aufrufen der Routine während des Systemstarts anscheinend auf. Die ats werden aber korrekt angelegt und funktionieren auch.

Da ich das alles momentan aber umbaue (es kommt nur noch der Aufruf einer Perl-Routine mit Übergabe des Rollladennamens in das at und der Rest wird dann in der Perl-Routine abgefragt und behandelt), wird sich das Problem in Kürze selber erledigen. Ich frage mich nur, was da zu den genannten Meldungen führt. Lauffähig ist das Resultat ja nachher ohne jeglichen Fehler...

Grüße Bernd

CoolTux

Gib mal bitte ein List von diesem at.


if ((ReadingsVal(\"Rollladen.Automatik.abends\",\"state\",\"nv\") eq \"on\" ) and (AttrVal(\"$dev\",\"Auto_Modus_runter\",\"aus\") ne \"aus\") and (ReadingsVal(\"$A_Drehgriffkontakt\",\"state\",\"\") eq \"tilted\" )) {fhem (\"setreading $dev Automatik_automatische_Fahrt 1;;setreading $dev Automatik_Pos_vor_Geoeffnet 0;;set $dev $A_Lueften_Pos\")  } \


Ich gehe davon aus das dies ein Auszug aus Deiner fhem.cfg ist. Ich gebe dafür keinen Support weil man alles über das Webinterface machen kann und sollte.
Auf jeden Fall sind die Backslash bis auf das hinterste völlig falsch. Ein Wunder das es überhaupt geht.
Wenn Du das über das Webinterface anlegen oder bearbeiten würdest, würdest du eine Fehlermeldung mit Syntaxerror bekommen.


Daher bitte ein list vom at und dann schauen wir mal wie man es sauber in der FHEMWEB Oberfläche hinbekommt. Es sei denn natürlich Du hast kein Interesse am Lernfaktor, dann kannst es auch so lassen  ;)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Cluni

Zitat von: CoolTux am 23 Juni 2017, 12:48:28
Ich gehe davon aus das dies ein Auszug aus Deiner fhem.cfg ist. Ich gebe dafür keinen Support weil man alles über das Webinterface machen kann und sollte.

Nein, ist nicht aus der fhem.cfg. Darin habe ich noch nie etwas von Hand geändert. Der obige Ausschnitt ist aus einer Perl-Routine, die mir die ats jede Nacht neu berechnet - je nach Einstellung in den User-Attributen des Rollladens berechne ich die Zeiten für den kommenden Tag für rauf und runter. Dabei werden u.A. Sonnenauf- und Untergangszeiten, früheste / späteste Zeiten für die Fahrt, zusätzliche Zusatzzeiten, Fensterkontakte, und und und... berücksichtigt.

Das erzeugte at sieht dann zum Beispiel nachher so aus (direktes list eines automatisch erzeugten at):

Internals:
   CFGFN
   COMMAND    {
if ((ReadingsVal("Rollladen.Automatik.abends","state","nv") eq "on" ) and (AttrVal("Rol.Bad","Auto_Modus_runter","aus") ne "aus") and (ReadingsVal("Sensor.Bad","state","") eq "open" )) {fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;setreading Rol.Bad Automatik_Pos_vor_Lueften 0;set Rol.Bad 40")  }
elsif ((ReadingsVal("Rollladen.Automatik.abends","state","nv") eq "on" ) and (AttrVal("Rol.Bad","Auto_Modus_runter","aus") ne "aus") and (ReadingsVal("Sensor.Bad","state","") ne "open" )) { fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;set Rol.Bad off") }}
   DEF        2017-06-23T20:40:41 {
if ((ReadingsVal("Rollladen.Automatik.abends","state","nv") eq "on" ) and (AttrVal("Rol.Bad","Auto_Modus_runter","aus") ne "aus") and (ReadingsVal("Sensor.Bad","state","") eq "open" )) {fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;setreading Rol.Bad Automatik_Pos_vor_Lueften 0;set Rol.Bad 40")  }
elsif ((ReadingsVal("Rollladen.Automatik.abends","state","nv") eq "on" ) and (AttrVal("Rol.Bad","Auto_Modus_runter","aus") ne "aus") and (ReadingsVal("Sensor.Bad","state","") ne "open" )) { fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;set Rol.Bad off") }}
   NAME       Rol_Timer_runter_Rol.Bad
   NR         5067
   PERIODIC   no
   RELATIVE   no
   STATE      Next: 20:40:41
   TIMESPEC   20:40:41
   TRIGGERTIME 1498243241
   TRIGGERTIME_FMT 2017-06-23 20:40:41
   TYPE       at
   VOLATILE   1
   Readings:
     2017-06-23 03:05:01   state           Next: 20:40:41
Attributes:
   icon       fts_shutter_automatic@green
   room       Timer


Zitat von: CoolTux am 23 Juni 2017, 12:48:28
Auf jeden Fall sind die Backslash bis auf das hinterste völlig falsch. Ein Wunder das es überhaupt geht.

Denke ich nicht (aber lasse mich gerne eines Besseren belehren) - die sind ja da, weil nachfolgende Zeichen übernommen werden sollen.

Zitat von: CoolTux am 23 Juni 2017, 12:48:28
Wenn Du das über das Webinterface anlegen oder bearbeiten würdest, würdest du eine Fehlermeldung mit Syntaxerror bekommen.

Das ist mir klar, dass das dann anders aussehen muss.

Zitat von: CoolTux am 23 Juni 2017, 12:48:28
Daher bitte ein list vom at und dann schauen wir mal wie man es sauber in der FHEMWEB Oberfläche hinbekommt. Es sei denn natürlich Du hast kein Interesse am Lernfaktor, dann kannst es auch so lassen  ;)

Lernen ist immer gut - nobody is perfect. Aber ich will es ja nicht direkt in der Fhem-Oberfläche eingeben, weil sich ja zum einen die Zeiten täglich ändern und zum anderen die restlichen Einstellungen in den Attributen des Rollladens ja ggf. auch.  Die ganzen if/elsif und else fliegen eh in Kürze raus auf dem at und dann ist nur noch ein Routinenaufruf mit Übergabe des Rollladennamens da. Aber wie mehrmals gesagt - ich wüsste schon gerne, warum das zu der nachricht führt...