HM-CC-RT-DN Reading Gruppe

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

Vorheriges Thema - Nächstes Thema

HoTi

#165
jiiiiiiipiiiii

Vielen Danke dir!!!!!

In der Anleitung solltest du noch ein Shutdown restart anfügen, weil das braucht es!

Ist das soll?

2015.06.26 11:04:03 1: PERL WARNING: Smartmatch is experimental at (eval 9854) line 2.
2015.06.26 11:04:03 3: eval: my $NAME='cc_01_Heizung';my $EVENT='8_period_1_start 04:30';my $EVTPART1='04:30';my $TYPE='dummy';my $EVTPART0='8_period_1_start';{
if(($EVENT ~~ / /) and ($EVENT !~ /: /))
  {fhem("sleep 0.001; setreading $NAME $EVENT")}
}
2015.06.26 11:04:03 1: PERL WARNING: Smartmatch is experimental at (eval 9855) line 2.
2015.06.26 11:04:03 3: eval: my $EVTPART1='04:30';my $TYPE='dummy';my $EVENT='8_period_1_start: 04:30';my $NAME='cc_01_Heizung';my $EVTPART0='8_period_1_start:';{
if(($EVENT ~~ / /) and ($EVENT !~ /: /))
  {fhem("sleep 0.001; setreading $NAME $EVENT")}
}
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

igami

Schön, dass es nun funktioniert. Solltest du unterschiedliche Heizprogramme einstellen wollen müssen die Thermostate in verschiedenen FHEM Räumen sein. Danach einfach noch einmal {makefine} aufrufen.

Ich denke nächstes Wocheende werde ich mal dazu kommen die Anleitung zu überarbeiten und dann auch das Wiki.

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

Dobi

Hallo in die FHEM-Runde,

Ich versuche nun das Projekt aus Post #140 nachzubauen, scheitere aber schon bei der FHEM.cfg....

Meine (eigentlich der Code von igami):

fhem.cfg

define default_cc dummy

attr default_cc attributes setList
attr default_cc room Wohnung
attr default_cc setList dayTemp: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 nightTemp: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 8_period_1_start: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 8_period_1_stop: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 8_period_2_start: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 8_period_2_stop: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 6_period_1_start: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 6_period_1_stop: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 6_period_2_start: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 6_period_2_stop: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 0_period_1_start: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 0_period_1_stop: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 0_period_2_start: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 0_period_2_stop: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 default_cc userattr attributes device wildcard
attr default_cc wildcard cc_.*

define ntfy_rg notify ntfy_rg {rg($EVTPART0,$EVTPART1)}
define ntfy_setreading notify (cc|d)_.* {if(($EVENT ~~ / /) and ($EVENT !~ /: /)) {fhem("sleep 0.001; setreading $NAME $EVENT")}}

define rg_thermostate readingsGroup <>,<Heizung>,<Temperatur>,<Status>,<Wochenprofil>,<Montag-Freitag>,<Samstag>,<Sonntag>,<>
.*_Clima:<>,!alias,<Soll>,desired-temp,<Tag>,dayTemp@{rg($DEVICE,'cc')},controlMode,R-btnLock@{rg($DEVICE,'device')},<Zeitraum&nbsp;1>,8_period_1_start@{rg($DEVICE,'cc')},8_period_1_stop@{rg($DEVICE,'cc')},6_period_1_start@{rg($DEVICE,'cc')},6_period_1_stop@{rg($DEVICE,'cc')},0_period_1_start@{rg($DEVICE,'cc')},0_period_1_stop@{rg($DEVICE,'cc')},<%system_fhem_update>,<br>,state@{rg($DEVICE,'device')},<%getConfig>,<Ist>,measured-temp,<Nacht>,nightTemp@{rg($DEVICE,'cc')},<Ventil>,ValvePosition,<Zeitraum&nbsp;2>,8_period_2_start@{rg($DEVICE,'cc')},8_period_2_stop@{rg($DEVICE,'cc')},6_period_2_start@{rg($DEVICE,'cc')},6_period_2_stop@{rg($DEVICE,'cc')},0_period_2_start@{rg($DEVICE,'cc')},0_period_2_stop@{rg($DEVICE,'cc')},<%burstXmit>
attr rg_thermostate commands {'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE btnLock', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', '8_period_1_start' => '8_period_1_start:', '8_period_1_stop' => '8_period_1_stop:', '6_period_1_start' => '6_period_1_start:', '6_period_1_stop' => '6_period_1_stop:', '0_period_1_start' => '0_period_1_start:', '0_period_1_stop' => '0_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'trigger ntfy_rg $DEVICE getConfig', 'nightTemp' => 'nightTemp:', '8_period_2_start' => '8_period_2_start:', '8_period_2_stop' => '8_period_2_stop:', '6_period_2_start' => '6_period_2_start:', '6_period_2_stop' => '6_period_2_stop:', '0_period_2_start' => '0_period_2_start:', '0_period_2_stop' => '0_period_2_stop:', 'rg_thermostate.burstXmit' => 'trigger ntfy_rg $DEVICE burstXmit'}
attr rg_thermostate nonames 1
attr rg_thermostate room Wohnung
attr rg_thermostate valueColumns {   'Heizung' => 'colspan="2"',   'alias' => 'colspan="2"',   'Temperatur' => 'colspan="4"',   'Status' => 'colspan="2"',   'Montag-Freitag' => 'colspan="2"',   'Samstag' => 'colspan="2"',   'Sonntag' => 'colspan="2"'}
attr rg_thermostate valueFormat {'alias' => '{"<a href=/fhem?detail=$DEVICE>". rg($DEVICE,"alias") ."</a>"}' , 'measured-temp' => "%0.1f °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', 'R-btnLock.on' => 'secur_locked@green', 'R-btnLock.on ' => 'secur_locked@green', 'R-btnLock.set_on' => 'secur_locked@orange', 'R-btnLock.set_on ' => 'secur_locked@orange', 'R-btnLock.off' => 'secur_open@red', 'R-btnLock.off ' => 'secur_open@red', 'R-btnLock.set_off' => 'secur_open@orange', 'R-btnLock.set_off ' => 'secur_open@orange', 'R-globalBtnLock.on' => 'secur_locked@green', 'R-globalBtnLock.on ' => 'secur_locked@green', 'R-globalBtnLock.set_on' => 'secur_locked@orange', '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', 'R-globalBtnLock.set_off ' => 'secur_open@orange', }


1. Fehler beim Speichern:

default_cc: unknown attribute attributes. Type 'attr default_cc ?' for a detailed list.

Wenn ich "attr default_cc attributes setList" manuell ausführe kommt kein Fehler.

2. Fehler beim Speichern:

Usage: setreading where is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

3. Fehler beim Speichern:
Unknown command .*_Clima:<>,!alias,,desired-temp,,dayTemp@{rg($DEVICE,'cc')},controlMode,R-btnLock@{rg($DEVICE,'device')},,8_period_1_start@{rg($DEVICE,'cc')},8_period_1_stop@{rg($DEVICE,'cc')},6_period_1_start@{rg($DEVICE,'cc')},6_period_1_stop@{rg($DEVICE,'cc')},0_period_1_start@{rg($DEVICE,'cc')},0_period_1_stop@{rg($DEVICE,'cc')},<%system_fhem_update>,
,state@{rg($DEVICE,'device')},<%getConfig>,,measured-temp,,nightTemp@{rg($DEVICE,'cc')},,ValvePosition,,8_period_2_start@{rg($DEVICE,'cc')},8_period_2_stop@{rg($DEVICE,'cc')},6_period_2_start@{rg($DEVICE,'cc')},6_period_2_stop@{rg($DEVICE,'cc')},0_period_2_start@{rg($DEVICE,'cc')},0_period_2_stop@{rg($DEVICE,'cc')},<%burstXmit>, try help.


Ich habe die Definitionen in Notepad++ bearbeitet und dann in den Editor kopiert (hier liegt offensichtlich der Fehler, aber ich kann keine Sonderzeichen/Zeilenumsprünge oä. erkennen.

zur Info und Vervollständigung noch meine 99_myUtils.pm

use Switch;

sub makefine{

# climaControl definieren und initialisieren
my @devices = devspec2array(AttrVal('default_cc','devices','.*_Clima'));

foreach my $device (@devices){
   my $room = AttrVal($device, 'room', 'undef');
   if($room ne 'undef'){
     my $cc = room2devspec($room);
      $cc = 'cc_'.$cc;
                             
     if(!(defined($defs{$cc}))){
          {fhem("define $cc dummy")}
          {fhem("setreading $cc dayTemp 21.0")}
          {fhem("setreading $cc nightTemp 17.0")}
          {fhem("setreading $cc 6_period_1_stop 21:00")}
          {fhem("setreading $cc 6_period_1_start 04:15")}
          {fhem("setreading $cc 6_period_2_stop 24:00")}
          {fhem("setreading $cc 6_period_2_start 24:00")}
          {fhem("setreading $cc 0_period_1_stop 21:00")}
          {fhem("setreading $cc 0_period_1_start 04:15")}
          {fhem("setreading $cc 0_period_2_stop 24:00")}
          {fhem("setreading $cc 0_period_2_start 24:00")}
          {fhem("setreading $cc 8_period_1_stop 06:30")}
          {fhem("setreading $cc 8_period_1_start 04:15")}
          {fhem("setreading $cc 8_period_2_stop 21:00")}
          {fhem("setreading $cc 8_period_2_start 15:15")}
          {fhem("attr $cc alias $room")}
          {fhem("attr $cc room $room")}
     }
   }
}

  #Attribute aus Vorgaben übernehmen
  my @defaults = devspec2array('default_.*');

  foreach my $default (@defaults){
    my $wildcard = AttrVal($default,'wildcard','wildcard error');
    my @attributes = split(' ',AttrVal($default,'attributes','attributes error'));
    foreach my $attribute (@attributes){
      my $attrval = AttrVal($default,$attribute,'attribute error');
      fhem("attr $wildcard $attribute $attrval")
    }
  }
}

sub rg($$){
  my $device = shift;
  my $function = shift;
 
  my $room = AttrVal($device, 'room', 'unsorted');
 
  switch ($function) {
    case 'cc' {
      return ('cc_'.room2devspec($room));
    }
    case 'alias' {
      return (AttrVal($device, 'alias', $device));
    }
    case 'device' {
      return (InternalVal($device, 'device', $device));
    }
    case 'controlMode' {
      my $controlMode = ReadingsVal($device, 'controlMode', '');
     
      switch ($controlMode) {
        case /manual/ {
          fhem("set $device controlMode auto");
        }
        else {
          fhem("set $device controlMode manual");
        }
      }
    }
    case 'btnLock' {
      $device = rg($device, 'device');
      my $btnLock = ReadingsVal($device, 'R-btnLock', '');
     
      switch ($btnLock) {
        case /off/ {
          fhem("set $device regSet btnLock on");
        }
        else {
          fhem("set $device regSet btnLock off");
        }
      }
      fhem ("set $device getConfig");
    }
    case 'globalBtnLock' {
      $device = rg($device, 'device');
      my $globalBtnLock = ReadingsVal($device, 'R-btnLock', '');
     
      switch ($globalBtnLock) {
        case /off/ {
          fhem("set $device regSet globalBtnLock on");
        }
        else {
          fhem("set $device regSet globalBtnLock off");
        }
      }
      fhem ("set $device getConfig");
    }
    case 'setTimeTable' {
      my $cc = rg($device, 'cc');
      my $dayTemp = ReadingsVal( $cc, "dayTemp" , 21.0 );
      my $nightTemp = ReadingsVal( $cc, "nightTemp" , 17.0 );
      my $workday_period_1_start = ReadingsVal( $cc, "8_period_1_start" , "06:30" );
      my $workday_period_1_stop = ReadingsVal( $cc, "8_period_1_stop" , "18:00" );
      my $workday_period_2_start = ReadingsVal( $cc, "8_period_2_start" , "24:00" );
      my $workday_period_2_stop = ReadingsVal( $cc, "8_period_2_stop" , "24:00" );
      my $saturday_period_1_start = ReadingsVal( $cc, "6_period_1_start" , "06:30" );
      my $saturday_period_1_stop = ReadingsVal( $cc, "6_period_1_stop" , "12:00" );
      my $saturday_period_2_start = ReadingsVal( $cc, "6_period_2_start" , "24:00" );
      my $saturday_period_2_stop = ReadingsVal( $cc, "6_period_2_stop" , "24:00" );
      my $sunday_period_1_start = ReadingsVal( $cc, "0_period_1_start" , "24:00" );
      my $sunday_period_1_stop = ReadingsVal( $cc, "0_period_1_stop" , "24:00" );
      my $sunday_period_2_start = ReadingsVal( $cc, "0_period_2_start" , "24:00" );
      my $sunday_period_2_stop = ReadingsVal( $cc, "0_period_2_stop" , "24:00" );
   
      fhem("set $device tempListMon prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListTue prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListWed prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListThu prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListFri prep $workday_period_1_start  $nightTemp $workday_period_1_stop  $dayTemp $workday_period_2_start  $nightTemp $workday_period_2_stop  $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListSat prep $saturday_period_1_start $nightTemp $saturday_period_1_stop $dayTemp $saturday_period_2_start $nightTemp $saturday_period_2_stop $dayTemp 24:00 $nightTemp");
      fhem("set $device tempListSun exec $sunday_period_1_start   $nightTemp $sunday_period_1_stop   $dayTemp $sunday_period_2_start   $nightTemp $sunday_period_2_stop   $dayTemp 24:00 $nightTemp");
    }
    case 'getConfig' {
      $device = rg($device, 'device');
  fhem("set $device getConfig");
    }
    case 'burstXmit' {
      $device = rg($device, 'device');
      fhem("set $device burstXmit");
    }
  }
}
sub room2devspec($){
  my $room = shift;
    my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss");
    my $umlautkeys = join ("|", keys(%umlaute));
    $room =~ s/($umlautkeys)/$umlaute{$1}/g;
    $room =~ s/[^A-Za-z0-9\.\:\_]//g;
   
  return $room;
}
1;


Ich bin noch ziemlicher Neuling was FHEM/Pearl betrifft, aber bitte um Hilfe! Danke!

LG
Martin

Dobi

So bin nun ein Stück weiter, war wirklich der Editor...

Aber nun bekomme ich keinen Content für die readingGroup:

Meine Reading Group:
nternals:
   DEF        <>,<Heizung>,<Temperatur>,<Status>,<Wochenprofil>,<Montag-Freitag>,<Samstag>,<Sonntag>,<>.*_Clima:<>,!alias,<Soll>,desired-temp,<Tag>,dayTemp@{rg($DEVICE,'cc')},controlMode,R-btnLock@{rg($DEVICE,'device')},<Zeitraum 1>,,8_period_1_start@{rg($DEVICE,'cc')},8_period_1_stop@{rg($DEVICE,'cc')},6_period_1_start@{rg($DEVICE,'cc')},6_period_1_stop@{rg($DEVICE,'cc')},0_period_1_start@{rg($DEVICE,'cc')},0_period_1_stop@{rg($DEVICE,'cc')},<%system_fhem_update>,<br>,state@{rg($DEVICE,'device')},<%getConfig>,<Ist>,measured-temp,<Nacht>,nightTemp@{rg($DEVICE,'cc')},<Ventil>,ValvePosition,<Zeitraum 2>,8_period_2_start@{rg($DEVICE,'cc')},8_period_2_stop@{rg($DEVICE,'cc')},6_period_2_start@{rg($DEVICE,'cc')},6_period_2_stop@{rg($DEVICE,'cc')},0_period_2_start@{rg($DEVICE,'cc')},0_period_2_stop@{rg($DEVICE,'cc')},<%burstXmit>
   NAME       rg_thermostate
   NR         172
   NTFY_ORDER 50-rg_thermostate
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   Content:
   Content2:
   DEVICES:
   Fhem:
     lastDefChange 1
     last_update 1436006037.85366
   Helper:
     DEF
     commands   {'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE btnLock', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', '8_period_1_start' => '8_period_1_start:', '8_period_1_stop' => '8_period_1_stop:', '6_period_1_start' => '6_period_1_start:', '6_period_1_stop' => '6_period_1_stop:', '0_period_1_start' => '0_period_1_start:', '0_period_1_stop' => '0_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'trigger ntfy_rg $DEVICE getConfig', 'nightTemp' => 'nightTemp:', '8_period_2_start' => '8_period_2_start:', '8_period_2_stop' => '8_period_2_stop:', '6_period_2_start' => '6_period_2_start:', '6_period_2_stop' => '6_period_2_stop:', '0_period_2_start' => '0_period_2_start:', '0_period_2_stop' => '0_period_2_stop:', 'rg_thermostate.burstXmit' => 'trigger ntfy_rg $DEVICE burstXmit'}
     valueFormat {'alias' => '{"<a href=/fhem?detail=$DEVICE>". rg($DEVICE,"alias") ."</a>"}' , 'measured-temp' => "%0.1f °C", 'ValvePosition' => "%0.1f %%"}
     Valuecolumns:
       Heizung    colspan="2"
       Montag-Freitag colspan="2"
       Samstag    colspan="2"
       Sonntag    colspan="2"
       Status     colspan="2"
       Temperatur colspan="4"
       alias      colspan="2"
     Valueicon:
       R-btnLock.off secur_open@red
       R-btnLock.off  secur_open@red
       R-btnLock.on secur_locked@green
       R-btnLock.on  secur_locked@green
       R-btnLock.set_off secur_open@orange
       R-btnLock.set_off  secur_open@orange
       R-btnLock.set_on secur_locked@orange
       R-btnLock.set_on  secur_locked@orange
       R-globalBtnLock.off secur_open@red
       R-globalBtnLock.off  secur_open@red
       R-globalBtnLock.on secur_locked@green
       R-globalBtnLock.on  secur_locked@green
       R-globalBtnLock.set_off secur_open@orange
       R-globalBtnLock.set_off  secur_open@orange
       R-globalBtnLock.set_on secur_locked@orange
       R-globalBtnLock.set_on  secur_locked@orange
       controlMode.auto sani_heating_automatic@green
       controlMode.manual sani_heating_manual@red
       controlMode.set_auto sani_heating_automatic@orange
       controlMode.set_manual sani_heating_manual@orange
Attributes:
   commands   {'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE btnLock', 'R-globalBtnLock' => 'trigger ntfy_rg $DEVICE globalBtnLock', '8_period_1_start' => '8_period_1_start:', '8_period_1_stop' => '8_period_1_stop:', '6_period_1_start' => '6_period_1_start:', '6_period_1_stop' => '6_period_1_stop:', '0_period_1_start' => '0_period_1_start:', '0_period_1_stop' => '0_period_1_stop:', 'rg_thermostate.system_fhem_update' => 'trigger ntfy_rg $DEVICE setTimeTable', 'rg_thermostate.getConfig' => 'trigger ntfy_rg $DEVICE getConfig', 'nightTemp' => 'nightTemp:', '8_period_2_start' => '8_period_2_start:', '8_period_2_stop' => '8_period_2_stop:', '6_period_2_start' => '6_period_2_start:', '6_period_2_stop' => '6_period_2_stop:', '0_period_2_start' => '0_period_2_start:', '0_period_2_stop' => '0_period_2_stop:', 'rg_thermostate.burstXmit' => 'trigger ntfy_rg $DEVICE burstXmit'}
   nonames    1
   room       Wohnung
   valueColumns {   'Heizung' => 'colspan="2"',   'alias' => 'colspan="2"',   'Temperatur' => 'colspan="4"',   'Status' => 'colspan="2"',   'Montag-Freitag' => 'colspan="2"',   'Samstag' => 'colspan="2"',   'Sonntag' => 'colspan="2"'}
   valueFormat {'alias' => '{"<a href=/fhem?detail=$DEVICE>". rg($DEVICE,"alias") ."</a>"}' , 'measured-temp' => "%0.1f °C", 'ValvePosition' => "%0.1f %%"}
   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', 'R-btnLock.on' => 'secur_locked@green', 'R-btnLock.on ' => 'secur_locked@green', 'R-btnLock.set_on' => 'secur_locked@orange', 'R-btnLock.set_on ' => 'secur_locked@orange', 'R-btnLock.off' => 'secur_open@red', 'R-btnLock.off ' => 'secur_open@red', 'R-btnLock.set_off' => 'secur_open@orange', 'R-btnLock.set_off ' => 'secur_open@orange', 'R-globalBtnLock.on' => 'secur_locked@green', 'R-globalBtnLock.on ' => 'secur_locked@green', 'R-globalBtnLock.set_on' => 'secur_locked@orange', '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', 'R-globalBtnLock.set_off ' => 'secur_open@orange', }


die jeweiligen CC_ Dummys werden angelegt.
Beispiel:
Internals:
   NAME       cc_Buero
   NR         167
   STATE      ???
   TYPE       dummy
   Readings:
     2015-07-04 12:33:51   0_period_1_start 04:15
     2015-07-04 12:33:51   0_period_1_stop 21:00
     2015-07-04 12:33:51   0_period_2_start 24:00
     2015-07-04 12:33:51   0_period_2_stop 24:00
     2015-07-04 12:33:51   6_period_1_start 04:15
     2015-07-04 12:33:51   6_period_1_stop 21:00
     2015-07-04 12:33:51   6_period_2_start 24:00
     2015-07-04 12:33:51   6_period_2_stop 24:00
     2015-07-04 12:33:51   8_period_1_start 04:15
     2015-07-04 12:33:51   8_period_1_stop 06:30
     2015-07-04 12:33:51   8_period_2_start 15:15
     2015-07-04 12:33:51   8_period_2_stop 21:00
     2015-07-04 12:33:51   dayTemp         21.0
     2015-07-04 12:33:51   nightTemp       17.0
Attributes:
   alias      Buero
   room       Buero


Bitte um Hinweise wie ich beim Troubleshooting weitermachen kann!

Dobi

So bei mir passt auch alles... die 2 vorherigen posts sind erledigt.

der Editor macht mich fertig...

igami

Hallo Dobi,

der Fehler

default_cc: unknown attribute attributes. Type 'attr default_cc ?' for a detailed list.

kommt daher, dass noch kein userattr definiert war, muss in in der Reihenfolge mal ändern.

Aber schön, dass es sonst funktioniert.

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

Dobi

Hallo,

Danke, ich habe mich scheinbar eh zu früh gefreut, da bei einem schnellen Test, die Wunsch-Temperaturen zu den Zeitpunkten nicht übernommen werden.
Wie es aussieht nehmen die Thermostate noch immer die default eigestellten Wochenpläne... werde aber erst morgen weiterschauen.

volschin

Meine Wunschtemperatur liegt auch deutlich unter 36 Grad. Aber auch wenn ich das einstelle wird es nicht kühler. Was mach ich nur falsch??? ;-)
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

igami

Die Temperaturen werden erst mit einem Klick auf das system_fhem_update Icon übertragen.
Ich überlege noch ob es Sinnvoll ist einen Timer zu bauen, wenn etwas geändert wurde, dass nach X Minuten automatisch übertragen wird.

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

Dobi

#174
Danke, bin selber noch draufgekommen...

Schaut alles sehr gut aus... vielen Dank fürs Teilen.

Jorche

Hallo Heizungsfreunde!
@volschin
Damit Nachts das Haus nicht so auskühlt, hab ich grad noch die Viessmann Therme mittels IR Adapter & VCONTROL in FHEM integriert. Dropdowns und Diagramme der Heizkörper Regler sind bis 30°C erweitert :)

