HomeMatic Funk-Statusanzeige - HM-Dis-WM55

Begonnen von Roaster, 14 November 2014, 20:33:48

Vorheriges Thema - Nächstes Thema

d.stratmann

So den Text mit einblenden hat wunderbar geklappt!
Das mit dem ändern des closed habe ich irgendwo schonmal bei schaltern mit on/off gelesen.
Ich kanns nur nicht mehr finden.

Und das mit den Farben muss ich mir in Ruhe angucken ;)

martinp876


d.stratmann

ich habe das mit dem eventmap schon versucht!
Habe hierzu in der fhem.cfg folgendes eingetragen: attr FK_BZ eventMap open:offen closed:zu
Wenn ich dann im Eventlog gucke ist das auch wunderbar.
Allerdings ist das für das Display glaube ich unrelevant, da es ja den Wert im Fensterkontakt selber abfragt und da steht immernoch closed!

Deinen vollständigen Code habe ich mir kopiert und schon wunderbar angepasst, läuft 1A!
Ich habe mit eine routine für measured-temp (myHKS) und eine für desired-temp (myHKI) gemacht, da ich diese in verschiedenen Zeilen und Farben anzeigen wollte.

,2=>"{myHZI(\"IST:\",\"HK_WZ_Clima\"," #  line 2
                         ,3=>"{myHZS(\"SOLL:\",\"HK_WZ_Clima\"," #  line 3
Dort intepretiere ich folgende Ausgabe:
Zeile 1: IST:Wert
Zeile 2: SOLL:Wert

aktuell sieht es aber so aus:
Zeile 1: Wert
Zeile 2: Wert

Hatte dann schon versucht: "{myHZS(\"SOLL:\",\"HK_WZ_Clima\"," )}" in verschiedenen Varianten, aber irgendwie bin ich noch nicht wirklich weiter gekommen!

martinp876

myLineA hast du nicht modifiziert?
schicke einmal dein
myHZS,myHZI

