(gelöst) Daikin Klimaanlage HTTP Interface

Begonnen von igami, 13 September 2014, 18:01:57

Vorheriges Thema - Nächstes Thema

igami

Zitat von: igami am 23 Oktober 2014, 10:27:49
Noch eine Meldung:
wie es ausschaut funktioniert es nun.
Habe zwei Skripte für node geschrieben, die über perl mittels qx aufgerufen werden. Passend dazu auch zwei Perl funktionen.
Pro Klimagerät wird nun benötigt:
1x Dummy in den die Readings eingetragen werden
1x at zum regelmäßigen update der Readings
1x notify für setreading bei änderung via setList
1x DOIF zum aufrufen der set Funktion bei state Änderung des Dummy

Hier noch der Code:
dk_getting_70004.js

var http = require("http");

process.argv.shift(); //shift out node
process.argv.shift(); //shift out file
var host = process.argv.shift();
var port = process.argv.shift();
var address01 = process.argv.shift();
var address02 = process.argv.shift();
var address03 = process.argv.shift();
var address04 = process.argv.shift();
var address05 = process.argv.shift();
var address06 = process.argv.shift();
var address07 = process.argv.shift();
var address08 = process.argv.shift();
var address09 = process.argv.shift();
var address10 = process.argv.shift();
var address11 = process.argv.shift();
var address12 = process.argv.shift();
var address13 = process.argv.shift();
var address14 = process.argv.shift();
var address15 = process.argv.shift();
var address16 = process.argv.shift();

var buffer = new Buffer(32);
buffer.fill();                          //fills the buffer with 0
buffer.writeInt32LE(32, 0);             //write Command Length 32 Byte
buffer.writeInt32LE(70004, 4);          //write Command ID 700004
buffer.writeInt32LE(0, 8);              //Reserved 1
buffer.writeInt32LE(0, 12);             //Reserved 2
buffer.writeInt8(address01, 16);
buffer.writeInt8(address02, 17);
buffer.writeInt8(address03, 18);
buffer.writeInt8(address04, 19);
buffer.writeInt8(address05, 20);
buffer.writeInt8(address06, 21);
buffer.writeInt8(address07, 22);
buffer.writeInt8(address08, 23);
buffer.writeInt8(address09, 24);
buffer.writeInt8(address10, 25);
buffer.writeInt8(address11, 26);
buffer.writeInt8(address12, 27);
buffer.writeInt8(address13, 28);
buffer.writeInt8(address14, 29);
buffer.writeInt8(address15, 30);
buffer.writeInt8(address16, 31);

var opt = {
    host: host,
    port: port,
    path: '/cmd/',
    method: 'POST',
    headers: {
        'Content-Type':'application/octet-stream',
        'Content-Length':32
    }
}
var req = http.request(opt, function(res) {
    res.setEncoding('hex');
    res.on('data', function(chunk) {
        console.log(chunk);
    });

});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.write(buffer);
req.end();

dk_setting_70006.js

var http = require("http");

process.argv.shift(); //shift out node
process.argv.shift(); //shift out file
var host = process.argv.shift();
var port = process.argv.shift();
var ACAddress = process.argv.shift();
var OnOff = process.argv.shift();
var OperationMode = process.argv.shift();
var VentilationMode = process.argv.shift();
var VentilationAmount = process.argv.shift();
var SetPoint = process.argv.shift();
var FanSpeed = process.argv.shift();
var FanDirection = process.argv.shift();
var FilterSignReset = process.argv.shift();

var buffer = new Buffer(56);
buffer.fill();                                  //fills the buffer with 0
buffer.writeInt32LE(56, 0);                     //write Command Length 56 Byte
buffer.writeInt32LE(70006, 4);                  //write Command ID 70006
buffer.writeInt32LE(1, 8);                      //Number of AC to set Status
buffer.writeInt32LE(0, 12);                     //Reserved 1
buffer.writeInt32LE(0, 16);                     //Reserved 2
buffer.writeInt32LE(0, 20);                     //Reserved 3
buffer.writeInt32LE(0, 24);                     //Reserved 4
buffer.writeInt32LE(0, 28);                     //Reserved 5
buffer.writeInt32LE(ACAddress, 32);             //AC Address
buffer.writeInt32LE(63, 36);                    //Setting Bit
buffer.writeInt16LE(OnOff, 40);                 //OnOff
buffer.writeInt16LE(OperationMode, 42);         //Operation Mode
buffer.writeInt16LE(VentilationMode, 44);       //Ventilation Mode
buffer.writeInt16LE(VentilationAmount, 46);     //Ventilation Amount
buffer.writeInt32LE(SetPoint, 48);              //Set point
buffer.writeInt8(FanSpeed, 52);                 //Fan Speed
buffer.writeInt8(FanDirection, 53);             //Fan Direction
buffer.writeInt8(FilterSignReset, 54);          //Filter Sign Reset
buffer.writeInt8(0, 55);                        //Reserved 6

var opt = {
    host: host,
    port: port,
    path: '/cmd/',
    method: 'POST',
    headers: {
        'Content-Type':'application/octet-stream',
        'Content-Length':56
    }
}
var req = http.request(opt, function(res) {
    res.setEncoding('hex');
    res.on('data', function(chunk) {
    });

});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.write(buffer);
req.end();

sub dk_getting_70004($)

