HM-CC-RT-DN Reading Gruppe

Begonnen von TNT0068, 25 August 2014, 13:22:46

Vorheriges Thema - Nächstes Thema

Newbie

Hallo Frank,

der Punkt geht eindeutig an dich. Danke
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

igami

Ich würd mich hier doch gerne auch mal beteiligen. Momentan bastel ich auch an einer Gruppe für die HM-CC-RT-DN.

meine Definition ist dabei:

define rg_Thermostate readingsGroup <>,<Soll->,<Ist->,<Regler>,<Modus>,<Lock>,<Bat->,<Tages->,<Werktag>,<>,<Samstag>,<>\
<>,<Temperatur>,<Temperatur>,<>,<>,<>,<teri>,<Temperatur>,<start>,<ende>,<start>,<ende>\
.*_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@{getDevice($DEVICE)},battery@{getDevice($DEVICE)},R-dayTemp,<{getTime($DEVICE."_Clima","R_2_tempListMon","start")}>,<{getTime($DEVICE."_Clima","R_2_tempListMon","end")}>,<{getTime($DEVICE."_Clima","R_0_tempListSat","start")}>,<{getTime($DEVICE."_Clima","R_0_tempListSat","end")}>
attr rg_Thermostate commands { 'controlMode' => 'trigger ntfy_toggleControlMode $DEVICE', 'R-globalBtnLock' => 'trigger ntfy_toggleBtnLock $DEVICE'}
attr rg_Thermostate nameStyle style="font-weight:bold"
attr rg_Thermostate room Hausmeisterklitsche
attr rg_Thermostate valueFormat { 'desired-temp' => "%0.1f &deg;;C", 'measured-temp' => "%0.1f &deg;;C", 'ValvePosition' => "%0.1f %%" }
attr rg_Thermostate valueIcon { 'controlMode.auto' => 'sani_heating_automatic@green','controlMode.set_auto' => 'sani_heating_automatic@orange','controlMode.manual' => 'sani_heating_manual@red','controlMode.set_manual' => 'sani_heating_manual@orange', 'battery.ok' => 'batterie@green', 'battery.low' => 'batterie@red'}

define ntfy_toggleControlMode notify ntfy_toggleControlMode {toggleMode($EVENT)}

define ntfy_toggleBtnLock notify ntfy_toggleBtnLock {toggleLock($EVENT)}


In den myUtils habe ich dann noch folgendes:

sub getDevice($){
my $device = shift;
return InternalVal($device,"device","error");
}

sub toggleLock($){
my $device = shift;
my $lockState = ReadingsVal($device,"R-globalBtnLock","error");

if ($lockState eq "on "){
  {fhem("set $device regSet globalBtnLock off")}
  {fhem ("set $device getConfig")}}
elsif ($lockState eq "off "){
  {fhem("set $device regSet globalBtnLock on")}
  {fhem ("set $device getConfig")}}
else
{return $lockState.$device};
}

sub toggleMode($){
my $device = shift;
my $Mode = ReadingsVal($device,"controlMode","error");

if ($Mode eq "manual")
  {fhem("set $device controlMode auto")}
elsif ($Mode eq "auto")
  {fhem("set $device controlMode manual")}
elsif ($Mode eq "set_manual")
  {fhem("set $device controlMode auto")}
elsif ($Mode eq "set_auto")
  {fhem("set $device controlMode manual")};
}

sub getTime($$$){
my $device = shift;
my $reading = shift;
my $status = shift;
my $timeTable = ReadingsVal($device,$reading,"error Reading");  my $time = "error Return";

if ($status eq "start")
  {$time = substr $timeTable, 0, 5}
elsif ($status eq "end")
  {$time = substr $timeTable, 11, 5}

return $time;
}


Bisher ist damit möglich beim klick auf Modus den contolMode zwischen auto/manuel zu togglen, sowie beim klick auf Lock den globalBtnLock zu togglen.

Der nächste Schritt besteht hier nun darin, dass es möglich sein soll, die
- Tagestemperatur, Wochentag- start und ende, Samstag start und ende
in der Readingsgroup neu zu setzten und einen neuen Wochenplan auf das Device zu übertragen.

Mein Ansatz geht dabei dahin, dass ich über setreading die neuen Werte in das Device schreibe und einen Button hinzufüge mit dem ich dann über ein Perl-Script die Werte auslese und neu übertrage.

Wünsche noch einen Schönen Tag.

Igami
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

igami

