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?
Weblink ist nicht "longpoll"-faehig, das muss man selbst machen, mit sowas wie
trigger WEB JS:location.reload()
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();") }
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.
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 ...
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
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?
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"
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*)