Verständnisfrage: DOIF mit Thermostat

Begonnen von curt, 01 Oktober 2020, 02:02:58

Vorheriges Thema - Nächstes Thema

Otto123

@sany irgendwie bist Du komisch: Siehe mein Code
Zitatdeleteattr mein_doif do
und wait hatte ich nicht eingesetzt.

In der letzten Frage von curt gab es beide Attribute nicht. Ich weiß nicht was Du hier konstruieren willst.  :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

curt

#16
Zitat von: Sany am 08 Oktober 2020, 14:16:00
Hallo curt,
ich hab mal was gebastelt, hier als raw um es direkt einzufügen:
....
Viel Erfolg!

@Sani
Es ist nicht nur so, dass Dein Beispiel wunderbar funktioniert. Es ist auch so, dass ich nun (ansatzweise) verstehe, wie DOIF funktioniert. Ich bin Dir sehr dankbar, wenn ich könnte, würde ich Dir meinen golden angemalten Papp-Orden "Freundlicher Helfer des Tages" umhängen: Danke!

Wie es immer so ist: Ein gelöstes Problem bekommt in dieser Sekunde Kinder ... ich habe zwei neue Fragen:

1) Ich habe eine readingsgroup Heizwerte, da werden alle Thermostaten dargestellt. Das sieht derzeit so aus:
define Heizungswerte readingsGroup <%sani_heating>,<Act>,<Soll>,<Ist>,< > .*:FILTER=modelId=0148-0003-0001:valve,desiredTemp,temperature,thermostatMode,battery


Da wäre ja nun schön, wenn ich dieses schöne DOIF mit integrieren könnte - wie macht man das denn?

@Damian
Du hast doch in Deinem Avatar diese schöne Anzeige und hattest mir per PN erklärt, wie das im attr gehen kann. Doofe Frage: Wie könnte ich das denn hier (zwei Temperaturen) integrieren? Vermutlich nicht direkt im DOIF, aber irgendwie schon in der readingsgroup ... nur: Wie?

Danke für eure Langmut mit mir.

P.S: @Otto123
Erst jetzt gelesen ... Du bist immer so fürchterlich schnell und setzt so viel bei anderen voraus ... das macht es (wenigstens mir) schwer. Ist da für mich was relevant? Sprich: Muss ich da noch was zusätzlich integrieren? Oder leistest Du Dir "nur" einen akademischen Streit mit @sany?
RPI 4 - Jeelink HomeMatic Z-Wave

Damian

Zitat von: curt am 09 Oktober 2020, 01:38:37
Du hast doch in Deinem Avatar diese schöne Anzeige und hattest mir per PN erklärt, wie das im attr gehen kann. Doofe Frage: Wie könnte ich das denn hier (zwei Temperaturen) integrieren? Vermutlich nicht direkt im DOIF, aber irgendwie schon in der readingsgroup ... nur: Wie?

Wie schon geschrieben, handelt es sich um SVG-Widgets, die direkt im jeweiligen DOIF über das DOIF-Attribut uiTable nutzbar sind. Damit kannst du alle Informationen, die irgendwo in FHEM gespeichert sind, über die Angabe [<Device>:<Reading>] darstellen. Du brauchst keine weiteren Module oder Dummys, siehe https://wiki.fhem.de/wiki/DOIF/uiTable_Schnelleinstieg#SVG-uiTable-Funktionen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Zitat von: curt am 09 Oktober 2020, 01:38:37
P.S: @Otto123
Erst jetzt gelesen ... Du bist immer so fürchterlich schnell und setzt so viel bei anderen voraus ... das macht es (wenigstens mir) schwer. Ist da für mich was relevant? Sprich: Muss ich da noch was zusätzlich integrieren? Oder leistest Du Dir "nur" einen akademischen Streit mit @sany?
Alles gut. Ich habe immer gedacht ich erkläre es umfassend - aber nun bin ich fürchterlich, schnell und nicht relevant. Streiten will ich mich schon gar nicht  ;D

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

curt

#19
Ach manno :( @Otto123
Natürlich bist Du nicht fürchterlich. Ich schrieb was ganz anderes, lies bitte nochmal.

Vielleicht hast Du auch etwas Zeit für mich:
Ich möchte diese DOIF in eine readingsgroup integrieren. Leider weiß ich nicht ob das geht und wie das gehen könnte. Schau mal bitte den Screenshot, es geht um die Tabelle unten, das ist die readingsgroup. Da wäre ja ganz schön, wenn für jeden Eintrag, also jeden Thermostaten so ein Klapp-Runter-Menü (also das zugehörige DOIF) ganz rechts in der Tabelle stehen würde.

Die readingsgroup sieht so aus ():

define Heizungswerte readingsGroup < >,<Ventil>,<Soll>,<Ist>,<Modus>,<Batterie>,<doif> .*:FILTER=modelId=0148-0003-0001:valve,desiredTemp,temperature,thermostatMode,battery,di_.*
attr Heizungswerte nameStyle style="color:blue"
attr Heizungswerte room 10 Heizung
attr Heizungswerte sortby 1
attr Heizungswerte valueFormat {valve => "%.0f\%",desiredTemp => "%.1f",temperature => "%.1f"}


Und ich habe nun acht DOIF, für jeden Thermostaten eine, so sieht das derzeit aus:

define di_Thermostat_Wohnzimmer DOIF ([$SELF:"SollWohnzimmer"])\
   (set Thermostat_Wohnzimmer desired-temp [$SELF:SollWohnzimmer];; sleep 3;; set Thermostat_Wohnzimmer desired-temp [$SELF:SollWohnzimmer];; sleep 3;; get Thermostat_Wohnzimmer setpoint)
attr di_Thermostat_Wohnzimmer do always
attr di_Thermostat_Wohnzimmer event-on-change-reading SollWohnzimmer
attr di_Thermostat_Wohnzimmer readingList SollWohnzimmer
attr di_Thermostat_Wohnzimmer room 10 Heizung
attr di_Thermostat_Wohnzimmer setList SollWohnzimmer:8,17,18,19,20,21,21.5,22,22.5,23
attr di_Thermostat_Wohnzimmer stateFormat gewaehlt: SollWohnzimmer
attr di_Thermostat_Wohnzimmer webCmd SollWohnzimmer


Ich hatte da bei der readingsgroup ganz hinten di_.* hingeschrieben. Aber das war wohl zu naiv gedacht.

Wie geht es richtig?
RPI 4 - Jeelink HomeMatic Z-Wave

Otto123

He da war ein Grinsgesicht dahinter, ich habe es schon richtig gelesen  ;D
Ich bin für DOIF und Readinsgroup nicht so der McGyver ;) aber:

