Floorplan + Slider: wie senden per Ajax im Hintergrund?

Begonnen von Tobias, 21 August 2013, 09:06:39

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
beispielhaft habe ich einen Weblink mit folgender Slider-Definition im Floorplan eingebaut.
<div class='slider' id='slider.bk_frequency' min='0' stp='1' max='48' cmd='/fhem?cmd=set bk_frequency %&room=dummy'><div class='handle'>0</div></div><script type="text/javascript">FW_sliderCreate(document.getElementById('slider.bk_frequency'),'17');</script>

Funktioniert gut, aber das Setzen des neuen Wertes erfolgt durch ein Reload. Gibt es jetzt schon "versteckte" Features um das Senden per Ajax zu erledigen? Analog dem longpoll?

Zb. habe ich im FW_sliderCreate() gesehen, das es eine sonderbehandlung für das cmd gibt, wenn es mit js: beginnt:
if(cmd) {
        if(cmd.substring(0,3) != "js:") {
          document.location = cmd.replace('%',val);
        }
      } else {
        slider.nextSibling.setAttribute('value', val);
      }

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

wenn du dir ein dummy baust und mit setList und webCmd einen slider in der cmdiste erzeugst kannst du den dummy direkt  mit style device und commands im floorplan verwenden und musst dich um nichts kümmern.

das größte problem das so per weblink zu machen ist viel fhem interna zu duplizieren und es wird nicht mehr funktionieren wenn sich intern was ändert.

gruss
  andre

ps: longpoll geht (zur zeit...) nur wenn das device aus dem die werte kommen im gleichen raum ist der gerade angezeigt wird.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Tobias

Der Weblink ist nur ein Beispiel.
Schlussendlich soll das ganze als ein Reading zum Device abgebildet werden und dann mittels style=3 (DeviceReading) in den Floorplan. Ansonsten funktioniert das Ganze nicht korrekt mit longpoll.

Heißt das also das ich mir eine eigene Funktion zum Ajax-Send ausdenken muss?
Abgesehen davon sollen alle "set's" der Dummy's, FHT's, FS20 etc per Ajax gesendet werden. Ich will hier kein Reload haben.

Aber vieleicht kan Rudi sagen wie ich als Command zum FW_sliderCreate() eine JavascriptFunktion übergeben kann?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

ich glaube ich verstehe noch nicht genau was du machen willst...

den slider kannst du mit bordmitteln darstellen ohne selber was zu implementieren.

wenn du nur readings aus mehreren devices darstellen möchtest geht das mit dem readings typ beim weblink. mit der derzeitigen einschränkung das es nur dann per longpoll aktualisiert wird weil das device im gleichen raum ist.

rudi hat schon einen vorschlag gemacht wie man das beheben könnte. ich bin aber noch nicht dazu gekommen das zu bauen.

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

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

Tobias

ich versuche es nochmal genauer zu erläutern:
Im floorplan möchte ich dynamisch in einem Overlay-Div den Slider einbauen. Dieses OverlayDiv erscheint nach einem Klick auf ein FHT-Gerät. Je nach Gerätename wird das OverlayDiv mit der Sliderkonfiguration individuell parametrisiert. So auch das darin enthaltene cmd.
Das alles funktioniert schon gut.
Nur das Rücksenden des eben eingestellten Wertes funktioniert noch nicht. Da ich aber schon an anderer Stelle ein AjaxSend eingebaut habe sollte dies hier auch funktionieren. Muss ich nur sehen das ich das fhem-konform realisieren kann denn ich muss ev. fhemweb_slider.js anpassen. Wenn möglich natürlich mit einer Absegnung von Rudi und einem Checkin
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

ah. kapiert. von dem overlay war bis jetzt noch nicht die rede. die idee gefällt mir sehr gut. es wäre aber klasse wenn das das ganz generell z.b. über einen neuen anzeigetyp im floorplan für jedes device ginge. so das bei einem klick ein overlay mit einem beliebigen weblink angezeigt werden kann um z.b. readings oder alle webcmds oder andere detail informationen anzuzeigen. und das ganze mit dem normalen longpoll mechanismus integriert.

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

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

Tobias

natürlich... aber ein neuer Typ im floorplan finde ich nicht gut. Faktisch ist hier nur DeviceReading nutzbar da ein longpoll sonst alles überbügelt.
Ich nutze zu 100% DeviceReading in Kombination mit dem UserReading floorplantext
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

justme1968

wenn man es generell macht braucht man den typ aber doch um festzulegen was beim klick passieren soll. also wie bisher nur anzeigen oder schalten oder aber eben das neue popup.

der colorpicker wäre noch so ein kandidat für ein popup fällt mir gerade ein... hast du schon was das man vielleicht mal anschauen kann?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Tobias

So sieht es zZ bei mir aus. Der "billig aussehende" Slider soll duch den deutlich besseren fhem-typischen Slider ersetzt werden.

(siehe Anhang / see attachement)

Mein Userreading "floorplantext" sieht dazu so aus:
<div name="div-HZ_EG_Bad-sub" class="HeizThermostat" onclick="setSlider('div-HZ_EG_Bad-sub');">5.0°C</div>
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

So, neuer Test...
ich habe eine Art AjaxSend eingebaut.
Es wird jetzt immer per Ajax im Hintergrund ohne Reload gesendet, wenn das Command mit "ajax:" beginnt.

Zum Testen bitte die js-Files in www/pgm2 kopieren und folgenden weblink sowie Dummy  definieren:
define bk_frequency dummy
attr bk_frequency alias Frequenz [Std]
attr bk_frequency room dummy
attr bk_frequency setList state:slider,0,1,48
attr bk_frequency webCmd state
define wl_slider weblink htmlCode <div class='slider' id='slider.bk_frequency2' min='5' stp='1' max='30' cmd='ajax:set bk_frequency %'><div class='handle'>11</div></div><script type="text/javascript">FW_sliderCreate(document.getElementById('slider.bk_frequency2'),'17');</script>
attr wl_slider room dummy


Es wäre echt toll wenn Rudi mal erläutern könnte wo und wie bisher "js:" genutzt wird da es dieses präfix ebenfalls gibt. Habe nämlich kein Beispiel finden können.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter