label data-substitution

Begonnen von Sailor, 27 April 2020, 12:50:04

Vorheriges Thema - Nächstes Thema

Sailor

Ein herzerfrischendes "Moin" vom achtern Diek vorwech!

Ich verzweifle an dem "data-substitution" des fhem ftui Widgets "label".

<div data-type = "label"
data-device = "OS_DoorBird"
data-get = "HistoryFilePath_doorbell_Video_00_Timestamp"
data-substitution = "s/^(![0-9]).*/Not available/g">
</div>


Entweder ist der String leer oder er enthält einen Timestamp "2020-04-27 12:43".

Wenn das Reading leer ist bzw. gar nicht existiert soll das Label "Not available" ausspucken...

Das kann doch nicht so schwer sein, oder?

Danke für eure Hilfe!

Gruß
    Sailor
******************************
Man wird immer besser...

amenomade

Was Du hier machst, ist: wenn das Reading mit "!" gefolgt von einer Zahl anfängt, dann "Not available"
Versuch mal mit

s/(^$)/Not available/g
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Sailor

Hallo amenomade

Zitat von: amenomade am 27 April 2020, 22:18:43
Versuch mal mit
s/(^$)/Not available/g

Funktioniert leider nicht. Ich vermute, dass es nicht funktioniert, weil das Reading nicht vorhanden ist.
Genau dann sollte er es ja anzeigen... Vielleicht muss ich wohl allen Uebels im Widget-Imae.js rumwurschteln.
Und das obwohl ich keine Ahnung von JavaScript habe...  :o

Gruß
   Sailor
******************************
Man wird immer besser...

amenomade

Ja, ich hatte verstanden, dass es evtl. leer sein kann. Aber gar nicht vorhanden ist eine andere Geschichte: wie kann dann die Aktualisierung getriggert werden?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

mr_petz

Hi, kannst doch ein neues userreading im Device erzeugen lassen und das dann ausgeben:
Bsp,:

MyReading { if (ReadingsVal("$name","HistoryFilePath_doorbell_Video_00_Timestamp",0)) {(ReadingsVal("$name","HistoryFilePath_doorbell_Video_00_Timestamp",0))} else {"Not available"}},

habe es bei mir getestet...
mfg

Sailor

Hallo Mr. Petz

Zitat von: mr_petz am 28 April 2020, 20:05:54
Hi, kannst doch ein neues userreading im Device erzeugen lassen und das dann ausgeben:
Bsp,:

MyReading { if (ReadingsVal("$name","HistoryFilePath_doorbell_Video_00_Timestamp",0)) {(ReadingsVal("$name","HistoryFilePath_doorbell_Video_00_Timestamp",0))} else {"Not available"}},


Danke, aber
a) die _00_ gibt einen Index bis n vor der bis 50 gesetzt werden kann, aber nicht muss.
b) "doorbell" ist eine von 4 (doorbell, motion, keypad, manual)
c) "Video" ist eine von 2 Möglichkeiten (Image, Video)

Das macht 50 * 5 * 2 = 500 Moeglichkeiten * 2 Readings = 100 Readings.

Ich denke ich fasse das 73_DoorBird.pm - Modul nochmal an.

Gruß
    Sailor
******************************
Man wird immer besser...

Sailor

Hallo Amenomade

Zitat von: amenomade am 28 April 2020, 18:45:39
Ja, ich hatte verstanden, dass es evtl. leer sein kann. Aber gar nicht vorhanden ist eine andere Geschichte: wie kann dann die Aktualisierung getriggert werden?

Sorry, war ein Missverständnis meinerseits.

Es kann sein, das das Reading vorhanden ist. Dann gibt es einen Dateipfad zu einer vorhandenen Datei.
In dem Reading mit TimeStamp, wird das Erstellungsdatum der Datei abgelegt.
Gibt es diese Datei nicht, werden diese beiden Readings gar nicht erst erzeugt.
In dem Reading mit _00_ liegt die jüngste Datei.

Das funktioniert auch sehr gut, bis auf die Tatsache, dass der Label leer bleibt, wenn er nicht vorhanden ist.

Ein "data-alt-text"  (alternative text) waere hier hilfreich.

Gruß
    Sailor
******************************
Man wird immer besser...

mr_petz

#7
Aber dann müsstest du ja auch wie du sagst "1000" Labels und entsprechenden data-get anlegen??? oder verstehe ich was falsch???
Im label wird ja im get das Reading angegeben, also zBsp. HistoryFilePath_doorbell_Video_00_Timestamp.
Wie willst du alle get´s unter einen Hut bekommen?
Ich will es nur verstehen...
mfg

Sailor

Hallo Mr. Petz

Zitat von: mr_petz am 28 April 2020, 22:27:21
Aber dann müsstest du ja auch wie du sagst "1000" Labels und entsprechenden data-get anlegen??? oder verstehe ich was falsch???
Im label wird ja im get das Reading angegeben, also zBsp. HistoryFilePath_doorbell_Video_00_Timestamp.
Wie willst du alle get´s unter einen Hut bekommen?
Ich will es nur verstehen...

Fast richtig,

Es gibt natürlich eine Obergrenze als Attribut. Aber wenn es Jemand auf die Pitze treiben will, könnte er es...

Ich persönlich habe das Ganze auf die letzten 5 = 40 Readings Maximum begrenzt.

Jetzt kann ich mir mittels dieser Readings im ftui eine entsprechendes Popup fuer die Historie aus dem Hut zaubern.
******************************
Man wird immer besser...

mr_petz

Dann würde ich eine readingsgroup erstellen und mit valueformat das ausgeben was da ist, ansonsten "keine Daten vorhanden" Bsp.:


valueFormat { if (defined $VALUE) {return $VALUE;;;;} else { return 'keine Daten vorhanden';;;;} }


und mit dem readingsgroup-widget in ftui anzeigen lassen.
ist so ein gedanke...
mfg