sub dk_getting_70004($){
my $device = shift;

my $host = ReadingsVal("dk_AC","host","192.168.x.xx");
my $port = ReadingsVal("dk_AC","port",xxxx);

my $ACAddress = ReadingsVal($device,"ACAddress",0);

my $address01 = int($ACAddress/8)+1 ==  1 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address02 = int($ACAddress/8)+1 ==  2 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address03 = int($ACAddress/8)+1 ==  3 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address04 = int($ACAddress/8)+1 ==  4 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address05 = int($ACAddress/8)+1 ==  5 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address06 = int($ACAddress/8)+1 ==  6 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address07 = int($ACAddress/8)+1 ==  7 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address08 = int($ACAddress/8)+1 ==  8 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address09 = int($ACAddress/8)+1 ==  9 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address10 = int($ACAddress/8)+1 == 10 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address11 = int($ACAddress/8)+1 == 11 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address12 = int($ACAddress/8)+1 == 12 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address13 = int($ACAddress/8)+1 == 13 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address14 = int($ACAddress/8)+1 == 14 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address15 = int($ACAddress/8)+1 == 15 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address16 = int($ACAddress/8)+1 == 16 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;

my $response = qx(node /opt/fhem/FHEM/daikin/dk_getting_70004.js $host $port $address01 $address02 $address03 $address04 $address05 $address06 $address07 $address08 $address09 $address10 $address11 $address12 $address13 $address14 $address15 $address16);

#my $CommandSize          = (substr $response,   0, 8);
#my $CommandID            = (substr $response,   8, 8);
#my $NumberOfAC           = (substr $response,  16, 8);
#my $Reserved1            = (substr $response,  24, 8);
#my $Reserved2            = (substr $response,  32, 8);
#my $Reserved3            = (substr $response,  40, 8);
#my $Reserved4   = (substr $response,  48, 8);
#my $Reserved5   = (substr $response,  56, 8);
#my $ACAdress   = (substr $response,  64, 8);
my $Status                = (
                            (substr $response,  72, 4) eq "0100" ? "Normal" :
                            (substr $response,  72, 4) eq "0000" ? "Error" :
                            "Unconnected"
                            );
#my $Malfunction          = (substr $response,  76, 4);
my $OnOff                 = (
                            (substr $response,  80, 4) eq "0100" ? "On" :
                            (substr $response,  80, 4) eq "0000" ? "Off" :
                            "Unknown"
                            );
my $OperationMode         = (
                            (substr $response,  84, 4) eq "0100" ? "Fan" :
                            (substr $response,  84, 4) eq "0200" ? "Heat" :
                            (substr $response,  84, 4) eq "0400" ? "Cool" :
                            (substr $response,  84, 4) eq "1000" ? "Dependent" :
                            (substr $response,  84, 4) eq "2000" ? "Ventilation" :
                            (substr $response,  84, 4) eq "4000" ? "Dry" :
                            (substr $response,  84, 4) eq "0001" ? "Auto(Heat)" :
                            (substr $response,  84, 4) eq "0002" ? "Auto(Cool)" :
                            "Unknown"
                            );
my $VentilationMode       = (
                            (substr $response,  88, 4) eq "0100" ? "Automatic" :
                            (substr $response,  88, 4) eq "0200" ? "HeatExchange" :
                            (substr $response,  88, 4) eq "0400" ? "Bypass" :
                            "Unknown"
                            );
my $VentilationAmount     = (
                            (substr $response,  92, 4) eq "0100" ? "Automatic(normal)" :
                            (substr $response,  92, 4) eq "0200" ? "Low(normal)" :
                            (substr $response,  92, 4) eq "0400" ? "High(normal)" :
                            (substr $response,  92, 4) eq "0800" ? "Automatic(freshup)" :
                            (substr $response,  92, 4) eq "0010" ? "Low(freshup)" :
                            (substr $response,  92, 4) eq "0020" ? "High(freshup)" :
                            "Unknown"
                            );
#my $EnableDisableTemp    = (substr $response,  96, 8);
my $RoomTemp              = sprintf ("%.1f", (unpack ("f",pack "H*",
                            (substr $response, 104, 8)
                            )));
my $SetTemp               = sprintf ("%.1f", (unpack ("f",pack "H*",
                            (substr $response, 112, 8)
                            )));
my $FanSpeed              = (
                            (substr $response, 120, 2) eq "00" ? "Low" :
                            (substr $response, 120, 2) eq "01" ? "Middle" :
                            (substr $response, 120, 2) eq "02" ? "High" :
                            "Unknown"
                            );
my $FanDirection          = (
                            (substr $response, 122, 2) eq "00" ? "00" :
                            (substr $response, 122, 2) eq "01" ? "01" :
                            (substr $response, 122, 2) eq "02" ? "02" :
                            (substr $response, 122, 2) eq "03" ? "03" :
                            (substr $response, 122, 2) eq "04" ? "04" :
                            (substr $response, 122, 2) eq "07" ? "Swing" :
                            "Unknown"
                            );
my $FilterSign            = (
                            (substr $response, 124, 2) eq "00" ? "Off" :
                            "On"
                            );
#my $Reserved6            = (substr $response, 126, 2);

fhem("setreading $device fullresponse $response");
fhem("setreading $device Status $Status");
fhem("setreading $device power $OnOff");
fhem("setreading $device operation-mode $OperationMode");
fhem("setreading $device ventilation-mode $VentilationMode");
fhem("setreading $device ventilation-amount $VentilationAmount");
fhem("setreading $device measured-temp $RoomTemp");
fhem("setreading $device desired-temp $SetTemp");
fhem("setreading $device fan-speed $FanSpeed");
fhem("setreading $device fan-direction $FanDirection");
fhem("setreading $device FilterSign $FilterSign");
}

sub dk_setting_70006($)

sub dk_setting_70006($){
my $device = shift;

my $host = ReadingsVal("dk_AC","host","192.168.x.xx");
my $port = ReadingsVal("dk_AC","port",xxxx);

my $ACAddress           = ReadingsVal($device,"ACAddress","");
my $OnOff               = ReadingsVal($device,"power","Off");
my $OperationMode       = ReadingsVal($device,"operation-mode","Fan");
my $VentilationMode     = ReadingsVal($device,"ventilation-mode","Automatic");
my $VentilationAmount   = ReadingsVal($device,"ventilation-amount","Automatic");
my $SetPoint            = ReadingsVal($device,"desired-temp",21);
my $FanSpeed            = ReadingsVal($device,"fan-speed","Low");
my $FanDirection        = ReadingsVal($device,"fan-direction","00");
my $FilterSignReset     = ReadingsVal($device,"FilterSign","On");

my $OnOff               = (
                          $OnOff eq "On" ? 1 :
                          0
                          );
my $OperationMode       = (
                          $OperationMode  eq "Heat" ? 2 :
                          $OperationMode  eq "Cool" ? 4 :
                          $OperationMode  eq "Dependent" ? 16 :
                          $OperationMode  eq "Ventilation" ? 32 :
                          $OperationMode  eq "Dry" ? 64 :
                          $OperationMode  eq "Auto(Heat)" ? 256 :
                          $OperationMode  eq "Auto(Cool)" ? 512 :
                          1
                          );
my $VentilationMode     = (
                          $VentilationMode eq "Heat Exchange" ? 2 :
                          $VentilationMode eq "Bypass" ? 4 :
                          1
                          );
my $VentilationAmount   = (
                          $VentilationAmount eq "Low(normal)" ? 2 :
                          $VentilationAmount eq "High(normal)" ? 4 :
                          $VentilationAmount eq "Automatic(freshup)" ? 8 :
                          $VentilationAmount eq "Low(freshup)" ? 16 :
                          $VentilationAmount eq "v" ? 32 :
                          1
                          );
my $SetPoint            = unpack ("i*",pack "f", $SetPoint);
my $FanSpeed            = (
                          $FanSpeed eq "Middle" ? 1 :
                          $FanSpeed eq "High" ? 2 :
                          0
                          );
my $FanDirection        = (
                          $FanDirection eq "01" ? 1 :
                          $FanDirection eq "02" ? 2 :
                          $FanDirection eq "03" ? 3 :
                          $FanDirection eq "04" ? 4 :
                          $FanDirection eq "Swing" ? 7 :
                          0
                          );
my $FilterSignReset     = (
                          $FilterSignReset eq "Off" ? 0 :
                          1
                          );

qx(node /opt/fhem/FHEM/daikin/dk_setting_70006.js $host $port $ACAddress $OnOff $OperationMode $VentilationMode $VentilationAmount $SetPoint $FanSpeed $FanDirection $FilterSignReset);
&dk_getting_70004($device);
}

