Gå til innhold

Fellestråd for Hamsterprosjektet


Anbefalte innlegg

Videoannonse
Annonse

Resultatet "makes more sense" presantert på denne måten:

PHP
<?php

//$sql = '.....';

//$res = $db->query($sql);

foreach($res as $row) {

print "{$row['num']} actions between {$row['h']}:00 and {$row['h']}:59 ({$row['d']})<br />\n";

}

1 actions between 19:00 and 19:59 (2006-11-21)
20 actions between 20:00 and 20:59 (2006-11-21)
527 actions between 21:00 and 21:59 (2006-11-21)
371 actions between 22:00 and 22:59 (2006-11-21)
654 actions between 23:00 and 23:59 (2006-11-21)
148 actions between 0:00 and 0:59 (2006-11-22)
4 actions between 1:00 and 1:59 (2006-11-22)
1 actions between 2:00 and 2:59 (2006-11-22)
1 actions between 8:00 and 8:59 (2006-11-22)
2 actions between 14:00 and 14:59 (2006-11-23)

Lenke til kommentar

post-13318-1164406376_thumb.jpg

Nå er hamsteret ankommet.

Ser at det blir en del jobbing med å tilpasse følerne rundt i buret.

 

Jeg lurer på hvordan jeg skal måle ut gjennomsnittshastigheten.

Det er jo lett hvis hamsteret løper en hel time, men nå er jo hamsteret til og fra..

 

Noen tips?

 

 

01 (hamsteret) har bestemt seg for å bruke det blå hjulet.

Hjulet er 12.5cm i diameter, dvs en omkrets på 39.25 cm hvis jeg ikke har regnet feil..

 

For å finne lengde hamsteret har løpt må jeg vel gjøre noe slikt:

 

$omkrets = (3.14 * 12.5);

$distanse = ($omkrets * $data[num]/100);

Endret av lobster
Lenke til kommentar

Jeg ville laget gjennomsnitthastighet for hver "sesjon" dvs. fra hjulet begynner å snurre til en annen sensor får input (som betyr at hamseteren er ute av hjulet)

Evt. kan du prøve med en tidsgrense. F.eks. dersom hjulsensoren ikke får input på f.eks. 15 sekunder, så stor hjulet stille. Da har vi tid_brukt = nåtid - hjulets starttid - 15.

ved å ta ytre omkrets * antall omdreininger har du avstanden i cm

avstand / tid_brukt = cm/s

 

(tror jeg)

Videre kan du bruke disse utregningene (sesjon) til å finne ut per time, per dag, per måned, etc.

Lenke til kommentar

Hvordan kan jeg "trekke fra" 5 minutter med date("m-d-y H:i:s") ?

Det jeg prøver å gjøre er å gjøre en spørring fra NÅ tid og 5 minutter bakover.

 

 

 

 

 

Ellers så kan jeg rapportere om at alle magnetbryterne er på plass i buret og det fungerer overaskende bra.

Dessverre er webkameraene er ikke operative enda.

Endret av lobster
Lenke til kommentar
Det jeg prøver å gjøre er å gjøre en spørring fra NÅ tid og 5 minutter bakover.

Det kan gjøres rimelig greit i SQL også:

SELECT * FROM `tabell` WHERE `datofelt` > SUBDATE( NOW( ) , INTERVAL 5 MINUTE )

MySQL manual på dato/tid funksjoner kan være god lesning.

 

Jeg hadde en løsning på å gruppere "sesjoner" på løpehjulet også, basert på subqueries, men testing viste at det ville bli veldig tregt på store datasett. Jeg kan legge det ut når jeg kommer hjem i kveld for kuriositetens skyld...

Lenke til kommentar

Brukte lang tid på å komme meg hjem fra jobb gitt :)

 

Her er en litt syk spørring spør du meg, men den virker (hos meg). Den vil desverre forbruke tid exponensielt med størrelsen på datasettet, så "handle with care".

Det er sikkert mange muligheter med tanke på forbedringer av ytelse.

 

Først må vi sette en variabel som skal telles oppover ved hver nye sesjon.

SET @run := 0;

 

Så kommer selve spørringen

SELECT COUNT( DISTINCT id ) AS revs, 
TIME_TO_SEC( TIMEDIFF( MAX( time ) , MIN( time ) ) ) AS runtime, @id := id, @time := time, 
@run := IF( ( 
SELECT id
FROM `hamster` WHERE id < @id AND `action` =1 AND TIME_TO_SEC( TIMEDIFF( @time , time ) ) <30
LIMIT 1 ) , @run , @run +1
) AS run
FROM `hamster` WHERE `action` =1
GROUP BY run
HAVING revs >1

Nå vet jeg ikke hvordan tabellstrukturen ser ut hos deg, så en del modifiseringer må nok til.