Nun ist es soweit erst mal fertig. Die Möglichkeiten sind:
- ControlMode durch klick auf Icon zwischen manual/auto umzuschalten
- globalBtnLock durch klick auf Icon zwischen on/off umschalten
- Wochenplan für jedes Device seperat durch klick auf Icon setzen

Was mich noch stört:
- in der DEF der ReadingsGroup muss ich zwischendurch impossible@{$DEVICE} setzten, da sonst $DEVICE als das letzte durch @ abgefragt Device ist
- die ganze Seite wird neu geladen, wenn die Temperatur per DropDown geändert wird

Das ganze wird bei uns in Büroräumen eingesetzt, deswegen wird pro Tag nur ein einschalt, ausschalt Zeitpunkt benötigt.

Hier nun der Code:

define rg_Thermostate readingsGroup <>,<Soll->,<Ist->,<Regler>,<Modus>,<Lock>,<Bat->,<Tages->,<>,<Werktag>,<>,<>,<>,<Samstag>,<>,<>,<>,<Wochenplan>\
<>,<Temperatur>,<Temperatur>,<>,<>,<>,<teri>,<Temperatur>,<>,<start>,<>,<ende>,<>,<start>,<>,<ende>,<>,<schreiben>\
.*_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@{getDevice($DEVICE)},battery@{getDevice($DEVICE)},imposible@{$DEVICE},<{getDayTemp($DEVICE)}>,state@d_dayTemp,impossible@{$DEVICE},<{getTime($DEVICE,"R_2_tempListMon","start")}>,state@d_workdayStart,impossible@{$DEVICE},<{getTime($DEVICE,"R_2_tempListMon","end")}>,state@d_workdayEnd,impossible@{$DEVICE},<{getTime($DEVICE,"R_0_tempListSat","start")}>,state@d_saturdayStart,impossible@{$DEVICE},<{getTime($DEVICE,"R_0_tempListSat","end")}>,state@d_saturdayEnd,impossible@{$DEVICE},<%system_fhem_update>
attr rg_Thermostate commands { 'controlMode' => 'trigger ntfy_toggleControlMode $DEVICE',  'R-globalBtnLock' => 'trigger ntfy_toggleBtnLock $DEVICE',  'state' => 'state:',  'rg_Thermostate.system_fhem_update' => 'trigger ntfy_setTimeTable $DEVICE'}
attr rg_Thermostate nameStyle style="font-weight:bold"
attr rg_Thermostate room Hausmeisterklitsche
attr rg_Thermostate sortDevices 1
attr rg_Thermostate valueFormat { 'desired-temp' => "%0.1f &deg;;C", 'measured-temp' => "%0.1f &deg;;C", 'ValvePosition' => "%0.1f %%" }
attr rg_Thermostate valueIcon { 'controlMode.auto' => 'sani_heating_automatic@green','controlMode.set_auto' => 'sani_heating_automatic@orange','controlMode.manual' => 'sani_heating_manual@red','controlMode.set_manual' => 'sani_heating_manual@orange', 'battery.ok' => 'batterie@green', 'battery.low' => 'batterie@red', 'R-globalBtnLock.on' => 'secur_locked@green', 'R-globalBtnLock.on ' => 'secur_locked@green', 'R-globalBtnLock.set_on ' => 'secur_locked@orange', 'R-globalBtnLock.off' => 'secur_open@red', 'R-globalBtnLock.off ' => 'secur_open@red', 'R-globalBtnLock.set_off ' => 'secur_open@orange'}

define d_dayTemp dummy
attr d_dayTemp room Hausmeisterklitsche
attr d_dayTemp setList state:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0
attr d_dayTemp webCmd state

define d_workdayStart dummy
attr d_workdayStart room Hausmeisterklitsche
attr d_workdayStart setList state:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00,
attr d_workdayStart webCmd state

define d_workdayEnd dummy
attr d_workdayEnd room Hausmeisterklitsche
attr d_workdayEnd setList state:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00,
attr d_workdayEnd webCmd state

define d_saturdayStart dummy
attr d_saturdayStart room Hausmeisterklitsche
attr d_saturdayStart setList state:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00,
attr d_saturdayStart webCmd state

define d_saturdayEnd dummy
attr d_saturdayEnd room Hausmeisterklitsche
attr d_saturdayEnd setList state:00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45,05:00,05:15,05:30,05:45,06:00,06:15,06:30,06:45,07:00,07:15,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15,12:30,12:45,13:00,13:15,13:30,13:45,14:00,14:15,14:30,14:45,15:00,15:15,15:30,15:45,16:00,16:15,16:30,16:45,17:00,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,24:00,
attr d_saturdayEnd webCmd state

