Medelvärdesbilda vindriktning

I detta forum hör diskussioner gällande teknik i största allmänhet och hemautomation i synnerhet hemma.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Medelvärdesbilda vindriktning

Inlägg 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 6371 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 6371 gånger

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

/f
Om traktorn stjälper; håll i ratten, hoppa ej!
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: Medelvärdesbilda vindriktning

Inlägg av larky »

flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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 4729 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 146 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.
Om traktorn stjälper; håll i ratten, hoppa ej!
Användarvisningsbild
Plutonium
Moderator
Inlägg: 1245
Blev medlem: 04 jan 2008, 02:34
Ort: Nossebro
Kontakt:

Re: Medelvärdesbilda vindriktning

Inlägg av Plutonium »

Snyggt!
Nu blev det intressant att införskaffa en vindmätare :)
http://essunga.org
Moderator - Temperatur.nu
Användarvisningsbild
hanpa
Tar hemautomation på allvar
Inlägg: 59
Blev medlem: 25 jun 2007, 18:21
Ort: Linköping
Kontakt:

Re: Medelvärdesbilda vindriktning

Inlägg 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.
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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...
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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.
Bilagor
winddirection.zip
(2.06 KiB) Nerladdad 142 gånger
2017-06-12 09-04-31.png
2017-06-12 09-04-31.png (32.08 KiB) Visad 4654 gånger
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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";
?>
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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"]]
}
Om traktorn stjälper; håll i ratten, hoppa ej!
flyvert
Hemautomation - det är mer än en hobby
Inlägg: 393
Blev medlem: 22 aug 2013, 00:48
Ort: Västerås

Re: Medelvärdesbilda vindriktning

Inlägg 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
Om traktorn stjälper; håll i ratten, hoppa ej!
Användarvisningsbild
hanpa
Tar hemautomation på allvar
Inlägg: 59
Blev medlem: 25 jun 2007, 18:21
Ort: Linköping
Kontakt:

Re: Medelvärdesbilda vindriktning

Inlägg av hanpa »

Snyggt!
Skriv svar