HM-CC-RT-DN Reading Gruppe

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

Vorheriges Thema - Nächstes Thema

kleinerDrache

Sieht echt gut aus Igami
Wäre echt geil wenn das dann am ende auch mit den Wandthermostaten zusammen funktionieren würde und nicht nur mit den Heizkörperreglern.
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

igami

Kannst du mir zu den Wandthermostaten mal einen Link zum Wiki oder so schicken wo ich ein bisschen lesen kann?
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

kleinerDrache

aber klar

HM-TC-IT-WM-W-EU_Funk-Wandthermostat ist der nachfolger vom  HM-CC-TC und lässt sich vollständig mit dem HM-CC-RT-DN Peeren und übernimmt auch das messen der Raumtemperatur und Luftfeuchtigkeit.
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

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

kleinerDrache

#229
sieht interessant aus.

ich hab bisher entweder deine Group oder die aus der Wiki verwendet und versucht die für mich anzupassen aber dat klappte net wie ich das wollte  ;)

Machst du das eigentlich dann über smartvisu oder bleibt das ne normale readingsgroup im FHEM ?
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

budda85

Hallo zusammen,
nachdem ich, nach dem Update von FHEM auf Version 5.7, Probleme mit dem Dropdown-Menü hatte, habe ich mal das Script aus Post 177 ausprobiert.
Das klappt alles wunderbar, aber...
das Sperren über das Schloss klappt nicht und ich kann keine Templisten zum Thermostat schicken.
Der Button und auch burstXmit zeigen keine Reaktion. Was ist hier eigentlich der Unterschied?
Soll-Temperatur setzen und Modus umschalten klappt aber wunderbar.
Wenn ich es richtig verstehe, wird im Script das Thermostat über das Reading btnLock gesperrt. Ein Thermostat was bei mir geperrt ist hat aber das Reading GlobalBtnLock gesetzt. Liegt das vielleicht hier dran?

Gruß
Jan

Tho-Gra

Zitat von: budda85 am 30 Dezember 2015, 22:17:39
... habe ich mal das Script aus Post 177 ausprobiert.
Das klappt alles wunderbar, aber...
das Sperren über das Schloss klappt nicht und ich kann keine Templisten zum Thermostat schicken.
Der Button und auch burstXmit zeigen keine Reaktion.
Was ist hier eigentlich der Unterschied?
Soll-Temperatur setzen und Modus umschalten klappt aber wunderbar.
Wenn ich es richtig verstehe, wird im Script das Thermostat über das Reading btnLock gesperrt. Ein Thermostat was bei mir geperrt ist hat aber das Reading GlobalBtnLock gesetzt. Liegt das vielleicht hier dran?

Gruß
Jan

Hallo alle zusammen,

Ich habe das selbe Problem...
@ Budda85 : hast du schon eine Lösung?

Grüße

Tho-Gra

gloob

Ich hab das ganze jetzt bei mir probiert und es funktioniert auf anhieb.
Welche Funktion hat denn das FHEM Häuschen am Ende und das "burstXmit"?

Was muss ich machen, wenn ich jetzt neue Thermostate in FHEM einbinde? Muss ich den clear Befehl dann wieder ausführen?
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

kleinerDrache

das "Häuschen" überträgt die Einstellungen sofort zum HM-CC ansonsten dauert das 2 - 2,5 min.

Neue Thermostate werden nach dem anlernen automatisch eingefügt soweit ich weiss.
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

budda85

Ich habe jetzt nochmal alles aus dem Post 177 neu gemacht.
Es wird alles wunderbar erstellt, so wie es sein sollte,
aber ich bleib dabei:

  • Das Thermostat lässt sich nicht sperren und entsperren
  • Templisten lassen sich auch nicht übertragen
  • getConfig zeigt auch keine Reaktion

kleinerDrache hat ja anscheinend auch Probleme wenn er das Script schon umgeschrieben hat, es aber immer noch nicht richtig läuft  :)

Gruß
Jan

kleinerDrache

Bei einigen Registern haben sich die Namen geändert deswegen funktioniert das Script aus 177 nicht mehr richtig. Zum sperren war es früher btnLock heist jetzt R-btnLock usw. deswegen hab ich das Script ja verändert ;-)

