Logga till SQL eller fil på nas

Post Reply
mandg
Ny medlem
Posts: 20
Joined: 10 Dec 2013, 14:40
10
Contact:

Hej!

Finns det något vettigt sätt att få igång någon typ av loggning av tex temp rörelse etc till en SQL databas eller text fil på NAS eller server när man kör HC2?
mandg
Ny medlem
Posts: 20
Joined: 10 Dec 2013, 14:40
10
Contact:

Alternativt att man kan nå loggarna/Mysql på sin HC för att kunna läsa ut värden...
Dr Love
Medlem
Posts: 113
Joined: 28 Jun 2012, 12:03
11
Location: Luleå
Contact:

Äger ingen HC2 utan kör HomeSeer och ett plugin för att logga allt jag vill till MySQL. Börjar nu fundera på att konvertera till HC2 men loggning av värden till SQL är ett måste.
Har hittat detta http://keplerproject.org/luasql/index.html men kräver att man kan lägga in filer i HC2'an vilket jag inte vet om det går. Ni som har en HC2 kan väl ge det ett försök och återkoppla.

Mvh Love
Love
Husbyggarblog
Plattform: Mac Mini
Mjukvara: Indigo
User avatar
Bamsefar
Z-Wave Kung
Posts: 1230
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Nej - är det enklaste svaret.

Det lite mera avancerade svaret är att man kan få en form av loggning, via någon extern molntjänst, som man sedan kan använda - jag själv avstår denna variant.

I version 4 - som kanske kommer någon gång i stabil form - så tror jag att man kan få till detta via den inbyggda programvaran. Men jag vågar då 17on inte ens test v4 så dålig som den är för närvarande....
Testar Home Assistant på Raspberry Pi4B - nice :mrgreen:
SirMaggot
Medlem
Posts: 441
Joined: 18 Aug 2013, 10:36
10

Jag loggar lite temperaturer och sånt till http://emoncms.org
Ingenting jag behöver egentligen, men kul och se historiken.

Vet inte alls om det fyller dina behov då det är en extern tjänst, kolla om du har lust.
tommy
Medlem
Posts: 35
Joined: 01 Mar 2013, 23:09
11

Jag loggar temperaturvärden varje halvtimme till min Synology NAS (MySQL). Jag gör det genom att: 1) Skapat en scen som kör en virtuell enhet varje halvtimme 2) Skapat en virtuell enhet som anropar ett PHP-dokument på NAS:en med aktuell temperatur som argument 3) Skapat ett PHP-dokument (refereras till i föregående punkt) som tar emot aktuell temperatur från HC2:ans virtuella enhet och lagrar i MySQL på NAS:en.

/ Tommy
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

tommy wrote:Jag loggar temperaturvärden varje halvtimme till min Synology NAS (MySQL). Jag gör det genom att: 1) Skapat en scen som kör en virtuell enhet varje halvtimme 2) Skapat en virtuell enhet som anropar ett PHP-dokument på NAS:en med aktuell temperatur som argument 3) Skapat ett PHP-dokument (refereras till i föregående punkt) som tar emot aktuell temperatur från HC2:ans virtuella enhet och lagrar i MySQL på NAS:en.

/ Tommy
Kan du visa ditt lua skript Tommy, kör oxå synology och skulle vilja logga till den...
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Kan du visa ditt lua skript Tommy, kör oxå synology och skulle vilja logga till den...


Sent from my iPhone using Tapatalk
tommy
Medlem
Posts: 35
Joined: 01 Mar 2013, 23:09
11

Hej,

Nedan följer det lua-script som jag använder för att skicka aktuell temperatur till det PHP-dokument som lagrar temperaturen i en MySql-databas:

Code: Select all

local rPI = Net.FHttp("192.168.1.1", 80); 
local temp = fibaro:getValue(26, "value");
local  response = rPI:GET("/test.php?id="..temp);
Ändra IP-adress och port i ovanstående kod till adressen där PHP-dokumentet är publicerat (min NAS i mitt fall).

PHP-dokumentet ("test.php" som hänvisas till i kodexemplet ovan) som ligger på en webbserver (t.ex. på NAS:en) ser ut enligt följande:

Code: Select all

<?php
$id = $_GET['id'];
$con=mysqli_connect("localhost","userid","password","database");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
else
{
  echo "Testanslutning OK";
}

$datetime = date("Y-m-d H:i:s");

$sql="INSERT INTO temperatur (DATUM, TEMP) VALUES ('" . $datetime . "', " . $id . ")";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";

mysqli_close($con);
?>
Ändra värdena "localhost", "userid", "password" och "database" i ovanstående kod så att det stämmer med anslutningsuppgifterna för just din databas. Även SQL-satsen behöver ändras för att matcha schemat i din databas.

Till sist har jag skapat en scen som kör den virtuella enheten (lua-scriptet) varje halvtimme.
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Tack, kan man även lägga in energi logning?


