Weiter zum Inhalt

ioBroker Allgemein

29.7k Themen 436.8k Beiträge
Integrationtsplattform für IoT

NEWS

  • [Closed] Shelly: "General Status Notifications" are disabled

    shelly plus 1
    7
    0 Stimmen
    7 Beiträge
    990 Aufrufe
    hruH
    sorry mein Fehler, ich habe nicht richtig gelesen!
  • JavaScript-Adapter 8.7.2 - Namen rechtsbündig

    23
    1
    0 Stimmen
    23 Beiträge
    3k Aufrufe
    paul53P
    @armilar sagte: Bei mir sieht das tabellarisch ganz ordentlich aus: Bei mir nur dann, wenn ich das Editor-Fenster schmaler mache als normal zum Editieren.
  • neues System Debian 12 -> Backup Influx, Grafana einspielen

    grafana influx-db
    2
    0 Stimmen
    2 Beiträge
    131 Aufrufe
    T
    @bobber69 wenn der iobroker eine neue ip-Adresse hat, musst du diese überall eingeben. kenne ich nicht wenn du die Datenbank neu installiert hast, hast du auch ein neues Token. Das musst du im Adapter eingeben.
  • Sungrow SG (nicht Hybrid) Modbus Register TSV

    2
    0 Stimmen
    2 Beiträge
    309 Aufrufe
    M
    ich habe mal mit hilfe von Internet-Recherchen was zusammengestellt ich bin mir noch nicht sicher ob alles richtig ist, aber vielleicht hilft es Anderen ja schon _address name description unit type len factor offset formula role room cw isScale 5002 Daily PV Generation PV-Stromerzeugung heute Kwh uint16be 1 0.1 0 value true false 5003 Total PV Generation PV-Stromerzeugung gesamt Kwh uint32sw 2 0.1 0 value true false 5005 Total running time yields Gesamt Laufzeit h uint32be 1 0.1 0 value true false 5007 Inside Temperature Temperatur im Wechselrichter °C int16be 1 0.1 0 value true false 5010 MPPT 1 Voltage MPPT1 Spannung V uint16be 1 0.1 0 value true false 5011 MPPT 1 Current MPPT1 Strom A uint16be 1 0.1 0 value true false 5012 MPPT 2 Voltage MPPT2 Spannung V uint16be 1 0.1 0 value true false 5013 MPPT 2 Current MPPT2 Strom A uint16be 1 0.1 0 value true false 5014 MPPT 3 Voltage MPPT3 Spannung V uint16be 1 0.1 0 value true false 5015 MPPT 3 Current MPPT3 Strom A uint16be 1 0.1 0 value true false 5016 Total DC Power PV-Leistung aktuell W uint32sw 2 1 0 value true false 5018 Voltage Ph A Spannung Phase A V uint16be 1 0.1 0 value true false 5019 Voltage Ph B Spannung Phase C V uint16be 1 0.1 0 value true false 5020 Voltage Ph C Spannung Phase C V uint16be 1 0.1 0 value true false 5021 Ph A Current Strom Phase A A uint16be 1 0.1 0 value true false 5022 Ph B Current Strom Phase C A uint16be 1 0.1 0 value true false 5023 Ph C Current Strom Phase C A uint16be 1 0.1 0 value true false 5030 Total DC Power PV-Leistung aktuell W uint32sw 2 1 0 value true false 5035 Grid Frequency Netzfrequenz Hz uint16be 1 0.1 0 value true false 5037 Running State Betriebsstatus uint16be 1 1 0 value true false 5044 Fault/Alarmcode 1 Störung/Alarmcode 1 uint16be 1 1 0 value true false 5112 Daily running time Tägliche Laufzeit min uint16be 1 0 0 value true false
  • Forecast.solar mit dem Systeminfo Adapter

    systeminfo solar json
    188
    0 Stimmen
    188 Beiträge
    30k Aufrufe
    GarganoG
    @jb_sullivan Hier der Code mit axios: getSolar() ist die eigentliche Funktion. Es gibt auch einen Adapter, der aus dem Script hervorging hier der Adapter // Test mit VS Code Extension /* read solar forecasts for 3 different orientations Author : gargano Display in VIS : use JSON Chart from Scrounger Version 1.1.0 Last Update 13.3.2022 Change history : use axios */ const prefix = '0_userdata.0.'; const idSolarJSON1 = prefix+"SolarForecast3.SuedOst.JSON"; const idSolarJSON2 = prefix+"SolarForecast3.Dach.JSON"; const idSolarJSON3 = prefix+"SolarForecast3.SuedWest.JSON"; const idSolarToday1 = prefix+"SolarForecast3.SuedOst.Today"; const idSolarToday2 = prefix+"SolarForecast3.Dach.Today"; const idSolarToday3 = prefix+"SolarForecast3.SuedWest.Today"; const idSolarTomorrow1 = prefix+"SolarForecast3.SuedOst.Tomorrow"; const idSolarTomorrow2 = prefix+"SolarForecast3.Dach.Tomorrow"; const idSolarPanelTomorrow= prefix+"SolarForecast3.Solar.Tomorrow"; const idSolarPanelToDay = prefix+"SolarForecast3.Solar.ToDay"; const idSolarTomorrow3 = prefix+"SolarForecast3.SuedWest.Tomorrow"; const idSolarJSONTable = prefix+"SolarForecast3.JSONTable"; const idSolarJSONGraph = prefix+"SolarForecast3.JSONGraph"; const idSolarDachJSONGraph = prefix+"SolarForecast3.Dach.JSONGraph"; const createStateList = [ {name :idSolarJSON1, type:"string", role : "value"}, {name :idSolarJSON2, type:"string", role : "value"}, {name :idSolarJSON3, type:"string", role : "value"}, {name :idSolarToday1, type:"number", role : "value"}, {name :idSolarToday2, type:"number", role : "value"}, {name :idSolarToday3, type:"number", role : "value"}, {name :idSolarTomorrow1, type:"number", role : "value"}, {name :idSolarTomorrow2, type:"number", role : "value"}, {name :idSolarTomorrow3, type:"number", role : "value"}, {name :idSolarPanelTomorrow, type:"number", role : "value"}, {name :idSolarPanelToDay, type:"number", role : "value"}, {name :idSolarJSONTable, type:"string", role : "value"}, {name :idSolarJSONGraph, type:"string", role : "value"}, {name :idSolarDachJSONGraph, type:"string", role : "value"} ] // create states if not exists async function createMyState(item) { if (!existsState(item.name)) { await createStateAsync(item.name, { type: item.type, min: 0, def: 0, role: item.role }); } } async function makeMyStateList (array) { // map array to promises const promises = array.map(createMyState); await Promise.all(promises); } async function main () { await makeMyStateList(createStateList); schedule(mySchedule, getSolar ); getSolar(); } main(); // define axios and url const axios = require('axios'); /* https://api.forecast.solar/estimate/:lat/:lon/:dec/:az/:kwp lat - latitude of location, -90 (south) … 90 (north) lon - longitude of location, -180 (west) … 180 (east) dec - plane declination, 0 (horizontal) … 90 (vertical) az - plane azimuth, -180 … 180 (-180 = north, -90 = east, 0 = south, 90 = west, 180 = north) kwp - installed modules power in kilo watt */ // set lat and lon for the destination const lat = myLat; // defined in global const long = myLon; // defined in global const url = 'https://api.forecast.solar/estimate/'; // Fenster Wohnzimmer var url1 = url+lat+'/'+long+'/90/-30/1'; // Dach var url2 = url+lat+'/'+long+'/35/60/6.2'; // Fenster Küche / Schlafzimmer var url3 = url+lat+'/'+long+'/90/60/1'; const legendTest = ["Wohn","Dach","Küche"]; const graphColor = ["red","green","yellow"]; const datalabelColor = ["lightgreen","lightblue","lightblue"]; const tooltipAppendText= " kWh"; var solarJson1; var solarJson2; var solarJson3; var solarJsons = [solarJson1,solarJson2,solarJson3]; const idSolarJSONS = [idSolarJSON1,idSolarJSON2,idSolarJSON3] const idSolarToDayS = [idSolarToday1,idSolarToday2,idSolarToday3] const idSolarTomorrowS = [idSolarTomorrow1,idSolarTomorrow2,idSolarTomorrow3] const logging = true; const mySchedule ='{"time":{"start":"03:00","end":"23:00","mode":"hours","interval":1},"period":{"days":1}}' // handle the request : convert the result to table and graph async function makeResponse (thisResponse,thisIDSolarJSON,idx,thisIDSolarToDay,thisIDSolarTomorrow) { // handle success var datetoday = new Date(); var datetomorrow = new Date(datetoday.getTime()+(1000 * 60 * 60 * 24 * 1)); // übermorgen wäre dann am Ende eine 2 anstatt 1 let today = formatDate(datetoday, 'YYYY-MM-DD'); let tomorrow = formatDate(datetomorrow, 'YYYY-MM-DD'); var watts = thisResponse.data.result.watts; if (logging) log ('Watts '+JSON.stringify(watts)); let table = []; for(let time in watts) { let entry = {}; entry.Uhrzeit = time; entry.Leistung = watts[time]; table.push(entry); } let kWhToDay = thisResponse.data.result.watt_hours_day[today]/1000; let kWhTomorrow = thisResponse.data.result.watt_hours_day[tomorrow]/1000; solarJsons[idx] = JSON.stringify(table); await setStateAsync(thisIDSolarJSON, JSON.stringify(table), true); await setStateAsync(thisIDSolarToDay, kWhToDay, true); await setStateAsync(thisIDSolarTomorrow, kWhTomorrow, true); } // summarize the single watts results to table and graph async function makeTable () { if (logging) log ('MakeTable'); let watts1 = JSON.parse(solarJsons[0]); let watts2 = JSON.parse(solarJsons[1]); let watts3 = JSON.parse(solarJsons[2]); if (logging) log ('Items: '+watts1.length); let table = []; let axisLabels = []; // make table for(var n=0;n<watts1.length;n++) { let entry = {}; entry.Uhrzeit = watts1[n].Uhrzeit; entry.Leistung1 = watts1[n].Leistung; entry.Leistung2 = watts2[n].Leistung; entry.Leistung3 = watts3[n].Leistung; entry.Summe = watts1[n].Leistung + watts2[n].Leistung+ watts3[n].Leistung; table.push(entry); } // prepare data for graph let graphTimeData1 = []; for(var n=0;n<watts1.length;n++) { graphTimeData1.push(watts1[n].Leistung); let time = watts1[n].Uhrzeit.substr(11,5); axisLabels.push(time); } let graphTimeData2 = []; for(var n=0;n<watts2.length;n++) { graphTimeData2.push(watts2[n].Leistung); } let graphTimeData3 = []; for(var n=0;n<watts3.length;n++) { graphTimeData3.push(watts3[n].Leistung); } // make total graph var graph = {}; var graphAllData = []; var graphData = {"tooltip_AppendText":tooltipAppendText,"legendText": legendTest[0],"yAxis_id": 1,"type": "bar","displayOrder": 1,"barIsStacked": true,"color":graphColor[0],"barStackId":1,"datalabel_rotation":-90,"datalabel_color":datalabelColor[0],"datalabel_fontSize":10}; graphData.data = graphTimeData1; graphAllData.push(graphData); graphData = {"tooltip_AppendText": tooltipAppendText,"legendText": legendTest[1],"yAxis_id": 1,"type": "bar","displayOrder": 2,"barIsStacked": true,"color":graphColor[1],"barStackId":1,"datalabel_rotation":-90,"datalabel_color":datalabelColor[1],"datalabel_fontSize":10}; graphData.data = graphTimeData2; graphAllData.push(graphData); graphData = {"tooltip_AppendText": tooltipAppendText,"legendText": legendTest[2],"yAxis_id": 1,"type": "bar","displayOrder": 3,"barIsStacked": true,"color":graphColor[2],"barStackId":1,"datalabel_rotation":-90,"datalabel_color":datalabelColor[2],"datalabel_fontSize":10}; graphData.data = graphTimeData3; graphAllData.push(graphData); graph.graphs=graphAllData; graph.axisLabels = axisLabels; setState(idSolarJSONTable, JSON.stringify(table), true); setState(idSolarJSONGraph, JSON.stringify(graph), true); // make Dach graph var graph = {}; var graphAllData = []; var graphData = {"tooltip_AppendText":tooltipAppendText,"legendText": legendTest[1],"yAxis_id": 1,"type": "bar","displayOrder": 1,"barIsStacked": true,"color":graphColor[0],"barStackId":1,"datalabel_rotation":-90,"datalabel_color":datalabelColor[0],"datalabel_fontSize":10}; graphData.data = graphTimeData2; graphAllData.push(graphData); graph.graphs=graphAllData; graph.axisLabels = axisLabels; setState(idSolarDachJSONGraph, JSON.stringify(graph), true); } async function getSolar() { const request1 = axios.get(url1); const request2 = axios.get(url2); const request3 = axios.get(url3); let requests = [request1,request2,request3]; await axios .all(requests) .then (axios.spread(async (...responses) => { // use/access the results for (var n=0;n<responses.length;n++) { if (logging) console.log(responses[n].data); await makeResponse (responses[n],idSolarJSONS[n],n,idSolarToDayS[n],idSolarTomorrowS[n]); } if (logging) console.log("All url loaded"); await makeTable(); let vDachToDay = parseFloat(((await getStateAsync(idSolarToday2)).val).toFixed(2)); setState(idSolarPanelToDay,vDachToDay); let vDachTomorrow = parseFloat(((await getStateAsync(idSolarTomorrow2)).val).toFixed(2)); setState(idSolarPanelTomorrow,vDachTomorrow); })) .catch(errors => { // react on errors. console.log(errors) }) }
  • Sungrow SG [NICHT HYBRID] MODBUS

    2
    0 Stimmen
    2 Beiträge
    231 Aufrufe
    M
    @tiedi hattest du Erfolg? Ich suche nämlich auch das Regsiter für den SG8
  • VIS startet nicht mehr - vermutlich Eigenverschulden

    32
    0 Stimmen
    32 Beiträge
    3k Aufrufe
    rtwlR
    @homoran ja natürlich.
  • Diablo 4 Worldbosstimer in ioBroker/VIS

    1
    0 Stimmen
    1 Beiträge
    180 Aufrufe
    Niemand hat geantwortet
  • Wie erstelle ich eigene Adapter?

    22
    1 Stimmen
    22 Beiträge
    6k Aufrufe
    mcm1957M
    Und generell empfiehlt sich hier auch unsere TELEGRAMM Gruppe "ioBroker Adapter Development Starters" - invite Links auf https://www.iobroker.dev
  • backitup sichert keine Passwörter oder api key's

    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    mickymM
    @edstobi Ja das kannst ignorieren, wenn Du die Sicherung nimmst. Wie gesagt um zu testen - benenne das NodeRed Verzeichnis um und lass es aus dem Backit Up wiederherstellen.
  • DoorBird (Funktioniert) Zeigt aber nicht Standbild d. Kamera

    51
    1
    0 Stimmen
    51 Beiträge
    6k Aufrufe
    B
    @negalein gut das du mich drann erinnerst .. muss noch den node js Controler updaten u.a. doorbird ist veraltet. Danke !
  • Mi Fan 2S Ausschaltverzögerung

    3
    0 Stimmen
    3 Beiträge
    320 Aufrufe
    G
    @io_laurent Ja, dort klapp es über den Datenpunkt "countdown-time" leider ebenfalls nicht und die Werte dort werden auch nicht aktualisiert. Ich kann zwar den Ventilator ein und aus schalten indem ich den Datenpunkt "on" beschreibe, aber er zeigt immer true, auch wenn er aus ist.
  • Neuer Datenpunkt in Baum automatisch in Datenbank schreiben

    7
    0 Stimmen
    7 Beiträge
    587 Aufrufe
    ?
    @sven-schumacher Der LoraWan Adapter wäre doch schon mal der erste mögliche Schritt bei deinem Vorhaben? Damit würden zumindest schon mal alle Daten in Datenpunkte geschrieben werden. Nachdem ich deine Eingangsfrage 10x gelesen habe, ahne ich was Dein Ziel ist. Mit dem "IDs from Selector" "lauscht" der Trigger auf jedes "up" in der MQTT Instanz, zieht sich aus dem JSON die ApplicationID, ApplicationName und DevEUI und erstellt daraus eine Ordnerstruktur in 0_Userdata [image: 1722093799658-61d746ed-743a-4ab0-8443-a597c613ad1a-image.png] Bei der Erstellung vom Datenpunkt wird der Eintrag fürs Logging ("custom":{ "influxdb.1":{ "enabled":true,..........) gleich mit übergeben. createState("0_userdata.0."+ Ordner +".Temperature", 0,{ name: "Temperature", unit: "°C", read: true, write: true, desc: "Beschreibung", type: "number", "custom": { "influxdb.1": { "enabled": true, "storageType": "", "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": 0 } } }); [image: 1722094396214-62c55d9e-a45e-4c3f-97c0-67ae2ecdd1b9-image.png] Auf die Art ist es egal, ob du ein Device hast, oder 1000. Sobald du Geräte in Chirpstack hinzufügst werden, sofern noch nicht vorhanden die Datenpunkte erstellt, befüllt und in der Datenbank (hier InfluxDB). NoTouch sozusagen, in Iobroker musst du dann nix machen. Den ID Selctor kannst musst du evtl noch mit der ApplicationID ergänzen, falls da in CS auch noch andere Devicetypen mit drin hast. Eigentlich ist genau mit diesem Hintergrund der LoraWan Adapter entstanden, der das gleiche macht. Die Möglichkeit, dass beim Anlegen der DP automatisch ein logging Eintrag erstellt wird, kommt wohl in den nächsten Tagen mit rein. Nachtrag 30.07.2024: Im LoraWan Adapter 1.3.0 (auf GIT) ist die "Auto Logging" Funktion integriert, siehe (weiter unten): Anleitung Automatik Logging einrichten
  • wmbus Adatpter Unknown VIFExt 0x13

    1
    0 Stimmen
    1 Beiträge
    118 Aufrufe
    Niemand hat geantwortet
  • MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte)

    20
    0 Stimmen
    20 Beiträge
    2k Aufrufe
    BananaJoeB
    @sammy-r sagte in MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte): Ich gebe Dir da Recht, ich hatte die Datenpunkte erst bei bei meinen userdata, allerdings war das nervig, weil ich bim Testen immer scrollen musste 2 Bildschirme mit mehreren Browserfenstern nebeneinander wirken wunder!
  • Entwicklungseinblicke Juni 2024

    admin app iobroker matter news
    5
    3 Stimmen
    5 Beiträge
    1k Aufrufe
    foxriver76F
    Und wieder ist der letzte Freitag dieses Monats gekommen: https://forum.iobroker.net/topic/76050/entwicklungseinblicke-juli-2024
  • Smarter Katzenschreck mit Einbindung in iobroker

    katzenschreck
    11
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    D
    @maxpd ich bin mittlerweile auf abschreckung mittels bewegungsmelder und einem versenkregner umgestiegen. Das hat mein Problem bis jetzt gelöst obwohl das sicherlich eine aufwändige variante war.
  • Adapter zur erweiterten Lichtsteuerung

    5
    0 Stimmen
    5 Beiträge
    903 Aufrufe
    Bass-TB
    Hi Zusammen, möchte das Thema hier gerne nochmal aktualisieren; ich habe verschiedene Helligkeitssensoren und Präsentsmelder in meiner Wohnung. Beleuchtung ist nahezu komplett Smart. Aufgabe: Der Helligkeitssensor für draußen sagt "extrem hell". Als Hitze Schutz ist aber die Verdunklung fast komplett unten. Daher nur noch 10lux im Wohnzimmer. Mit den Leuchten kann ich max 2100 lux bringen. Also brauche ich jetzt am besten ein Script / Vorlage / Adapter zur Konstant Licht Regelung. Gibt es da was? Um das ganze zu erschweren, Schalte / Dimme / CT ich im Wohnzimmer 5 Leuchten unterschiedlich, wobei eine Leuchte (Decke) nicht mit geregelt werden soll. :) [image: 1721923344681-screenshot_20240725_180200.png] und es wird immer schlimmer :D Grüße
  • Zigbee Probleme - Instanz startet nicht mehr

    zigbee zigbee cc2531 herdsman
    5
    1
    0 Stimmen
    5 Beiträge
    412 Aufrufe
    Martin SchlenderM
    @meister-mopper das war es leider nicht. Der war bei mir nämlich schon erst gar nicht installiert oder ich hatte den am Anfang schon deinstalliert weil da mal berichtet worden war, dass das Ding Probleme macht.
  • [Frage] ioBroker mit Yahka / Anzeige von Watt

    yahka tasmota
    5
    1
    1 Stimmen
    5 Beiträge
    3k Aufrufe
    L
    @ri also wenn ich das so mache: [image: 1721913152851-f078f25c-9bc0-4db6-9ff7-953d95e5c7ac-image.png] zeigt er als Name "Watt" an und nicht das was in dem State "Testvariable" hinterlegt ist. Geht so wohl nicht, leider.

472

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge