Sida 1 av 1

Medelvärdesbilda vindriktning

Postat: 09 mar 2014, 10:48
av flyvert
Igår fick jag äntligen upp vindsnurran o vindpilen från m.nu (tyvärr verkar vindprylarna numera ha utgått från sortimentet?)

Inga problem att läsa av givarna från RPi, fick dra hem "bc" för att kunna göra flyttalsdivisionen för vindriktningen i Bash.
image.jpg
image.jpg (13.01 KiB) Visad 7430 gånger
Jag minutlagrar alla sensorvärden i MySQL, därefter skapar jag medel/min/max mha stored procedures.

Till frågan; hur skall man göra med vindriktningssignalen över tid? Bara medelvärdesbilda vinkeln på samma sätt som jag gör med allt det övriga (vindhastighet, temp, fukt, etc)?

Ett extremexempel: om vindriktningen är 270 grader (väst) på förmiddagen o 90 (öst) på eftermiddagen är ju medeltalet 180 (syd); men 0 (norr) är ju lika "sant" :?:

På min hemsida har jag redan valt att visa riktning i 45 graders intervall med kardinalbokstäver (N,NV,V,SV,osv) - frågan är, hur vill man se "vindriktningen" över tid? Linjegraf (med kurva 0-360 grader) är ju inte så kul; funderar på att rita cirkeldiagram - men det lär ju inte vara så lätt - nedan en bild från något helt annat; men som liknar det jag vill åstadkomma? Längst in = start av perioden. Längst ut = slutet.
image.jpg
image.jpg (36.1 KiB) Visad 7430 gånger

Nån som har nån vild idé eller har valt en annan lösning (förslag emottages tacksamt)?

/f

Re: Medelvärdesbilda vindriktning

Postat: 09 mar 2014, 11:07
av larky

Re: Medelvärdesbilda vindriktning

Postat: 07 jun 2017, 08:58
av flyvert
Så, äntligen efter tre års väntan fick jag tid o motivation att göra en vindriktningsindikator för min vindmätare.

Detta är ett första test; centrum av cirkeln = senaste uppmätta värde; ytterkant cirkel = äldsta uppmätta värde (för tillfället 10 minuter)
2017-06-07 15-37-38.png
2017-06-07 15-37-38.png (22.25 KiB) Visad 5788 gånger
Punkternas storlek bestäms av vindhastigheten; de minsta "prickarna" motsvarar 0 m/s och indikerar endast vinkeln på vindpilen eftersom ingen rotation/pulser har uppmätts från impellern.

Här är javaskriptet (jquery.js laddar jag från Flot.js graf/trendritaren som oxo behöver det, antar att jquery finns att hämta på annat håll för de som inte har Flot)
winddirection.zip
JavaScript
(1017 Bytes) Nerladdad 289 gånger
Den icke bifogade readwind.php gräver i min MySQL-databas och returnerar en JSON array med formatet {[vind1,riktning1],[vind2,riktning2],[vindN,riktningN]} där 1 är det yngsta och N är det äldsta loggade värdet.

Re: Medelvärdesbilda vindriktning

Postat: 11 jun 2017, 12:39
av Plutonium
Snyggt!
Nu blev det intressant att införskaffa en vindmätare :)

Re: Medelvärdesbilda vindriktning

Postat: 11 jun 2017, 19:27
av hanpa
Intressant presentation! Dock tror jag att det är bättre om man har en cirkel i mitten där man inte ritar något, kanske att den är markerad i en annan ton. Det går ju inte att avgöra riktningen mitt i utan man bör börja en bit ut från centrum.

Re: Medelvärdesbilda vindriktning

Postat: 11 jun 2017, 22:43
av flyvert
Tack

Utveckling pågår!

1. Senaste värde saknar mykcket riktigt synbar information om "riktning": börja rita från en inre cirkel. Taget!

2. Tänkte även införa en pil/streck som ytterligare förstärker vinkeln på sista värdet. En andra pil kan tex visa ett medelvärde.

3. Byta från HTTP GET till datakommunikation mha websocket. Läser om Ratchet just nu. Har redan experimenterat lite med att pusha nya värden från MQTT Brokern (Mosquitto) istället för att polla det från databasen. Måste dock fixa websocket först så att servern kan skicka uppdatering. En vanlig klient måste i annat fall göra GET cykliskt vilket inte är så snyggt.

4. Addera lite knappar för att styra presentationen, tex tidsperiod att plotta, mm.

5. "Fast Replay" av period, tex senaste tolv timmarna. JavaScript verkar vara supersnabbt på att rita. Har redan lagt in en timer som hämtar ny data och ritar om var 15:e sekund.

6. Byta färg när regnmätaren ger en puls (kanske bara intressant i större tidsskala)

7. Trimma OWFS så att jag kan polla efter data var 5:e sekund (default är 15 sekunder vilket jag nöjt mig med hittills, läser man oftare får man samma värde som sist).

8. Snygga till canvasen lite. Har fixat autoskalering så att man kan stretcha upp den på full skärm och ändå få bra utseende; måste dock skala fonterna, idag ritar jag med 10 punkter, även vid full HD...

Re: Medelvärdesbilda vindriktning

Postat: 12 jun 2017, 09:11
av flyvert
Nu har jag adderat en liten pil som indikerar riktning på senaste värdet från givaren.
Hade redan tänkt ut koden till det igår kväll - skall experimentera med en inre cirkel såsmåningom.

Re: Medelvärdesbilda vindriktning