Verdier som må endres:

  • action = sensor id feltet ditt. Id for hjulet er tilfeldigvis satt til 1.
  • time = dato/tid feltet ditt.
  • hamster = tabellnavnet ditt.
  • 30 = Antall sekunder mellom sesjoner.

Det kan bl.a. være lurt å legge inn en begrensning, slik at du kjører spørringen mot maks noen dager.

(F.eks legg til "AND date > SUBDATE(NOW(), INTERVAL 3 DAY)" I hovedqueryen og subqueryen for å få kun siste tre dager)

 

Verdier du får ut:

  • revs = antall omdreininger på hjulet.
  • runtime = Hvor lang sesjonen var i sekunder.
  • +noen du ikke har bruk for

Med disse kan du regne ut bl.a. tilbakelagt distanse og gjennomsnittsfart.

Endret av stiber
Lenke til kommentar

Jeg har fått ett par PM'er med spørsmål om hvordan jeg får dataene fra maskinen min og ut på nettet.

Slik har jeg løst det:

 

I starten brukte jeg ett program broren min hadde laget til meg. Dette programmen initsierte relekortet og hentet/sendte startus via URL til www.domenenavn?minvariabel=tallverdi

 

Tallverdien er typisk 1,2,4,8,16,32,64 eller 128. Hvis to brytere var koblet inn samtidig ble verdiene slått sammen.

 

Jeg har dermed $minvariabel som jeg kan behandle videre i PHP. Alt fra å sende verdi til database, endre bilde på nettside avhengi av verdi, Skrive "lyset er på" osv..

Denne løsningen er grei så lenge det ikke er for mye endringer på relekortet som må sendes til serveren (ser for meg CPU load på server)

 

 

Med hamsterhjulene som snurrer med over 2 omdreininger pr sekund så sier det seg selv at det ville blitt alt for mange requests å sende via URL.

 

Nettstedet jeg har satt opp for dette prosjektet blir hostes hos Domeneshop. Heldigvis lar de meg koble opp mot MySQL eksternt (Vet ikke om dette er vanlig praksis hos andre leverandører).

Dermed fikk jeg broren min til å lage ett nytt program som gjør SQL spørringer direkte og jeg har klart å hoppe over ett par unødvendige steg.

 

 

Kort oppsumert:

Programmet jeg kjører lokalt for å sjekke portstatus fra relekortet sender verdier direkte til en ekstern MySQL. (Med hjelp av MySQL ODBC kobling)

 

Skjermdump av programmet:

post-13318-1165193623_thumb.jpg

 

De åtte rutene på venstre side av hamsteret er for å vise når det er aktivitet på en av inngangene. Selvfølgelig blinker hamsteret med øynene når den sender over data til databasen.

 

Programmet er laget i .net

 

Håper dette ga greit nok svar :)

Endret av lobster
Lenke til kommentar
Out Of Thread:

"Velleman K8055" ankommer fra Elfa i dag. Ble litt dyrere enn antatt, må må jeg bare lære meg et .Net-språk for å få brukt DLL'en til noe....

7428615[/snapback]

 

Ahh, kjempebra Kagee, gleder meg til å se deg leke med dette vidunderlige kortet :)

Pass på å IKKE koble inn sterkstrøm på dette kortet. Sett på ett rele mellom kortet og det du skal styre :)

 

 

Jeg kan få modifisert programmet jeg har slik at du også kan få sendt data til databse, hvis du vil da :)

Lenke til kommentar

Super fett prosjekt. En dag når jeg har mer tid og penger skal jeg også gjøre noe slikt:D

 

Men litt ang. den netsiden. Slik dataen blir presentert nå er det jo et ork og lese hva som foregår. Hadde det ikke vært mulig og presentere faktaen på en litt mer oversiktlig og mer lettlest måte? Gleder meg også til å se webcamen i drift:D

 

Stå på videre med dette prosjektet. Kjempe bra. I'm already a big FAN!

Lenke til kommentar

Nå har jeg løst "problemet" med å filtrere på dagens dato, men..

Er det mulig å fikse slik at jeg får 0 som svar i en liste dersom det ikke er noe aktivitet...:

 

eksempel, la oss si at hamsteret kun har løpt 15 meter mellom klokken 02 og 03 på natten, og ikke noe resten av natten.

Slik spørringen er nå så lister den bare ut dersom det er noe..

 

03:00:00 - 03:59:59 | 15 meter

 

 

Jeg ønsker å få slik at den viser 0:

00:00:00 - 00:59:59 | 0

01:00:00 - 01:59:59 | 0

02:00:00 - 02:59:59 | 0

03:00:00 - 03:59:59 | 15 meter

04:00:00 - 04:59:59 | 0

05:00:00 - 05:59:59 | 0

06:00:00 - 06:59:59 | 0

07:00:00 - 07:59:59 | 0

08:00:00 - 08:59:59 | 0

09:00:00 - 09:59:59 | 0

osv...

 

Dette kan kanskje gjøres i PHP??

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...