mysql daten einlesen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Sander
Beiträge: 11
Registriert: 28.01.2013, 10:41

mysql daten einlesen

Beitrag von Sander » 08.02.2013, 11:16

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

PumpkinEater
Beiträge: 142
Registriert: 16.12.2007, 12:40

Re: mysql daten einlesen

Beitrag von PumpkinEater » 08.02.2013, 11:31

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

Sander
Beiträge: 11
Registriert: 28.01.2013, 10:41

Re: mysql daten einlesen

Beitrag von Sander » 13.02.2013, 11:19

Danke,

versteh ich das richtig, dass ich das script, welches ich auf der CCU laufen habe, dann über den trigger öffne?

grüße

PumpkinEater
Beiträge: 142
Registriert: 16.12.2007, 12:40

Re: mysql daten einlesen

Beitrag von PumpkinEater » 13.02.2013, 13:42

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
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
Beiträge: 11
Registriert: 28.01.2013, 10:41

Re: mysql daten einlesen

Beitrag von Sander » 13.02.2013, 14:09

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

PumpkinEater
Beiträge: 142
Registriert: 16.12.2007, 12:40

Re: mysql daten einlesen

Beitrag von PumpkinEater » 13.02.2013, 14:18

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.

Sander
Beiträge: 11
Registriert: 28.01.2013, 10:41

Re: mysql daten einlesen

Beitrag von Sander » 13.02.2013, 14:31

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.

PumpkinEater
Beiträge: 142
Registriert: 16.12.2007, 12:40

Re: mysql daten einlesen

Beitrag von PumpkinEater » 13.02.2013, 15:03

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:

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 ;
In dem Skript "/usr/local/bin/homecontrol/temp2ccu.pl" steht dann u.a.:

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;
}

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

Bullson
Beiträge: 140
Registriert: 10.11.2011, 10:53
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: mysql daten einlesen

Beitrag von Bullson » 16.02.2013, 17:57

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)

Sander
Beiträge: 11
Registriert: 28.01.2013, 10:41

Re: mysql daten einlesen

Beitrag von Sander » 20.02.2013, 09:54

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

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“