[königlich erledigt] weblink per dummy und notify updaten

Begonnen von the ratman, 12 März 2017, 12:33:58

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

ich bastel wieder mal an einer windrose - vor allem, weil da schon einer freundlicher weise sehr viel gemacht hat: https://homematic-forum.de/forum/viewtopic.php?f=35&t=29696
um das ganze zu testen (ich hab grad keinen windmesser hier) hab ich mir einen dummy gebaut:defmod WRtest dummy
attr WRtest DbLogExclude .*
attr WRtest group Windrose
attr WRtest room Vorlagen
attr WRtest setList state:slider,0,1,360
attr WRtest webCmd state

setstate WRtest 277
setstate WRtest 2017-03-12 12:26:40 state 277
der soll mir meinen weblink per notify befüllen:defmod WindRose_Notify notify WRtest {fhem("modify Windrose iframe http://192.168.178.10/wr/index.php?wind=".Value("WRtest")) }
attr WindRose_Notify DbLogExclude .*
attr WindRose_Notify group Windrose
attr WindRose_Notify room Vorlagen

setstate WindRose_Notify 2017-03-12 12:26:40
setstate WindRose_Notify 2017-03-12 12:23:20 state active
defmod Windrose weblink iframe http://192.168.178.10/wr/index.php?wind=277
attr Windrose DbLogExclude .*
attr Windrose group Windrose
attr Windrose htmlattr width="230" height="230" frameborder="0" scrolling="no" style="border: 1px solid #000 ;; outline:none;; border-radius:8px;; padding:5px;; margin-left: 10px;; -webkit-box-shadow: inset 3px 3px 6px 1px rgba(0,0,0,0.75);; -moz-box-shadow: inset 3px 3px 6px 1px rgba(0,0,0,0.75);; box-shadow: inset 3px 3px 6px 1px rgba(0,0,0,0.75);; background-color: #ffffff;;"
attr Windrose room Vorlagen

setstate Windrose initialized

das funzt auch alles, allerdings nur nach nem reload der website.
wo denk ich den da wieder falsch?
→do↑p!dnʇs↓shit←

rudolfkoenig

Weblink ist nicht "longpoll"-faehig, das muss man selbst machen, mit sowas wie
trigger WEB JS:location.reload()

the ratman

#2
oh, thx
das erklärt dann wenigstens mein klägliches versagen *g*

hmm - wieder dieses perl ...

direkt in der eingabezeile funzt der trigger, aber im notify nichtWRtest {fhem("modify Windrose iframe http://192.168.178.10/wr/index.php?wind=".Value("WRtest")."; trigger Windrose JS:location.reload();") }
→do↑p!dnʇs↓shit←

rudolfkoenig

Du sollst ja auch nicht der Windrose den JS: Befehl schicken, sondern WEB, bzw. dem FHEMWEB-Instanz, was du verwendest. Mit JS: kann man beliebige JavaScript Befehle an dem (mit FHEM per longpoll verbundenen) Browser schicken, und location.reload() veranlasst den Browser die Seite neu zu laden.

Achtung: das kann (je nachdem wie du die aktuelle Seite aufgerufen hast) Nebeneffekte haben. Was Besseres waere aufwendiger.

the ratman

#4
tjo,

aber funzt schon mal mit update. muss nur mehr rauskriegen, warum er jetzt den wert seber nicht mehr aktualisiert

fast schon lustig:
die daten stehen aktuell im weblink, der frame wird upgedated - soweit so gut.
das php schreibt raus, es hätte upgedatet, aber hats nicht.
das tut es weiterhin erst nach einem reload der seite.

nachdem das warscheinlich kein fhem-problem mehr ist ...
→do↑p!dnʇs↓shit←

the ratman

ich habs

wens interessiert:
das js braucht noch ein truelocation.reload(true)
habs gelesen:
ohne true ists n reload aus dem cache und mit ein frischer reload
→do↑p!dnʇs↓shit←

the ratman

#6
ist dann doch nicht alles so einfach, wie man denkt *g*

drum nun versuch nummero 2 ...
anstelle des einfügens der windrichtung direkt im index.php aufruf, das direkte beschreiben eines textfiles - "händisch" geht das dann schon mal besser und bedarf nicht mehr eines neuaufrufs der seite mit (true), was dann doch wesentlich schöner aussehen würde.

natürlich steh ich in der praxis an - wie immer *g* - wie schreibe ich ein textfile aus fhem raus voll? am besten gleich das ganze file:[{"WIND": "10"}]wobei "10" natürlich ein reading ist. das klammerngedöns will scheints das script, müsste man also leider berücksichtigen.
das file findet man unter /var/www/html/wr/windrichtung.dat

damit auch die passende unterhaltung für euch da ist - meine eigenen gedanken dazu in nem doif:
my $wrfueller = "[{\"WIND\": ".(ReadingsVal('WRtest','state',''))."\"}]";
   system("/bin/echo $wrfueller  > /var/www/html/wr/windrichtung.dat");

natürlich hab ich keinen schimmer wie ich die variable richtig befülle, damit am ende sowas wie "[{"WIND": "10"}]" bei raus kommt.
schreiben tut das ding derzeit auch noch nix.
wer jetzt von euch am längsten gelacht hat, der muß mir helfen *g*

nachtrag: ich dachte, ich scheitere am variablen füllen, aber da schreit mein doif wenigstens nicht.
aber es meint: "Unknown command system("/bin/echo, try help."
tjo, gerade das hab ich hier irgendwo abgeschrieben ... was nehm ich da anstelle?
→do↑p!dnʇs↓shit←

rudolfkoenig

#7
define n1 notify WRtest { my $wr=Value('WRtest');;`echo '[{"WIND": "$wr"}]' > /var/www/html/wr/windrichtung.dat` }

oder
define n1 notify WRtest { `echo '[{"WIND": "$EVENT"}]' > /var/www/html/wr/windrichtung.dat` }

oder
define n1 notify WRtest "echo '[{"WIND": "'$EVENT'"}]' > /var/www/html/wr/windrichtung.dat"

the ratman

vielen dank!

warum schaut das bei eigentlich immer so idioteneinfach aus?
funzt perfekt und das auch noch in meinem doif (ich mag keine notifys *g*)
→do↑p!dnʇs↓shit←