HM-CC-RT-DN Reading Gruppe

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

Vorheriges Thema - Nächstes Thema

zentis666

Hallo!
Ich habe versucht das Ganze für mich anzupassen, es hakt bei mir noch ein bischen s. Screenshot. Habe auch die CUL_HM_HM_CC_RT_DN Regler.
Meine Heizungsregler heissen z.B. 0.10.10_Thermostat_Flur (also als Alias). Sind alle in der Gruppe heizkoerper.
Leider bekomme ich die Namen nicht angezeigt. Die Dropdowns hinten gehen auch nicht.

Ich hab noch ein paar alte CUL_HM_HM_CC_TC Regler, bekommt man die ohne größere Anpassungen dazu?
Ich weiss nicht genau wie ich den Syntax machen soll dass er nach CUL_HM_HM_CC_RT_DN und nach CUL_HM_HM_CC_TC sucht.
Und würden das dann prinzipiell ohne größere Anpassungen mit den TCs gehen?

Danke für die tolle Arbeit!
Zentis
--
FHEM auf Debian VM - ESXi 6.0 Intel Nuc i5 4th Gen, Homematic auf HMCCU - RaspberryMatic auf Raspberry PI 3,
EM1000 & FS20 über CUNO,  IT über Arduino Firmata, MiLight über WLAN-nRF Gateway, Ebus, 1Wire, diverse Squeezeboxen, Dreambox 920UHD, Homebridge

Roaster

Igami,

ich bekomme leider immer noch keine Überschriften in der readingsGroup. Momentan habe ich diese Zeilen *vor* der Definition meiner readingsGoup in der fhem.cfg stehen:
define d_Label dummy

define not.setreading notify d_.* {\
if(\
($EVENT ~~ / /)\
and\
($EVENT !~ /: /)\
)\
{fhem("setreading $NAME $EVENT")}\
}

attr not.setreading group Dummy
attr not.setreading icon audio_mic
attr not.setreading room Meta

define not.rg notify not.rg {rg_heizung($EVENT)}
attr not.rg group readingsGroup
attr not.rg icon audio_mic
attr not.rg room Meta


set d_Label Heizung Heizung
set d_Label Temperatur Temperatur
set d_Label Status Status
set d_Label Montag Montag
set d_Label Dienstag Dienstag
set d_Label Mittwoch Mittwoch
set d_Label Donnerstag Donnerstag
set d_Label Freitag Freitag
set d_Label Samstag Samstag
set d_Label Sonntag Sonntag

Nur das Ganze wird irgendwie nicht durchlaufen.

Wenn ich hingegen manuell
Zitatset d_Label Heizung Heizung
eingebe, dann bekomme ich diese Überschrift für die Spalte Heizung in der readingsGroup angezeigt.

Wo genau hast du welche Teile deines Codings eingefügt. In der fhem.cfg?

