NEWS
HUUM Saunasteuerung
- 
					
					
					
					
 ohne den Parameter "?targetTemperature=80" bzw. die url "api.huum.eu/action/home/start?targetTemperature=80" klappt es nicht - kann die übergabe der Temperatur als "Parameter" funktionieren? Danke 
- 
					
					
					
					
 @ckossendey der Hersteller hatte mir diesen Aufruf empfohlen: curl --user username:password https://api.huum.eu/action/home/start -d targetTemperature=70 -v
- 
					
					
					
					
 @ckossendey Das ist das curl Kommando , funktioniert das denn ? 
 Der Unterschied zu dem axios ist nur das eine, daß die Temperature beim Curl ohne Hochkomma ist
 Zeig mal den Log vrom Script
 Auch kann es sein, daß die Sauna kein JSON versteht. In dem Fall müßte dann data so aussehen (in Anlehnung an dem Curl Befehl) :let data = 'targetTemperature='+temperature;
- 
					
					
					
					
 cko@MacBook-Pro HUUM % node posthuum.js Error: Request failed with status code 401 at createError (/Users/cko/Desktop/HUUM/node_modules/axios/lib/core/createError.js:16:15) at settle (/Users/cko/Desktop/HUUM/node_modules/axios/lib/core/settle.js:17:12) at IncomingMessage.handleStreamEnd (/Users/cko/Desktop/HUUM/node_modules/axios/lib/adapters/http.js:260:11) at IncomingMessage.emit (node:events:381:22) at endReadableNT (node:internal/streams/readable:1307:12) at processTicksAndRejections (node:internal/process/task_queues:81:21) { config: { url: 'https://api.huum.eu/action/home/start', method: 'post', data: '{"auth":{"username":"user","password":"pass"},"params":{"targetTemperature":"50"}}', headers: { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=utf-8', 'User-Agent': 'axios/0.21.1', 'Content-Length': 103 }, transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, adapter: [Function: httpAdapter], xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus] }, request: <ref *1> ClientRequest { _events: [Object: null prototype] { abort: [Function (anonymous)], aborted: [Function (anonymous)], connect: [Function (anonymous)], error: [Function (anonymous)], socket: [Function (anonymous)], timeout: [Function (anonymous)], prefinish: [Function: requestOnPrefinish] }, _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: true, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, _contentLength: null, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: TLSSocket { _tlsOptions: [Object], _secureEstablished: true, _securePending: false, _newSessionPending: false, _controlReleased: true, secureConnecting: false, _SNICallback: null, servername: 'api.huum.eu', alpnProtocol: false, authorized: true, authorizationError: null, encrypted: true, _events: [Object: null prototype], _eventsCount: 10, connecting: false, _hadError: false, _parent: null, _host: 'api.huum.eu', _readableState: [ReadableState], _maxListeners: undefined, _writableState: [WritableState], allowHalfOpen: false, _sockname: null, _pendingData: null, _pendingEncoding: '', server: undefined, _server: null, ssl: [TLSWrap], _requestCert: true, _rejectUnauthorized: true, parser: null, _httpMessage: [Circular *1], [Symbol(res)]: [TLSWrap], [Symbol(verified)]: true, [Symbol(pendingSession)]: null, [Symbol(async_id_symbol)]: 3, [Symbol(kHandle)]: [TLSWrap], [Symbol(kSetNoDelay)]: false, [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: null, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(kCapture)]: false, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0, [Symbol(connect-options)]: [Object], [Symbol(RequestTimeout)]: undefined }, _header: 'POST /action/home/start HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'Content-Type: application/json;charset=utf-8\r\n' + 'User-Agent: axios/0.21.1\r\n' + 'Content-Length: 103\r\n' + 'Host: api.huum.eu\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: {}, agent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object], requests: {}, sockets: [Object], freeSockets: {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], [Symbol(kCapture)]: false }, socketPath: undefined, method: 'POST', maxHeaderSize: undefined, insecureHTTPParser: undefined, path: '/action/home/start', _ended: true, res: IncomingMessage { _readableState: [ReadableState], _events: [Object: null prototype], _eventsCount: 3, _maxListeners: undefined, socket: [TLSSocket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], aborted: false, upgrade: false, url: '', method: null, statusCode: 401, statusMessage: 'Unauthorized', client: [TLSSocket], _consuming: false, _dumped: false, req: [Circular *1], responseUrl: 'https://api.huum.eu/action/home/start', redirects: [], [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 16, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0, [Symbol(RequestTimeout)]: undefined }, aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'api.huum.eu', protocol: 'https:', _redirectable: Writable { _writableState: [WritableState], _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, _options: [Object], _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 103, _requestBodyBuffers: [], _onNativeResponse: [Function (anonymous)], _currentRequest: [Circular *1], _currentUrl: 'https://api.huum.eu/action/home/start', [Symbol(kCapture)]: false }, [Symbol(kCapture)]: false, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] { accept: [Array], 'content-type': [Array], 'user-agent': [Array], 'content-length': [Array], host: [Array] } }, response: { status: 401, statusText: 'Unauthorized', headers: { server: 'nginx', date: 'Mon, 12 Apr 2021 12:54:40 GMT', 'content-type': 'text/html; charset=UTF-8', 'transfer-encoding': 'chunked', connection: 'close', 'x-powered-by': 'PHP/7.4.15', 'access-control-allow-origin': '*', 'www-authenticate': 'Basic realm="HUUM api"' }, config: { url: 'https://api.huum.eu/action/home/start', method: 'post', data: '{"auth":{"username":"user","password":"pass"},"params":{"targetTemperature":"50"}}', headers: [Object], transformRequest: [Array], transformResponse: [Array], timeout: 0, adapter: [Function: httpAdapter], xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus] }, request: <ref *1> ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: true, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, _contentLength: null, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'POST /action/home/start HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'Content-Type: application/json;charset=utf-8\r\n' + 'User-Agent: axios/0.21.1\r\n' + 'Content-Length: 103\r\n' + 'Host: api.huum.eu\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: {}, agent: [Agent], socketPath: undefined, method: 'POST', maxHeaderSize: undefined, insecureHTTPParser: undefined, path: '/action/home/start', _ended: true, res: [IncomingMessage], aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'api.huum.eu', protocol: 'https:', _redirectable: [Writable], [Symbol(kCapture)]: false, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] }, data: 'Please enter username and password' }, isAxiosError: true, toJSON: [Function: toJSON] } cko@MacBook-Pro HUUM %
- 
					
					
					
					
 @ckossendey sagte in HUUM Saunasteuerung: statusCode: 401, 
 statusMessage: 'Unauthorized',stimmt denn Dein Passwort und Username ? 
- 
					
					
					
					
 ja, die stimmen mit dem curl befehl im terminal klappt es auch mit den gleichen zugangsdaten. Kann man auch per javascript den curl request machen? Danke! 
- 
					
					
					
					
 @ckossendey 
 Das ist jetzt die 1 zu1 Übersetzung des curl Befehls"use strict" let temperature temperature = 50; let data = 'targetTemperature='+ temperature; const axios = require('axios'); const urlstart = "https://api.huum.eu/action/home/start"; axios.post(urlstart,data, {auth: {username: 'user', password: 'pass' } }) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); });
