Zeile in fhem.cfg per sed ersetzen bzw. ggfls. hinzufügen

Begonnen von FunkOdyssey, 23 Januar 2018, 16:57:05

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Hallo, ich suche einen pfiffigen Linux-Profi, der mir einen Tipp geben kann. :-)

Ich möchte folgendes erreichen:
- fhem.cfg prüfen, ob "attr global nofork 1" gesetzt ist.
- wenn "attr global nofork 0", dann mit "attr global nofork 1" ersetzen.
- wenn nicht vorhanden, dann "attr global nofork 1" hinzufügen.

Das hier ist nur die halbe Lösung:
#!/bin/sh
cd /opt/fhem
if ! grep -q "attr global nofork 1" "fhem.cfg"; then
   sed -i '/attr global nofork 0/c\attr global nofork 1' fhem.cfg
fi
perl fhem.pl fhem.cfg


Mein Probleme:
- Füge ich mit echo hinzu, so habe ich die Zeile irgendwann mehrfach in der fhem.cfg.
- Ersetze ich mit sed, so werden nicht vorhandene Zeilen halt nicht berücksichtigt.

Habt ihr eine Idee?

Vielen Dank.

JoWiemann

Hm, das externe verändern der fhem.cfg führt erst nach einem Neustart zum Erfolg. Warum lässt Du das Fhem nicht selber machen.

Hier ein List, das etwas ähnliches macht:


Internals:
   DEF        global:INITIALIZED attr global motd none
   NAME       Dev_Motd
   NOTIFYDEV  global
   NR         721
   NTFY_ORDER 50-Dev_Motd
   REGEXP     global:INITIALIZED
   STATE      2018-01-17 19:23:25
   TYPE       notify
   READINGS:
     2018-01-17 19:22:47   state           active
Attributes:
   room       System


Gruß Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Otto123

Hi,

wenn Du einfach diesen Quatsch unterlässt  ;D ;D ;D und in der FHEM Kommandozeile
attr global nofork 1 und enter eingibst ist das Ziel erreicht.

Leider zu einfach ...

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

FunkOdyssey

He he. Ich kenne eure Einstellung dazu. Ich habe die gleiche Meinung. Ich bearbeite die fhem.cfg nie direkt. Hier geht es aber nicht anders, weil ich das Attribut halt vor dem Fhem-Start setzen muss. Fhem ist noch nicht aktiv. Somit geht Telnet auch noch nicht.
Ich muss Fhem halt im Vordergrund laufen lassen.

Otto123

#4
ok sorry, so hatte ich das nicht verstanden  :D  :-[
Und fhem ist "neu"? Sicher nicht ....  :o
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

JoWiemann

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

betateilchen

wenn es nur darum geht, überhaupt eine Zeile mit attr global nofork 1 zu haben, würde ich gar nicht erst danach suchen, sondern einfach zwei Dinge tun:



sed -i /nofork/d fhem.cfg
echo attr global nofork 1 >> fhem.cfg


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

FunkOdyssey

Danke euch. Suchen - Zeile löschen und neu anhängen ist super. Das wird es sein. Merci.

justme1968

hinten anhängen reicht völlig:echo attr global nofork 1 >> fhem.cfg

das letzte setzen des attributs 'gewinnt'
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

FunkOdyssey

Nee, die Hoffnung hatte ich auch. Bis mir dann ein paar dieser Zeilen aufgefallen ist.
Ich kann das aber gerne mal in einer ruhigen Minute ausprobieren.

betateilchen

Zitat von: FunkOdyssey am 23 Januar 2018, 21:39:40
Nee, die Hoffnung hatte ich auch. Bis mir dann ein paar dieser Zeilen aufgefallen ist.

Ja, aber das stört nicht, denn wie Andre schon sagte: das letzte Setzen des Attributes bestimmt den Inhalt des Attributes. Und die globalen Attribute werden sehr früh im Startprozess von FHEM gesucht und gesetzt, bevor irgendwelche davon abhängige Aktionen ausgeführt werden. Egal, an welcher Stelle (bezogen auf die Reihenfolge) sie in der Konfiguration auftauchen.

Spätestens nach dem nächsten "save config" sind ggf. doppelte Einträge dann verschwunden und die Attribute sollten alle hintereinander stehen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!