105 931 läst · 236 svar
106k läst
236 svar
Mätning med 1-wire
Medlem
· Västernorrland
· 2 053 inlägg
Om det är så att du vill få ut deltavärden direkt i sql-resultatet så går det också.gadu^ skrev:Har en enkel databas för elen med en tabell med dessa kolumner
(Senaste rader ser ut såhär)
| Date | house | home
| 2011-12-12 07:50:03 | 398938 | 314927 | NULL | NULL |
| 2011-12-12 07:55:03 | 398956 | 314944 | NULL | NULL |
| 2011-12-12 08:00:06 | 398973 | 314976 | NULL | NULL |
| 2011-12-12 08:05:03 | 398988 | 315015 | NULL | NULL
House och home matas med pulser från räknare A resp B.
...
Det enda som krävs är att man kommer ihåg föregående rads värde och presenterar aktuell rads värde - ihågkommet värde. Man använder mysql-variabler för detta.
ex:
SET @prev_house=0;
SELECT
Date AS "date",
house-@prev_house AS "delta",
@prev_house:=house AS "house"
FROM
el
ORDER BY Date;
Notera att detta blir 2 st olika querys pga att initieringen av variabeln (SET @prev_house) också ska köras. Antingen kör man 2 separata querys efter varandra (den minns variablerna under hela sessionen) eller så kör man bägge frågorna i samma (separerade med semikolon) men då krävs att man i PHP använder multiquery istället.
it-snubben, funkade ju jättebra! Stort tack!!
Nu är då frågan, min S0 på elmätaren ger 200 pulser/KWh, jag pollar räknaren var 5e minut.
Har gnuggat de grå (är ganska trög) nu ett tag men får inte till det hur många W förbrukats under de 5 minuter?
Nu är då frågan, min S0 på elmätaren ger 200 pulser/KWh, jag pollar räknaren var 5e minut.
Har gnuggat de grå (är ganska trög) nu ett tag men får inte till det hur många W förbrukats under de 5 minuter?
Medlem
· Västernorrland
· 2 053 inlägg
Är det inte 200 pulser / KW istället för KWh? Dvs om du drar 1 KW i en timme så blir det 200 pulser?
Det går 12 st 5 minuters intervaller på en timme. Då borde det väl vara så att det blir 16.6666 pulser på 5 minuter (200 / 12 ) för varje KW.
Någon annan får rätta mig om jag har fel.
Dvs, dela antal pulser med 16.6666666666. Vilket du givetvis kan göra direkt i sql-satsen
Det går 12 st 5 minuters intervaller på en timme. Då borde det väl vara så att det blir 16.6666 pulser på 5 minuter (200 / 12 ) för varje KW.
Någon annan får rätta mig om jag har fel.
Dvs, dela antal pulser med 16.6666666666. Vilket du givetvis kan göra direkt i sql-satsen
FYI
Vattenfall har en pdf som hjälper en att räkna effektuttag
http://www.vattenfall.se/sv/file/Kontroll_av_ditt_effektuttag_16533784.pdf
Vattenfall har en pdf som hjälper en att räkna effektuttag
http://www.vattenfall.se/sv/file/Kontroll_av_ditt_effektuttag_16533784.pdf
Har haft lite tid idag och provat multi_query... men får det inte att fungera... :blushing:it-snubben skrev:
Så här ser koden ut, i exemplet så vill jag enkelt bara att den skall printa allt
Var gör jag fel?PHP skrev:<?php
include ("/home/janne/jpgraph/src/jpgraph.php");
include ("/home/janne/jpgraph/src/jpgraph_bar.php");
include_once ("/home/janne/sqlphp/mysql_settings_el.php");
# Connect to the database and select a db
mysql_connect ($mysqlHost, $mysqlUsername, $mysqlPassword);
mysql_select_db ($mysqlDatabase);
// $query = "select timestamp, Outside from newtemps where DAY(timestamp) = DAY(CURDATE())";
// $result = mysql_query($query) or die("SQL fraga felaktig: " . mysql_error());
$query = "SET @prev_house=0;";
$query .= "SELECT Date AS "date", (house-@prev_house)*60 AS "delta", @prev_house:=house AS "house" FROM el ORDER BY Date";
$result = mysql_multi_query($query) or die("SQL fraga felaktig: " . mysql_error());
while($myrow = mysql_fetch_array($result))
{
echo $myrow['date'];
echo $myrow['delta'];
}
?>
Medlem
· Västernorrland
· 2 053 inlägg
Ett uppenbart fel som jag ser är i definitionen av SQL-satsen:gadu^ skrev:
Du kan inte använda samma typ av citattecken i strängen som det som omger strängen i variabeltilldelningen. Då vet inte PHP vad som tillhör strängen och vad som tillhör texten i strängen. Lösningen är att använda ' (enkelsnuff) inuti strängar som är definerade med " (dubbelsnuff). Alternativt tvärtom.php skrev:
Byt ut alla " i SQL-satsen mot ' så blir det bättre.
Edit:php skrev:
Jag kom på att multiquery kräver ett annorlunda förfarande när man ska läsa ut resultat(en) också. Detta eftersom varje separat sql-sats (de är ju avdelade med semikolon ) kan leverera ett svar tillbaka. Därför måste man loopa igenom alla resultat och välja det resultat som man vill ha (antagligen det sista). Men man MÅSTE loopa igenom ALLA resultat.
Dessutom så verkar du inte någonstans i dina frågor referera till någon "handle" för den öppnade databasanslutningen. När man ansluter till databasen (connect) så får man tillbaka ett id för den anslutningen. Detta id ska man använda vid querys för att tala om vilken databasanslutning man vill fråga mot (man kan ha flera databaser öppna samtidigt).
exempel skrev:function DoMultiQuery($db_conn,$SQLquery) {
//funktion som gör en multiquery och levererar tillbaka resultatet från sista sql-satsen som gav något tillbaka.
// OBS! Använder mysqli, inte mysql
/* execute multi query */
if ($db_conn->multi_query($SQLquery)) {
$lastresult="";
do {
/* first result set */
if ($result = $db_conn->store_result()) {
if ($lastresult) {
$lastresult->free();
}
$lastresult=$result;
}
//next resultset
} while ($db_conn->next_result());
}
if ($db_conn->error) {
echo "Error: " . $db_conn->error . "\n";
}
return $lastresult;
}
Som vanligt är ovanstående kod otestad från mig. Notera att den använder mysqli istället för mysql vilket är en bättre klient.användning skrev:$mysqli_db = new mysqli($dbServer, $dbUser, $dbPass, $dbDatabase);
/* check connection */
if (mysqli_connect_errno()) {
// header("HTTP/1.0 500 Internal Server Error");
die("Connect failed: " . mysqli_connect_error());
}
$result=DoMultiQuery($mysqli_db,$query);
while ($myrow = $result->fetch_assoc()) {
echo $myrow['date'];
echo $myrow['delta'];
}
Redigerat:
Nånstans vill jag minnas att någon nämnde nåt om "Stored Procedures", så jag googlade lite och skapade följande SP.
Det är för kul detta!!
Sen ropar jag på den med denna lilla stulna kod...Stored Procedure skrev:
Nu är det bara att haka på jgraph på detta så borde det vara fixat! :wow:Stulen kod skrev:<?php
include ("/home/janne/jpgraph/src/jpgraph.php");
include ("/home/janne/jpgraph/src/jpgraph_bar.php");
include_once ("/home/janne/sqlphp/mysql_settings.php");
# Connect to the database and select a db
$conn = mysql_pconnect ($mysqlHost, $mysqlUsername, $mysqlPassword, 65536) or die( "Failed to connect to MySQL server" );
mysql_select_db( $mysqlDatabase, $conn ) or die( "Could not select test database" );
$result = mysql_query( "CALL GetDelta()" ) or die( mysql_error() );
while($myrow = mysql_fetch_array($result))
{
echo $myrow['date'];
echo $myrow['delta'];
}
?>
Det är för kul detta!!
Medlem
· Västernorrland
· 2 053 inlägg
Mycket bra lösning. d^_^b
MVG på detta prov.
I en SP har du stora möjligheter att bearbeta materialet och du får logiken samlad i databasen. I min "skola" så ska PHP-delen bara vara presentationsskiktet.
MVG på detta prov.
I en SP har du stora möjligheter att bearbeta materialet och du får logiken samlad i databasen. I min "skola" så ska PHP-delen bara vara presentationsskiktet.
Medlem
· Västernorrland
· 2 053 inlägg
Du har definitivt passerat n00b-stadiet. Jag är imponerad över att du tog steget till SP. Kanske en framtida "kollega" i branschen?
Var inte blygsam med att fråga om råd och hjälp.
Jag kan inte annat än hålla med. Just den tillfredsställelsen som blir när något fungerar som man tänkt sig är så skön. Att sedan många andra inte förstår och tycker "so what" får man bortse från.gadu^ skrev:
Var inte blygsam med att fråga om råd och hjälp.
Jobbat med affärssystem ett par år nu, dock från ett användarperspektiv (kravställning, support etc). Men i den nya tjänst jag har sen oktober så kommer jag obönhörligen närmare back-end delarna och måste iaf ha djupare förståelse om databashantering. Vad är då bättre än att labba med detta hemma också?
Tackar för all support!
Tackar för all support!