Sent from my iPhone 6 using Tapatalk
Dr Love
Medlem
Posts: 113
Joined: 28 Jun 2012, 12:03
11
Location: Luleå
Contact:

Tusen tack! Mycket användbart. Nu kör jag ju inte HC2 men iaf, i händelse av att jag vill byta plattform så kan detta vara det avgörande. Går det att skicka matriser av data på samma sätt? Flera datapunkter lixom?
Love
Husbyggarblog
Plattform: Mac Mini
Mjukvara: Indigo
tommy
Medlem
Posts: 35
Joined: 01 Mar 2013, 23:09
11

Dr Love wrote:Tusen tack! Mycket användbart. Nu kör jag ju inte HC2 men iaf, i händelse av att jag vill byta plattform så kan detta vara det avgörande. Går det att skicka matriser av data på samma sätt? Flera datapunkter lixom?
Ja, det borde gå genom att skicka en array/vektor i querystringen (är dåligt dokumenterat dock) som finns i lua-scriptet. PHP tar emot värdena och läser in det i en array/vektor. Jag vet dock inte om detta är best practice.

Code: Select all

?id[]=13&id[]=-1&id[]=8
tommy
Medlem
Posts: 35
Joined: 01 Mar 2013, 23:09
11

jens wrote:Tack, kan man även lägga in energi logning?


Sent from my iPhone 6 using Tapatalk
Ja, det går bra. Jag skulle nog lägga till en parameter i querystringen i lua-scriptor som talar om vilken typ av data jag vill logga, t.ex.

Code: Select all

local rPI = Net.FHttp("192.168.1.1", 80); 
local temp = fibaro:getValue(26, "value");
local  response = rPI:GET("/test.php?type=temperatur&id="..temp);
Sedan skulle man behöva ändra i PHP-dokumentet så att rätt SQL-sats används beroende på vilket värde "type" har i querystringen. På detta sätt kan man använda samma PHP-dokument för all loggning oavsett om det är temperatur, energi, händelser osv som ska loggas. Nedan följer ett exempel på hur PHP-dokumentet skulle kunna ändras för att kunna hantera loggning av fler värden än temperatur. Observera att databasen behöver ändra sitt schema för att matcha de nya SQL-satserna. Koden har jag inte testat!

Code: Select all

<?php
$id = $_GET['id'];
$type = $_GET['type'];

$con=mysqli_connect("localhost","userid","password","database");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
else
{
  echo "Testanslutning OK";
}

$datetime = date("Y-m-d H:i:s");

if ($type == "temperatur") {
    $sql="INSERT INTO temperatur (DATUM, TEMP) VALUES ('" . $datetime . "', " . $id . ")";
} elseif ($type == "energi") {
    $sql="INSERT INTO energi (DATUM, WATT) VALUES ('" . $datetime . "', " . $id . ")";
} else {
    echo "Inget giltigt värde på type har angivits";
}

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";

mysqli_close($con);
?>
Dr Love
Medlem
Posts: 113
Joined: 28 Jun 2012, 12:03
11
Location: Luleå
Contact:

Grymt! Ska testas framöver. Tusen tack.

//Love
Love
Husbyggarblog
Plattform: Mac Mini
Mjukvara: Indigo
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Tack Tommy, ska testa detta till helgen, stort tack....


Sent from my iPhone 6 using Tapatalk
Dr Love
Medlem
Posts: 113
Joined: 28 Jun 2012, 12:03
11
Location: Luleå
Contact:

Nu har jag testat detta, dock med HomeSeer då jag inte har HC2 (ännu). Satt upp en ny MySQL-server med oändligt högre prestanda, min gamla (en NAS) pallade inte riktigt med alla 41 miljoner rader jag har i den nu. Fördelen med ovan tänk är att jag kan logga det jag vill i rader, t.ex. alla intressanta värden för FTX-agget i en rad, inte som med HS-plug-in'et jag köpt och använt för loggning tidigare som loggar alla datapunkter i var sin rad (en kolumn typ). Då blir det svårare att göra grafer med flera kurvor samt en hiskelig massa fler rader i tabellen :/
Nu har jag inte hunnit köra loggning mot nya databasen så länge men det ser lovande ut.
FTX.jpg
FTX.jpg (49.63 KiB) Viewed 16910 times
Värme1.jpg
Värme1.jpg (53.76 KiB) Viewed 16910 times
Värme2.jpg
Värme2.jpg (50.53 KiB) Viewed 16910 times
Scriptet i HS2 för loggning av temperaturdata från golvvärmesystemet

Code: Select all

Sub Main

dim s