Zu den Templisten kann ich im moment nix sagen da ich die Readingsgroup aktuell nicht verwende.
Raspi 2 - Hmusb2 , 2xJeeLink , EnOcean pi: Serie14 Geräte , 6xHM-Sec-Rhs , 6xHM-CC-RT-DN, verschiedene MySensor Nodes, ein bischen MQTT

Manuel16

Hallo zusammen,

mir fehlt bei meinen beiden Thermostaten (Firmware 1.4) das Reading "R-globalBtnLock". Muss das manuell angelegt werden?

Bin Newbie  :)

Viele Grüße,
Manuel

ph1959de

Zitat von: Manuel16 am 06 März 2016, 00:28:49
mir fehlt bei meinen beiden Thermostaten (Firmware 1.4) das Reading "R-globalBtnLock". Muss das manuell angelegt werden?
Das ist beim Device (also nicht bei einem der Channel) und wird nur sichtbar, wenn Du das Attribut expert auf den Wert  1_allReg setzt.

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

Manuel16

Perfekt! Funktioniert :)

Vielen Dank!

SlrG

Hallo,

ich habe igamis genialen Code zur Erstellung der Readings Gruppe mal etwas angepasst. Nun kann man die Temperaturen für die Woche sowie Samstags und Sonntags getrennt regeln. Für die Installation folgt bitte igamis Anweisungen von hier (Post 177). Der Button Lock sollte nun auch wieder funktionieren.

SlrG

