neues Attribut: uiTable - DOIF User Interface, neues Attribut: DOIF_Readings

Begonnen von Damian, 07 Oktober 2017, 23:29:48

Vorheriges Thema - Nächstes Thema

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

Hallo Damian,

es geht auch um die DOIF-Bedingung. Da ich im DOELSIF den gleichen Timer in Kombination mit einer anderen Bedingung verwende, dachte ich, mit DOIF_Readings liese sich das vereinfachen und übersichtlicher machen, zumal die rand Funktion natürlich in jedem Zweig eine andere Zahl zurückliefert, was ich eigentlich gar nicht brauche...

Aber ich verstehe Deine Antwort jetzt mal so, dass man mit DOIF_Readings keine "Uhrzeit" berechnen kann, die dann als Zeit für den Timer verwendet werden kann.

Danke für die Rückmeldung
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Damian

Zitat von: ToKa am 22 Januar 2018, 21:48:13
Hallo Damian,

es geht auch um die DOIF-Bedingung. Da ich im DOELSIF den gleichen Timer in Kombination mit einer anderen Bedingung verwende, dachte ich, mit DOIF_Readings liese sich das vereinfachen und übersichtlicher machen, zumal die rand Funktion natürlich in jedem Zweig eine andere Zahl zurückliefert, was ich eigentlich gar nicht brauche...

Aber ich verstehe Deine Antwort jetzt mal so, dass man mit DOIF_Readings keine "Uhrzeit" berechnen kann, die dann als Zeit für den Timer verwendet werden kann.

Danke für die Rückmeldung
Torsten

Kann man schon, allerdings muss man dann schon Perl bemühen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

Hallo Damian,

wie müsste das dann aussehen? Der Perl-Ausdruck in runden Klammern oder geschweiften Klammern? Kann dann das Triggern mit den eckigen Klammern trotzdem noch genutzt werden?

Sorry für die Nachfrage, aber ich bin kein Perl-Fachmann... und mit Zeiten rechnen klingt für mich kompliziert.

Gruß
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Damian

Zitat von: ToKa am 22 Januar 2018, 22:13:29
Hallo Damian,

wie müsste das dann aussehen? Der Perl-Ausdruck in runden Klammern oder geschweiften Klammern? Kann dann das Triggern mit den eckigen Klammern trotzdem noch genutzt werden?

Sorry für die Nachfrage, aber ich bin kein Perl-Fachmann... und mit Zeiten rechnen klingt für mich kompliziert.

Gruß
Torsten

Suche mal nach "time_str2num".

DOIF_Readings sind schon Perl, man braucht keine Klammern, DOIF-Angaben in eckigen Klammern triggern und können wie eine Perlfunktion überall eingesetzt werden.

DOIF_Readings <readingname>:<Perl mit [DOIF-Syntax in eckigen Klammern]>
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

RoBra81

Hallo,

Ich möchte zur Zeit bestimmte Attribute von vielen Devices bearbeiten und suche nach einer bequemen Möglichkeit hierfür. Natürlich kann ich mit regex arbeiten und die Attribute für mehrere Devices setzen, aber nicht alle sind gleich. Da ich viel mit copy und paste arbeite, habe ich oft mindestens zwei Seiten offen zwischen denen ich hin und her wechsele. Optimal wäre eine Tabelle mit den entsprechenden bearbeitbaren Attributen für einige bestimmte Devices. Und daher meine Frage: wäre eine Verwendung von uiTable für dieses Szenario denkbar?

Ronny

Gesendet von meinem SM-G935F mit Tapatalk


Ellert

Du kannst Widgets an Attribute binden, siehe Antwort #88 und statt $SELF einen beliebigen Gerätenamen verwenden.

RoBra81

Ich habe es jetzt mal so probiert:

WID([OG.ez.HZ.Heizkoerperventil.Clima:T2F_rooms],"textField","attr")

Damit erscheint ein leeres Textfeld und wenn ich reinklicke, wird das Attribut T2F_rooms des Gerätes OG.ez.HZ.Heizkoerperventil.Clima auf 1 gesetzt?! Was muss ich noch machen, damit der Inhalt des Textfeldes korrekt initialisiert wird?

Ronny

Ellert

Das Binden eines Widgets an ein Attribut ist eher ein Nebeneffekt, die Übernahme des vorhandenen Wertes scheint nicht zu funktionieren.