Dein define für die RG enthält dies .*:FILTER=modelId=0148-0003-0001:valve,desiredTemp,temperature,thermostatMode,battery
Das bedeutet nimm jedes Device (.*) welches dem Filter modelId entspricht und dann dort die Readings valve usw.

Da kannst Du nicht einfach mit Komma getrennt die Namen deiner DOIFs dahinter setzen (di_.*) da kannst Du nur ein weiters Reading von der Gruppe Geräte in deinem Filter nehmen!
Was Du dahinter setzen willst ist eine setList und kein Reading, das passt schon vom Namen her nicht.

Allerdings glaube ich, ich habe sowas schon mit einer RG als Lösungsansatz gesehen, aber das hat dann mit deinem DOIF nichts zu tun. Ich bin da aber nicht sicher, kann sein da täusche ich mich.

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

curt

Zitat von: Otto123 am 11 Oktober 2020, 14:37:38
He da war ein Grinsgesicht dahinter, ich habe es schon richtig gelesen  ;D

Erschreck mich nicht immer so! Ich dachte ernsthaft, Du wärst beleidigt.

Zitat von: Otto123 am 11 Oktober 2020, 14:37:38
Dein define für die RG enthält dies .*:FILTER=modelId=0148-0003-0001:valve,desiredTemp,temperature,thermostatMode,battery
Das bedeutet nimm jedes Device (.*) welches dem Filter modelId entspricht und dann dort die Readings valve usw.

Das ist klar.

Zitat von: Otto123 am 11 Oktober 2020, 14:37:38
Da kannst Du nicht einfach mit Komma getrennt die Namen deiner DOIFs dahinter setzen (di_.*) da kannst Du nur ein weiters Reading von der Gruppe Geräte in deinem Filter nehmen!

Die Namenskonvention ist (bei mir) identisch. Meine Hoffnung war, dass .* dann auch das zuständige DOIF matcht.

Zitat von: Otto123 am 11 Oktober 2020, 14:37:38
Was Du dahinter setzen willst ist eine setList und kein Reading, das passt schon vom Namen her nicht.

Ich finde mehrere Beiträge, die ich so lesen will, dass das geht. Die Aussage allein nutzt aber wenig. Und leider ist die FHEM-Gemeinde eher nicht so freigiebig mit Beispielen ... wenn wir eins hätten, wäre ich einen großen Schritt weiter.
RPI 4 - Jeelink HomeMatic Z-Wave

Sany

Hallo curt,

ich denke Du hast (mindestens) 2 Möglichkeiten:
1. deine ReadingsGroup verwenden: schau mal im Wiki readingsgroup:
https://wiki.fhem.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate
hier mal im Code nach <sollsetz> suchen und die commadref zu readingsgroup, Stichwort "commands" zu Rate ziehen. Ich würde mal behaupten, das ist genau was Du willst (und das DOIF wird wohl gar nicht gebraucht, da die DropDown Auswahl in der Readingsgroup gemacht wird.
2. DOIF. Ich weiss nicht, wie gut Du Dich damit auskennst, aber Damian hat DOIF so vielfältig erweitert, dass das alles in einem einzigen DOIF geht.
Stichworte: uiTable,Template und Perl-Modus. In Deinem Fall geht es ja um eine Tabelle für die Heizungsthermostaten. Im Prinzip stehen in jeder Zeile die verschiedenen Werte sowie die Eingabemöglichkeit. Also brauchst Du die [Device:Reading] definitionen der Werte und ein Select-Widget für die Auswahl.
Dann noch ein Array mit den verschiedenen Thermostatnamen füttern und per FOR-Schleife die Tabelle erzeugen lassen.
3. bestimmt gibts noch mehr....

Falls Du mit DOIF im Perlmodus und uiTable noch nichts am Hut hast, dann kannst Du das ja mit der Readingsgroup mal versuchen. Falls Du DOIF-mäßig schon vorbelastet bist dann würde ich es mit DOIF machen, gerade mit Templates, Generalisierung und uiTable bist Du maximal flexibel. Es ist aber nicht unbedingt die leichteste Übung, da reinzukommen. Aber mit den ersten Erfolgen kommt der Spaß am weitermachen.

Viel Erfolg!
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....