dummy,at,notify,DOIF

define dk_AC PRESENCE lan-ping 192.168.x.xx 900 900
attr dk_AC icon weather_winter
attr dk_AC room 9.1.010:Adapter
attr dk_AC stateFormat host:port state
setreading dk_AC host 192.168.x.xx
setreading dk_AC port xxxx

define dk_12190_1 dummy
attr dk_12190_1 group 05.0 Lüftung / AC
attr dk_12190_1 room 1.2.190:Pneumatik
attr dk_12190_1 setList power:On,Off operation-mode:Fan,Heat,Cool,Dependent,Ventilation,Dry,Auto(Heat),Auto(Cool) ventilation-mode:Automatic,HeatExchange,Bypass ventilation-amount:Automatic(normal),Low(normal),High(normal),Automatic(freshup),Low(freshup),High(freshup) desired-temp:slider,16,1,30 fan-speed:Low,Middle,High fan-direction:00,01,02,03,04,Swing FilterSign:On,Off
attr dk_12190_1 stateFormat power
attr dk_12190_1 webCmd power:operation-mode:ventilation-mode:ventilation-amount:desired-temp:fan-speed:fan-direction:FilterSign
setreading dk_12190_1 ACAddress 18

define a_dk_12190 at +*00:03 {dk_getting_70004("dk_12190_1")}
attr a_dk_12190 disable 0
attr a_dk_12190 room 1.2.190:Pneumatik

define ntfy_dk_12190 notify dk_12190_. {fhem("setreading $NAME $EVENT");;;;fhem("attr a_dk_12190 disable 1")}
attr ntfy_dk_12190 room 1.2.190:Pneumatik

define di_dk_12190 DOIF ([dk_12190_1])({dk_setting_70006("dk_12190_1");;;;fhem("attr a_dk_12190 disable 0")})
attr di_dk_12190 do always
attr di_dk_12190 room 1.2.190:Pneumatik
attr di_dk_12190 wait 5


Vielleicht kann es ja noch jemand gebrauchen.

Hier muss ich mir nun erst mal noch eine Regelung bauen die mit den Fenstern und Heizungen zusammen läuft.

Grüße

Igami

Hi zusammen,

seit kurzem wurde an unserer Klimaanlage ein HTTP Interface freigeschaltet, welches nun mit HTTPMOD in FHEM eingebunden werden soll, nur bekomme ich leider immer nur 501 zurück. Laut den Einstellungen ist das Interface aber aktiv (s. 11f im Anhang).
Auf Seite 14 steht dann weiterhin:

POST /cmd/ HTTP/1.1 ¥r¥n
Content-Length: 32¥r¥n
Content-Type: application/octet-stream¥r¥n
¥r¥n
(Request Command Data) ....

habe den HTTPMOD mit

define Daikin HTTPMOD http://192.168.0.21:8080/cm 60
attr Daikin requestData ""

Laut aussage eines Bekannten sollte ich damit wenigstens etwas bekommen, aber leider nix. Was muss ich denn Definieren um etwas zu bekommen?

Beispiel von S. 23

HTTP Request
POST /cmd/ HTTP/1.1 ¥r¥n
Content-Length: 32¥r¥n
Content-Type: application/octet-stream¥r¥n
¥r¥n
20 00 00 00 {Command Size;32}
74 11 01 00 {Command ID;70004}
00 00 00 00 {Reserved 1}
00 00 00 00 {Reserved 2}
04 {A/C Address to get status; 1:1-00 to 1:1-07 (1:1-02 is enable)}
00 {A/C Address to get status; 1:1-08 to 1:1-15}
00 {A/C Address to get status; 1:2-00 to 1:2-07}
00 {A/C Address to get status; 1:2-08 to 1:2-15}
00 {A/C Address to get status; 1:3-00 to 1:3-07}
00 {A/C Address to get status; 1:3-08 to 1:3-15}
00 {A/C Address to get status; 1:4-00 to 1:4-07}
00 {A/C Address to get status; 1:4-08 to 1:4-15}
00 {A/C Address to get status; 2:1-00 to 2:1-07}
00 {A/C Address to get status; 2:1-08 to 2:1-15}
00 {A/C Address to get status; 2:2-00 to 2:2-07}
00 {A/C Address to get status; 2:2-08 to 2:2-15}
00 {A/C Address to get status; 2:3-00 to 2:3-07}
00 {A/C Address to get status; 2:3-08 to 2:3-15}
00 {A/C Address to get status; 2:4-00 to 2:4-07}
00 {A/C Address to get status; 2:4-08 to 2:4-15}

HTTP Response
HTTP/1.1 200 OK¥r¥n
Date: Fri, 29 Apr 2005 05:18:22 GMT¥r¥n
Server: PrHTTPD Ver1.0¥r¥n
Content-Type:application/octet-stream ¥r¥n
Content-Length: 64¥r¥n
¥r¥n
40 00 00 00 {Command Size;64}
75 11 01 00 {Command ID;70005}
01 00 00 00 {Number of A/C; 1}
00 00 00 00 {Reserved 1}
00 00 00 00 {Reserved 2}
00 00 00 00 {Reserved 3}
00 00 00 00 {Reserved 4}
00 00 00 00 {Reserved 5}
02 00 00 00 {A/C Address; 1-1:02}
01 00 {Status; Normal}
00 00 {Malfunction Code;NULL}
01 00 {On/Off; ON}
04 00 {Operation mode; Cool}
00 10 {Ventilation mode; Unknown}
00 10 {Ventilation amount; Unknown}
03 00 00 00 {Both Set Temp. and Room Temp. is enable}
41 e0 00 00 {Room Temp.;28.0}
41 c8 00 00 {Set point.;25.0}
01 {Fan Speed; Middle}
07 {Fan Direction; Swing}
00 {Filter Sign; Off}
00 {Reserved 6}


Bin für jede Anregung Dankbar.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

*PUSH*

kleine Erfolgsmeldung:
mittels node ist eine Abfrge mögliche

node curler.js 192.168.0.21

curler.js

var http = require("http");


process.argv.shift(); //shift out node
process.argv.shift(); //shift out file
// return console.log(process.argv.shift());
var host = process.argv.shift();

