[gelöst] Ausgabe exportdevice über Raw definiton importieren ...

Begonnen von Ellert, 12 November 2016, 12:25:21

Vorheriges Thema - Nächstes Thema

Ellert

Beim Versuch, ein mehrzeiliges DOIF, dass mit exportdevice testdi quote exportiert wurde über "Raw definition" zu importieren, gibt es eine Fehlermeldung (testdi DOIF: no left bracket of condition:).

Das Verhalten kann mit dem im DEF-Editor erstellten DOIF nachgestellt werden.
define testdi DOIF ##1
([0])

dann in der Eingabezeile des FHEMWEB-Frontends
exportdevice testdi quote
und die Ausgabe der Definition kopieren und Raw definition öffnen, den Inhalt löschen, die kopierte Ausgabe einfügen, define in defmod ändern und Execute commands drücken.

Bei der Ausgabe von exportdevice im Frontend oder bei der Darstellung der Ausgabe wird an jede Zeile ein Leerzeichen angehängt, das bei mehrzeiligen DOIF-Definitionen zu Import-Fehlermeldungen führt.

Wäre es möglich den Export, Ausgabe im Frontend und Import zu harmonisieren? Andernfalls müsste man die Ausgabe in einen Editor kopieren und jeweil das letzte Leerzeichen jeder Zeile entfernen.

rudolfkoenig

Bei mir funktioniert ein Export/Import, wenn ich ausschliesslich ueber FHEMWEB/Raw definition gehe.
Gibt es einen Grund, mit exportdevice zu exportieren und mit Raw-Definition zu importieren?

Ellert

Ja, wenn man Codebeispiele "ready to run" zur Verfügung stellen möchte, dann kann man mit exportdevice <defspec> dependent quote alle dazu gehörenden Geräte auf einmal exportieren.

Daher wäre es schön, wenn die störenden Leerzeichen beseitigt werden.

Noch besser wäre es, wenn exportdevice eine Option reallyflat hätte und nur Code ausgegeben würde. Oder, wenn Raw device auch alle abhängigen Geräte anzeigen würde, wäre es auch gut.

Dann könnte man so etwas auf einen Schlag importfähig exportieren
   define schrittSchalterDOIF DOIF ## 1 \
(["taster1ext:short"] and $cmd=~"0|4") \
   (set lampe1 on)\
## 2\
DOELSEIF (["taster1ext:short"] and $cmd==1) \
   (set lampe2 on, set lampe1 off)\
## 3\
DOELSEIF (["taster1ext:short"] and $cmd==2) \
   (set lampe(1|2) on)\
## 4\
DOELSEIF (["taster1ext:short"] and $cmd==3) \
   (set lampe(1|2) off)
attr schrittSchalterDOIF cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4
attr schrittSchalterDOIF group Schrittschalter
attr schrittSchalterDOIF room DOIF Labor

    define lampe1 dummy
    attr lampe1 group Schrittschalter
    attr lampe1 room DOIF Labor

    define lampe2 dummy
    attr lampe2 group Schrittschalter
    attr lampe2 room DOIF Labor

    define taster1ext dummy
    attr taster1ext group Schrittschalter
    attr taster1ext room DOIF Labor
    attr taster1ext setList short long
    attr taster1ext webCmd short:long


marvin78

Ich verstehe nicht, wofür man exportdevice überhaupt benötigt. Es gibt doch die RAW-Definition!?

@Rudi: Könnte man das nicht wieder ausbauen? Es ist mEn redundant.

Ellert

@marvin78
Mit exportdevice kann man mit einem Schlag alle abhängigen Geräte mit exportieren, indem die option dependent verwendet wird.

Das ist dann sinnvoll, wenn in einer Definition mehrere Geräte zitiert werden, wie z.B. beim DOIF oder notify. Würde man  Raw definition verwenden, dann müsste man für jedes abhängige Gerät die Geräteansicht aufrufen und einzeln exportieren.

Was ist daran redundant?

Redundanz ist kein Übel, sondern erhöht die Vielfältigkeit. Sonst könnte man auch notify ausbauen, weil es DOIF gibt  ;)

igami

Es gibt sich auch noch list -r. Wenn ich das richtig in Erinnerung habe hat das auch gut funktioniert als ich mein fhem vom cubietruck auf das pi 3 umgezogen habe.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

marvin78

Zitat von: Ellert am 13 November 2016, 09:12:31

Redundanz ist kein Übel, sondern erhöht die Vielfältigkeit. Sonst könnte man auch notify ausbauen, weil es DOIF gibt  ;)

Du hast notify und DOIF nicht verstanden. Da ist nichts redundant. DOIF ist aber in der Tat nicht unbedingt nötig, da man alles was DOIF kann, auch anders abbilden könnte. Das ist aber OT.

Das mit den abhängigen Geräten funktioniert ohnehin nicht zuverlässig (bzw. garnicht) wenn man RegEx verwendet. Im Grunde muss man immer noch schauen, ob man alles erwischt hat. Ich halte exportdevice weiterhin für überflüssig.


Ellert

In der sub "CommandExportdeviceGetBlock" sollten die Ersetzungen unter den Kommentaren "# device definition" und "# device attributes" nicht mit "\n" erfolgen sondern mit "\r". Dann werden im WEB-Frontend keine Leerzeichen angehängt und die Ausgabe von "exportdevice" passt zum Import mit "Raw definition."

Anliegend die angepasste Datei.

rudolfkoenig

Habe jetzt ein 'Dump "Probably associated with" too' checkbox in FHEMWEB eingebaut, sichtbar wenn man 'Raw definition' aufklappt.

Ellert

Vielen Dank fürs Einbauen, das weckt leider neue Begehrlichkeit.

Wäre es auch möglich Devices über eine Regex und Filter  auflisten zu lassen, wie <devspec>, dann könnte sowas, wie group=ABC gefiltert werden?

rudolfkoenig

Das ueberlassen wir mal exportdevice. Ich will "Raw definition" einfach halten....