Postat: 12 jun 2017, 10:46
av flyvert
Så här ser outputen från mitt "databasgrävarskript" readwind.php:

$ curl http://localhost/readwind.php
{
"data": [[2.16069,3.8000704089894,"10:44:35"],[2.53323,4.3240182415045,"10:44:20"],[1.63915,4.0036630627632,"10:44:05"],[1.63915,3.3186038897434,"10:43:49"],[2.16069,4.6961398849774,"10:43:34"],[0.819573,5.5440731810162,"10:43:18"],[0.2794,4.6638862009505,"10:43:03"],[1.04309,4.9895820871119,"10:42:47"],[2.60773,4.6922128942274,"10:42:31"],[4.4704,4.366517008066,"10:42:16"],[4.17237,4.6780408209428,"10:42:00"],[1.34112,4.6780408209428,"10:41:45"],[0.521547,4.4514796346044,"10:41:29"],[1.86267,4.4558953175367,"10:41:14"],[1.71365,5.1766290198589,"10:40:58"],[2.68224,4.4514796346044,"10:40:43"],[0.67056,5.3744795404916,"10:40:27"],[0,0.033278017747446,"10:40:12"],[0.0745067,4.7630209007735,"10:39:56"],[0.745067,4.583077457961,"10:39:41"],[1.19211,5.1878340334657,"10:39:26"],[0,4.8621381473043,"10:39:10"],[0.89408,2.9645813103051,"10:38:55"],[1.56464,4.6355595076736,"10:38:39"],[2.30971,4.6780408209428,"10:38:24"],[0.819573,5.7701805817568,"10:38:08"],[1.71365,5.1170434802118,"10:37:53"],[2.53323,4.9329461538504,"10:37:37"],[1.34112,3.9133597288047,"10:37:22"],[0.596053,3.3610852030127,"10:37:07"],[0.372533,3.7575890957202,"10:36:51"],[2.30971,4.4797888745891,"10:36:20"],[2.38421,4.6780408209428,"10:36:05"],[2.38421,4.819656834035,"10:35:49"],[2.16069,4.4276209841365,"10:35:34"],[1.86267,4.7630209007735,"10:35:18"],[0,4.9895820871119,"10:35:03"],[0,3.5027012161049,"10:34:47"],[0.149013,4.9895820871119,"10:34:32"],[1.04309,5.2161607267425,"10:34:16"]]
}


Här är koden bakom readwind.php för den som är intresserad; utan att veta varför är JSON och formattering inte helt okritisk; t.ex. nyradstecken verkar inte få förekomma varsomhelst. Fick pilla en del innan det fungerade. Databasformatet har jag skrivit om tidigare (en datatabell med allt data. Med olika "aggregate" för min, max, avg och "period" för upplösning på datat (1m, 1h, 1d, 1v, 1må):

<?php
$db = mysql_connect("rpi2", "pi", "");
mysql_set_charset("utf8");
mysql_select_db("onewire",$db);

$query = "select date_format(a.time,'%H:%i:%s') 'time', a.value 'speed', b.value 'direction' from data a, data b where a.sensorid=11 and a.property=1 and a.aggregate=1 and a.period=1 and b.sensorid=11 and b.property=2 and b.aggregate=1 and b.period=1 and a.time=b.time order by a.time desc limit 40";

$result = @mysql_query ($query);
$arr = array();
while($row = mysql_fetch_object($result))
{
$arr[] = array($row->speed*1,$row->direction/57.29578049,$row->time);
}
mysql_close();
echo "{";
echo "\n\"data\": ";
echo json_encode($arr);
echo "\n}\n";
?>

Re: Medelvärdesbilda vindriktning

Postat: 12 jun 2017, 12:08
av flyvert
Här är mitt icke-fungerande första MQTT försök som fallerade på att HTTP GET inte verkar hantera att server returnerar delmängder.

<?php
$client = new Mosquitto\Client();
$client->onMessage('message');
$client->connect("localhost", 1883, 60);
$client->subscribe('/WIND_METER/WIND', 1);
$client->subscribe('/WIND_METER/ANGLE', 1);

$speed="";
$angle="";
$arr = array();

while (true) {
$client->loop();
sleep(1);
}

function message($message) {
global $speed, $angle;
if (!$message->retain && $message->topic=="/WIND_METER/WIND") {
$speed=$message->payload;
}
if (!$message->retain && $message->topic=="/WIND_METER/ANGLE") {
$angle=$message->payload;
}
if ($speed!="" & $angle!="") {
$t=time();
$arr[0] = array($speed, floatval($angle)/57.29578049, date("H:i:s",$t));
printf("{\n\"data\": %s\n}\n", json_encode($arr));
$speed="";
$angle="";
}
}
?>


Här är outputen (direct via php eftersom curl inte fungerar):
$ php readwind_mqtt.php
{
"data": [["2.45872",3.4602125391695,"12:03:54"]]
}
{
"data": [["2.30970666667",4.4089919135335,"12:04:10"]]
}
{
"data": [["2.53322666667",3.6018214010195,"12:04:25"]]
}
{
"data": [["1.56464",1.7001061168824,"12:04:41"]]
}

Re: Medelvärdesbilda vindriktning

Postat: 12 jun 2017, 14:11
av flyvert
Svårt att hålla fingrarna i styr när idéerna sprutar...
... nu syns riktningen på innersta punkten ganska bra.
2017-06-12 14-08-53.png

Re: Medelvärdesbilda vindriktning

Postat: 12 jun 2017, 16:53
av hanpa
Snyggt!