Und nun ohne Spaß:
Glaube die Arbeit zur Aktualisierung des Wikis ist ne sehr gute Idee. Mit viel Fummellei hat es bei mir ja geklappt. Denkt dran, pro Zeile zuerst rechte Spalte dann linke Spalte.
Eine wirklich gute Erweiterung ist noch eine 3 bzw. 4. Heizzeit. Bietet lustigerweise der Viessmann Brenner auch ^^

Konstanten Dank für die tolle Steuerung und Grüße
Jorche

igami

Zitat von: Jorche am 10 Juli 2015, 20:45:37
Und nun ohne Spaß:
Glaube die Arbeit zur Aktualisierung des Wikis ist ne sehr gute Idee. Mit viel Fummellei hat es bei mir ja geklappt. Denkt dran, pro Zeile zuerst rechte Spalte dann linke Spalte.
Habe in der kommenden Woche mal wieder etwas Zeit, da werde ich das erledigen. Mir sind ja auch wieder ein paar Punkte aufgefallen, die man verbessern kann.

Zitat von: Jorche am 10 Juli 2015, 20:45:37
Eine wirklich gute Erweiterung ist noch eine 3 bzw. 4. Heizzeit. Bietet lustigerweise der Viessmann Brenner auch ^^
Ich mache mir mal ein paar Gedanken, vielleicht wäre es ja interessant wenn man pro Raum einstellen kann wie viele Zeiten man haben möchte. Es gibt ja noch die UZSU, damit habe ich mich aber noch nicht befasst.

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