- 
					
					
					
					
 
- 
					
					
					
					
 @ckossendey 
 Hi, ich habe auch die Huum Saunasteuerung könntest du mal bitte das ganze Script Posten? Und eventuell ein kleinwenig beschreiben, wie und wo ich das Einbinden muss.
 Gruß
 Bye08
- 
					
					
					
					
 @gargano sagte in HUUM Saunasteuerung: @ckossendey 
 Das ist jetzt die 1 zu1 Übersetzung des curl Befehls"use strict" let temperature temperature = 50; let data = 'targetTemperature='+ temperature; const axios = require('axios'); const urlstart = "https://api.huum.eu/action/home/start"; axios.post(urlstart,data, {auth: {username: 'user', password: 'pass' } }) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); });Hallo an alle. Ich biete um Hilfe 
 Ich habe auch die Huum Saunasteuerung.
 curl Befehls von Gargano, funktioniert bei mir auch, danke dafür.
 wie kann ich denn eine Variable Datenpunkt Temperatur in curl Befehls schreiben lassen statt feste Zahl temperature = 50
 damit ich über Vis Temperatur angeben kann.
- 
					
					
					
					
 Ich habe Versucht mit 
 let temperature
 temperature = '0_userdata.0.huum.TempSauna';
 bekomme aber Fehlermeldungjavascript.0 (9551) script.js.common.Sauna.Sauna_Start_plus_Temperatur_test: {'message':'Request failed with status code 400','name':'Error','stack':'Error: Request failed with status code 400\n at createError (/opt/iobroker/node_modules/iobroker.javascript/node_modules/axios/lib/core/createError.js:16:15)\n at settle (/opt/iobroker/node_modules/iobroker.javascript/node_modules/axios/lib/core/settle.js:17:12)\n at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/iobroker.javascript/node_modules/axios/lib/adapters/http.js:269:11)\n at IncomingMessage.emit (events.js:412:35)\n at IncomingMessage.emit (domain.js:470:12)\n at endReadableNT (internal/streams/readable.js:1317:12)\n at processTicksAndRejections (internal/process/task_queues.js:82:21)','config':{'url':'https://api.huum.eu/action/home/start','method':'post','data':'targetTemperature=0_userdata.0.huum.TempSauna','headers':{'Accept':'application/json, text/plain, */*','Content-Type':'application/x-www-form-urlencoded','User-Agent':'axios/0.21.4','Content-Length':45},'auth':{'username':UN','password':'PW'},'transformRequest':[null],'transformResponse':[null],'timeout':0,'xsrfCookieName':'XSRF-TOKEN','xsrfHeaderName':'X-XSRF-TOKEN','maxContentLength':-1,'maxBodyLength':-1,'transitional':{'silentJSONParsing':true,'forcedJSONParsing':true,'clarifyTimeoutError':false}}}
- 
					
					
					
					
 @kukoratsch temperature=getState('0_userdata.0.huum.TempSauna').val 
- 
					
					
					
					
 @gargano 
 danke jetzt funktioniert es englisch
- 
					
					
					
					
 @Gargano Was muss ich noch verändern das bei aktualisierte Temperatur das curl Befehls noch ein Mal verschickt wird ohne Taster Heizung an zu drücken. Danke. function script1() { "use strict" let temperature temperature=getState('0_userdata.0.huum.TempSauna').val let data = 'targetTemperature='+ temperature; const axios = require('axios'); const urlstart = "https://api.huum.eu/action/home/start"; axios.post(urlstart,data, {auth: {username: 'username', password: 'password'} }) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); } on({id: '0_userdata.0.huum.HeizungAn', change: "ne"}, script1); // Triggert auf Wert true
- 
					
					
					
					
 @kukoratsch sagte in HUUM Saunasteuerung: Was muss ich noch verändern das bei aktualisierte Temperatur das curl Befehls noch ein Mal verschickt wird ohne Taster Heizung an zu drücken. Das gleiche wie bei dem Event Taster : on({id:['0_userdata.0.huum.HeizungAn','0_userdata.0.huum.TempSauna'], change: "ne"}, script1); // Triggert auf Veränderung
- 
					
					
					
					
 @gargano so klappt es!! 
 Dankeschön
- 
					
					
					
					
 @kukoratsch hallo. Ich habe ebenfalls eine huum Steuerung. Wo und wie kann man den Adapter einbinden in IOB ? Danke schön mL im vorraus 
- 
					
					
					
					
 @kmidt 
 als erstes im Javascript Adapter unter zusätzlich NPM Module 'axios' eintragen
 Mit dem Script erstellst du Datenpunkte und fragst die ab.
 username und passwort ins Script eintragen"use strict" const axios = require('axios'); const url = 'https://api.huum.eu/action/home/status'; const mySchedule = '*/5 * * * *'; createState("0_userdata.0.huum.maxHeatingTime", false) createState("0_userdata.0.huum.statusCode", false) createState("0_userdata.0.huum.door", false) createState("0_userdata.0.huum.config", false) createState("0_userdata.0.huum.light", false) createState("0_userdata.0.huum.temperature", false) createState("0_userdata.0.huum.date", false) function getHuum () { axios.get(url, { auth: { username: 'Name', password: 'Pass' } }) .then (function(response) { console.log(response.data); // console.log(response.data.statusCode); // console.log(response.data.config); // console.log(response.data.light); // console.log(response.data.paymentEndDate); // console.log(response.data.temperature); setState("0_userdata.0.huum.maxHeatingTime", response.data.maxHeatingTime); setState("0_userdata.0.huum.statusCode", response.data.statusCode); setState("0_userdata.0.huum.door", response.data.door); setState("0_userdata.0.huum.config", response.data.config); setState("0_userdata.0.huum.light", response.data.light); setState("0_userdata.0.huum.temperature", response.data.temperature); setState("0_userdata.0.huum.date", response.headers.date) }) .catch(function(error) { console.log('Error '+error); }); }; schedule(mySchedule, function () { // wird alle 5 min. ausgelöst getHuum(); });mit dem zweiten Script kannst du Temperatur einstellen function script1() { "use strict" let temperature temperature=getState('0_userdata.0.huum.TempSauna').val let data = 'targetTemperature='+ temperature; const axios = require('axios'); const urlstart = "https://api.huum.eu/action/home/start"; axios.post(urlstart,data, {auth: {username: 'name', password: 'Pass'} }) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); } on({id:['0_userdata.0.huum.HeizungAn','0_userdata.0.huum.TempSauna'], change: "ne"}, script1); // Triggert auf Veränderungnoch zwei Datenpunkte erstellen 
 0_userdata.0.huum.HeizungAn und 0_userdata.0.huum.TempSauna
- 
					
					
					
					
 @kukoratsch : Ist es auch möglich den Dampf zu regeln falls er angeschlossen ist ? 
 lg Chris
- 
					
					
					
					
 @besterquester 
 Hier die Infos zur API
 https://github.com/horemansp/HUUM
 
		
	 
		
	