Zitat"{myHZS(\"SOLL:\",\"HK_WZ_Clima\"," )}"
kann nicht klappen. myLineA addiert den Parameter t,i oder c in den Aufruf. daher wird auch das )} erst dort addiert.
in der Tabelle steht also
myHZI("IST:","HK_WZ_Clima",
da  wird es komplettiert zu
myHZI("IST:","HK_WZ_Clima","t")
myHZI("IST:","HK_WZ_Clima","c")
myHZI("IST:","HK_WZ_Clima","i")

damit es mit eval ausgeführt wird kommen die  {} dazu. die internen " müssen mit \" eingegebenwerden, damit sich nicht vorab interpretiert werden.

und noch ein tip zur verbesserung der Sichtbarkeit:
anstelle von
                        { 1=>"{myTh(\"s1:\",\"h_s_s1\","    #  line 1
kann man mit ' arbeiten. das verhindert generell das interpretieren der ". damit kann man also schreiben
                        { 1=>'{myTh("s1:","h_s_s1",'    #  line 1
was deutlich schöner zu lesen ist.

d.stratmann

So:

sub myHZI($$$){
  my ($p,$e,$t) = @_;
  if($t eq "t"){return    ReadingsVal($e,"desired-temp","no")  }
  if($t eq "c"){return    ReadingsVal($e,"desired-temp",0)>22 ? "red" : "blue" }
  if($t eq "i"){return    ReadingsVal($e,"ValvePosition",0)    ? "on"  : "off"  }
  return "nix";
}
sub myHZS($$$){
  my ($p,$e,$t) = @_;
  if($t eq "t"){return    ReadingsVal($e,"measured-temp","no")  }
  if($t eq "c"){return    ReadingsVal($e,"measured-temp",0)>22 ? "red" : "blue" }
  if($t eq "i"){return    ReadingsVal($e,"ValvePosition",0)    ? "on"  : "off"  }
  return "nix";
}
sub myFK($$$){
  my ($p,$e,$t) = @_;
  if($t eq "t"){return    ReadingsVal($e,"state","-")  }
  if($t eq "c"){return    ReadingsVal($e,"state",0)eq "closed" ? "green" : "red" }
  if($t eq "i"){return    ReadingsVal($e,"state",0)eq "closed" ? "on"  : "off"  }
  return "nix";

Hast du noch nen Tipp wegen dem eventmap?

martinp876

$p ist der prefix, der vor den text geschrieben werden soll.

also
  if ($t eq "t"){return   $p.ReadingsVal($e,"desired-temp","no")  }

mit eventMap sollte das Reading geändert werden. Damit sollte der Wert stimmen.

Du kannst es aber auch komplett im myXX machen:

  if($t eq "t"){return    $p.(ReadingsVal($e,"state","-")eq"open"?"offen":"zu"  }
also wenn "open" kommt wird offen gemeldet - ansonsten "zu".
Sollte es andere Werte also open und closed geben musst du mehr machen

d.stratmann

Hallo martin,

kann man so nicht machen.

if($t eq "t"){return    $p.(ReadingsVal($e,"state","-")eq"open"?"offen":"zu"  }

was funktioniert ist:

if($t eq "t"){return    ReadingsVal($e,"state","-")eq"open"?"offen":"zu"  }

Dort ist das Problem, wenn ein Text wie z.B. FE1 oder so mit übergeben wird. Dann würde er nach eq" FE1open" suchen müssen.

martinp876


die Klammern... immer mitzählen
if($t eq "t"){return    $p.(ReadingsVal($e,"state","-")eq"open"?"offen":"zu")  }

d.stratmann

Hallo martin,

ich habe noch eine Frage.
Bei folgendem Code:
sub myFK($$$){
  my ($p,$e,$t) = @_;
  if($t eq "t"){return    $p.(ReadingsVal($e,"state","-")eq "closed" ? "zu":"offen") }
  if($t eq "c"){return    ReadingsVal($e,"state",0)eq "closed" ? "green" : "red" }
  if($t eq "i"){return    "noIcon"  }
  return "nix";
}


hier wird ja geguckst ist der Rückgabewert = closed schreib "zu" wenn nicht schreib "offen".
Gibt es hier die die Drehfensterkontakte, wo es noch den Status titled gibt, diese auch noch mit aufzunehmen?

martinp876

Perl kann so etwas, klar.
Es gibt viele wege. Einer..
Read eq offen?auf:read eq zu?dicht:gekippt

Besser
My $a=read();$a eq "zu"?"dicht":($a eq "offen"?"zieht":"kippt")

So in der art. Im prinzip kannst du jeden code schreiben..... aber irgenwann musst du senden, das device wartet. Also schnell rechnen

Spezialtrick

Es ist beeindruckend, welche klasse Arbeit hier wieder geleistet wurde. :)

Ich hätte allerdings eine generelle Frage zu dem Display. Lässt es sich auch ohne Tastendruck, direkt über Fhem erwecken?
FHEM - Debmatic - Zigbee2MQTT - Homekit

Posti123

Zitat von: Spezialtrick am 14 März 2015, 21:47:42
Es ist beeindruckend, welche klasse Arbeit hier wieder geleistet wurde. :)

Ich hätte allerdings eine generelle Frage zu dem Display. Lässt es sich auch ohne Tastendruck, direkt über Fhem erwecken?
Nein
18xHM-CC-RT-DN, 5xHM-TC-IT-WM-W-EU, HMLAN, 2xJeeLink 868, 1xJeeLink433, 1xCUL868, HM-LC-Bl1PBU-FM, HM-LC-Sw2-FM, HM-LC-SW1-FM, HM-LC-Sw1PBU-FM, 5xHM-Sec-SC-2, 2xHM-Sec-SCo, HM-ES-TX-WM, HM-Sen-MDIR-O-2, HM-WDS10-TH-O, 6xTechnoline, 2x PCA301,2xHM-PB-2-WM55-2,2xHM-RC-4-2,2xHM-WDS30-T-O, HM-SEC-WDS-2

Spezialtrick

Danke für deine Antwort.

Ist es technisch nicht möglich oder ist es noch nicht implementiert?
FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Technisch nicht möglich - und auch explizit dokumentiert:

Zitat
Hinweise:

Keine Anzeige durch aktive Ansteuerung möglich. Anzeige schaltet sich nach Tastendruck für einige Sekunden ein und danach wieder aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

netbus

Super, das ihr schon so weit gekommen seid.
In der Dokuwiki stehen aber leider noch keine Beispiele für div. Anwendungsfälle.
Gibt es vielleicht ein How-To für zb.: Temperatur anzeigen?