define ntfy_toggleControlMode notify ntfy_toggleControlMode {toggleMode($EVENT)}
attr ntfy_toggleControlMode room Hausmeisterklitsche

define ntfy_toggleBtnLock notify ntfy_toggleBtnLock {toggleLock($EVENT)}
attr ntfy_toggleBtnLock room Hausmeisterklitsche

define ntfy_setTimeTable notify ntfy_setTimeTable {setTimeTable($EVENT)}
attr ntfy_setTimeTable room Hausmeisterklitsche


und die myUtils:

sub getDevice($){
my $device = shift;
return InternalVal($device,"device","error");
}

sub toggleMode($){
my $device = shift;
my $Mode = ReadingsVal($device,"controlMode","error");

if ($Mode eq "manual")
  {fhem("set $device controlMode auto")}
elsif ($Mode eq "auto")
  {fhem("set $device controlMode manual")}
elsif ($Mode eq "set_manual")
  {fhem("set $device controlMode auto")}
elsif ($Mode eq "set_auto")
  {fhem("set $device controlMode manual")};
}

sub toggleLock($){
my $device = shift;
my $lockState = ReadingsVal($device,"R-globalBtnLock","error");

if ($lockState eq "on "){
  {fhem("set $device regSet globalBtnLock off")}
  {fhem ("set $device getConfig")}}
elsif ($lockState eq "off "){
  {fhem("set $device regSet globalBtnLock on")}
  {fhem ("set $device getConfig")}}
elsif ($lockState eq "on"){
  {fhem("set $device regSet globalBtnLock off")}
  {fhem ("set $device getConfig")}}
elsif ($lockState eq "off"){
  {fhem("set $device regSet globalBtnLock on")}
  {fhem ("set $device getConfig")}}
else
  {return $lockState.$device};
}

sub getDayTemp($){
my $device = shift;
my $timeTable = ReadingsVal($device,"R_2_tempListMon","error Reading");
my $dayTemp = substr $timeTable, 17, 5;

return ($dayTemp." °C");
}

sub getTime($$$){
my $device = shift;
my $reading = shift;
my $status = shift;
my $timeTable = ReadingsVal($device,$reading,"error Reading");
my $time = "error Return";

if ($status eq "start")
  {$time = substr $timeTable, 0, 6}
elsif ($status eq "end")
  {$time = substr $timeTable, 11, 6}

return $time;
}

sub setTimeTable($){
my $device = shift;
my $dayTemp = ReadingsVal("d_dayTemp","state","dt error");
my $nightTemp = "17.0";
my $startWorkday = ReadingsVal("d_workdayStart","state","eds error");
my $endWorkday = ReadingsVal("d_workdayEnd","state","wde error");
my $startSaturday = ReadingsVal("d_saturdayStart","state","sds error");
my $endSaturday = ReadingsVal("d_saturdayEnd","state","sde error");
my $startSunday = "00:00";
my $endSunday = "00:00";

{ fhem ("set $device tempListMon prep $startWorkday $nightTemp $endWorkday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListTue prep $startWorkday $nightTemp $endWorkday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListWed prep $startWorkday $nightTemp $endWorkday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListThu prep $startWorkday $nightTemp $endWorkday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListFri prep $startWorkday $nightTemp $endWorkday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListSat prep $startSaturday $nightTemp $endSaturday $dayTemp 24:00 $nightTemp")};
{ fhem ("set $device tempListSun exec $startSunday $nightTemp $endSunday $dayTemp 24:00 $nightTemp")};
}


Vielleicht kann es ja noch wer gebrauchen. Ansonsten bin ich dankbar, wenn mir einer dabei Hilft die Sachen, die mich noch stören zu beseitigen.

Grüße

Igami
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

justme1968

das problem mit dem refresh durch das drop down menü ist ein allgemeines in fhem. bis vor kurzem war auch der slider betroffen. da hat rudi es geändert. ich finde aber den thread gerade nicht.

wenn sonst alles funktioniert wäre dein code vielleicht etwas für die readingsGroup seite im wiki.

das mit dem $DEVICE habe ich nicht verstanden. kannst du mal ein Beispiel machen?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

igami

Mit dem $DEVICE ist es so:
define rg_dummy Readingsgroup dummy1:state,state@dummy2,<{$DEVICE}>
sollte dann so aussehen:
dummy1 state1 state2 dummy2

obwohl $DEVICE dummy1 zurück geben sollte.

Das wird hier die nächsten Wochen getestet, und wenn nichts mehr geändert werden muss, stelle ich es ins Wiki.

Igami
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

l2r

hallo,