Ein Teil kommt in die 99_MyUtils.cfg, das ist mir klar. Wobei mir aber auch hier noch nicht so ganz klar ist, wo und wann dieses Sub hier aufgerufen wird:
sub makefine{
#d_climaControl definieren und Initialisiern
my @devices = split('\n', fhem('LIST ((CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima|dk_....._.)'));

foreach my $device (@devices){

Im Init-Teil der 99_MyUtils.pm?

Grüße,
Michael

igami

@Zentis: um nach CUL_HM_HM_CC_RT_DN und nach CUL_HM_HM_CC_TC zu suchen musst du

CUL_HM_HM_CC_(RT_DN|TC)

angeben.

@Roaster: die ganzen set d_Label Befehle müssen von Hand aufgerufen werden, eben so das {makefine} (siehe http://forum.fhem.de/index.php/topic,28329.msg212085.html#msg212085)
Ich habe das notify ganz normal mit define angelegt, allerdings mache ich das immer erst nur leer und bearbeite es dann in DEF.

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

zentis666

@Igami: danke für den Syntax!
kannst Du noch mal auf ein paar Randbedingungen eingehen?
Müssen die Regler in diesem Raum "Vorgaben" sein damit es funktioniert?
Ich habe verstanden, daß Du eine Nummer suchst, reicht da eine Nummer im Alias des Reglers?
Oder ein Raum / Gruppe mit der Nummer in der die Regler sind?
Ist das Format der Nummer egal oder muss ich das wenn ich nur 2-stellig bin anpassen?

Und dann alles manuell eingeben und nicht einfach in die fhem.config reinkopieren?!
--
FHEM auf Debian VM - ESXi 6.0 Intel Nuc i5 4th Gen, Homematic auf HMCCU - RaspberryMatic auf Raspberry PI 3,
EM1000 & FS20 über CUNO,  IT über Arduino Firmata, MiLight über WLAN-nRF Gateway, Ebus, 1Wire, diverse Squeezeboxen, Dreambox 920UHD, Homebridge

igami

Zitat von: zentis666 am 11 November 2014, 15:43:55
Müssen die Regler in diesem Raum "Vorgaben" sein damit es funktioniert?
Nein, ich habe nur im Raum Vorgaben stehen nur Vorgaben für alle Devices drin, Icon, Group, etc. Und eben auch ein climaControl in dem die setList Werte stehen.

Zitat von: zentis666 am 11 November 2014, 15:43:55
Ich habe verstanden, daß Du eine Nummer suchst, reicht da eine Nummer im Alias des Reglers?
Oder ein Raum / Gruppe mit der Nummer in der die Regler sind?
Ist das Format der Nummer egal oder muss ich das wenn ich nur 2-stellig bin anpassen?
Es muss eine Nummer im Attribut room sein, sonst wird für alle Thermostate nur ein climaControl erzeugt.

Zitat von: zentis666 am 11 November 2014, 15:43:55
Und dann alles manuell eingeben und nicht einfach in die fhem.config reinkopieren?!
Alles manuell eingeben, ich halte auch nix davon die fhem.cfg direkt zu bearbeiten ;)
Allerding definiere ich mir die ganzen Sachen immer erst "leer" z.B.

define rg_42 readingsgroup <>

und editiere die dann ganz bequem über das DEF Feld.

Mir ist heute aufgefallen, dass ich aber noch einen Bock drin habe, ich habe einmal weekday und einmal workday verwendet, das müsste noch angepasst werden. Ich werde versuchen bald möglich den wiki Eintrag zu verfassen, sobald der Account freigeschaltet ist.

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

Roaster

Igami,

was genau macht diese Zeile hier
return InternalVal($device,"device","device error");
aus dem Sub:
sub rg_heizung($){
    my @input    = split(/[§\s]+/,shift);
    my $device   = $input[0];
    my $function = $input[1];
   
    Log 1, "rg_heizung (init), Device: $device, Function: $function";
   
    if($function eq "clima"){
        my $room =  AttrVal($device, 'room', 'undef');
        $room =~ s/\D//g;

        Log 1, "rg_heizung (clima), Room: $room";       
       
        return(("d_climaControl_".$room));
    }
    elsif($function eq "device"){
        return InternalVal($device,"device","device error");


Dies wird offensichtlich in der readingsGroup hier z.B. aufgerufen:
(CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima:battery@{rg($DEVICE."§device")}

Ich habe für meine Max! Thermostate Ähnliches probiert, aber ich bekomme immer nur "device error" zurück. Mein Coding:
Heizung(Eltern|):battery@{rg_heizung($DEVICE."§device")}
Ich habe den Eindruck, dass ich die interne Variable "device" bei meinen Geräten nicht habe. Wenn ich das richtig verstehe, da bin ich mir aber überhaupt nicht sicher, dann sollte da der Name des jeweiligen Geräts zurückgegeben werden.

List HeizungEltern gibt:
ZitatInternals:
   CFGFN      /opt/fhem/FHEM/obergeschoss.cfg
   DEF        HeatingThermostat 0c8125
   IODev      cm
   NAME       HeizungEltern
   NR         335
   STATE      18.0 °C
   TYPE       MAX
   addr       0c8125
   type       HeatingThermostat
   Readings:
     2014-11-09 21:15:55   TimeInformationHour 0
     2014-11-10 20:02:24   battery         ok
     2014-11-10 20:02:24   desiredTemperature 18.0
     2014-11-09 21:25:16   measurementOffset 0
     2014-11-10 20:02:24   mode            auto
     2014-11-11 19:35:18   msgcnt          8
     2014-11-10 20:02:24   state           18.0 °C
     2014-11-10 20:02:24   temperature     22.1
     2014-11-10 20:02:24   valveposition   0
   Internals:
     interfaces thermostat;battery;temperature
Attributes:
   IODev      cm
   alias      Heizung Eltern
   device_timeout 65
   group      Obergeschoss
   icon       sani_heating
   room       Eltern

Sollte ich hier eher
return InternalVal($device,"NAME","device error");
verwenden?

JAAA - ist wohl so, jetzt scheints zu laufen! Also mein Posting hiermit nur für andere die über das gleiche Problem stolpern  ;)

Grüße,
Michael

igami

Hallo Michael,

Zitat von: Roaster am 11 November 2014, 21:44:09
was genau macht diese Zeile hier
return InternalVal($device,"device","device error");
Bei Homematic gibt es nicht nur ein Device für das Thermostat, sondern noch 6 Channels. Am wichtigsten istder _Clima Channel, da dort alle Sets inkl. Wochenplan gemacht werden können, nur der Battery und Lock State stehen da nicht drin. Alle Channels haben aber ein Internal, der auf das Device verweist. Mehr macht die Zeile nicht. Aber das scheinst du ja nun auch schon selbst rausgefunden zu haben.
Es wäre schon, wenn du dann deinen ganzen Code hier auch mal posten könntest, dann hat man funktionierende Readingsgroups für MAX und HomeMatic

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

Roaster

Igami,

:o so richtig verstanden habe ich deine Antwort mit den Channels jetzt nicht. Vor allem im Bezug auf die readingsGroup. Werde ich mit der Zeile
return InternalVal($device,"NAME","device error");
nun das richtige Ergebnis erhalten oder auch nicht?

Ich meine momentan gehe ich erst mal schrittweise vor und baue dein Coding nach. Gleich beim Auslesen des Batterie Status bin ich schon Mal hängen geblieben aber mit meinem Coding von oben, erhalte ich jetzt den Status der Batterie, sogar mit Symbol.


Wenn ich das komplett umgesetzt und ich auch die Zeiten mit den Wochentag mit drin habe, natürlich funktionsfähig, dann können wir dies gerne auch ins Wiki aufnehmen.


So richtig verstanden habe ich auch noch nicht, warum du die Überschriften der readingsGroup mit einem Notify setzten lässt. Ich meine, da könnte man diese ja gleich direkt an enstpr. Stelle eintragen. Ich habe dies trotzdem zur Übung übernommen, lasse aber mittels eines weiteren Notify die Werte des d_Labels direkt bei der Initialisierung von fhem setzen. Habe da ein enstprechendes Coding gefunden und es funktioniert perfekt. Ich muss somit keine manuellen Befehle absetzen.

Das Coding dazu habe ich gerade nicht zu Hand, werde es aber nachreichen.

Grüße,
Michael

igami

Hallo Michael,

kann es sein, dass bei MAX! das reading battery im gleichen Device steht? Dann brauchst du den Umweg gar nicht gehen.
Zu den HomeMatic hier noch was http://www.fhemwiki.de/wiki/HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat vielleicht macht das die Sache verständlicher.

Das Notify brauche ich in erster Linie für die d_climaControl, damit die ausgewählten Readings die in setList stehen nicht nur in den state geschrieben werden.
Die Überschriften muss ich mir aus dem d_Label holen, da ich sie sonst glaube ich nicht mit colspan beeinflussen kann.

Es ist wahrscheinlich noch optimierungspotential vorhanden, aber es ist auch mehr oder weniger die erste readingsGroup die ich gebaut habe, ist allerdings schon ein bisschen gewachsen ;)

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

Roaster

Igami,

ich versuche weiterhin fieberhaft deinen Code zu verstehen. Ist aber nicht sehr einfach, da ich erstens in Perl nicht gerade der Meister bin und zweitens ich die HM Geräte und deren Readings und Internals und v.a. deine Gerätenamen nicht kenne.

Ich hänge dieses Mal hier:

sub makefine{
#d_climaControl definieren und Initialisiern
my @devices = split('\n', fhem('LIST ((CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima|dk_....._.)'));

foreach my $device (@devices){
my $room = AttrVal($device, 'room', 'undef');
if(!($room =~ /undef|CUL_HM/)){
  my $roomNumber = $room;
  $roomNumber =~ s/\D//g;


Ich gehe davon aus, dass my @devices = split('\n', fhem('LIST ((CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima|dk_....._.)'));
sich alle Geräte sucht, die mit einem bestimmten Namen beginnen?

Ich habe dies an meine Gerätenamen angepaßt:
my @devices = split('\n', fhem('LIST (ht_(.*|))'));
und erhalte somit, wenn ich den LIST Befehl manuell absetze diese Zeilen zurück:
ZitatInternals:
   CFGFN      /opt/fhem/FHEM/obergeschoss.cfg
   DEF        HeatingThermostat 0c8125
   IODev      CUL_MAXX
   NAME       ht_HeizungEltern
   NR         335
   STATE      19.0 °C
   TYPE       MAX
   addr       0c8125
   type       HeatingThermostat
   Readings:
     2014-11-12 20:10:11   TimeInformationHour 0
     2014-11-12 20:34:52   battery         ok
     2014-11-12 20:34:52   desiredTemperature 19.0
     2014-11-12 20:32:59   desiredtemp_new 00
     2014-11-12 20:18:37   groupid         0
     2014-11-12 20:18:39   measurementOffset 0
     2014-11-12 20:34:52   mode            manual
     2014-11-12 20:32:59   msgcnt          3
     2014-11-12 20:34:52   state           19.0 °C
     2014-11-12 20:34:52   temperature     21.5
     2014-11-12 20:34:52   valveposition   0
   Internals:
     interfaces thermostat;battery;temperature
Attributes:
   IODev      CUL_MAXX
   alias      Heizung Eltern
   device_timeout 65
   group      Obergeschoss
   icon       sani_heating
   room       Eltern

Ich habe derzeit nur ein Max Thermostate am laufen, da erst in der Anfangsphase. Die oben gezeigten Zeilen wird wohl auch der Inhalt sein, den das Sub makefine erhält. Ich habe mir die Ausgabe per Log-Befehl in die fhem.log geschrieben, somit stimmt meine Annahme erst Mal.

Hiermit foreach my $device (@devices){ gehe ich davon aus, wird jede einzelnen Zeile, die der LIST Befehl zurückgegeben hat durchlaufen, richtig? Wenn ich mir $device ins Log ausgeben lasse, dann erhalte ich jede einzelne Zeile der Ausgabe des oben stehenden LIST Befehls.

So und jetzt kommt schon das erste Problem: my $room = AttrVal($device, 'room', 'undef'); Dies sollte wohl den Wert des Attributs room zurückliefern. In meinem Fall
Zitatroom       Eltern
den Wert Eltern. Tut es aber nicht, ich erhalte "undef" zurück. Ich verwende keine numerischen Zimmernummern, da ich denke, dass es auch so funktionieren sollte, wenn ich den Code $roomNumber =~ s/\D//g überall entferne.

Was macht diese Zeile genau:
if(!($room =~ /undef|CUL_HM/))
Filtert dieses Coding auch wieder auf den Gerätenamen, der mit CUL_HM beginnen muss? In meinem Fall wäre dieses Coding hier korrekt: if(!($room =~ /undef|ht_/)){, oder?

Die nachfolgenden Zeile interpretiere ich dann so:
  my $climaControl = ('d_climaControl_'.$roomNumber);
  if(!(defined($defs{$climaControl}))){

dass hiermit der Name der Dummy Geräte je HM Thermostat aufgebaut und geprüft wird, ob es dieses schon gibt, wenn nicht, dann wird es durch die später folgenden Zeile erst definiert.

Kannst du dir bitte das nochmals durchlesen, was ich geschrieben haben?

Danke,
Michael






Roaster

Igami,

noch ein kleiner Nachtrag: was macht diese Eintrag in der readingsGroup:impossible@{$DEVICE}? Einen Platzhalter definieren oder tatsächlich ein Attribut auslesen. Wenn Letzteres, was gibt es im Falle der HM Thermostate zurück? Ich habe solch ein Attribut leider nicht bei den Maxen:

ZitatInternals:
   CFGFN      /opt/fhem/FHEM/obergeschoss.cfg
   DEF        HeatingThermostat 0c8125
   IODev      CUL_MAXX
   NAME       ht_HeizungEltern
   NR         335
   STATE      19.0 °C
   TYPE       MAX
   addr       0c8125
   type       HeatingThermostat
   Readings:
     2014-11-12 20:10:11   TimeInformationHour 0
     2014-11-12 20:34:52   battery         ok
     2014-11-12 20:34:52   desiredTemperature 19.0
     2014-11-12 20:32:59   desiredtemp_new 00
     2014-11-12 20:18:37   groupid         0
     2014-11-12 20:18:39   measurementOffset 0
     2014-11-12 20:34:52   mode            manual
     2014-11-12 20:32:59   msgcnt          3
     2014-11-12 20:34:52   state           19.0 °C
     2014-11-12 20:34:52   temperature     21.5
     2014-11-12 20:34:52   valveposition   0
   Internals:
     interfaces thermostat;battery;temperature
Attributes:
   IODev      CUL_MAXX
   alias      Heizung Eltern
   device_timeout 65
   group      Obergeschoss
   icon       sani_heating
   room       Eltern

Michael

dancatt

Nabend,
sorry, aber soweit ich weiß wollte Igami das Thema ins Wiki stellen und hoffentlich auch inklusive Anleitung.
Ich würde warten bis es soweit ist.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

zentis666

Igami
ich versuche gerade für HM-CC-RT und HM-CC-TC Kombi-Betrieb anzupassen.
Bei den TCs muss man ja den Climate-Kanal nehmen zur Steuerung der Temperaturen, ich hab das mit
CUL_HM_HM_CC_(RT_DN_......|........._Clima|TC_(......|.........)_Climate)
gelöst und den in die Reading-Gruppe und die sub makefine eingetragen.
Prinzipiell bekomme ich damit alle Heizungsregler.

Wenn ich das richtig sehe, fragst Du den Batteriestatus bei den RT-DNs im Clima Kanal ab.
Da hab ich bloss keinen Batteriestatus, die Dinger senden doch nur eine Spannung solange ok?! Hast Du das auf einen Status umgemappt?

Weiterhin bekomme ich keine Namen, keine Dropdowns und die Variable fhem_system_update werden als Klartext angezeigt und ich verstehe nicht warum.
Hab Deinen Code bis auf die Definition oben so gelassen wie er war, der Syntax der Räume mit den Reglern ist X.XX:<Name> (also X ist ne Zahl)
Hast Du noch eine Idee was fehlt?

--
FHEM auf Debian VM - ESXi 6.0 Intel Nuc i5 4th Gen, Homematic auf HMCCU - RaspberryMatic auf Raspberry PI 3,
EM1000 & FS20 über CUNO,  IT über Arduino Firmata, MiLight über WLAN-nRF Gateway, Ebus, 1Wire, diverse Squeezeboxen, Dreambox 920UHD, Homebridge

igami

Hallo Michael,
Zitat von: Roaster am 12 November 2014, 21:17:06
Ich gehe davon aus, dass my @devices = split('\n', fhem('LIST ((CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima|dk_....._.)'));
sich alle Geräte sucht, die mit einem bestimmten Namen beginnen?
Das ist korrekt, habe mittlerweile aber auch eine elegantere Methode "gefunden"

my @devices = devspec2array('((CUL_HM_|)HM_CC_RT_DN_(......|..........)_Clima|dk_....._.)');

Zitat von: Roaster am 12 November 2014, 21:17:06
Ich habe dies an meine Gerätenamen angepaßt:
my @devices = split('\n', fhem('LIST (ht_(.*|))'));
Bei dir sollte es dann mit

my @devices = devspec2array('ht.*');

funktionieren.
Zitat von: Roaster am 12 November 2014, 21:17:06
Hiermit foreach my $device (@devices){ gehe ich davon aus, wird jede einzelnen Zeile, die der LIST Befehl zurückgegeben hat durchlaufen, richtig? Wenn ich mir $device ins Log ausgeben lasse, dann erhalte ich jede einzelne Zeile der Ausgabe des oben stehenden LIST Befehls.
So und jetzt kommt schon das erste Problem: my $room = AttrVal($device, 'room', 'undef'); Dies sollte wohl den Wert des Attributs room zurückliefern. In meinem Fall  den Wert Eltern. Tut es aber nicht, ich erhalte "undef" zurück. Ich verwende keine numerischen Zimmernummern, da ich denke, dass es auch so funktionieren sollte, wenn ich den Code $roomNumber =~ s/\D//g überall entferne.
Soweit korrekt. Das hängt wieder mit dem LIST Befehl zusammen, wenn du nur ein Device auflistest werden alle Internals, Attribute, etc. mit aufgelistet und dann wieder beim Zeilenumbruch getrennt, sodass nur bei einer Zeile der wirkliche Raum zu finden ist
Zitat von: Roaster am 12 November 2014, 21:17:06
Was macht diese Zeile genau:
if(!($room =~ /undef|CUL_HM/))
Filtert dieses Coding auch wieder auf den Gerätenamen, der mit CUL_HM beginnen muss? In meinem Fall wäre dieses Coding hier korrekt: if(!($room =~ /undef|ht_/)){, oder?
es überprüft ob der Raum NICHT 'undef' oder 'CUL_HM' ist, dann wäre das device nämlich vom autocreate erstellt worden oder steht ohne Raum da.
Zitat von: Roaster am 12 November 2014, 21:25:06
impossible@{$DEVICE}? Einen Platzhalter definieren oder tatsächlich ein Attribut auslesen.
Das ist wohl eher ein Feature der readingsGroup, dass die Variable $DEVICE beim aufruf mit @ durch das andere device überschrieben wird. Damit wird sie einfach nur wieder auf das device welches am Anfang der Zeile vor dem Doppelpunkt steht zurück gesetzt. Das reading impossible gibt es also nicht ;)

Hallo Dancatt,
Zitat von: dancatt am 12 November 2014, 22:41:08
Nabend,
sorry, aber soweit ich weiß wollte Igami das Thema ins Wiki stellen und hoffentlich auch inklusive Anleitung.
Ich würde warten bis es soweit ist.
Dann würden ja die ganzen Probleme auch im Wiki Eintrag auftreten ;)

Hallo zentis666,
Zitat von: zentis666 am 13 November 2014, 00:18:00
Wenn ich das richtig sehe, fragst Du den Batteriestatus bei den RT-DNs im Clima Kanal ab.
Da hab ich bloss keinen Batteriestatus, die Dinger senden doch nur eine Spannung solange ok?! Hast Du das auf einen Status umgemappt?
Der Batterie, sowie der Lockstatus werden über @ abgefragt, also von einem anderen device. Ich habe bei mir aber überall das 'ok' bzw 'low' in den Devices.
Zitat von: zentis666 am 13 November 2014, 00:18:00
Weiterhin bekomme ich keine Namen, keine Dropdowns und die Variable fhem_system_update werden als Klartext angezeigt und ich verstehe nicht warum.
Der Alias-Teil sollte zu ?alias umgeschrieben werden, durch ? wird ein Attribut abgefragt, keine Dropdowns? Haben die climaControl denn das attribut setList mit den Werten? vor fhem_system_update muss ein % stehen, dann sollte er sich das Icon nehmen.
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

Roaster

Wow das war ja wieder ausführlich erklärt - Danke dafür. Einen Teil davon konnte ich prompt umsetzen, beim Teil mit den Dropdown-Werte habe ich das gleiche Problem wie zentis666

Zitat von: igami am 13 November 2014, 05:44:21
keine Dropdowns? Haben die climaControl denn das attribut setList mit den Werten? vor fhem_system_update muss ein % stehen, dann sollte er sich das Icon nehmen.

So sieht momentan das Dummy Device Vorgaben bei mir aus (am Ende gekürzt):
Internals:
   CFGFN      /opt/fhem/FHEM/ht_helper.cfg
   NAME       default_climaControl
   NR         377
   STATE      nightTemp 18.0
   TYPE       dummy
   Readings:
     2014-11-12 16:34:16   state           nightTemp 18.0
Attributes:
   comment    d_climaControl.* icon setList
   icon       Icon_Fisch
   room       Vorgaben
   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


Ich habe deinen Code etwas umgeschrieben, mit dem Hinweis von deiner letzten Antwort, was die Funktion devspec2array() angeht und habe mir ein paar Einträge ins Log schreiben lassen:
    #Attribute aus Vorgaben übernehmen
    #my @defaults = split('\n', fhem('LIST room=Vorgaben'));
    my @defaults = devspec2array('default_climaControl');
   
    foreach my $default (@defaults){

      Log 1, "makefine (Vorgaben) default ".$default;
     
        my @attributes = split(' ', AttrVal($default,'comment','comment error'));
       
        Log 1, "makefine (Vorgaben) Attributes ".@attributes;
       
        my $wildcard =  $attributes[0];
       
        Log 1, "makefine (Vorgaben) attribute[0] ".$attributes[0];
        Log 1, "makefine (Vorgaben) wildcard ".$wildcard;
       
        splice(@attributes,0,1);
        foreach my $attribut (@attributes){
       
        Log 1, "makefine (Vorgaben) attribut ".$attribut;
           
            my $attrval = AttrVal($default, $attribut, 'attrval error');
           
            Log 1, "makefine (Vorgaben) attrval ".$attrval;
           
            fhem("attr $wildcard $attribut $attrval")
        }
    }


Log-Auszug hierzu:
Zitat2014.11.13 19:51:41 1: makefine (Vorgaben) Default: default_climaControl
2014.11.13 19:51:41 1: makefine (Vorgaben) Attributes 3
2014.11.13 19:51:41 1: makefine (Vorgaben) attribute[0] d_climaControl.*
2014.11.13 19:51:41 1: makefine (Vorgaben) wildcard d_climaControl.*
2014.11.13 19:51:41 1: makefine (Vorgaben) attribut icon
2014.11.13 19:51:41 1: makefine (Vorgaben) attrval Icon_Fisch
2014.11.13 19:51:41 1: makefine (Vorgaben) attribut setList
2014.11.13 19:51:41 1: makefine (Vorgaben) attrval dayTemp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,

Wenn ich dein Coding richtig interpretiere, und meine Änderungen dort korrekt sein, dann wird bei den Dummy Geräten, die je Thermostat erstellt werden auch sowohl das Attribut room, icon als auch ein setList gesetzt.

Das Ergebnis sieht bei mir dann so aus:
ZitatInternals:
   CFGFN
   NAME       d_climaControl_Eltern
   NR         468
   STATE      ???
   TYPE       dummy
   Readings:
     2014-11-13 19:51:40   dayTemp         21.0
     2014-11-13 19:51:41   friday_am_end   19:30
     2014-11-13 19:51:41   friday_am_start 18:00
     2014-11-13 19:51:41   friday_pm_end   24:00
     2014-11-13 19:51:41   friday_pm_start 24:00
     2014-11-13 19:51:40   monday_am_end   19:30
     2014-11-13 19:51:40   monday_am_start 18:00
     2014-11-13 19:51:40   monday_pm_end   24:00
     2014-11-13 19:51:40   monday_pm_start 24:00
     2014-11-13 19:51:40   nightTemp       17.0
     2014-11-13 19:51:40   saturday_am_end 19:30
     2014-11-13 19:51:40   saturday_am_start 18:00
     2014-11-13 19:51:40   saturday_pm_end 24:00
     2014-11-13 19:51:40   saturday_pm_start 24:00
     2014-11-13 19:51:40   sunday_am_end   19:30
     2014-11-13 19:51:40   sunday_am_start 18:00
     2014-11-13 19:51:40   sunday_pm_end   24:00
     2014-11-13 19:51:40   sunday_pm_start 24:00
     2014-11-13 19:51:41   thursday_am_end 19:30
     2014-11-13 19:51:40   thursday_am_start 18:00
     2014-11-13 19:51:41   thursday_pm_end 24:00
     2014-11-13 19:51:41   thursday_pm_start 24:00
     2014-11-13 19:51:40   tuesday_am_end  19:30
     2014-11-13 19:51:40   tuesday_am_start 18:00
     2014-11-13 19:51:40   tuesday_pm_end  24:00
     2014-11-13 19:51:40   tuesday_pm_start 24:00
     2014-11-13 19:51:40   wednesday_am_end 19:30
     2014-11-13 19:51:40   wednesday_am_start 18:00
     2014-11-13 19:51:40   wednesday_pm_end 24:00
     2014-11-13 19:51:40   wednesday_pm_start 24:00
Attributes:
   icon       Icon_Fisch
   room       Eltern
   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

Meines Erachtens alles korrekt. Wie du sehen kannst habe ich den Wochentag durch Montag-Freitag ersetzt, sollte eigentlich keine Rolle spielen wird nur bei mir ein klein wenig unübersichtlicher.
Nur in der readingsGroup erscheint das Dropdown bei den jeweiligen Werten nicht. Es stehen statt dessen die jeweiligen Werte dort.

Das mit dem impossible@{$DEVICE} habe ich noch immer nicht so ganz verstanden. Was wird dann in der readingsGroup angezeigt?

Ach ja, ich habe ja erwähnt, dass ich die SETs für die d_Label nicht manuell aufrufe. Ich verwende dafür und für den Aufruf des Sub makefine das folgende Coding:
define Startsequenz notify global:INITIALIZED set d_Label Heizung Heizung;;set d_Label Temperatur Temperatur;;\
set d_Label Status Status;;set d_Label Montag Montag;;set d_Label Dienstag Dienstag;;\
set d_Label Mittwoch Mittwoch;;set d_Label Donnerstag Donnerstag;;set d_Label Freitag Freitag;;\
set d_Label Samstag Samstag;;set d_Label Sonntag Sonntag;;{fhem(makefine)}


Vielleicht kannst du es ja auch mal brauchen :)

Grüße,
Michael