Da wirst Du uiTable zu dem von Dir gedachten Zweck nicht verwenden können.

Du könntest es über weblink und HTML versuchen. Dabei die Attibut-Schnittstelle von FHEMWEB nachbilden. Wie FHEMWEB  die Attributtabelle aufbaut kannst Du Dir in der Browser-Konsole ansehen, wenn Du Javascript ausschaltest und Dir die Detailseite ansiehst, siehe Beispiel.

Ellert

Attributauswahl für uiTable

Als Baustein für uiTable habe ich die Funktion
FUNC_attrTable("<kommagetrennte Liste von Gerätenamen>")
erstellt, die für die angegebenen Geräte die Attributauswahl in die uiTable schreibt.
Der Code stammt grösstenteils aus 01_FHEMWEB.pm

Ein Beispiel als "Raw definition" ist angehängt.

Edit: Code bereinigt.

EIB-Fan

Hallo Damian,

habe schon einige DOIFs mit uiTable programmiert. Eine tolle Erweiterung!

Da ich in der KNX-Welt unterwegs bin, habe ich bei der Umsetzung Probleme. Bei KNX gibt es in der Regel zwei Readings (Gruppenadressen) für Schalten und Status.

Beispiel aus der commandref:
define lamp2 KNX 0/10/12:dpt1:steuern 0/10/13:dpt1.001:status

Nun möchte ich bei meinen Rollladen uiTable anwenden. Allerdings bringt mein DOIF immer den Fehler "invalid value. status-get".

define ui.di.Test DOIF (1)
attr ui.di.Test room Test
attr ui.di.Test uiTable {\
$SHOWNOSTATE=1;;\
$TPL{shutter}='iconRadio,@darkorange,0,fts_shutter_10,30,fts_shutter_30,50,fts_shutter_50,80,fts_shutter_80,100,fts_shutter_100';;\
}\
\
"Arbeiten"|WID([R106M:status-get],$TPL{shutter},"set")


Wie muss ich den set-Teil programmieren? Aus fhem würde der Befehl so lauten:
set R106M position 50

Viele Grüße
Jens

Ellert

Versuch mal bei dem Fehler
Zitat,"set"
wegzulassen.

Und bei set R106M position 50
Zitat,"set"
verwenden.

EIB-Fan

Hallo Ellert,

vielen Dank!

Wenn ich das"set" aus dem uiTable weglasse, kommt die Fehlermeldung nicht mehr, allerdings fährt auch (weiterhin) der Rollladen nicht.

Der Befehl
set R106M position 50
fährt den Rollladen in die Position 50%. Es ist nur ein Beispiel für den Syntax bei KNX.

Hier noch das Device des Rolladens.
define R106M KNX 1/1/13:dpt5.001:position 1/4/13:dpt5.001:status

Was könnte ich noch testen?

Gruß Jens


Ellert

Ich kenne KNX nicht, aber wenn Du die Position mitset R106M position 50 setzt, dann muss es ein Reading "position" geben, das auf den Wert 50 gesetzt wird. Wenn es diesen Readingsnamen nicht gibt, bekommt das Widget keine Rückmeldung, das könnte zu der Fehlermeldung führen.

WID([R106M:position],$TPL{shutter},"set") sollte richtig sein.

EIB-Fan

Hallo Ellert,

danke für deine Unterstützung!

Habe es jetzt mit
WID([R106M:position],$TPL{shutter},"set")

probiert. Aus fhem heraus kann man den Rollladen jetzt ansteueren, allerdings wird der Rollladen auch außerhalb von Fhem gesteuert. Dann fehlt natürlich die Rückmeldung. Diese kommt bei mir über status/status-get.

Bei KNX gibt es ein Reading zum senden von Befehlen (in meinem Fall "position") und ein Reading zum empfangen von Zuständen (in meinem Fall "status/status-get").

Für die Ansteuerung aus dem uiTable des DOIF müsste mit dem mit dem Drücken eines Buttons (z.B. 50) ein set Befehl abgesetzt werden. Nachdem der Rollladen in die entsprechende Position gefahren ist gibt er die über status-get zurück. Erst jetzt darf der entsprechende Button (in meinem  Fall) orange werden.

Vielleicht hast du ja noch einen Tipp.

Gruß Jens