igami

#177
So, habe das ganze nun mal so umgeschrieben, dass alles über die myUtils angelegt wird.


  use Switch;

sub clean{
  generate_heating_control();
  inheritance();
}

sub generate_heating_control{
  my $default_hc = 'default_hc';
  if(!(defined($defs{$default_hc}))){
    my $timeDropDown = '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';
    my $tempDropDown = '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';

    fhem("
      define $default_hc dummy;

      setreading $default_hc 8p1b 04:15;
      setreading $default_hc 8p1e 06:30;
      setreading $default_hc 8p2b 15:15;
      setreading $default_hc 8p2e 21:00;
      setreading $default_hc 6p1b 04:15;
      setreading $default_hc 6p1e 21:00;
      setreading $default_hc 6p2b 24:00;
      setreading $default_hc 6p2e 24:00;
      setreading $default_hc 0p1b 04:15;
      setreading $default_hc 0p1e 21:00;
      setreading $default_hc 0p2b 24:00;
      setreading $default_hc 0p2e 24:00;
      setreading $default_hc dayTemp 21.0;
      setreading $default_hc nightTemp 17.0;

      attr $default_hc userattr attributes devices lockMode model subType wildcard;
      attr $default_hc attributes userattr group readingList setList;
      attr $default_hc devices TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04;
      attr $default_hc group Heizkörper;
      attr $default_hc lockMode btnLock;
      attr $default_hc model heating-control;
      attr $default_hc readingList 8p1b 8p1e 8p2b 8p2e 6p1b 6p1e 6p2b 6p2e 0p1b 0p1e 0p2b 0p2e dayTemp nightTemp;
      attr $default_hc room default;
      attr $default_hc setList  0p1b:$timeDropDown 0p1e:$timeDropDown 0p2b:$timeDropDown 0p2e:$timeDropDown 6p1b:$timeDropDown 6p1e:$timeDropDown 6p2b:$timeDropDown 6p2e:$timeDropDown 8p1b:$timeDropDown 8p1e:$timeDropDown 8p2b:$timeDropDown 8p2e:$timeDropDown dayTemp:$tempDropDown nightTemp:$tempDropDown;
      attr $default_hc subType default;
      attr $default_hc widgetOverride lockMode:btnLock,globalBtnLock,modusBtnLock;
      attr $default_hc wildcard TYPE=dummy:FILTER=model=heating-control:FILTER=subType!=default;
      ",1);
  }else{
    my $devices = AttrVal('default_hc', 'devices', 'TYPE=CUL_HM:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04');
    my $_8p1b = ReadingsVal($default_hc, '8p1b', '04:15');
    my $_8p1e = ReadingsVal($default_hc, '8p1e', '06:30');
    my $_8p2b = ReadingsVal($default_hc, '8p2b', '15:15');
    my $_8p2e = ReadingsVal($default_hc, '8p2e', '21:00');
    my $_6p1b = ReadingsVal($default_hc, '6p1b', '04:15');
    my $_6p1e = ReadingsVal($default_hc, '6p1e', '21:00');
    my $_6p2b = ReadingsVal($default_hc, '6p2b', '24:00');
    my $_6p2e = ReadingsVal($default_hc, '6p2e', '24:00');
    my $_0p1b = ReadingsVal($default_hc, '0p1b', '04:15');
    my $_0p1e = ReadingsVal($default_hc, '0p1e', '21:00');
    my $_0p2b = ReadingsVal($default_hc, '0p2b', '21:00');
    my $_0p2e = ReadingsVal($default_hc, '0p2e', '21:00');
    my $dayTemp = ReadingsVal($default_hc, 'dayTemp', '04:15');
    my $nightTemp = ReadingsVal($default_hc, 'nightTemp', '04:15');

    foreach (devspec2array($devices)){
      my $room = AttrVal($_, 'room', 'Unsorted');
      my $hc = 'hc_'.string2devspec($room);

      if(!(defined($defs{$hc}))){
        fhem("
          define $hc dummy;

          setreading $hc 8p1b $_8p1b;
          setreading $hc 8p1e $_8p1e;
          setreading $hc 8p2b $_8p2b;
          setreading $hc 8p2e $_8p1e;
          setreading $hc 6p1b $_6p1b;
          setreading $hc 6p1e $_6p1e;
          setreading $hc 6p2b $_6p2b;
          setreading $hc 6p2e $_6p2e;
          setreading $hc 0p1b $_0p1b;
          setreading $hc 0p1e $_0p1e;
          setreading $hc 0p2b $_0p2b;
          setreading $hc 0p2e $_0p2e;
          setreading $hc dayTemp $dayTemp;
          setreading $hc nightTemp $nightTemp;

          attr $hc userattr model;
          attr $hc model heating-control;
          attr $hc room $room;
          ",1);
      }
    }

    my $rg_heater = 'rg_heater';
    if(!(defined($defs{$rg_heater}))){
      fhem("
        define $rg_heater readingsGroup <>,<Heizung>,<Temperatur>,<Status>,<Wochenprofil>,<Montag-Freitag>,<Samstag>,<Sonntag>,<> $devices:<>,!alias,<Soll>,!desired-temp,<Tag>,!dayTemp\@\{readingsGroup(\$DEVICE,'hc')\},!controlMode,!btnLock,<Zeitraum&nbsp\;\;1>,!8p1b\@\{readingsGroup(\$DEVICE,'hc')\},!8p1e\@\{readingsGroup(\$DEVICE,'hc')\},!6p1b\@\{readingsGroup(\$DEVICE,'hc')\},!6p1e\@\{readingsGroup(\$DEVICE,'hc')\},!0p1b\@\{readingsGroup(\$DEVICE,'hc')\},!0p1e\@\{readingsGroup(\$DEVICE,'hc')\},!system_fhem_update,<br>,!state\@\{readingsGroup(\$DEVICE,'device')\},!getConfig,<Ist>,!measured-temp,<Nacht>,!nightTemp\@\{readingsGroup(\$DEVICE,'hc')\},<Ventil>,!ValvePosition,<Zeitraum&nbsp\;\;2>,!8p2b\@\{readingsGroup(\$DEVICE,'hc')\},!8p2e\@\{readingsGroup(\$DEVICE,'hc')\},!6p2b\@\{readingsGroup(\$DEVICE,'hc')\},!6p2e\@\{readingsGroup(\$DEVICE,'hc')\},!0p2b\@\{readingsGroup(\$DEVICE,'hc')\},!0p2e\@\{readingsGroup(\$DEVICE,'hc')\},!burstXmit;

        attr $rg_heater alias Übersicht Heizkörper;
        attr $rg_heater commands \{'desired-temp' => 'desired-temp:', 'dayTemp' => 'dayTemp:', 'controlMode' => 'trigger ntfy_rg \$DEVICE controlMode', 'btnLock' => 'trigger ntfy_rg \$DEVICE btnLock', '8p1b' => '8p1b:', '8p1e' => '8p1e:', '6p1b' => '6p1b:', '6p1e' => '6p1e:', '0p1b' => '0p1b:', '0p1e' => '0p1e:', 'system_fhem_update' => 'trigger ntfy_rg \$DEVICE setTimeTable', 'getConfig' => 'trigger ntfy_rg \$DEVICE getConfig', 'nightTemp' => 'nightTemp:', '8p2b' => '8p2b:', '8p2e' => '8p2e:', '6p2b' => '6p2b:', '6p2e' => '6p2e:', '0p2b' => '0p2b:', '0p2e' => '0p2e:', 'burstXmit' => 'trigger ntfy_rg \$DEVICE burstXmit'};
        attr $rg_heater nameStyle \{(\$READING eq \"Temperatur\"|| \$READING eq \"Status\"|| \$READING eq \"Montag-Freitag\"|| \$READING eq \"Samstag\"|| \$READING eq \"Sonntag\"|| \$READING eq \"system_fhem_update\")?'style=\"text-align:center\"':'style=\"\"'};
        attr $rg_heater nonames 1;
        attr $rg_heater room controlRoom;
        attr $rg_heater sortDevices 1;
        attr $rg_heater valueColumns \{'Heizung' => 'colspan=\"2\"', 'alias' => 'colspan=\"2\"', 'Temperatur' => 'colspan=\"4\"', 'Status' => 'colspan=\"2\"', 'Montag-Freitag' => 'colspan=\"2\"', 'Samstag' => 'colspan=\"2\"', 'Sonntag' => 'colspan=\"2\"'};
        attr $rg_heater valueFormat \{'alias' => '\{\"<a href=/fhem?detail=\$DEVICE>\".readingsGroup(\$DEVICE,\"alias\").\"</a>\"\}', 'btnLock' => '\{ReadingsVal(readingsGroup(\$DEVICE,\"device\"),\"R-\".AttrVal(\"default_hc\",\"lockMode\",\"btnLock\"),\"off\")\}', 'measured-temp' => \"%0.1f °C\", 'ValvePosition' => \"%0.1f %%\"\};
        attr $rg_heater 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', 'btnLock.on' => 'secur_locked\@green', 'btnLock.on ' => 'secur_locked\@green', 'btnLock.set_on' => 'secur_locked\@orange', 'btnLock.set_on ' => 'secur_locked\@orange', 'btnLock.off' => 'secur_open\@red', 'btnLock.off ' => 'secur_open\@red', 'btnLock.set_off' => 'secur_open\@orange', 'btnLock.set_off ' => 'secur_open\@orange', 'system_fhem_update' => 'system_fhem_update'\};
        attr $rg_heater visibility hidden;
        ");
    }
  generate_notify_readingsGroup();
  }
}

sub generate_notify_readingsGroup{
  my $ntfy_rg = 'ntfy_rg';
  if(!(defined($defs{$ntfy_rg}))){
    fhem("
      define $ntfy_rg notify $ntfy_rg {readingsGroup(\$EVTPART0, \$EVTPART1)};

      attr $ntfy_rg alias notify readingsGroup;
      attr $ntfy_rg room global;
      ");
  }
}

sub inheritance{
  foreach my $default (devspec2array('TYPE=dummy:FILTER=subType=default')){
    my $wildcard = AttrVal($default, 'wildcard', 'TYPE=none');
    my @attributes = split(' ',AttrVal($default, 'attributes', ''));
    foreach my $attribute (@attributes){
      my $AttrVal = AttrVal($default, $attribute, '');
      fhem("attr $wildcard $attribute $AttrVal", 1);
    }
  }
}

sub readingsGroup($$){
  my ($device, $function) = @_;
  my $room = AttrVal($device, 'room', 'Unsorted');

  switch ($function) {
    case 'alias' {
      return (AttrVal($device, 'alias', $device));
    }
    case 'btnLock' {
      $device = readingsGroup($device, 'device');
      $function = AttrVal('default_hc', 'lockMode', 'btnLock');
      my $btnLock = ReadingsVal($device, 'R-'.$function, '');

      switch ($btnLock) {
        case /off/ {
          $btnLock = 'on';
        }
        else {
          $btnLock = 'off';
        }
      }
      fhem ("
        set $device regSet $function $btnLock;
        set $device getConfig;
        ");
    }
    case 'burstXmit' {
      $device = readingsGroup($device, 'device');
      fhem("set $device burstXmit");
    }
    case 'controlMode' {
      my $controlMode = ReadingsVal($device, 'controlMode', '');

      switch ($controlMode) {
        case /manual/ {
          fhem("set $device controlMode auto");
        }
        else {
          fhem("set $device controlMode manual");
        }
      }
    }
    case 'device' {
      return (InternalVal($device, 'device', $device));
    }
    case 'getConfig' {
      $device = readingsGroup($device, 'device');
      fhem("set $device getConfig");
    }
    case 'hc' {
      return ('hc_'.string2devspec($room));
    }
    case 'setTimeTable' {
      my $hc = readingsGroup($device, 'hc');
      my $_8p1b = ReadingsVal($hc, '8p1b', '04:15');
      my $_8p1e = ReadingsVal($hc, '8p1e', '06:30');
      my $_8p2b = ReadingsVal($hc, '8p2b', '15:15');
      my $_8p2e = ReadingsVal($hc, '8p2e', '21:00');
      my $_6p1b = ReadingsVal($hc, '6p1b', '04:15');
      my $_6p1e = ReadingsVal($hc, '6p1e', '21:00');
      my $_6p2b = ReadingsVal($hc, '6p2b', '24:00');
      my $_6p2e = ReadingsVal($hc, '6p2e', '24:00');
      my $_0p1b = ReadingsVal($hc, '0p1b', '04:15');
      my $_0p1e = ReadingsVal($hc, '0p1e', '21:00');
      my $_0p2b = ReadingsVal($hc, '0p2b', '21:00');
      my $_0p2e = ReadingsVal($hc, '0p2e', '21:00');
      my $dayTemp = ReadingsVal($hc, 'dayTemp', '04:15');
      my $nightTemp = ReadingsVal($hc, 'nightTemp', '04:15');

      fhem("
        set $device tempListMon prep $_8p1b $nightTemp $_8p1e $dayTemp $_8p2b $nightTemp $_8p2e $dayTemp 24:00 $nightTemp;
        set $device tempListTue prep $_8p1b $nightTemp $_8p1e $dayTemp $_8p2b $nightTemp $_8p2e $dayTemp 24:00 $nightTemp;
        set $device tempListWed prep $_8p1b $nightTemp $_8p1e $dayTemp $_8p2b $nightTemp $_8p2e $dayTemp 24:00 $nightTemp;
        set $device tempListThu prep $_8p1b $nightTemp $_8p1e $dayTemp $_8p2b $nightTemp $_8p2e $dayTemp 24:00 $nightTemp;
        set $device tempListFri prep $_8p1b $nightTemp $_8p1e $dayTemp $_8p2b $nightTemp $_8p2e $dayTemp 24:00 $nightTemp;
        set $device tempListSat prep $_6p1b $nightTemp $_6p1e $dayTemp $_6p2b $nightTemp $_6p2e $dayTemp 24:00 $nightTemp;
        set $device tempListSun exec $_0p1b $nightTemp $_0p1e $dayTemp $_0p2b $nightTemp $_0p2e $dayTemp 24:00 $nightTemp;
        ",1);
    }
    case 'state' {
      my $state = ReadingsVal($device, 'state', '');

      switch ($state) {
        case /on/ {
          fhem("set $device off");
        }
        else {
          fhem("set $device on");
        }
      }
    }
  }
}

sub string2devspec($){
  my $string = shift;
  my %mutated_vowel =
    ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss");
  my $mutated_vowel_keys =
    join ("|", keys(%mutated_vowel));

  $string =~ s/($mutated_vowel_keys)/$mutated_vowel{$1}/g;
  $string =~ s/[^A-Za-z0-9\.\_]//g;

  return $string;
}


Nachdem alles in die myUtils eingetragen wurde muss:
1. in der FHEM Kommandozeile

{clean()}

aufgerufen werden. Dadurch wird ein default_hc device angelegt, welches im Raum 'default' zu finden ist. In diesem können Vorgabewerte für die Zeiträume (z.B. 0p1b steht für 0=Sonntag p1=Zeitraum 1 b=begin=start), dayTemp und nightTemp eingestellt werden, sowie der lockMode der in der readingsGroup angezeigt wird, dieser kann später auch immer umgestellt werden, default ist 'btnLock'.
2. in der FHEM Kommandozeile

{clean()}

aufgerufen werden. Dadurch werden die dummys und die readingsGroup erzeugt. Die dummys landen in den Räumen, in denen auch die Thermostate sind, die readingsGroup im Raum controlRoom.

Bitte testen ob alles soweit funktioniert, als Anwender sollte es nun erheblich einfacher sein.

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

rasti

habe das nach Igamis Post #177 installiert, funktioniert einwandfrei !

Super gemacht, danke!

Gruss

Ralf

igami

Vielen Dank. Muss ich ja nur immer noch das Wiki updaten  ::)
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