var test = new Buffer(32);
test.fill();                                    //fills the buffer with 0
test.writeInt32LE(32, 0);               //write Command Length 32 Byte (Value is specced as 4 byte expected length which would be an 32Bit Integer)
test.writeInt32LE(70004, 4);    //write Command ID but begin at 4 bytes as Command Length is specced as 4 byte length (same length as Command Leng$
test.writeInt32LE(0, 8);        //Reserved 1 Int32 Offset: 4 (Cmd Length) + 4 (Cmd Id)... and so on
test.writeInt32LE(0, 12);       //Reserved 2 Int32 Offset: 4 (Cmd Length) + 4 (Cmd Id)... and so on
test.writeInt8(0, 16);          //First AC Address Area. Addresses 1:1-00 bis 1:1-07 (only 8 Byte)
test.writeInt8(0, 17);          //TODO loop through ...
test.writeInt8(4, 18);
test.writeInt8(0, 19);
test.writeInt8(0, 20);
test.writeInt8(0, 21);
test.writeInt8(0, 22);
test.writeInt8(0, 23);
test.writeInt8(0, 24);
test.writeInt8(0, 25);
test.writeInt8(0, 26);
test.writeInt8(0, 27);
test.writeInt8(0, 28);
test.writeInt8(0, 29);
test.writeInt8(0, 30);
test.writeInt8(0, 31);

console.log("sending: ");
console.log(test.toString("hex"), "length:", test.length);
console.log("to: ", host);

var opt = {
    host: host,
    port: 80,
    path: '/cmd/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/octet-stream',
        'Content-Length': 32 //should be self set
    }
}
var req = http.request(opt, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('hex');
    res.on('data', function(chunk) {
        console.log('BODY: ' + chunk);
    });

});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.write(test); //if no success try test.toString('hex') instead
req.end();


Vielleicht kann mir nun noch jemand beim Übersetzten zum HTTPMOD helfen?

Grüße und Dank
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Ich nochmal.

Mein Ansatz:
zwei node Skripte schreiben (get.js und set.js oder so) bei denen ich dann die Parameter die Klimaanlage betreffend Übergebe.
Beim get Skript währen dass das Adresse, Port und Klimaanlagennummer
Beim set Skript schon mehr, ebenfalls Adresse, Port, Klimaanlagennummer, dann noch on/off, Operation Mode, Ventilation Mode, Ventilation Amount, Set Point, Fan Speed, Fan Direction, Filter Sign Reset.

Ist es dann sinnvoll nur Dummys dafür zu verwenden? Einen in dem Adresse und Port stehen und pro Klimagerät eines? Oder gibt es Elegantere Möglichkeiten? Modul schreiben würde ich versuchen, habe aber keine Ahnung davon.

Vielen Dank für eure Anregunen.

Grüße
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

#3
Noch mal ein Push,

ich komme atkuell nicht weiter. Beim versuch node über perl aufzurufen mittels

{system("node /opt/fhem/fhemcurler.js 192.168.0.21")}

bekomme ich nur eine -1 zurück.

Zum testen habe ich mir ein Perl Skript geschrieben

#!/usr/bin/perl
my $status = system("node /opt/fhem/fhemcurler.js 192.168.0.21");

print $status;

wenn ich das mittels

perl test.pl

aufrufe bekomme ich das erwünschte ergebnis.

Nachtrag: Habe FHEM nun mal testweise als root laufen lassen, alles funktioniert. Nun brauche ich für node aber eigentlich kein root, also welche berechtigung fehlt dem fhem user?

Vielen Dank schon Mal
Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Noch eine Meldung:
wie es ausschaut funktioniert es nun.
Habe zwei Skripte für node geschrieben, die über perl mittels qx aufgerufen werden. Passend dazu auch zwei Perl funktionen.
Pro Klimagerät wird nun benötigt:
1x Dummy in den die Readings eingetragen werden
1x at zum regelmäßigen update der Readings
1x notify für setreading bei änderung via setList
1x DOIF zum aufrufen der set Funktion bei state Änderung des Dummy

Hier noch der Code:
dk_getting_70004.js

var http = require("http");

process.argv.shift(); //shift out node
process.argv.shift(); //shift out file
var host = process.argv.shift();
var port = process.argv.shift();
var address01 = process.argv.shift();
var address02 = process.argv.shift();
var address03 = process.argv.shift();
var address04 = process.argv.shift();
var address05 = process.argv.shift();
var address06 = process.argv.shift();
var address07 = process.argv.shift();
var address08 = process.argv.shift();
var address09 = process.argv.shift();
var address10 = process.argv.shift();
var address11 = process.argv.shift();
var address12 = process.argv.shift();
var address13 = process.argv.shift();
var address14 = process.argv.shift();
var address15 = process.argv.shift();
var address16 = process.argv.shift();

var buffer = new Buffer(32);
buffer.fill();                          //fills the buffer with 0
buffer.writeInt32LE(32, 0);             //write Command Length 32 Byte
buffer.writeInt32LE(70004, 4);          //write Command ID 700004
buffer.writeInt32LE(0, 8);              //Reserved 1
buffer.writeInt32LE(0, 12);             //Reserved 2
buffer.writeInt8(address01, 16);
buffer.writeInt8(address02, 17);
buffer.writeInt8(address03, 18);
buffer.writeInt8(address04, 19);
buffer.writeInt8(address05, 20);
buffer.writeInt8(address06, 21);
buffer.writeInt8(address07, 22);
buffer.writeInt8(address08, 23);
buffer.writeInt8(address09, 24);
buffer.writeInt8(address10, 25);
buffer.writeInt8(address11, 26);
buffer.writeInt8(address12, 27);
buffer.writeInt8(address13, 28);
buffer.writeInt8(address14, 29);
buffer.writeInt8(address15, 30);
buffer.writeInt8(address16, 31);

var opt = {
    host: host,
    port: port,
    path: '/cmd/',
    method: 'POST',
    headers: {
        'Content-Type':'application/octet-stream',
        'Content-Length':32
    }
}
var req = http.request(opt, function(res) {
    res.setEncoding('hex');
    res.on('data', function(chunk) {
        console.log(chunk);
    });

});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.write(buffer);
req.end();

dk_setting_70006.js

var http = require("http");

process.argv.shift(); //shift out node
process.argv.shift(); //shift out file
var host = process.argv.shift();
var port = process.argv.shift();
var ACAddress = process.argv.shift();
var OnOff = process.argv.shift();
var OperationMode = process.argv.shift();
var VentilationMode = process.argv.shift();
var VentilationAmount = process.argv.shift();
var SetPoint = process.argv.shift();
var FanSpeed = process.argv.shift();
var FanDirection = process.argv.shift();
var FilterSignReset = process.argv.shift();

