Skip to content

ioBroker Allgemein

Integrationtsplattform für IoT
29.6k Themen 434.2k Beiträge

NEWS

  • No connection to database

    5
    0 Stimmen
    5 Beiträge
    113 Aufrufe
    T
    Danke euch für die Hinweise. Nein Redis verwende ich nicht. Aber tatsächlich habe ich nur auf der produktiven Instanz den VM gestoppt. Die IP ist wahrscheinlich noch reserviert und die neue VM verwendet die gleiche IP
  • Skripte Seite lässt sich nicht öffnen

    5
    1
    0 Stimmen
    5 Beiträge
    158 Aufrufe
    WG25W
    Top, Danke. Bin wieder bei 9.0.11, läuft wieder.
  • Ring Adapter aktualisiert keine Datenpunkte

    4
    1
    0 Stimmen
    4 Beiträge
    115 Aufrufe
    Eduard77E
    Tut mir leid, hab ich übersehen.
  • TRMNL Display Adapter

    2
    0 Stimmen
    2 Beiträge
    132 Aufrufe
    P
    Da muss ich hier auch mal nachfragen. Hat da einer schon was mit gemacht? Anscheinend kann man da mit ESP Home was machen, weiß aber nicht ob man Daten aus dem iobroker da anzeigen lassen kann. Aber sonst, ein schönes Epaper das TRMNL 7.5", ne bischen 3D Druck noch und fertig.
  • TibberLink Adapter

    631
    1 Stimmen
    631 Beiträge
    207k Aufrufe
    L
    Hi, falls jemand Interesse hat hier mal zwei Diagramme zum Nachbauen für flexcharts Jahr: // ============================================================================ // Tibber Jahresübersicht + eCharts VIS-Widget // ---------------------------------------------------------------------------- // - Erstellt 12 Datenpunkte für Kosten, Verbrauch, Preis // - Liest tibber Monthly JSON aus // - Ergänzt/überschreibt aktuellen Monat aus 0_userdata-Datenpunkten // - Erstellt eCharts-Konfiguration für VIS // - Tooltip mit 2 Nachkommastellen // ============================================================================ // =================== KONFIG =================== const jsonMonthlyDP = 'tibberlink.0.Homes.xxxxxxxxxxxxx.Consumption.jsonMonthly'; const rootDP = '0_userdata.0.Tibber.Jahreswerte'; const visDP = `${rootDP}.eCharts_Monatsbalken`; // Userdata aktuelle Monatswerte const dpPriceThisMonth = '0_userdata.0.Tibber.AvgUnitPriceThisMonth'; const dpConsThisMonth = '0_userdata.0.Tibber.SumConsumptionThisMonth'; const dpCostThisMonth = '0_userdata.0.Tibber.SumUnitCostThisMonth'; // =================== 12 Monats-Datenpunkte erzeugen =================== function createMonthDPs() { for (let m = 1; m <= 12; m++) { createState(`${rootDP}.Cost.M${m}`, 0, { name: `Kosten Monat ${m}`, type: 'number', unit: '€', role: 'value' }); createState(`${rootDP}.Cons.M${m}`, 0, { name: `Verbrauch Monat ${m}`, type: 'number', unit: 'kWh', role: 'value' }); createState(`${rootDP}.Price.M${m}`,0, { name: `Durchschnittspreis M${m}`, type: 'number', unit: '€/kWh', role: 'value' }); } createState(visDP, '', { name: 'eCharts Config Monatsbalken', type: 'string', role: 'text' }); } createMonthDPs(); // =================== Hauptfunktion =================== function updateYearValues() { try { const raw = getState(jsonMonthlyDP).val; if (!raw) return log("Keine Monatsdaten vorhanden", "warn"); const data = JSON.parse(raw); const currentYear = new Date().getFullYear(); const currentMonth = new Date().getMonth() + 1; let arrCost = Array(12).fill(0); let arrCons = Array(12).fill(0); let arrPrice = Array(12).fill(0); // ========== JSON durchlaufen ========== data.forEach(entry => { if (!entry.from) return; const d = new Date(entry.from); const year = d.getFullYear(); const month = d.getMonth() + 1; if (year !== currentYear) return; const cost = parseFloat(entry.totalCost) || 0; const cons = parseFloat(entry.consumption) || 0; const price = parseFloat(entry.unitPrice) || 0; arrCost[month - 1] = parseFloat(cost.toFixed(2)); arrCons[month - 1] = parseFloat(cons.toFixed(2)); arrPrice[month - 1] = parseFloat(price.toFixed(2)); setState(`${rootDP}.Cost.M${month}`, cost, true); setState(`${rootDP}.Cons.M${month}`, cons, true); setState(`${rootDP}.Price.M${month}`, price, true); }); // ============================================================= // **AKTUELLEN MONAT MIT USERDATA ÜBERSCHREIBEN** // ============================================================= const uPrice = parseFloat(getState(dpPriceThisMonth).val) || 0; const uCons = parseFloat(getState(dpConsThisMonth).val) || 0; const uCost = parseFloat(getState(dpCostThisMonth).val) || 0; arrCost[currentMonth - 1] = parseFloat(uCost.toFixed(2)); arrCons[currentMonth - 1] = parseFloat(uCons.toFixed(2)); arrPrice[currentMonth - 1] = parseFloat(uPrice.toFixed(2)); setState(`${rootDP}.Cost.M${currentMonth}`, uCost, true); setState(`${rootDP}.Cons.M${currentMonth}`, uCons, true); setState(`${rootDP}.Price.M${currentMonth}`, uPrice, true); // ===================================================================== // eCharts VIS-Konfiguration // ===================================================================== const option = { textStyle: { color: '#FFFFFF' }, tooltip: { trigger: 'axis', textStyle: { color: '#525252' }, formatter: function(params) { return params.map(p => { let unit = '€/kWh'; if (p.seriesName.includes('€')) unit = '€'; else if (p.seriesName.includes('kWh')) unit = 'kWh'; return `${p.seriesName}: ${p.value.toFixed(2)} ${unit}`; }).join('<br/>'); } }, legend: { textStyle: { color: '#FFFFFF' } }, xAxis: { type: 'category', data: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], axisLabel: { color: '#FFFFFF' } }, yAxis: [ { type: 'value', name: 'Kosten / Verbrauch', axisLabel: { color: '#FFFFFF' }, nameTextStyle: { color: '#FFFFFF' }, splitLine: { show: true, lineStyle: { color: '#525252' } }, axisLine: { lineStyle: { color: '#ccc' } } }, { type: 'value', name: 'Preis', position: 'right', axisLabel: { color: '#FFFFFF' }, nameTextStyle: { color: '#FFFFFF' }, splitLine: { show: true, lineStyle: { color: '#525252' } }, axisLine: { lineStyle: { color: '#ccc' } } } ], series: [ { name: 'Kosten (€)', type: 'bar', data: arrCost }, { name: 'Verbrauch (kWh)', type: 'bar', data: arrCons }, { name: 'Preis (€/kWh)', type: 'line', yAxisIndex: 1, data: arrPrice } ] }; setState(visDP, JSON.stringify(option), true); log("Jahreswerte + aktueller Monat + eCharts VIS aktualisiert", "info"); } catch (e) { log("Fehler JSON: " + e, "error"); } } // =================== TRIGGER =================== updateYearValues(); on({ id: jsonMonthlyDP, change: 'any' }, () => updateYearValues()); on({ id: [dpPriceThisMonth, dpConsThisMonth, dpCostThisMonth], change: 'ne' }, () => updateYearValues()); Monat: // ============================================================================ // Tibber Daily Übersicht für VIS eCharts // ---------------------------------------------------------------------------- // - ALLE Daten aus Tibbers jsonDaily // - Linke Achse: Kosten (€) + Verbrauch (kWh) // - Rechte Achse: Preis (€/kWh) // - Schriftfarbe X/Y weiß, Y-Hilfslinien #525252 // - Rechte Y-Achse Maximalwert auf 3 Nachkommastellen // - Preislinie nicht geglättet // ============================================================================ const jsonDailyDP = 'tibberlink.0.Homes.xxxxxxxxxxx.Consumption.jsonDaily'; const dpBase = '0_userdata.0.Tibber.Daily.'; const dpDates = dpBase + 'Dates'; const dpCost = dpBase + 'Cost'; const dpUsage = dpBase + 'Usage'; const dpUnitPrice = dpBase + 'UnitPrice'; const dpEchart = dpBase + 'EchartConfig'; // =================== Hilfsfunktion =================== function ensureDP(id) { if (!existsState(id)) createState(id, '', { type: 'string', read: true, write: true }); } [dpDates, dpCost, dpUsage, dpUnitPrice, dpEchart].forEach(ensureDP); // =================== Datum formatieren TT.MM. =================== function formatDateTTMM(fromStr) { const d = new Date(fromStr); if (isNaN(d)) return ''; const day = ('0' + d.getDate()).slice(-2); const month = ('0' + (d.getMonth() + 1)).slice(-2); return `${day}.${month}`; } // =================== Hauptfunktion =================== async function buildTibberDailyChart() { const raw = await getStateAsync(jsonDailyDP); if (!raw || !raw.val) { log('⚠ jsonDaily leer oder nicht verfügbar', 'warn'); return; } let daily; try { daily = JSON.parse(raw.val); if (!Array.isArray(daily)) { log('❌ JSON ist kein Array', 'error'); return; } } catch (e) { log('❌ Fehler beim Parsen von jsonDaily: ' + e, 'error'); return; } const dates = []; const cost = []; const usage = []; const price = []; daily.forEach(entry => { dates.push(formatDateTTMM(entry.from)); cost.push(Number(entry.totalCost || 0).toFixed(2)); usage.push(Number(entry.consumption || 0).toFixed(2)); price.push(Number(entry.unitPrice || 0).toFixed(3)); }); // Datenpunkte aktualisieren setState(dpDates, JSON.stringify(dates), true); setState(dpCost, JSON.stringify(cost), true); setState(dpUsage, JSON.stringify(usage), true); setState(dpUnitPrice, JSON.stringify(price), true); // Rechte Y-Achse Maximalwert für Preis berechnen (3 Nachkommastellen) let maxPrice = Math.max(...price.map(p => Number(p))) * 1.1; // 10% Puffer maxPrice = Number(maxPrice.toFixed(3)); // Linke Achse: Maximalwert für Kosten und Verbrauch const maxLeft = Math.max( ...cost.map(c => Number(c)), ...usage.map(u => Number(u)) ) * 1.1; const echartConfig = { textStyle: { color: '#FFFFFF' }, tooltip: { trigger: 'axis', textStyle: { color: '#525252' }, formatter: function(params) { const day = params[0].axisValue; const kosten = params.find(p => p.seriesName === 'Kosten (€)')?.value || 0; const verbrauch = params.find(p => p.seriesName === 'Verbrauch (kWh)')?.value || 0; const preis = params.find(p => p.seriesName === 'Preis (€/kWh)')?.value || 0; return `${day} → Kosten: ${Number(kosten).toFixed(2)} € | Verbrauch: ${Number(verbrauch).toFixed(2)} kWh | Preis: ${Number(preis).toFixed(3)} €/kWh`; } }, legend: { textStyle: { color: '#FFFFFF' }, data: ['Kosten (€)', 'Verbrauch (kWh)', 'Preis (€/kWh)'] }, xAxis: { type: 'category', data: dates, axisLabel: { color: '#FFFFFF' } }, yAxis: [ { type: 'value', name: 'Kosten / Verbrauch', min: 0, max: maxLeft, axisLabel: { color: '#FFFFFF' }, nameTextStyle: { color: '#FFFFFF', align: 'center' }, // linksbündig splitLine: { show: true, lineStyle: { color: '#525252' } } }, { type: 'value', name: 'Preis', position: 'right', min: 0, max: maxPrice, axisLabel: { color: '#FFFFFF', formatter: function(value) { return Number(value).toFixed(3) + ' €/kWh'; } }, nameTextStyle: { color: '#FFFFFF' }, splitLine: { show: true, lineStyle: { color: '#525252' } } } ], series: [ { name: 'Kosten (€)', type: 'bar', data: cost, yAxisIndex: 0 }, { name: 'Verbrauch (kWh)', type: 'bar', data: usage, yAxisIndex: 0 }, { name: 'Preis (€/kWh)', type: 'line', data: price, yAxisIndex: 1 } // nicht geglättet ] }; setState(dpEchart, JSON.stringify(echartConfig), true); log('✔ Tibber Daily für VIS aktualisiert – ' + daily.length + ' Einträge'); } // =================== Trigger =================== on({ id: jsonDailyDP, change: 'any' }, () => buildTibberDailyChart()); buildTibberDailyChart(); [image: 1764762204365-98722c8f-52b3-4fd1-9b07-5c78fd6ea9c3-image.png] [image: 1764762241930-3600ee57-f496-4ba8-a5cc-36fb941763eb-image.png]
  • Alexa-Adapter Datenpunkte zeigen nichts an

    6
    1
    0 Stimmen
    6 Beiträge
    164 Aufrufe
    skvarelS
    @FredF .. vielen Dank für die Info. Das war mir noch gar aufgefallen.
  • (Gelöst) Zigbee2Mqtt bleibt gelb - Frontend läuft

    12
    0 Stimmen
    12 Beiträge
    330 Aufrufe
    1Topf1
    @homoran @arteck sagte in (Gelöst) Zigbee2Mqtt bleibt gelb - Frontend läuft: RTFM :-)
  • 1Wire-OWFS Temperaturwert ohne Komma an

    20
    0 Stimmen
    20 Beiträge
    277 Aufrufe
    HomoranH
    @Salzmicha sagte in 1Wire-OWFS Temperaturwert ohne Komma an: verstehe ich nicht Vielleicht hilft das https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
  • Ist mein Zigbee noch aktuell ? Suche Hilfe ;)

    16
    0 Stimmen
    16 Beiträge
    511 Aufrufe
    H
    @skvarel Danke. Ja es gab dazu auch eine Einstellung im Z2M . Jetzt sind alle geräte auch als Online deklariert. Danke für deine Hilfe. @arteck auch an dich vielen Dank ;) @asgothian an dich ebenfalls ;) Kurz noch ein Update. Durch meine uralt konstellation lief mein alter Z2M ja als docker auf meiner NAS. Durch den Umzug ist die Reaktionszeit des gesamten Zigbee Netzwerkes echt schnell geworden.
  • Samsung TizenOS TV Adapter(MJ>=2016)

    Gesperrt
    5
    0 Stimmen
    5 Beiträge
    269 Aufrufe
    HomoranH
    @mcm1957 sagte in Samsung TizenOS TV Adapter(MJ>=2016): Bitte hier schließen erledigt!
  • Daten aus der Fritzbox visualisieren

    113
    0 Stimmen
    113 Beiträge
    20k Aufrufe
    M
    @Ro75 sagte in Daten aus der Fritzbox visualisieren: @dr-pie sagte in Daten aus der Fritzbox visualisieren: leider gibt der Adapter von AVM (tr064) die erforderlichen Daten nicht preis Hallo, das stimmt so definitiv nicht. Der tr-64 Adapter kann dir alles liefern. Es ist immer nur die Frage wie. Versuche es mal so: const NewByteReceiveRate = '0_userdata.0.FritzBox.NewByteReceiveRate'; const NewByteSendRate = '0_userdata.0.FritzBox.NewByteSendRate'; const L1DownMaxRate = '0_userdata.0.FritzBox.Layer1DownstreamMaxBitRate'; const L1UpMaxRate = '0_userdata.0.FritzBox.Layer1UpstreamMaxBitRate'; const ReceiveR = '0_userdata.0.FritzBox.Charts.Receive'; const SendR = '0_userdata.0.FritzBox.Charts.Send'; @ro75 Ich nutze auch dein script und bin mich am fragen was über den tr064 noch abfragbar ist? Ich suche die möglichkeit die Klingel der Türstation, die an der FB hängt ab zu fragen. Da ja leider die Türrufe als intern gelten tauch sie nicht in der Anrufliste auf. Dein "Der tr-64 Adapter kann dir alles liefern." macht mir da etwas hofnung :) Geht das auch vielleicht auch mit dem TR064?
  • Adapter -> Error in GUI!

    31
    0 Stimmen
    31 Beiträge
    439 Aufrufe
    E
    Ich werde das alles mal im Laufe der nächsten Tage versuchen zu posten. Im Moment sind andere Dinge viel wichtiger.
  • Node.js Update gelingt nicht - Downgrade nach Update

    6
    0 Stimmen
    6 Beiträge
    147 Aufrufe
    Thomas BraunT
    @bullemausberlin Ja, 'keep updating'! Irgendwann wird wohl auch wieder eine 22.x.y vorbeischwimmen.
  • Dieses Thema wurde gelöscht!

    0
    0 Stimmen
    0 Beiträge
    35 Aufrufe
    Niemand hat geantwortet
  • Fragen zum Radar2 Adapter

    9
    0 Stimmen
    9 Beiträge
    662 Aufrufe
    lobomauL
    Ich habe die Lösung des Problems gefunden. Am radar2-Adapter hat es nicht gelegen. Scheinbar wurde beim Upgrade von debian 12 auf 13 Bluetooth blockiert bzw. ausgeschaltet. Auf bluetoothctl show folgte: Powered: no PowerState: off-blocked Dann die Eingabe von: sudo rfkill unblock bluetooth sudo bluetoothctl power on War das Ergebnis von bluetoothctl show Powered: yes PowerState: on
  • E3DC "Manuelle Ladung Energie" geht nicht

    Verschoben Ungelöst
    1
    1 Stimmen
    1 Beiträge
    42 Aufrufe
    Niemand hat geantwortet
  • Adapter: Google-Shared location.. funktioniert nicht

    12
    0 Stimmen
    12 Beiträge
    222 Aufrufe
    BananaJoeB
    Das mit den Apple-Geräten hatte ich wohl zuvor überlesen, ok. Da ist es halt anders. Traccar ist kostenlos wenn man es selber hostet. Bei läuft mit auf einer VM (sogar mit Windows) die sowieso schon läuft: https://www.traccar.org/download/ Aber auch Docker ist dabei An Traccar kann man Positionen einfach per http-Aufruf senden: [image: 1764571137350-c32ab713-0187-408d-bd7d-83755d425c1b-image.png] Ich meine dafür muss man in der Konfiguration kein extra Protokoll aktivieren (also die Art wird gesendet wird), diese Methode ist ab Werk aktiv. Zumindest habe ich in der aktuellen Installation da nichts extra aktiviert.
  • Samsung TV

    Gesperrt
    8
    0 Stimmen
    8 Beiträge
    987 Aufrufe
    mcm1957M
    Das aktuelle Testtopic des Adpters ioBroker.samsung befindet sich hier: https://forum.iobroker.net/topic/77147/test-adapter-samsung-0-6-x @Homoran Bitte hier schließen um Zweigleisigkeit zu vermeiden. Das Topic ist sowieso seit langem nicht mehr benutzt worden.
  • Dieses Thema wurde gelöscht!

    0
    0 Stimmen
    0 Beiträge
    11 Aufrufe
    Niemand hat geantwortet
  • HomeMatic Heizkörperthermostat: temperatur

    5
    0 Stimmen
    5 Beiträge
    152 Aufrufe
    paul53P
    @wrod sagte: Ich könnte nun einen Offset einstellen, so dass die am Homematic gemessene Temperatur nach oben korrigiert wird. Der Offset der HmIP-Thermostate ist leider auf +/- 3,5 K begrenzt und nicht als Datenpunkt verfügbar. EDIT: Man kann den Offset per Javascript senden // Anpassen: const inst = 'hm-rpc.1'; const channel = 'Seriennummer:1'; const idOffset = '0_userdata.0.Bad.Thermostat.Offset'; on(idOffset, function(dp) { sendTo(inst, 'putParamset', {ID: channel, paramType: 'MASTER', params: {'TEMPERATURE_OFFSET': dp.state.val}}, res => { if(res.error) log(JSON.stringify(res.error), 'warn'); }); }); und die Thermostat-Temperatur an den Wert des XIAOMI-Sensors anpassen: [image: 1764518184033-blockly_temp.jpg]

639

Online

32.7k

Benutzer

82.4k

Themen

1.3m

Beiträge