NEWS
HUUM Saunasteuerung
-
@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änderung
noch 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 -
@kukoratsch Danke dir für den Link. Den hatte ich schon. Aus dieser Beschreibung ist leider nicht ersichtlich ob die Feuchtigkeit humidity geändert werden kann wie die Temperatur.
lG Chris