var buffer = new Buffer(56);
buffer.fill();                                  //fills the buffer with 0
buffer.writeInt32LE(56, 0);                     //write Command Length 56 Byte
buffer.writeInt32LE(70006, 4);                  //write Command ID 70006
buffer.writeInt32LE(1, 8);                      //Number of AC to set Status
buffer.writeInt32LE(0, 12);                     //Reserved 1
buffer.writeInt32LE(0, 16);                     //Reserved 2
buffer.writeInt32LE(0, 20);                     //Reserved 3
buffer.writeInt32LE(0, 24);                     //Reserved 4
buffer.writeInt32LE(0, 28);                     //Reserved 5
buffer.writeInt32LE(ACAddress, 32);             //AC Address
buffer.writeInt32LE(63, 36);                    //Setting Bit
buffer.writeInt16LE(OnOff, 40);                 //OnOff
buffer.writeInt16LE(OperationMode, 42);         //Operation Mode
buffer.writeInt16LE(VentilationMode, 44);       //Ventilation Mode
buffer.writeInt16LE(VentilationAmount, 46);     //Ventilation Amount
buffer.writeInt32LE(SetPoint, 48);              //Set point
buffer.writeInt8(FanSpeed, 52);                 //Fan Speed
buffer.writeInt8(FanDirection, 53);             //Fan Direction
buffer.writeInt8(FilterSignReset, 54);          //Filter Sign Reset
buffer.writeInt8(0, 55);                        //Reserved 6

var opt = {
    host: host,
    port: port,
    path: '/cmd/',
    method: 'POST',
    headers: {
        'Content-Type':'application/octet-stream',
        'Content-Length':56
    }
}
var req = http.request(opt, function(res) {
    res.setEncoding('hex');
    res.on('data', function(chunk) {
    });

});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});
req.write(buffer);
req.end();

sub dk_getting_70004($)

sub dk_getting_70004($){
my $device = shift;

my $host = ReadingsVal("dk_AC","host","192.168.x.xx");
my $port = ReadingsVal("dk_AC","port",xxxx);

my $ACAddress = ReadingsVal($device,"ACAddress",0);

my $address01 = int($ACAddress/8)+1 ==  1 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address02 = int($ACAddress/8)+1 ==  2 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address03 = int($ACAddress/8)+1 ==  3 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address04 = int($ACAddress/8)+1 ==  4 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address05 = int($ACAddress/8)+1 ==  5 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address06 = int($ACAddress/8)+1 ==  6 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address07 = int($ACAddress/8)+1 ==  7 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address08 = int($ACAddress/8)+1 ==  8 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address09 = int($ACAddress/8)+1 ==  9 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address10 = int($ACAddress/8)+1 == 10 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address11 = int($ACAddress/8)+1 == 11 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address12 = int($ACAddress/8)+1 == 12 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address13 = int($ACAddress/8)+1 == 13 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address14 = int($ACAddress/8)+1 == 14 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address15 = int($ACAddress/8)+1 == 15 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;
my $address16 = int($ACAddress/8)+1 == 16 ? 2**((($ACAddress/8)-int($ACAddress/8))*8) : 0;

my $response = qx(node /opt/fhem/FHEM/daikin/dk_getting_70004.js $host $port $address01 $address02 $address03 $address04 $address05 $address06 $address07 $address08 $address09 $address10 $address11 $address12 $address13 $address14 $address15 $address16);

#my $CommandSize          = (substr $response,   0, 8);
#my $CommandID            = (substr $response,   8, 8);
#my $NumberOfAC           = (substr $response,  16, 8);
#my $Reserved1            = (substr $response,  24, 8);
#my $Reserved2            = (substr $response,  32, 8);
#my $Reserved3            = (substr $response,  40, 8);
#my $Reserved4   = (substr $response,  48, 8);
#my $Reserved5   = (substr $response,  56, 8);
#my $ACAdress   = (substr $response,  64, 8);
my $Status                = (
                            (substr $response,  72, 4) eq "0100" ? "Normal" :
                            (substr $response,  72, 4) eq "0000" ? "Error" :
                            "Unconnected"
                            );
#my $Malfunction          = (substr $response,  76, 4);
my $OnOff                 = (
                            (substr $response,  80, 4) eq "0100" ? "On" :
                            (substr $response,  80, 4) eq "0000" ? "Off" :
                            "Unknown"
                            );
my $OperationMode         = (
                            (substr $response,  84, 4) eq "0100" ? "Fan" :
                            (substr $response,  84, 4) eq "0200" ? "Heat" :
                            (substr $response,  84, 4) eq "0400" ? "Cool" :
                            (substr $response,  84, 4) eq "1000" ? "Dependent" :
                            (substr $response,  84, 4) eq "2000" ? "Ventilation" :
                            (substr $response,  84, 4) eq "4000" ? "Dry" :
                            (substr $response,  84, 4) eq "0001" ? "Auto(Heat)" :
                            (substr $response,  84, 4) eq "0002" ? "Auto(Cool)" :
                            "Unknown"
                            );
my $VentilationMode       = (
                            (substr $response,  88, 4) eq "0100" ? "Automatic" :
                            (substr $response,  88, 4) eq "0200" ? "HeatExchange" :
                            (substr $response,  88, 4) eq "0400" ? "Bypass" :
                            "Unknown"
                            );
my $VentilationAmount     = (
                            (substr $response,  92, 4) eq "0100" ? "Automatic(normal)" :
                            (substr $response,  92, 4) eq "0200" ? "Low(normal)" :
                            (substr $response,  92, 4) eq "0400" ? "High(normal)" :
                            (substr $response,  92, 4) eq "0800" ? "Automatic(freshup)" :
                            (substr $response,  92, 4) eq "0010" ? "Low(freshup)" :
                            (substr $response,  92, 4) eq "0020" ? "High(freshup)" :
                            "Unknown"
                            );
#my $EnableDisableTemp    = (substr $response,  96, 8);
my $RoomTemp              = sprintf ("%.1f", (unpack ("f",pack "H*",
                            (substr $response, 104, 8)
                            )));
my $SetTemp               = sprintf ("%.1f", (unpack ("f",pack "H*",
                            (substr $response, 112, 8)
                            )));
my $FanSpeed              = (
                            (substr $response, 120, 2) eq "00" ? "Low" :
                            (substr $response, 120, 2) eq "01" ? "Middle" :
                            (substr $response, 120, 2) eq "02" ? "High" :
                            "Unknown"
                            );
my $FanDirection          = (
                            (substr $response, 122, 2) eq "00" ? "00" :
                            (substr $response, 122, 2) eq "01" ? "01" :
                            (substr $response, 122, 2) eq "02" ? "02" :
                            (substr $response, 122, 2) eq "03" ? "03" :
                            (substr $response, 122, 2) eq "04" ? "04" :
                            (substr $response, 122, 2) eq "07" ? "Swing" :
                            "Unknown"
                            );
my $FilterSign            = (
                            (substr $response, 124, 2) eq "00" ? "Off" :
                            "On"
                            );
#my $Reserved6            = (substr $response, 126, 2);

fhem("setreading $device fullresponse $response");
fhem("setreading $device Status $Status");
fhem("setreading $device power $OnOff");
fhem("setreading $device operation-mode $OperationMode");
fhem("setreading $device ventilation-mode $VentilationMode");
fhem("setreading $device ventilation-amount $VentilationAmount");
fhem("setreading $device measured-temp $RoomTemp");
fhem("setreading $device desired-temp $SetTemp");
fhem("setreading $device fan-speed $FanSpeed");
fhem("setreading $device fan-direction $FanDirection");
fhem("setreading $device FilterSign $FilterSign");
}