(https://forum.fhem.de/index.php?action=dlattach;topic=26479.0;attach=51533;image)


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 mfdayTemp 21.0;
      setreading $default_hc mfnightTemp 17.0;
      setreading $default_hc sadayTemp 21.0;
      setreading $default_hc sanightTemp 17.0;
      setreading $default_hc sodayTemp 21.0;
      setreading $default_hc sofnightTemp 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 R-btnLock;
      attr $default_hc model heating-control;
      attr $default_hc readingList 8p1b 8p1e 8p2b 8p2e 6p1b 6p1e 6p2b 6p2e 0p1b 0p1e 0p2b 0p2e mfdayTemp mfnightTemp sadayTemp sanightTemp sodayTemp sonightTemp;
      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 mfdayTemp:$tempDropDown mfnightTemp:$tempDropDown sadayTemp:$tempDropDown sanightTemp:$tempDropDown sodayTemp:$tempDropDown sonightTemp:$tempDropDown;
      attr $default_hc subType default;
      attr $default_hc widgetOverride lockMode:R-btnLock,R-globalBtnLock,R-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', '24:00');
    my $_0p2e = ReadingsVal($default_hc, '0p2e', '24:00');
    my $mfdayTemp = ReadingsVal($default_hc, 'mfdayTemp', '21.0');
    my $mfnightTemp = ReadingsVal($default_hc, 'mfnightTemp', '17.0');
    my $sadayTemp = ReadingsVal($default_hc, 'sadayTemp', '21.0');
    my $sanightTemp = ReadingsVal($default_hc, 'sanightTemp', '17.0');
    my $sodayTemp = ReadingsVal($default_hc, 'sodayTemp', '21.0');
    my $sonightTemp = ReadingsVal($default_hc, 'sonightTemp', '17.0');

    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 mfdayTemp $mfdayTemp;
          setreading $hc mfnightTemp $mfnightTemp;
          setreading $hc sadayTemp $sadayTemp;
          setreading $hc sanightTemp $sanightTemp;
          setreading $hc sodayTemp $sodayTemp;
          setreading $hc sonightTemp $sonightTemp;

          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>,<Tag/Nacht °C>,<Montag-Freitag>,<Tag/Nacht °C>,<Samstag>,<Tag/Nacht °C>,<Sonntag>,<> $devices:<>,!alias,<Soll>,!desired-temp,!controlMode,!btnLock,<Zeitraum&nbsp\;\;1>,!mfdayTemp\@\{readingsGroup(\$DEVICE,'hc')\},!8p1b\@\{readingsGroup(\$DEVICE,'hc')\},!8p1e\@\{readingsGroup(\$DEVICE,'hc')\},!sadayTemp\@\{readingsGroup(\$DEVICE,'hc')\},!6p1b\@\{readingsGroup(\$DEVICE,'hc')\},!6p1e\@\{readingsGroup(\$DEVICE,'hc')\},!sodayTemp\@\{readingsGroup(\$DEVICE,'hc')\},!0p1b\@\{readingsGroup(\$DEVICE,'hc')\},!0p1e\@\{readingsGroup(\$DEVICE,'hc')\},!system_fhem_update,<br>,!state\@\{readingsGroup(\$DEVICE,'device')\},!getConfig,<Ist>,!measured-temp,<Ventil>,!ValvePosition,<Zeitraum&nbsp\;\;2>,!mfnightTemp\@\{readingsGroup(\$DEVICE,'hc')\},!8p2b\@\{readingsGroup(\$DEVICE,'hc')\},!8p2e\@\{readingsGroup(\$DEVICE,'hc')\},!sanightTemp\@\{readingsGroup(\$DEVICE,'hc')\},!6p2b\@\{readingsGroup(\$DEVICE,'hc')\},!6p2e\@\{readingsGroup(\$DEVICE,'hc')\},!sonightTemp\@\{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:', 'controlMode' => 'trigger ntfy_rg \$DEVICE controlMode', 'btnLock' => 'trigger ntfy_rg \$DEVICE btnLock', 'mfdayTemp' => 'mfdayTemp:', '8p1b' => '8p1b:', '8p1e' => '8p1e:', 'sadayTemp' => 'sadayTemp:', '6p1b' => '6p1b:', '6p1e' => '6p1e:', 'sodayTemp' => 'sodayTemp:', '0p1b' => '0p1b:', '0p1e' => '0p1e:', 'system_fhem_update' => 'trigger ntfy_rg \$DEVICE setTimeTable', 'getConfig' => 'trigger ntfy_rg \$DEVICE getConfig', 'mfnightTemp' => 'mfnightTemp:', '8p2b' => '8p2b:', '8p2e' => '8p2e:', 'sanightTemp' => 'sanightTemp:', '6p2b' => '6p2b:', '6p2e' => '6p2e:', 'sonightTemp' => 'sonightTemp:', '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=\"2\"', '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', '24:00');
      my $_0p2e = ReadingsVal($hc, '0p2e', '24:00');
      my $mfdayTemp = ReadingsVal($hc, 'mfdayTemp', '21.0');
      my $mfnightTemp = ReadingsVal($hc, 'mfnightTemp', '17.0');
      my $sadayTemp = ReadingsVal($hc, 'sadayTemp', '21.0');
      my $sanightTemp = ReadingsVal($hc, 'sanightTemp', '17.0');
      my $sodayTemp = ReadingsVal($hc, 'sodayTemp', '21.0');
      my $sonightTemp = ReadingsVal($hc, 'sonightTemp', '17.0');

      fhem("
        set $device tempListMon prep $_8p1b $mfnightTemp $_8p1e $mfdayTemp $_8p2b $mfnightTemp $_8p2e $mfdayTemp 24:00 $mfnightTemp;
        set $device tempListTue prep $_8p1b $mfnightTemp $_8p1e $mfdayTemp $_8p2b $mfnightTemp $_8p2e $mfdayTemp 24:00 $mfnightTemp;
        set $device tempListWed prep $_8p1b $mfnightTemp $_8p1e $mfdayTemp $_8p2b $mfnightTemp $_8p2e $mfdayTemp 24:00 $mfnightTemp;
        set $device tempListThu prep $_8p1b $mfnightTemp $_8p1e $mfdayTemp $_8p2b $mfnightTemp $_8p2e $mfdayTemp 24:00 $mfnightTemp;
        set $device tempListFri prep $_8p1b $mfnightTemp $_8p1e $mfdayTemp $_8p2b $mfnightTemp $_8p2e $mfdayTemp 24:00 $mfnightTemp;
        set $device tempListSat prep $_6p1b $sanightTemp $_6p1e $sadayTemp $_6p2b $sanightTemp $_6p2e $sadayTemp 24:00 $sanightTemp;
        set $device tempListSun exec $_0p1b $sonightTemp $_0p1e $sodayTemp $_0p2b $sonightTemp $_0p2e $sodayTemp 24:00 $sonightTemp;
        ",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;
}