Utomhus = Replace (hs.DeviceValue("S32")/100, ",", ".")
Framledning_nere = Replace (hs.DeviceValue("S30")/100, ",", ".")
Vrum1_inre = Replace (hs.DeviceValue("S28")/100, ",", ".")
Vrum1_center = Replace (hs.DeviceValue("S31")/100, ",", ".")
Vrum1_yttre = Replace (hs.DeviceValue("S29")/100, ",", ".")
Sov1 = Replace (hs.DeviceValue("S17")/100, ",", ".")
Entre = Replace (hs.DeviceValue("S16")/100, ",", ".")
Badrum1 = Replace (hs.DeviceValue("S18")/100, ",", ".")
Tvattstuga = Replace (hs.DeviceValue("S19")/100, ",", ".")
Garage_inre = Replace (hs.DeviceValue("S26")/100, ",", ".")
Garage_yttre = Replace (hs.DeviceValue("S25")/100, ",", ".")
Framledning_uppe = Replace (hs.DeviceValue("S30")/100, ",", ".")
Vrum2_inre = Replace (hs.DeviceValue("S42")/100, ",", ".")
Vrum2_center = Replace (hs.DeviceValue("S42")/100, ",", ".")
Vrum2_yttre = Replace (hs.DeviceValue("S42")/100, ",", ".")
Sov2 = Replace (hs.DeviceValue("S42")/100, ",", ".")
Sov3 = Replace (hs.DeviceValue("S42")/100, ",", ".")
Arb = Replace (hs.DeviceValue("S42")/100, ",", ".")
Badrum2 = Replace (hs.DeviceValue("S42")/100, ",", ".")

s = hs.GetURL ("http://192.168.xxx.xxx","/db/Klimat_varmesys.php?Utomhus="&Utomhus&"&Framledning_nere="&Framledning_nere&"&Vrum1_inre="&Vrum1_inre&"&Vrum1_center="&Vrum1_center&"&Vrum1_yttre="&Vrum1_yttre&"&Sov1="&Sov1&"&Entre="&Entre&"&Badrum1="&Badrum1&"&Tvattstuga="&Tvattstuga&"&Garage_inre="&Garage_inre&"&Garage_yttre="&Garage_yttre&"&Framledning_uppe="&Framledning_uppe&"&Vrum2_inre="&Vrum2_inre&"&Vrum2_center="&Vrum2_center&"&Vrum2_yttre="&Vrum2_yttre&"&Sov2="&Sov2&"&Sov3="&Sov3&"&Arb="&Arb&"&Badrum2="&Badrum2, TRUE, 80)

hs.writelog "Loggning", s

End Sub
Och PHP'n

Code: Select all

<?php

//Indata via GET
$Utomhus = $_GET['Utomhus'];
$Framledning_nere = $_GET['Framledning_nere'];
$Vrum1_inre = $_GET['Vrum1_inre'];
$Vrum1_center = $_GET['Vrum1_center'];
$Vrum1_yttre = $_GET['Vrum1_yttre'];
$Sov1 = $_GET['Sov1'];
$Entre = $_GET['Entre'];
$Badrum1 = $_GET['Badrum1'];
$Tvattstuga = $_GET['Tvattstuga'];
$Garage_inre = $_GET['Garage_inre'];
$Garage_yttre = $_GET['Garage_yttre'];
$Framledning_uppe = $_GET['Framledning_uppe'];
$Vrum2_inre = $_GET['Vrum2_inre'];
$Vrum2_center = $_GET['Vrum2_center'];
$Vrum2_yttre = $_GET['Vrum2_yttre'];
$Sov2 = $_GET['Sov2'];
$Sov3 = $_GET['Sov3'];
$Arb = $_GET['Arb'];
$Badrum2 = $_GET['Badrum2'];

$con=mysqli_connect("192.168.xxx.xxx","<anv>","<psw>","<db>");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
else
{
  echo "Anslutning OK, ";
}

$sql="INSERT INTO klimat_varmesys (Utomhus, Framledning_nere, Vrum1_inre, Vrum1_center, Vrum1_yttre, Sov1, Entre, Badrum1, Tvattstuga, Garage_inre, Garage_yttre, Framledning_uppe, Vrum2_inre, Vrum2_center, Vrum2_yttre, Sov2, Sov3, Arb, Badrum2) VALUES (" . $Utomhus . "," . $Framledning_nere . "," . $Vrum1_inre . "," . $Vrum1_center . "," . $Vrum1_yttre . "," . $Sov1 . "," . $Entre . "," . $Badrum1 . "," . $Tvattstuga . "," . $Garage_inre . "," . $Garage_yttre . "," . $Framledning_uppe . "," . $Vrum2_inre . "," . $Vrum2_center . "," . $Vrum2_yttre . "," . $Sov2 . "," . $Sov3 . "," . $Arb . "," . $Badrum2 . ")";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "klimatdata värmesystem adderad.";

mysqli_close($con);
?>
Tusen tack för alla tips i denna tråd!!

//L
Love
Husbyggarblog
Plattform: Mac Mini
Mjukvara: Indigo
Post Reply