NEWS
Daikin Altherma 3
-
@armilar Vielen Dank für die Info Ist zwar etwas spät die Antwort aber besser als nie
Wie du geantwortet hast war bereits alles eingebaut und in Betrieb
Und wegen Stromberbrauch: Ich bin kein Freund von Shelly. Ich hab es lieber wenn es Per Kabel und ohne Cloud ist.
Ich hab zuhause alles per KNX und Modus angebunden. Auch der gesamte Energiefluss wird überwacht. Vielleicht etwas übertrieben aber wenn man sonst keine Hobbys hat -
Vielleich hilft es ja sonst noch jemanden.
Blockly (liest Werte aus daikin.0. und schreibt diese strukturiert in 0_userdata):
https://raw.githubusercontent.com/Armilar/ioBroker-Scripte/main/Blockly/Daikin Altherma 3 Consumtion Data 2 0_userdata.xml -
@armilar Ich wollte mir dann doch mal den Adapter angucken. Nur leider wird die Instanz zwar komplett grün und in den den Objekten steht bei "connection" auch "True" aber das ward dann leider auch schon. Ich bekomme überhaupt keine Werte angezeigt.
In den einstellungen vom Adapter selbst steht "Status: 1 Geräte im verbundenen Cloud-Konto gefunden, 1 Geräte sind online"
Ich hab zumindest den Adapter schon mal neu gestartet. Leider ohne erfolg. Du hast nicht zufällig eine Idee?
-
Installiere den mal von Github... Schätze sonst kommst du nicht an eine lauffähige Version mit nodeJS v18 ran
EDIT: Sollte dann sehr viele Werte geben
und viele mehr...
Lässt dich auch steuern über die Datenpunkte (An/Aus oder setPoints, etc.)
-
@armilar Danke das hat schon mal funktioniert.
Bei Blockley bin ich grade noch etwas Unsicher ob das wirklich funktioniert. Wenn ich das Skript neu starte komm da extrem lange Fehlermeldung und es werden auch keine Daten in den Ordner geschrieben. Den Namen von dem Ordner bzw. Pfad hab ich angepasst.
Wird das Sprit nur zu bestimmten Zeiten oder ausgeführt?
-
Immer wenn sich Werte ändern (ist ein Trigger).
Da müssen im Blockly Werte (Pfade) angepasst werden. Deine UUID wird sicherlich anders lauten und je nach Einstellung der Altherma wird sie andere Einträge oben in der Liste benötigen... Sonst sende mal kurz die Objekte mit geöffnenten Consumtion Data
Bei mir so:
und etwas tiefer:
EDIT:
Das wäre im Blockly dieser Bereich: -
Wenn ich das Richtig sehe sollte das so passen, oder hab ich was übersehen?
-
sieht gut aus... Welche Fehler kommen denn?
Da die Funktion in einem Trigger arbeitet, müsstet du bis zur nächsten Übermittlung warten oder den
lastUpdateReceived kurz ändern...
-
@armilar Eigentlich sollte der getigert sein.
Ich hab jetzt das Skript mal neu gestartet dann kommt das alles:
15.10.2023, 16:43:18.805 [silly]: admin.0 (1713) Objects user redis pmessage */cfg.o.script.js.common.Heizung.Heizung_1:{"common":{"name":"Heizung 1","expert":true,"engineType":"Blockly","engine":"system.adapter.javascript.0","source":"var ID, Init, Name, Einheit, Debug, Debug2, Divider, Adapter_Instance, Onnecta_UUID, Daikin_Part, Stunden, Wochentage, Monate, i, Daikin_Device, DaikinDeviceDailyEnergy, Summe, j, Aktueller_Wert, idDP, DaikinDeviceWeeklyEnergy, DaikinDeviceMonthlyEnergy;\n\n// Datenpunkt Typ Zahl erzeugen\nasync function newNumberDP(ID, Init, Name, Einheit) {\n createState(ID, Init, {\n type: 'number',\n name: Name,\n unit: Einheit,\n });\n}\n\n// Datenpunkt Typ Zeichenkette erzeugen\nasync function newStringDP(ID, Init, Name) {\n createState(ID, Init, {type: 'string', name: Name});\n}\n\n// Datenpunkt Typ Logikwert erzeugen\nasync function newBoolDP(ID, Name) {\n createState(ID, false, {type: 'boolean', name: Name});\n}\n\n// Beschreibe diese Funktion …\nasync function kw_ermitteln() {\n var date = new Date();\r\n var currentThursday = new Date(date.getTime() +(3-((date.getDay()+6) % 7)) * 86400000);\r\n var yearOfThursday = currentThursday.getFullYear();\r\n var firstThursday = new Date(new Date(yearOfThursday,0,4).getTime() +(3-((new Date(yearOfThursday,0,4).getDay()+6) % 7)) * 86400000);\r\n var weekNumber = Math.floor(1 + 0.5 + (currentThursday.getTime() - firstThursday.getTime()) / 86400000/7);\r\n return (weekNumber);\n}\n\n\nDebug = false;\nDebug2 = false;\nDivider = '========================================================';\nAdapter_Instance = 'daikin-cloud.0';\n// aus den Objektdaten anpassen!!!\nOnnecta_UUID = 'ed71e66e-f3ef-43b1-b3df-d0f00ad1c304';\n// ggfs. anpassen, wenn andere Bezeichner\nDaikin_Part = ['domesticHotWaterTank', 'climateControlMainZone'];\n// Onnecta Stunden (für d-raw)\nStunden = ['00:00 - 02:00', '02:00 - 04:00', '04:00 - 06:00', '06:00 - 08:00', '08:00 - 10:00', '10:00 - 12:00', '12:00 - 14:00', '14:00 - 16:00', '16:00 - 18:00', '18:00 - 20:00', '20:00 - 22:00', '22:00 - 00:00'];\n// Onnecta Wochentage (für w-raw)\nWochentage = ['01-Monday', '02-Tuesday', '03-Wednesday', '04-Thursday', '05-Friday', '06-Saturday', '07-Sunday'];\n// Onnecta Monate (für m-raw)\nMonate = ['01-January', '02-February', '03-March', '04-April', '05-May', '06-June', '07-July', '08-August', '09-September', '10-October', '11-November', '12-December'];\n// Triggern, wenn der Adapter neue Daten erhält\non({ id: [].concat([Adapter_Instance,Onnecta_UUID,'.lastUpdateReceived'].join('')), change: 'ne' }, async (obj) => {\n let value = obj.state.val;\n let oldValue = obj.oldState.val;\n for (var i_index in Daikin_Part) {\n i = Daikin_Part[i_index];\n // ioBroker-Device zusammensetzen\n Daikin_Device = [Adapter_Instance,Onnecta_UUID,'.',i,'.consumptionData.electrical.heating.'].join('');\n if (Debug) {\n console.log((['============= Device: ',i,' ============='].join('')));\n }\n // Einlesen der tagesaktuellen Verbräuche\n // Datenpunkt Inhalt\n if (Debug2) {\n console.log(getState((String(Daikin_Device) + 'd-raw')).val);\n }\n DaikinDeviceDailyEnergy = (function () { try { return JSON.parse(getState((String(Daikin_Device) + 'd-raw')).val); } catch (e) { return {}; }})();\n if (Debug2) {\n console.log(Divider);\n }\n if (Debug) {\n console.log(('--- tagesaktuelle Verbrauchs-Werte (heute) --- ' + String(formatDate(new Date(), 'DD.MM.YYYY'))));\n }\n // 13 - 24 ist der aktuelle Tag (heute)\n // Es werden immer 2 Stunden geklammert\n Summe = 0;\n for (j = 13; j <= 24; j++) {\n Aktueller_Wert = DaikinDeviceDailyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Today.',Stunden[((j - 12) - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Stunden[((j - 12) - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Stunden[((j - 12) - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.Today'].join('');\n await newNumberDP(idDP, Summe, 'Total Today', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (heute): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n if (Debug) {\n console.log(('--- Verbrauchs-Werte (gestern) --- ' + String(formatDate(getDateObject(/* time calculation */ ((dateTime) => { const ts = (typeof dateTime === 'object' ? dateTime.getTime() : dateTime); return ts - ((1) * 86400000); })((new Date().getTime()))), \"DD.MM.YYYY\"))));\n }\n // 1 - 12 ist der Vortag (gestern)\n // Es werden immer 2 Stunden geklammert\n Summe = 0;\n for (j = 1; j <= 12; j++) {\n Aktueller_Wert = DaikinDeviceDailyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Yesterday.',Stunden[(j - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Stunden[(j - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Stunden[(j - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.Yesterday'].join('');\n await newNumberDP(idDP, Summe, 'Total Yesterday', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (gestern): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n // Einlesen der wöchentlichen Verbräuche\n // Datenpunkt Inhalt\n if (Debug2) {\n console.log(getState((String(Daikin_Device) + 'w-raw')).val);\n }\n DaikinDeviceWeeklyEnergy = (function () { try { return JSON.parse(getState((String(Daikin_Device) + 'w-raw')).val); } catch (e) { return {}; }})();\n if (Debug2) {\n console.log(Divider);\n }\n if (Debug) {\n console.log(('--- wöchentliche Verbrauchs-Werte (aktuelle Woche) --- ' + String('KW: ' + String(await kw_ermitteln()))));\n }\n // 8-14 sind die Tage der aktuellen Woche\n Summe = 0;\n for (j = 8; j <= 14; j++) {\n Aktueller_Wert = DaikinDeviceWeeklyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.ThisWeek.',Wochentage[((j - 7) - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Wochentage[((j - 7) - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Wochentage[((j - 7) - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.ThisWeek'].join('');\n await newNumberDP(idDP, Summe, 'Total This Week', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (aktuelle Woche): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n // 1-7 sind die Tage der Vorwoche\n if (Debug) {\n console.log(('--- wöchentliche Verbrauchs-Werte (letzte Woche) --- ' + String('KW: ' + String(await kw_ermitteln() - 1))));\n }\n Summe = 0;\n for (j = 1; j <= 7; j++) {\n Aktueller_Wert = DaikinDeviceWeeklyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.LastWeek.',Wochentage[(j - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Wochentage[(j - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Wochentage[(j - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.LastWeek'].join('');\n await newNumberDP(idDP, Summe, 'Total Last Week', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (Vorwoche): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n // Einlesen der monatlichen Verbräuche\n if (Debug) {\n if (Debug2) {\n console.log(getState((String(Daikin_Device) + 'm-raw')).val);\n }\n }\n DaikinDeviceMonthlyEnergy = (function () { try { return JSON.parse(getState((String(Daikin_Device) + 'm-raw')).val); } catch (e) { return {}; }})();\n if (Debug2) {\n console.log(Divider);\n }\n if (Debug) {\n console.log(('--- monatliche Verbrauchs-Werte (aktuelles Jahr) --- ' + String((new Date().getFullYear()))));\n }\n // 13-24 sind die Monate des aktuellen Jahres\n Summe = 0;\n for (j = 13; j <= 24; j++) {\n Aktueller_Wert = DaikinDeviceMonthlyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.ThisYear.',Monate[((j - 12) - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Monate[((j - 12) - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Monate[((j - 12) - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.ThisYear'].join('');\n await newNumberDP(idDP, Summe, 'Total This Year', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (aktuelles Jahr): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n if (Debug) {\n console.log(('--- monatliche Verbrauchs-Werte (Vorjahr) --- ' + String((new Date().getFullYear()) - 1)));\n }\n // 1-12 sind die Monate des Vorjahres\n Summe = 0;\n for (j = 1; j <= 12; j++) {\n Aktueller_Wert = DaikinDeviceMonthlyEnergy[(j - 1)];\n if (Aktueller_Wert == null) {\n Aktueller_Wert = 0;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.LastYear.',Monate[(j - 1)]].join('');\n await newNumberDP(idDP, Aktueller_Wert, Monate[(j - 1)], 'kWh');\n setStateDelayed(idDP, Aktueller_Wert, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log(([Monate[(j - 1)],' - ',Aktueller_Wert,' kWh'].join('')));\n }\n Summe = Summe + Aktueller_Wert;\n }\n idDP = ['0_userdata.0.DaikinEnergyConsumption.',Onnecta_UUID,'.',i,'.Total.LastYear'].join('');\n await newNumberDP(idDP, Summe, 'Total Last Year', 'kWh');\n setStateDelayed(idDP, Summe, false, parseInt(((0) || '').toString(), 10), false);\n if (Debug) {\n console.log((['Summe Verbräuche (Vorjahr): ',Summe,' kWh'].join('')));\n }\n if (Debug2) {\n console.log(Divider);\n }\n }\n});\n\n//JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyOW8zWipGWWZMeDRqJTJDWi5ZUkdqSCUyMiUzRUlEJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyR19TbSU1RGNZJTNBSSUyQ0clN0NNZlZtSGslMkNGJTI ——Hier kommt eine Seitenlange Buchstabenfolge die die antwortmöglich vom Forum sprengt—— NDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJ=","debug":false,"verbose":false,"enabled":true},"type":"script","from":"system.adapter.admin.0","user":"system.user.admin","ts":1697380998708,"_id":"script.js.common.Heizung.Heizung_1","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 15.10.2023, 16:43:18.913 [info ]: javascript.0 (24526) Stop script script.js.common.Heizung.Heizung_1 15.10.2023, 16:43:18.934 [silly]: admin.0 (1713) States system redis pmessage io.log.system.adapter.admin.0/io.log.system.adapter.admin.0:{"severity":"info","ts":1697380998913,"message":"javascript.0 (24526) Stop script script.js.common.Heizung.Heizung_1","from":"javascript.0","_id":30841330} 15.10.2023, 16:43:18.978 [info ]: javascript.0 (24526) Start javascript script.js.common.Heizung.Heizung_1 15.10.2023, 16:43:19.005 [silly]: admin.0 (1713) States system redis pmessage io.log.system.adapter.admin.0/io.log.system.adapter.admin.0:{"severity":"info","ts":1697380998978,"message":"javascript.0 (24526) Start javascript script.js.common.Heizung.Heizung_1","from":"javascript.0","_id":30841331} 15.10.2023, 16:43:19.000 [info ]: javascript.0 (24526) script.js.common.Heizung.Heizung_1: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 15.10.2023, 16:43:19.009 [silly]: admin.0 (1713) States system redis pmessage io.log.system.adapter.admin.0/io.log.system.adapter.admin.0:{"severity":"info","ts":1697380999000,"message":"javascript.0 (24526) script.js.common.Heizung.Heizung_1: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions","from":"javascript.0","_id":30841332}
-
hast du da irgendeine interessante Protokollierung gesetzt?
Ich sehe nur [silly] und [info] --> kein [warn] oder [error]
Ist mir ehrlich gesagt sehr suspekt, warum dein JS-Adapter so redselig ist, da ja debug und verbose ausgeschaltet sind...
-
@armilar nein hab ich nicht.
-
-
@armilar Wieso sollte bei mir auch irrgendwas einfach mal funktionieren....
-
Wenn ich das aber richtig sehe, dann sind das eher Protokollierungen vom admin-Adapter die da quer schießen...
15.10.2023, 16:43:18.913 [info ]: javascript.0 (24526) Stop script script.js.common.Heizung.Heizung_1 15.10.2023, 16:43:18.978 [info ]: javascript.0 (24526) Start javascript script.js.common.Heizung.Heizung_1 15.10.2023, 16:43:19.000 [info ]: javascript.0 (24526) script.js.common.Heizung.Heizung_1: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
Wenn ich das mal auf den JS-Adapter reduziere, dann ist alles okay
Was hast du denn für eine Admin-Adapter Version?
-
v6.10.1
Eine aktuellere bekomme ich auch nicht angezeitgt.js-controller ist 5.0.12
node.js 18.17.1Ich weiß nicht ob das wichtig ist, aber bevor du jedesmal fragen mußt. Ich bin ja schon extrem froh über deine Hilfe. Ganz großes DANKE dafür.
-
Kann es sein, dass bei dir etwas anderes steht als "info"
EDIT:
sehe schon. Dein System ist aktuell...kleiner Tipp (bei dir hängt nodeJS fest):
https://forum.iobroker.net/topic/69067/neuer-befehl-iob-nodejs-update?page=1 -
Ja, da steht Silly. Ich weiß aber 1. nicht wieso und 2. auch nciht wie ich das wieder ändern kann.
-
der Stift hinter dem Info...
"info" auswählen und dein Log läuft nicht mehr über
naja die Instanz durchstarten kann auch nicht schaden...
-
Ahhh ist wieder auf info geändert.
Wegen dem NodeJS werd ich mal den anderen Threat durchgucken. Und sonst ggf. in ein paar tagen ein neues Image vom IOB ziehen, da alles im Docker läuft.Aber mit dem eigentlich Prolem hat das alles nicht zun, oder?
-
nein, ich denke wenn du den Datenpunkt jetzt änderst werden auch keine Zeilen mehr auftauchen...
Die Frage die sich mir stellt ist, werden die Datenpunkte erstellt und wenn ja - was steht drin...
Da sollte so etwas entstehen unter 0_userdata: