mysql daten einlesen
Moderator: Co-Administratoren
mysql daten einlesen
Hallo
ist es möglich Werte aus einer mysql datenbank in die CCU zu laden und bspw. sollwerte für die Temperatur so vorzugeben?
Grüße,
Sander
ist es möglich Werte aus einer mysql datenbank in die CCU zu laden und bspw. sollwerte für die Temperatur so vorzugeben?
Grüße,
Sander
-
- Beiträge: 142
- Registriert: 16.12.2007, 12:40
Re: mysql daten einlesen
Ja,gibt es. Du kannst z.B. von einem Script aus eine Systemvariable der CCU setzen. In dem Skript müsstest Du dann einen http-Request an die CCU schicken. Ungefähr mit folgender URL:
http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")
In der MySQL-Datenbank definierts Du dann einen Trigger, der z.B. bewirkt, dass jedesmal, wenn ein neuer Record in die Tabelle geschrieben wird, das Script aufgerufen wird. Such mal nach "MYSQL TRIGGER".
Gruß
Peter
http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")
In der MySQL-Datenbank definierts Du dann einen Trigger, der z.B. bewirkt, dass jedesmal, wenn ein neuer Record in die Tabelle geschrieben wird, das Script aufgerufen wird. Such mal nach "MYSQL TRIGGER".
Gruß
Peter
Re: mysql daten einlesen
Danke,
versteh ich das richtig, dass ich das script, welches ich auf der CCU laufen habe, dann über den trigger öffne?
grüße
versteh ich das richtig, dass ich das script, welches ich auf der CCU laufen habe, dann über den trigger öffne?
grüße
-
- Beiträge: 142
- Registriert: 16.12.2007, 12:40
Re: mysql daten einlesen
Nein, das Script läuft auf dem Server, auf dem auch die MySQL-Datenbank läuft. In dem Skript rufst Du dann einen http-Request auf, der den Wert einer Systemvariablen entsprechend der DB-Daten ändert. In der Trigger-Definition kannst Du beim Aufruf des Skripts Parameter mit an das Script übergeben.Sander hat geschrieben:Danke,
versteh ich das richtig, dass ich das script, welches ich auf der CCU laufen habe, dann über den trigger öffne?
grüße
Re: mysql daten einlesen
also mal kurz nur zum Verständnis, was ich vorhabe. Da die CO2 Sensoren vom HM nicht funktionieren, will ich mir die ppm Werte von einem anderen CO2 sensor , den ich hab in eine mysql Datenbank schreiben, dann diese Werte in eine systemvariable in die CCU bringen und dort einen Abgleich machen, mit dem ich eine Funk-Steckdose an und ausschalte , je nachdem wie doch der ppm wert ist.
hab auch schonmal an cuxd gedacht, aber da es sich um e-senza sensoren handelt, werden dieses nicht unterstützt
grüße
hab auch schonmal an cuxd gedacht, aber da es sich um e-senza sensoren handelt, werden dieses nicht unterstützt
grüße
-
- Beiträge: 142
- Registriert: 16.12.2007, 12:40
Re: mysql daten einlesen
habe ich auch so verstanden. Schreib doch mal, auf welchem Gerät die MySQL-DB läuft, welches OS und in welcher Sprache Du das Script erstellen willst.
Re: mysql daten einlesen
ich hab die mysql DB mit Xampp auf windows erstellt, nutze also phpmyadmin.
Am liebsten würde ich es in C schreiben, weiß aber nicht ob das geht.
Am liebsten würde ich es in C schreiben, weiß aber nicht ob das geht.
-
- Beiträge: 142
- Registriert: 16.12.2007, 12:40
Re: mysql daten einlesen
Ok, ich beschreibe mal wie ich das gemacht habe (allerdings auf Ubuntu-Server, nicht xamp/windows). Ich schreibe Temperaturen/Feuchtewerte meiner Sensoren als neue Records in die MySQL_Tabelle "th_sensors". Nun möchte ich, dass nach jedem neuen Record das Script "temp2ccu.pl" (liegt auch auf dem Ubuntu-Server) aufgerufen wird und einige Werte aus dem Record als Parameter mit übergeben werden (z.B. Zeit, temperatur, Feuchte, etc). Dazu habe ich in phpmyadmin folgenden Befehl eingegeben, um einen Trigger mit dem Namen "notify_ccu" anzulegen:
In dem Skript "/usr/local/bin/homecontrol/temp2ccu.pl" steht dann u.a.:
Ob dies mit Xampp auf einem Windows-Rechner genauso funktioniert, kann ich nicht sagen. Soweit ich mich erinnere, hatte ich unter Ubuntu einige Probleme, als ich die Konfiguration von einer 32bit- auf eine 64bit-Installation migriert hatte (ließ sich aber lösen).
Gruß
Peter
Code: Alles auswählen
DELIMITER //
CREATE TRIGGER notify_ccu after INSERT ON th_sensors
FOR EACH ROW
BEGIN
DECLARE cmd_string VARCHAR(255);
DECLARE result CHAR(255);
set cmd_string = concat('/usr/bin/perl /usr/local/bin/homecontrol/temp2ccu.pl ',NEW.datetime,' ',NEW.stationid,' ',NEW.sensid,' ',NEW.T,' ',NEW.H,' ',NEW.AH,' ',NEW.DP,' ',NEW.AH,' ','&');
SET result = sys_exec(cmd_string);
END;
//
DELIMITER ;
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use Sys::Syslog qw(:DEFAULT setlogsock);
use Switch;
use Encode;
use URI::Escape;
use Date::Format;
use MIME::Base64;
use IO::Socket;
my @sensors;
$sensors[1] = "Temp_Terrasse";
$sensors[2] = "Temp_Küche";
$sensors[3] = "Temp_HzEsszimmer";
[...]
$sensors[50] = "Temp_Badezimmer";
my $datetime = $ARGV[0]." ".$ARGV[1];
my $stationid = $ARGV[2];
my $sensid = $ARGV[3];
my $temperatur = $ARGV[4];
my $humidity = $ARGV[5];
my $ahumidity = $ARGV[6];
my $drewpoint = $ARGV[7];
my $windchill = $ARGV[8];
# Die IP-Adresse der CCU: 192.168.1.6
my $ccu_url = "http://192.168.1.6:8181/test.exe";
send2server($ccu_url,"?x=dom.GetObject(\"$sensors[$sensid]\").State(\"$temperatur\");");
# In $sensors[$sensid]\") steht letzendlich eine der Systemvariablen drin. In diesem Beispiel wird nur die Temperatur in die Systemvariablen geschrieben. Die Systemvariablen müssen auf der CCU natürlich bereits angelegt sein.
# -----------------------------------------------
# Server-Request formatieren und rausschicken #
# -----------------------------------------------
sub send2server {
my $url = shift;
my $str = shift;
$str = uri_escape($str,'^A-Za-z0-9\-_.!~*\'():?=;"&');
get($url.$str);
return;
}
Gruß
Peter
-
- Beiträge: 140
- Registriert: 10.11.2011, 10:53
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 2 Mal
Re: mysql daten einlesen
Ich hab es so gelöst, dass die CCU selbst zeit- und ereignisesteuert einen URL aufruft. In dieser sind die einzutragenden Werte enthalten.
Ein PHP Skript nimmt diese per URI Encoding auf und trägt sie in die DB ein.
Insbesondere die Ereignisbedingung kannst Du vom Server her ja schlecht realisieren.
Ich hab zwar mal gehört dies würde sich auf den Speicher der CCU auswirken, konnte dies aber nicht feststellen.
Funktioniert tadellos mit allen angeschlossen Geräten.
Die Werte in der DB kann man dann natürlich auch wieder schick auf Webseiten ausgeben (Ala: Günther hat um 17:08 bei 14° und 70% Luftfeuchte das Licht angelassen)
Ein PHP Skript nimmt diese per URI Encoding auf und trägt sie in die DB ein.
Insbesondere die Ereignisbedingung kannst Du vom Server her ja schlecht realisieren.
Ich hab zwar mal gehört dies würde sich auf den Speicher der CCU auswirken, konnte dies aber nicht feststellen.
Funktioniert tadellos mit allen angeschlossen Geräten.
Die Werte in der DB kann man dann natürlich auch wieder schick auf Webseiten ausgeben (Ala: Günther hat um 17:08 bei 14° und 70% Luftfeuchte das Licht angelassen)
Re: mysql daten einlesen
Danke schonmal für eure Antworten, hilft mir sehr weiter.
achso ich schreibe alles in Java
Nochmal eine Frage zur Systemvariable. Ich will diese von außen setzen.
Ist der Befehl für den http request :" http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")" richtig?
Ich lese per java eine datenbank von einem CO2 sensor aus und will diesen Wert in eine Systemvariable speichern. Dann ein Programm mit der Systemvariable und einer Steckdose, in der ein Lüfter steckt.
grüße
achso ich schreibe alles in Java
Nochmal eine Frage zur Systemvariable. Ich will diese von außen setzen.
Ist der Befehl für den http request :" http://<ccu-adresse>?x=dom.GetObject("<systemvariable>").State("<wert>")" richtig?
Ich lese per java eine datenbank von einem CO2 sensor aus und will diesen Wert in eine Systemvariable speichern. Dann ein Programm mit der Systemvariable und einer Steckdose, in der ein Lüfter steckt.
grüße