sub dk_setting_70006($)

sub dk_setting_70006($){
my $device = shift;

my $host = ReadingsVal("dk_AC","host","192.168.x.xx");
my $port = ReadingsVal("dk_AC","port",xxxx);

my $ACAddress           = ReadingsVal($device,"ACAddress","");
my $OnOff               = ReadingsVal($device,"power","Off");
my $OperationMode       = ReadingsVal($device,"operation-mode","Fan");
my $VentilationMode     = ReadingsVal($device,"ventilation-mode","Automatic");
my $VentilationAmount   = ReadingsVal($device,"ventilation-amount","Automatic");
my $SetPoint            = ReadingsVal($device,"desired-temp",21);
my $FanSpeed            = ReadingsVal($device,"fan-speed","Low");
my $FanDirection        = ReadingsVal($device,"fan-direction","00");
my $FilterSignReset     = ReadingsVal($device,"FilterSign","On");

my $OnOff               = (
                          $OnOff eq "On" ? 1 :
                          0
                          );
my $OperationMode       = (
                          $OperationMode  eq "Heat" ? 2 :
                          $OperationMode  eq "Cool" ? 4 :
                          $OperationMode  eq "Dependent" ? 16 :
                          $OperationMode  eq "Ventilation" ? 32 :
                          $OperationMode  eq "Dry" ? 64 :
                          $OperationMode  eq "Auto(Heat)" ? 256 :
                          $OperationMode  eq "Auto(Cool)" ? 512 :
                          1
                          );
my $VentilationMode     = (
                          $VentilationMode eq "Heat Exchange" ? 2 :
                          $VentilationMode eq "Bypass" ? 4 :
                          1
                          );
my $VentilationAmount   = (
                          $VentilationAmount eq "Low(normal)" ? 2 :
                          $VentilationAmount eq "High(normal)" ? 4 :
                          $VentilationAmount eq "Automatic(freshup)" ? 8 :
                          $VentilationAmount eq "Low(freshup)" ? 16 :
                          $VentilationAmount eq "v" ? 32 :
                          1
                          );
my $SetPoint            = unpack ("i*",pack "f", $SetPoint);
my $FanSpeed            = (
                          $FanSpeed eq "Middle" ? 1 :
                          $FanSpeed eq "High" ? 2 :
                          0
                          );
my $FanDirection        = (
                          $FanDirection eq "01" ? 1 :
                          $FanDirection eq "02" ? 2 :
                          $FanDirection eq "03" ? 3 :
                          $FanDirection eq "04" ? 4 :
                          $FanDirection eq "Swing" ? 7 :
                          0
                          );
my $FilterSignReset     = (
                          $FilterSignReset eq "Off" ? 0 :
                          1
                          );

qx(node /opt/fhem/FHEM/daikin/dk_setting_70006.js $host $port $ACAddress $OnOff $OperationMode $VentilationMode $VentilationAmount $SetPoint $FanSpeed $FanDirection $FilterSignReset);
&dk_getting_70004($device);
}

dummy,at,notify,DOIF

define dk_AC PRESENCE lan-ping 192.168.x.xx 900 900
attr dk_AC icon weather_winter
attr dk_AC room 9.1.010:Adapter
attr dk_AC stateFormat host:port state
setreading dk_AC host 192.168.x.xx
setreading dk_AC port xxxx

define dk_12190_1 dummy
attr dk_12190_1 group 05.0 Lüftung / AC
attr dk_12190_1 room 1.2.190:Pneumatik
attr dk_12190_1 setList power:On,Off operation-mode:Fan,Heat,Cool,Dependent,Ventilation,Dry,Auto(Heat),Auto(Cool) ventilation-mode:Automatic,HeatExchange,Bypass ventilation-amount:Automatic(normal),Low(normal),High(normal),Automatic(freshup),Low(freshup),High(freshup) desired-temp:slider,16,1,30 fan-speed:Low,Middle,High fan-direction:00,01,02,03,04,Swing FilterSign:On,Off
attr dk_12190_1 stateFormat power
attr dk_12190_1 webCmd power:operation-mode:ventilation-mode:ventilation-amount:desired-temp:fan-speed:fan-direction:FilterSign
setreading dk_12190_1 ACAddress 18

define a_dk_12190 at +*00:03 {dk_getting_70004("dk_12190_1")}
attr a_dk_12190 disable 0
attr a_dk_12190 room 1.2.190:Pneumatik

define ntfy_dk_12190 notify dk_12190_. {fhem("setreading $NAME $EVENT");;;;fhem("attr a_dk_12190 disable 1")}
attr ntfy_dk_12190 room 1.2.190:Pneumatik

define di_dk_12190 DOIF ([dk_12190_1])({dk_setting_70006("dk_12190_1");;;;fhem("attr a_dk_12190 disable 0")})
attr di_dk_12190 do always
attr di_dk_12190 room 1.2.190:Pneumatik
attr di_dk_12190 wait 5


Vielleicht kann es ja noch jemand gebrauchen.

Hier muss ich mir nun erst mal noch eine Regelung bauen die mit den Fenstern und Heizungen zusammen läuft.

Grüße

Igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

MBPower

Hallo zusammen

Leider werde ich nicht so ganz schlau aus diesem Thread.
Eigentlich suche ich nur nach einer Lösung die Klimaanlage (Daikin mit WLAN-Modul) mit einen Befehl oder dummy per FHEM aus- und einzuschalten.
Ich habe die IP-Adresse und kann auch per Android App die Klimaanlage schalten.

Hat jemand einen Tipp für mich, wie ich automatisch um XX Uhr die Klimaanlage per FHEM und WLAN-Modul ausschalten kann?

Kurz zur Erklärung meines Vorhabens.
Ich möchte die Klimaanlage in der Zeit von 12-15Uhr und 21-7Uhr mit aktivieren. Diese Zeiten kann ich ohne Probleme per DECT200 und FHEM steuern, aber wenn z.B. gegen 15Uhr die Klimaanlage noch angeschaltet war und ich der die 230V abschalte und um 21Uhr wieder die 230V anschalte, dann läuft auch die Klimaanlage wieder und dann im dümmsten Fall bis 7Uhr morgens, obwohl diese überhaupt nicht benötigt, wird.

Somit gibt es für mich nur zwei Lösungen.

1. Vor dem abschalten mit DECT200 die Klimaanlage per FHEM Script über das WLAN Modul ausschalten oder alternativ nach dem aktivieren des DECT die Klimaanlage per FHEM Script über das WLAN Modul ausschalten.

2. Die Klimaanlage im Standard bei anschalten der 230V immer auf AUS stellen, aber dies ist glaube ich nicht möglich, zumindest kenne ich keinen Möglichkeit.

Für jeden Tipp wäre ich sehr dankbar.

Ich habe vor der der Klimaanlage eine Fritzbox DECT200 und diese steuer ich schon per FHEM, nur wenn jemand die Klimaanlage a

AitschPi

Wenn man schon das WLAN-Modul hat, dann sollte man auch auf Schaltsteckdosen verzichten können. Das ist auf Dauer für die Anlage suboptimal. (Ich gehe von einer Splitanlage aus, die von Daikin mindestens 1k€ gekostet hat. Da steht im Installationshandbuch auch was von einem festen Stromanschluss und nichts von einer Steckdose...)


Gesendet von iPhone mit Tapatalk - Tippfehler sind gratis.
Echte Männer essen keinen Honig, sie kauen Bienen.

Wernieman

Du könntest mit "Sniffen" probieren rauszukriegen, welche HTTP-Befehle Deine SmartPhone Aplikation wverwendet, um die Anlage zu Steuern. Alternativ .... wenn es ein Webintrface hat, sich den html-Code der Seite angucken, vor allem im Bereich der Steuerung ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

igami

Hallo MBPower,

im ersten Post ist ein PDF angehängt, dies hatten wir als Dokumentation zur HTTP Schnittstelle, wäre gut, wenn du sowas auch von deiner WLAN Schnittstelle bekommst.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

MBPower

@AitschPi
Ideal ist das mit dem 230V abschalten sicher nicht, aber eine Zerstörung der Klimaanlage würde ich durch 2x an/aus am Tag auf Dauer so gut wie ausschliessen.
Natürlich steht in der Anleitung nichts von Steckdose, weil es natürlich nicht üblich ist und in 99% der Fälle keinen Sinn macht.

@Wernieman
Sniffen wäre eine gute Möglichkeit. Bisher habe ich das noch nicht versucht und damit muss ich mich erst einmal beschäftigen.
Ein Webinterface hat das WLAN-Modul leider nicht.

Warum es bei den Klimaanlage keine Funktion wie bei den TV Geräte gibt, damit man einiges vorbelegen und sperren kann, muss ich nicht verstehen.
Ich möchte nur nicht, dass die meine Klimaanlagen in meinem Ferienhaus 24h von den Gästen laufen gelassen werden.

AitschPi

@MBPower
Unmittelbar dadurch kaputt gegen wahrscheinlich nicht. Nur wird so auf einmal und ohne Vhance auf Nachlaufen, Druckabbau,... der Saft abgeklemmt und dann später per Stromstoß alles neu gestartet. Dabei wird dann auch der gesamte Selbsttest durchgeführt. An sich kein Problem - aber das jeden Tag mehrfach?
Ketzerisch verglichen mit einem Auto wenn das Auto im Rollen ausschaltet - der Motor bremst dann ja sehr gut. Und täglich 2x aus der Garage holen, Motor anlassen- nur als Selbsttest. Das alles macht das Auto nicht direkt kaputt, senkt aber die Lebenserwartung. Oder die Glühbirne, immer mal angeknipst und gucken, ob sie noch geht... Und auch wenn Beispiele hinken, etwas steckt immer drin. Zumal Du ja eigentlich das perfekte Steuerungsmodul mit Anbindung hast, das auch nicht wirklich billig ist.


Gesendet von iPhone mit Tapatalk - Tippfehler sind gratis.
Echte Männer essen keinen Honig, sie kauen Bienen.

MBPower

@AitschPi
Da hast Du sicherlich Recht und ich würde das auch gerne umgehen, aber leider noch keine ideale Lösung gefunden.
Als Übergangslösung sende ich vor dem ausschalten mit DECT200 über den Timer des WLAN-Moduls jeweils einen Aus-Befehl.
Das Sniffen werde ich in den nächsten Wochen noch prüfen und vielleicht kann ich damit eine Lösung finden.
Ich werde auch Daikin einmal anschreiben, vielleicht bekommt man direkt vom Herstellern den weitere Infos.

ChrisW