ich beschäftige mich noch nicht sehr lange mit Fhem, finde das Beispiel aber sehr interessant.

Leider bekomme ich die Abfragen nicht wie gewünscht hin.
Die Funktion getDevice($DEVICE) läuft soweit. Wenn ich jetzt allerdings battery@getDevice($DEVICE)) abfragen möchte, dann bekomme ich keinen Rückgabewert.

Mit <{ReadingsVal(getDevice($DEVICE),"battery","error")}> funktionierts. Habe ich da irgendwo was übersehen?

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

igami

Hallo Michael,

versuch es mal mit geschweiften Klammern

battery@{getDevice($DEVICE)}


Vielleicht weiß ja aber jemand, warum es mit

battery@{InternalVal($DEVICE,"device","")}

nicht geht.

Gruß
Igami
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

l2r

hi,

klappt leider nicht.

das @ bewirkt doch, dass ein Array ausgelesen wird, oder?

Ist denn das $DEVICE standardmäßig ein Array oder muss das noch irgendwo definiert werden?

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

igami

Hallo Michael,

über das @ kannst du meines Wissens nach ein Reading von einem anderen Device auslesen, in diesem Fall 'battery' $DEVICE sollte immer das Device vom Anfang der Zeile sein sollte, was aber nicht immer der Fall ist, siehe http://forum.fhem.de/index.php/topic,26479.msg195515.html#msg195515

Zeig doch mal bitte deine komplette DEF der Readingsgroup.

Gruß
Igami
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

l2r

hi,

die DEF ist aus Beitrag 17 von diesem Thread kopiert.

Wobei ich z.B. ControlMode durch mode ersetzen musste, da bei mir das Reading ControlMode nicht existiert.

<>,<Soll->,<Ist->,<Regler>,<Modus>,<Lock>,<Bat->,<Tages->,<>,<Werktag>,<>,<>,<>,<Samstag>,<>,<>,<>,<Wochenplan>
<>,<Temperatur>,<Temperatur>,<>,<>,<>,<teri>,<Temperatur>,<>,<start>,<>,<ende>,<>,<start>,<>,<ende>,<>,<schreiben>
.*_Clima:desired-temp,measured-temp,ValvePosition,mode,<{ReadingsVal(getDevice($DEVICE),"R-btnLock","error_R-btnLock")}>,battery@getDevice($DEVICE),impossible@{$DEVICE},{getDayTemp($DEVICE)},state@d_dayTemp,impossible@{$DEVICE},<{getTime($DEVICE,"R_2_tempListMon","start")}>,state@d_workdayStart,impossible@{$DEVICE},<{getTime($DEVICE,"R_2_tempListMon","end")}>,state@d_workdayEnd,impossible@{$DEVICE},<{getTime($DEVICE,"R_0_tempListSat","start")}>,state@d_saturdayStart,impossible@{$DEVICE},<{getTime($DEVICE,"R_0_tempListSat","end")}>,state@d_saturdayEnd,impossible@{$DEVICE},<%system_fhem_update>


Bis Modus klappt das alles wunderbar (da frage ich ja auch nur das aktuelle Device (Sprich den Channel _Clima) ab). Den Status von R-btnLock (wird bei dir als R-globalBtnLock bezeichnet) bekomme ich auch noch abgefragt. Sobald ich aber ein @verwende bekomme ich nichts zurück.

Mit allem was hinter dem Battery-Status kommt habe ich mich noch nicht beschäftigt, da ich den Rest erstmal am laufen haben wollte.

Kann es vielleicht auch daran liegen, dass wir unterschiedliche Programmstände haben?

Vielen Dank schonmal für die Hilfe!

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

l2r

sry, es lag wirklich an ner alten Version von fhem.

da ich über LTE mit dem Internet verbunden bin hat der das Update nicht hinbekommen. Ich hab dann versucht das Update alternativ einzuspielen, das hat aber anscheinend auch nicht richtig funktioniert.

ich bin dann auf den Post

http://forum.fhem.de/index.php/topic,20469.msg190753.html#msg190753

gestoßen, hab die httpUtils geändert und siehe da, es funktioniert!

Vielen Dank für die Mühe!

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

knochenmuehle

@igami mit Sonntag wäre es perfekt

Gruß
Andreas

l2r

Ich hab den Sonntag mit drin. Den code dafür kann ich morgen wohl eben Posten.
Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

knochenmuehle


igami

Das Layout war das von uns in der Firma. Zu hause habe ich einfach Wochenende zusammengefasst und aus Platzgründen jedes Device zweizeilig gemacht. Kann ich Nachher mal posten.

Gruß
Igami
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