Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo Andre,

Zitat:
dazu gibt es zwei möglichkeiten. wenn es einen eindeutigen wert gibt bei dem nichts passieren soll schreib den explizit vorher hin und mappe ihn auf nichts:
Code: [Auswählen]
..., 'tonne.leer' => undef, 'tone.voll' ='set ...', ...

Ich hatte in
« Antwort #1399 am: 27 Juni 2015, 17:56:44 »
folgendes gefragt, aber leider klappt Dein Tipp nicht.

In einer rg zeige ich alle Thermostate an. Die "desired-temp" springt bei den fhts auf 12.0, wenn ein Fenster offen ist. Mit einer entsprechenden valueIcon wird dann statt des Auswahlmenüs für die desired-temp ein offenes Fenster angezeigt. Leider ist dies aber immer noch anklickbar und sendet "set th desired-temp 12.0" an das Thermostat. Im Sommer stehen aber die fhts alle auf "off" (nur bei offenem Fenster wird 12.0 angezeigt). Das Klicken hätte jetzt zur Folge, dass eine Aktivierung des Heizkreises stattfindet.
Wie kann ich also für 12.0 commands für desired-temp ausnehmen?

commands {'desired-temp.12.0' => '', 'desired-temp' => 'desired-temp:-,off,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'


Das Icon:
valueIcon ... 'desired-temp.12.0' => 'signal_Fenster_Offen.on@red',

funktioniert allerdings, ist aber weiterhin anklickbar.

oder auch
commands {'desired-temp.12.0' => 'undef', 'desired-temp' => 'desired-

zeigt weiterhin das Icon als anklickbar an.

Sind vielleicht die 2 x '.'
in desired-temp.12.0
das Problem?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

@Elektrolurch: ich kann das problem nur bedingt nachstellen. bzw das eigentliche problem ist nicht das das mapping nicht funktioniert (wenn die seite neu aufgebaut wird wird bei 12.0 nur der wert angezeigt und ist nicht anklickbar und bei anderen werten wird das dropdown angezeigt und is auswählbar) sondern das umschalten zwischen einem aktiven element (das dropdown) und einem reinen text.

das umschalen wäre zwar prinzipiell noch möglich, aber auf fhem/perl seite weiss ich gar nicht nicht das gerade ein dropdown bzw aktives element angezeigt wird. und wenn ich das wüsste könnte ich relativ einfach auch nur vom drop down zum text schalten und nicht wieder zurück.

ich muss mal schauen ob es hierfür eine lösung gibt.

das aktuelle icon musst du dir dann in deiner sub auch selber holen. das geht mit etwa so:my $room = ($FW_room ? "&room=$FW_room" : "");
my (undef, undef, $icon) = FW_devState($name, $room, ());


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

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

ulli

Andre, hast du eine Idee warum meine rg nicht über einen LongPoll aktualisiert wird?

Zitat von: ulli am 07 Juli 2015, 22:44:05
Weiß wer warum folgendes readingsGroup nicht aktualisiert wird durch einen LongPoll?

define rg_Raumklima readingsGroup <Raum>,<Status>,<Mode>,<Soll-Temp>,<nextUpdate>,<Ist-Temp>,<Ist-Feuchtigkeit>,<Taupunkt>,<Battery>,<Off>,<On> \
Heizung:state,<>,<>,<>,<>,<>,<>,<>,<{"%temp_temperature_min%set+Heizung+off"}@state>,<{"%sani_heating_timer%set+Heizung+on"}@state> \
.._Heating:state,setMode@{$DEVICE."Valve"},setTemp@{$DEVICE."Valve"},nextUpdate@{$DEVICE."Control"},!temperature@!{$DEVICE."_Climate"},!humidity@!{$DEVICE."_Climate"},!dewpoint@!{$DEVICE."_Climate"},!battery@!{$DEVICE."_Climate"},<{"%temp_temperature_min%set+$DEVICE+off"}@state>,<{"%sani_heating_timer%set+$DEVICE+on"}@state>
attr rg_Raumklima commands { 'setMode' => 'setMode:' }
attr rg_Raumklima mapping { 'WZ_Heating' => 'Wohnzimmer', 'SZ_Heating' => 'Schlafzimmer', 'Heizung' => 'Heizung' }
attr rg_Raumklima nameStyle style='text-align:left;;'
attr rg_Raumklima valueFormat {'temperature' => "%.0f °C", 'setTemp' => "%.0f °C", 'humidity' =>"%.0f %%" , 'nextUpdate' => '{myTimeTillUpdate($VALUE,"")}'}
attr rg_Raumklima valueStyle {myReadingsGroupClimateValueStyle($DEVICE,$READING,$VALUE)}
attr rg_Raumklima valueIcon { state => '%devStateIcon', 'battery.ok' => 'batterie@lightgreen', 'battery.low' => 'batterie@red' }
attr rg_Raumklima noheading 1
attr rg_Raumklima group Raumklima


Der Status der Devices wird einzeln in FHEM über einen LongPoll aktualisiert aber im readingsGroup Device nicht...
Was mache ich denn falsch?

justme1968

siehst du etwas in der JavaScript console?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ulli

Nein ich bekomme bei dem ReadingGroup keine Updates.
Wenn ich in die rg options gehe sehe ich folgendes auf der JS-console:

"18:43:53.732 FW_queryValue:{ReadingsVal("rg_Raumklima","visibility","")}" fhemweb.js:209:4
"18:43:53.736 FW_queryValue:{AttrVal("rg_Raumklima","room","")}" fhemweb.js:209:4
"18:43:53.967 Longpoll with filter rg_Raumklima" fhemweb.js:209:4
"18:43:54.016 Rcvd: " fhemweb.js:209:4
"18:44:19.047 Rcvd: ["#FHEMWEB:FHEMWEB:192.168.178.32:39372","$('#saveCheck').css('visibility','visible')",""]"

sonst kommt nichts.

Gehe ich jetzt direkt in das Device "WZ_Heating_Climate" welches die Temperaturen beinhaltet, werden die Readings regelmäßig aktualisiert und es gibt folgende Ausgabe auf der js-console:

"18:46:08.099 Rcvd: ["WZ_Heating_Climate-battery","ok","ok"]" fhemweb.js:209:4
"18:46:08.100 Rcvd: ["WZ_Heating_Climate-battery-ts","2015-07-10 18:46:08","2015-07-10 18:46:08"]" fhemweb.js:209:4
"18:46:08.101 Rcvd: ["WZ_Heating_Climate-dewpoint","8.6","8.6"]" fhemweb.js:209:4
"18:46:08.101 Rcvd: ["WZ_Heating_Climate-dewpoint-ts","2015-07-10 18:46:08","2015-07-10 18:46:08"]" fhemweb.js:209:4
"18:46:08.102 Rcvd: ["WZ_Heating_Climate-temperature","24.2","24.2"]" fhemweb.js:209:4
"18:46:08.103 Rcvd: ["WZ_Heating_Climate-temperature-ts","2015-07-10 18:46:08","2015-07-10 18:46:08"]" fhemweb.js:209:4
"18:46:08.103 Rcvd: ["WZ_Heating_Climate-humidity","37","37"]" fhemweb.js:209:4
"18:46:08.104 Rcvd: ["WZ_Heating_Climate-humidity-ts","2015-07-10 18:46:08","2015-07-10 18:46:08"]"


Talkabout

Hallo Andre,

ich habe eine technische Frage zu den ReadingsGroups. In FHEMWEB wird für Dein Modul die JavaScript-Datei

fhemweb_readingsGroup.js

mit in die HTML Seite eingebettet. Diese Datei beinhaltet einen ready-Handler um auf das onload-Event der Seite zu reagieren. Die Methode führt dann folgenden Code aus:

function
FW_readingsGroupReadyFn() {
  // replace all informIds of the form devName-readingName with rgName-devName.readingName
  $(".readingsGroup").each(function() {
    var name = $(this).attr('id').split("-")[1];
    $(this).find("[informId]").each(function() {
      var informId = $(this).attr('informId');
      var parts = informId.split("-");
      if( parts[0] != name ) {
        informId = name+'-'+informId.replace('-','.');
        $(this).attr('informId', informId);
      }
    });
  });
}


Im Dashboard werden die einzelnen Tabs per AJAX nachgeladen, was dazu führt, dass die Methode für die auf diese Weise geladenen Tabs nicht ausgeführt wird. Nun meine Frage, wie wichtig die Ausführung dieser Methode ist? Ich habe sie bei mir im Code nun so eingebaut, dass sie aufgerufen wird, sobald ein Tab geladen ist. Ich weiss aber nicht, ob ich damit etwas kaputt mache, wenn die Methode mehrfach läuft. Für den Use Case im Dashboard wäre es auch nicht schlecht, wenn man der Methode ein Root-Objekt mitgeben kann, auf dem sie anfängt zu suchen. So etwas wie:

function
FW_readingsGroupReadyFn($rootNode) {
  // replace all informIds of the form devName-readingName with rgName-devName.readingName
  var $selector = $rootNode ? $rootNode.find('.readingsGroup') : $('.readingsGroup');
  $selector.each(function() {
    var name = $(this).attr('id').split("-")[1];
    $(this).find("[informId]").each(function() {
      var informId = $(this).attr('informId');
      var parts = informId.split("-");
      if( parts[0] != name ) {
        informId = name+'-'+informId.replace('-','.');
        $(this).attr('informId', informId);
      }
    });
  });
}


Damit könnte ich den Overhead entfernen der entsteht, wenn das komplette Dokument durchsucht wird und es nur auf die Objekte im neu geladenen Tab beschränken.

Danke Dir!

Gruss

justme1968

@ulli: geht es um eine readingsGroup in der raum ansicht oder im dashboard?

@Talkabout: die routine ist dazu da um in widgets (slider, drop down, ...) und dem state icon - die jeweils über fhemweb eigene routinen erzeugt werden und somit eine informid devName-readingName haben - mit einer informId zu versehen bei der die readingsGroup der devName ist. sonst passt die informId nicht zu den events die die readingGroup erzeugt. die original device events werden ja ausgefiltert wenn das eigentliche device nicht im angezeigten raum ist.

ohne die routine gehen dann die longpoll updates für diese elemente nicht. das mehrfach aufrufen sollte kein problem sein.

die idee ein optionales root objekt zu übergeben ist gut. wenn du magst kann ich das nachher genau so einchecken.

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

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

Talkabout

Zitat von: justme1968 am 10 Juli 2015, 19:40:44
@ulli: geht es um eine readingsGroup in der raum ansicht oder im dashboard?

@Talkabout: die routine ist dazu da um in widgets (slider, drop down, ...) und dem state icon - die jeweils über fhemweb eigene routinen erzeugt werden und somit eine informid devName-readingName haben - mit einer informId zu versehen bei der die readingsGroup der devName ist. sonst passt die informId nicht zu den events die die readingGroup erzeugt. die original device events werden ja ausgefiltert wenn das eigentliche device nicht im angezeigten raum ist.

ohne die routine gehen dann die longpoll updates für diese elemente nicht. das mehrfach aufrufen sollte kein problem sein.

die idee ein optionales root objekt zu übergeben ist gut. wenn du magst kann ich das nachher genau so einchecken.

gruss
  andre
Danke Dir für die Erklärung.

Einchecken gerne, aber teste es bitte vorher. Ich habe den Code direkt im Forum geändert, daher keine Garantie auf Korrektheit ;)

Gruss

ulli

Ich bekomme kein update in der Raum Ansicht und auch nicht im Dashboard.
(ich dachte anfangs das es am Dashboard liegt.  Habe aber heute gemerkt das es auch nicht in einem Raum aktualisiert wird.)

Gesendet von meinem SM-P600 mit Tapatalk


Talkabout

Zitat von: ulli am 10 Juli 2015, 19:58:47
Ich bekomme kein update in der Raum Ansicht und auch nicht im Dashboard.
(ich dachte anfangs das es am Dashboard liegt.  Habe aber heute gemerkt das es auch nicht in einem Raum aktualisiert wird.)

Gesendet von meinem SM-P600 mit Tapatalk
Hallo Ulli,

kann ich dann erstmal davon ausgehen, dass das Problem für das Dashboard nicht mehr relevant ist? Ich würde gerne die anderen Bugfixes einchecken, aber solange Du noch die Probleme hattest wollte ich warten...

Gruss

ulli

So wie es aussieht ist es ein generelles rg problem...daher unabhängig von dashboard.
Ich hoffe daher das andre mir helfen kann.

Besten dank

Gesendet von meinem SM-P600 mit Tapatalk


Talkabout

Zitat von: justme1968 am 10 Juli 2015, 19:40:44
die idee ein optionales root objekt zu übergeben ist gut. wenn du magst kann ich das nachher genau so einchecken.
Ich habe den Aufruf im Dashboard nun so angepasst, dass dort für jeden Tab dessen jquery-Objekt als Parameter an Deine Methode übergeben wird. Wenn Du also meine Änderungen eincheckst, greift diese direkt auch im Dashboard.

Gruss

justme1968

bin leider noch nicht dazu gekommen. kommt aber auf jeden fall noch.

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

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

ulli

Ich habe das Problem endlich gefunden warum mein rg nicht per LongPoll aktualisiert wird.
!temperature@!{$DEVICE."_Climate"}

Das ! nach dem @ führt dazu das das Reading nicht aktualisiert wird.
Es funktioniert nur wie folgt:
!temperature@{$DEVICE."_Climate"}

Talkabout

Zitat von: ulli am 14 Juli 2015, 18:46:23
Ich habe das Problem endlich gefunden warum mein rg nicht per LongPoll aktualisiert wird.
!temperature@!{$DEVICE."_Climate"}

Das ! nach dem @ führt dazu das das Reading nicht aktualisiert wird.
Es funktioniert nur wie folgt:
!temperature@{$DEVICE."_Climate"}
Funktioniert es damit auch im Dashboard?

Gruss