Ich habe auch eine Klimaanlage mir WLAN Modul .. so einfach lässt es sich wohl nicht in FHEM steuern :(

Eine andere aber nicht so günstige Lösung ist : itach Sender damit kann man die Befehle der Fernbedienung Programmieren.
Raspberry PI3 mit allem möglichen.

pejonp

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

MBPower

Die Lösung von https://github.com/ael-code/daikin-control funktioniert super, aber leider habe ich noch keinen Weg gefunden diese aus FHEM zu steuern.
Immerhin kann ich zusätzlich zu der Android App, die Klimaanlage auch schon einmal mit dem dem Script von github.com steuern.

Wenn jemand eine Lösung aus FHEM finden sollte, dann wäre ich für jeden Tipp sehr dankbar.

pejonp

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

MBPower

Danke Dir, aber ich bin leider in diesem Fall zu doof überhaupt per http Link zu steuern.
Den Daikin-Control Webinterface aus meinem Link habe ich auf einem Raspberry in dem LAN installiert und die Steuerung funktioniert, aber eine direkten Link zum z.B. an- oder ausschalten kann ich leider nicht auslesen. Beim fahren über die Icons gibt es kein Link, denn es basiert auf java.

pejonp

Zitat von: MBPower am 20 Oktober 2015, 20:23:15
... überhaupt per http Link zu steuern.
Den Daikin-Control Webinterface aus meinem Link habe ich auf einem Raspberry in dem LAN installiert und die Steuerung funktioniert, ..
..
Hallo MBPower,

ich kenne diese Anlage leider überhaupt nicht. Ich kann nur raten.
Was passiert wenn du im Browser dieses eingibst:

http://ip-daikin:port//common/basic_info

Kommt dort eine Antwort zurück ? Werden Daten angezeigt ? Hat die Daikin ein Web-Interface, auf das man zugreifen kann ?

pejonp

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

MBPower

Vielen Dank!
Du hast mir einen super Tipp gegeben und es funktioniert ohne Port.

Hier die Lösung:

Einschalten
http://ip-daikin/aircon/set_control_info?pow=1&mode=1&adv=&stemp=26&shum=0&f_rate=B&f_dir=3

Ausschalten
http://ip-daikin/aircon/set_control_info?pow=0&mode=1&adv=&stemp=26&shum=0&f_rate=B&f_dir=3

So wie ich das jetzt verstanden habe, müssen diese Parameter mindestens mitgegeben werden.
Meine Klimaanlage ist leider über 1000km weit weg und ich kann das nur bedingt per VPN-Verbindung testen. Das Ein- und Ausschalten funktioniert zumindest.
Über weitere Erfahrungen und Hinweise wäre ich sehr dankbar.

Damit kann ich dann auch die Daikin aus FHEM ansprechen.

pejonp

Zitat von: MBPower am 20 Oktober 2015, 23:36:23
....
Über weitere Erfahrungen und Hinweise wäre ich sehr dankbar.
Damit kann ich dann auch die Daikin aus FHEM ansprechen.

Hallo MBpower,

ich habe mir in FHEM einen Schalter erstellt über den von der Weboberfläche (anderes habe ich noch nicht getestet) geschaltet werden kann. Bei mir ist es ein ZWave-Steckdose meiner Sonnenbatterie. Den FHEM-Server erreiche ich über VPN(Fritz-Box) aus dem Netz.

# Def. Dummy-Schalter
define SolarSteck1 dummy
attr SolarSteck1 room Haus
attr SolarSteck1 verbose 5
attr SolarSteck1 webCmd on:off

# def. notify und HTTP-Schaltbefehl
define ZWave1an notify SolarSteck1:on { GetHttpFile("ip-daikin", "/set_control_info?pow=1&mode=1&adv=&stemp=26&shum=0&f_rate=B&f_dir=3")}
define ZWave1aus notify SolarSteck1:off { GetHttpFile("ip-daikin", "/set_control_info?pow=0&mode=1&adv=&stemp=26&shum=0&f_rate=B&f_dir=3")}

Wenn du die Klimaanlage zeitlich steuern möchtes, kannst du es vielleicht so machen.
Meine FS20-Steckdosen kann ich so schalten und zusätzlich ist noch ein Zeitplan hinterlegt, da werden bei uns zur Weihnachtszeit die Lichterketten am Haus per FS20-Steckdose geschaltet.

# Definition FS20 Steckdose
define Steckdose1 FS20 cf4b 00
attr Steckdose1 userattr room_map structexclude
attr Steckdose1 IODev nanoCUL
attr Steckdose1 eventMap on:an off:aus
attr Steckdose1 room Haus
attr Steckdose1 verbose 1
define FileLog_Steckdose1 FileLog ./log/Steckdose1-%Y.log Steckdose1
attr FileLog_Steckdose1 logtype text
attr FileLog_Steckdose1 room Log

#notify definieren das über ein extra Programm per FS20 PCS (elv) die Steckdosen schaltet, ich hatte dort noch keinen nanoCul, a-cul usw.

define FS20PCS1 notify Steckdose1 {if ("%" ne "aus") {system "/opt/fs20pcs/fs20pcs -h 0xcf4b -a 0x00 -s on&";;}else{system "/opt/fs20pcs/fs20pcs -h 0xcf4b -a 0x00 -s off&";;}Log 1, "notify wird ausgeführt mit @ %";;}

# Zeitsteuerung der Beleuchtung  über HC Heizung
define Licht.STK1.Morgens.An Heating_Control Steckdose1 Mo-Fr|5:50|up Sa,So|09:07|up set Steckdose1 on
define Licht.STK2.Morgens.An Heating_Control Steckdose2 Mo-Fr|5:50|up Sa,So|08:00|up set Steckdose2 on
define Licht.STK3.Morgens.An Heating_Control Steckdose3 Mo-Fr|5:50|up Sa,So|07:01|up set Steckdose3 on
             
define Licht.STK1.Morgens.Aus Heating_Control Steckdose1 Mo-Fr|7:50|up Sa,So|11:07|up set Steckdose1 off
define Licht.STK2.Morgens.Aus Heating_Control Steckdose2 Mo-Fr|7:50|up Sa,So|10:07|up set Steckdose2 off
define Licht.STK3.Morgens.Aus Heating_Control Steckdose3 Mo-Fr|7:50|up Sa,So|09:07|up set Steckdose3 off

So das war es. Vielleicht konnt ich dir etwas helfen.

Tschüß pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

MBPower


smoudo

Hallo, ich habe mir wie oben beschrieben einen dummy gebaut und spreche damit 2 notifys an.
Im Webinterface reagiert die Daikin auch super darauf. allerdings über fhem nicht! beide sind im selben netz.
Auszug aus meiner fhem.cfg
define Klimaanlage dummy
attr Klimaanlage devStateIcon off:vent_ventilation on:vent_ventilation_level_3
attr Klimaanlage icon temp_frost
attr Klimaanlage room Haus,Treppenhaus
attr Klimaanlage webCmd on:off

define Klimaanlage_an notify Klimaanlage:on { GetHttpFile("http://192.168.1.203", "/aircon/set_control_info?pow=1&mode=3&adv=&stemp=22&shum=0&f_rate=A&f_dir=3")}

define Klimaanlage_aus notify Klimaanlage:off { GetHttpFile("http://192.168.1.203", "/aircon/set_control_info?pow=0&mode=3&adv=&stemp=22&shum=0&f_rate=A&f_dir=3")}


grüße

Matze

pejonp

Zitat von: smoudo am 21 Juli 2016, 22:01:09
.............
define Klimaanlage_an notify Klimaanlage:on { GetHttpFile("http://192.168.1.203", "/aircon/set_control_info?pow=1&mode=3&adv=&stemp=22&shum=0&f_rate=A&f_dir=3")}

define Klimaanlage_aus notify Klimaanlage:off { GetHttpFile("http://192.168.1.203", "/aircon/set_control_info?pow=0&mode=3&adv=&stemp=22&shum=0&f_rate=A&f_dir=3")}

Hallo Matze,

lass mal das http:// weg.
Ansonsten kannst du auch verbose auf 5 setzten um zu sehen was gesendet wird.

pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

smoudo

Manchmal ist die Lösung einfach! Danke Dir dafür!!

Jemand eine Idee wie man noch eine temperaturauswahl realisieren kann?

Grüße

Matze

pejonp

#24
Zitat von: smoudo am 21 Juli 2016, 23:02:49
...
Jemand eine Idee wie man noch eine temperaturauswahl realisieren kann?
...
Hallo smoudo,

gibt es da mehr Infos oder soll ich meine Glaskugel befragen. ;-}  8)
Möchtes die die Temp der Klimaanlage steuern oder von einem Tempsensor (Hideki,TFA,...) die Werte empfangen ?

Was liefert sie den beim Aufruf: http://ip/aircon/get_control_info für Daten zurück.

pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

smoudo

Anscheinend sind diese Kugeln ständig defekt! ;)

Zurück kommt lediglich ein "ret=PARAM NG,adv="
Wenn man den Befehl doppelt sendet oder ein ok

Die Temperatur sollwerte übergeben wir ja im http Befehl
Mit stemp=
Den Betriebsmodus mit mode=
Es würde ein Auswahlfenster für die Temperatur reichen was dann in den
HTML Befehl gesetzt wird. Den Modus könnte man auf Automatik lassen
dann geht das Teil abhängig von der Raumtemperatur in kühlen, heizen, aus.
Dummerweise bekomm ich keinen Rückgabewert der Raumtemperatur! Ist aber
zu vernachlässigen!

Grüße

Matze

gamauf


smoudo