plots dynamisch erzeugen und Werte aus einem modul beziehen

Begonnen von herrmannj, 09 Januar 2016, 14:37:08

Vorheriges Thema - Nächstes Thema

herrmannj

Moin, Moin,

hat jemand eine Empfehlung wie ich sinnvoll vorgehen könnte um das folgende zu erreichen ?

Hintergrund: ich arbeite an einem modul das Temperaturen für einen variablen Zeitraum aufzeichnet. Das soll so laufen, ich sage "Start" dann werden die Temperaturen aufgezeichnet dann "Stopp" und dann soll das unter einem Namen abgespeichert werden den der user angibt. Dabei sollen mehrere verschiedene Datenreihen, jeweils mit individuellem Namen, abgespeichert werden können.

Soweit so gut, no prob.

Später möchte ich das der user sich das als plot wieder aufrufen kann.

Es müsste also dynamisch ein plot mit diesen Daten erzeugt und angezeigt werden. Im Modul kann ich ein get einbauen welches die Daten so liefert wie Filelog das auch würde.

Wie könnte man jetzt den dazugehörigen plot, dynamisch und idealerweise ohne großes patchen an fhemweb und co erzeugen, im besten Fall sogar auf die Detailseite des device einbinden ?

Jemand Ansatzpunkte? Ich erwarte keine fertige Lösung, Ideen oder Einstiegspunkte sind sehr willkommen !

Danke und Grüße
Jörg 

justme1968

schau dir logProxy an. beispiele im wiki. auch zum plotten beliebiger dynamisch erzeugter daten.

wenn du eine noch engere integration möchtest kannst du in deinem device auch die nötigen aufrufe implementieren und auch pseudo log device spielen.

um etwas auf der detail seite anzuzeigen brauchst du eine detailFn.

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

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

herrmannj

Jo. Das mit detailfn und so ist schon klar. Ich hab gerade noch ne andere Idee gehabt. Du hast doch mal was geschrieben mit dem man events direkt an einen Javascript empfänger in fhemweb schicken kann.

Gab's da ne Doku zu ?

Danke
Joerg

justme1968

um direkt daten an fhemweb zu senden ohne über events zu gehen gibt es FW_directNotify. ich hab aber immer noch nicht geschafft endlich darauf umzustellen :(.

die doku ist zur zeit mehr oder weniger nur im code.

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

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

herrmannj

Code is ok. Wie nehm ich die in fhem web entgegen? Ist schon was working (Beispiel) dann schau ich da.

Danke vg
Joerg

justme1968

markus 72_FB_CALLLIST.pm verwendet das ganze glaube ich schon. der frontend code ist in fhemweb_fbcalllist.js. die abgesendeten daten kommen über setValueFn rein.

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

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

herrmannj

gibt es eigentlich einen funktionellen Unterschied beim laden von js zwischen

$data{FWEXT}{NAME}{SCRIPT} =

und dem autoload (fhemweb_xxx.js)? Was ist besser ?

vg
joerg

rudolfkoenig


justme1968

da fällt mir ein es gab da noch eine offene diskussion in der es darum ging die ganzen fhemwidgets nur zu laden wenn sie auf einer seite auch tatsächlich verwendet werden. steht das noch auf deiner liste?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus Bloch

Gibt es nicht eine Möglichkeit, modulspezifische JS-Dateien in der Initialize-Funktion anzugeben? So dass FHEMWEB dieses JS nur dann bereitstellt, wenn es eine Definition von diesem Modultyp anzeigt (Room/Detail)?
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

herrmannj

Mach ich das so richtig ?:

Ich liefere eine div
"<div class='fhemWidget' informId='$devname' cmd='' arg='BBQPlot' dev='$devname'>";

in der js
FW_widgets['BBQPlot'] = {
  createFn:FW_BBQPlotCreate
};

function FW_BBQPlotCreate(elName, devName, vArr, currVal, set, params, cmd)
{
  console.log (elName +':'+ devName);
  if(vArr[0] == "BBQPlot")
  {
    var newEl = $('div[informid="'+devName+'"]').get(0);
    newEl.setValueFn = FW_processBBQPlot;
    return newEl;
  }
}

function FW_processBBQPlot(data)
{
  console.log ('update: '+data);
}


und so sende ich im Modul:
FW_directNotify($hash->{NAME}, $data, 1);

$data ist dann json und im js  .. process... hole ich mir das und mach den fancy stuff.

Den dritten Parameter in FW_directNotify habe ich jetzt noch nicht identifiziert. Einfach "1" und passt ?

So funktionierts, möchte nur wissen ob ich das so im Sinne des Erfinders mache.

Danke und vg
joerg

rudolfkoenig

Ja, ich meine, dass es so gedacht ist.
Das 1 am Ende ist in diesem Fall nicht relevant, muss aber als Parameter vorhanden sein.

rudolfkoenig

Zitatda fällt mir ein es gab da noch eine offene diskussion in der es darum ging die ganzen fhemwidgets nur zu laden wenn sie auf einer seite auch tatsächlich verwendet werden. steht das noch auf deiner liste?

Nein. Ich weiss nicht mehr, wie fhemweb.js oder 01_FHEMWEB.pm entscheiden kann, ob ein .js benoetigt wird oder nicht. Faend ich aber gut.

herrmannj

#13
Zitatund so sende ich im Modul:
FW_directNotify($hash->{NAME}, $data, 1)

for the records:
der dritte Parameter muss nicht sein. Die funktion nimmt beliebig viele Argumente und gibt sie an fhemweb weiter. edith: muss doch.

Was mir aufgefallen ist. Alles was über directNotify läuft taucht auch im event monitor auf. Abhängig davon was man schickt sieht der dann ein wenig komisch aus ;) Ich weiß nicht genau ob man das ohne patch unterbinden kann.

vg
joerg

Markus Bloch

Zitat von: herrmannj am 14 Januar 2016, 23:38:32
Was mir aufgefallen ist. Alles was über directNotify läuft taucht auch im event monitor auf. Abhängig davon was man schickt sieht der dann ein wenig komisch aus ;) Ich weiß nicht genau ob man das ohne patch unterbinden kann.

Anbei ein Patch, der das beseitigt. Ich weis allerdings nicht, ob damit Events in anderen Konstellationen unterbunden werden, hier sollte Rudi nochmal einen Kommentar zu abgeben. Ich benutze FW_directNotify um in FB_CALLLIST die Anrufliste zu aktualisieren, ohne dabei über Events zu gehen. In meinem Fall, werden die Events nun nicht mehr im Event-Monitor angezeigt, die Liste wird aber nachwievor aktualisiert.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)