NEWS
Daten aus der Fritzbox visualisieren
-
@werners Nein, das heißt es nicht. In dem Skript gab es ein Fehler. Da wurde am ersten eines jeden Monat "null" geschrieben und ab dem zweiten Tag wieder korrekt.
Oder meinst du was anderes? Welche Datenpunkte? UND was sagt das Log denn dazu?
Ro75.
-
also ich meinte ob die 2 Monate die 0B haben nochmal neu und richtig nachträglich berechnet werden. Oder bleiben die auf 0?
ich habe das mal schnell getestet. Mein Script sieht jetzt so aus
const Traffic_IN = '0_userdata.0.FritzBox.Traffic.Traffic_IN'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx const Traffic_OUT = '0_userdata.0.FritzBox.Traffic.Traffic_OUT'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx const Traffic_Tag_IN = '0_userdata.0.FritzBox.Traffic.Tag_IN'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx const Traffic_Tag_OUT = '0_userdata.0.FritzBox.Traffic.Tag_OUT'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx const Traffic_Monat_IN = '0_userdata.0.FritzBox.Traffic.Monat_IN'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx const Traffic_Monat_OUT = '0_userdata.0.FritzBox.Traffic.Monat_OUT'; // protokollieren mit SQL! Ggfs. zusätzlich mit Influx // die oberen 6 DP müssen protokolliert werden! const sTraffic_Monat_IN = '0_userdata.0.FritzBox.Traffic.Traffic_Monat_IN'; const sTraffic_Monat_OUT = '0_userdata.0.FritzBox.Traffic.Traffic_Monat_OUT'; createState(Traffic_IN, 0, {type: 'number', read: true, write: true}); createState(Traffic_OUT, 0, {type: 'number', read: true, write: true}); createState(Traffic_Tag_IN, 0, {type: 'number', read: true, write: true}); createState(Traffic_Tag_OUT, 0, {type: 'number', read: true, write: true}); createState(Traffic_Monat_IN, 0, {type: 'number', read: true, write: true}); createState(Traffic_Monat_OUT, 0, {type: 'number', read: true, write: true}); createState(sTraffic_Monat_IN, 0, {type: 'number', read: true, write: true}); createState(sTraffic_Monat_OUT, 0, {type: 'number', read: true, write: true}); var IPV4=''; var IPV4I=''; var tIN_NEW = 0; var tIN_OLD = 0; var tIN_DIFF = 0; var tIN_SUM = 0; var tOUT_NEW = 0; var tOUT_OLD = 0; var tOUT_DIFF = 0; var tOUT_SUM = 0; //Summierung der Tageswerte via SQL für Monatsergebnis function TrafficlfdMonat() { const moment = require("moment"); let dateX=moment().format(); var Stunden = ((parseFloat(formatDate(dateX, "TT"))-1)*24)*-1; var Ergebnis = ErstelleZahl(getState(Traffic_IN).val); sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="0_userdata.0.FritzBox.Traffic.Tag_IN"', function (result) { if (!result.error) { var now = new Date(); now.setHours(Stunden); sendTo('sql.0', 'query', 'SELECT SUM(val) AS val FROM iobroker.ts_number WHERE ts >= ' + now.getTime() + ' AND id=' + result.result[0].id, function (result) { Ergebnis = Ergebnis + ErstelleZahl(parseFloat(result.result[0].val)); }); } }); setTimeout(function(){ setState(sTraffic_Monat_IN, Ergebnis, true); },100); var ErgebnisII = ErstelleZahl(getState(Traffic_OUT).val); sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="0_userdata.0.FritzBox.Traffic.Tag_OUT"', function (result) { if (!result.error) { var now = new Date(); now.setHours(Stunden); sendTo('sql.0', 'query', 'SELECT SUM(val) AS val FROM iobroker.ts_number WHERE ts >= ' + now.getTime() + ' AND id=' + result.result[0].id, function (result) { ErgebnisII = ErgebnisII + ErstelleZahl(parseFloat(result.result[0].val)); }); } }); setTimeout(function(){ setState(sTraffic_Monat_OUT, ErgebnisII, true); },100); } //um die Monatssumme "laufend" zu halten schedule('*/2 * * * *', function Auswertung7() { TrafficlfdMonat(); }); // Berechnung Empfangsrichtung on({id: 'upnp.0.WANDevice_-_FRITZ!Box_7490.WANDevice.WANCommonInterfaceConfig.TotalBytesReceived', change: 'any'}, function(dp) { //DP ggfs. anpassen if (IPV4 == '') { IPV4 = getState('tr-064.0.states.externalIP').val; } tIN_OLD=tIN_NEW; tIN_NEW = parseFloat(dp.state.val); if (tIN_OLD == 0) { tIN_OLD=tIN_NEW; } else { if (IPV4 == getState('tr-064.0.states.externalIP').val) { tIN_DIFF=tIN_NEW-tIN_OLD; } else { IPV4 = getState('tr-064.0.states.externalIP').val; tIN_DIFF=tIN_NEW; } if (tIN_DIFF < 0) { tIN_DIFF=(4294967295-tIN_OLD)+tIN_NEW; //der Counter geht nur bis 4294967295, danach wieder ab 0 >> Berechnung } tIN_SUM=tIN_SUM+tIN_DIFF; var oIn = parseFloat(getState(Traffic_IN).val); setState(Traffic_IN, (oIn+tIN_DIFF)*1); } }); // Berechnung Senderichtung on({id: 'upnp.0.WANDevice_-_FRITZ!Box_7490.WANDevice.WANCommonInterfaceConfig.TotalBytesSent', change: 'any'}, function(dp) { if (IPV4I == '') { IPV4I = getState('tr-064.0.states.externalIP').val; } tOUT_OLD=tOUT_NEW; tOUT_NEW = parseFloat(dp.state.val); if (tOUT_OLD == 0) { tOUT_OLD=tOUT_NEW; } else { if (IPV4I == getState('tr-064.0.states.externalIP').val) { tOUT_DIFF=tOUT_NEW-tOUT_OLD; } else { IPV4I = getState('tr-064.0.states.externalIP').val; tOUT_DIFF=tOUT_NEW; } if (tOUT_DIFF < 0) { tOUT_DIFF=(4294967295-tOUT_OLD)+tOUT_NEW; //der Counter geht nur bis 4294967295, danach wieder ab 0 >> Berechnung } tOUT_SUM=tOUT_SUM+tOUT_DIFF; var oOUT = parseFloat(getState(Traffic_OUT).val); setState(Traffic_OUT, (oOUT+tOUT_DIFF)*1); } }); //Tages und Monatswert in DP schreiben schedule('30 59 23 * * *', function TrafficTagesWert() { setState(Traffic_Tag_IN, getState(Traffic_IN).val); setState(Traffic_Tag_OUT, getState(Traffic_OUT).val); //Reset für neuen Tag tOUT_SUM=0; tIN_SUM=0; setState(Traffic_IN, 0); setState(Traffic_OUT, 0); //herausfinden ob +- 10 Minuten immer noch den selben Monat oder letzter Tag im Monat ist const moment = require("moment"); let datePlus=moment().add(10, 'm').format(); let dateMinus=moment().subtract(10, 'm').format(); if (formatDate(datePlus, "MM") != formatDate(dateMinus, "MM")) { //jetzt ist noch der letzte Tag des Monat TrafficlfdMonat(); setState(Traffic_Monat_IN, getState('0_userdata.0.FritzBox.Traffic.Traffic_Monat_IN').val, true); setState(Traffic_Monat_OUT, getState('0_userdata.0.FritzBox.Traffic.Traffic_Monat_OUT').val, true); } }); function ErstelleZahl(wert) { if(isNaN(wert)) { wert = 0; } return wert; }
Allerdings sind im Log einige Fehler. Ob die vorher schon waren weiss ich nicht, das Script hat ja funktioniert.
Der Fehler scheint alle 2 Minten zu kommen falls das was hilftjavascript.0
2024-09-01 17:36:09.014 error at processImmediate (node:internal/timers:476:21)
javascript.0
2024-09-01 17:36:09.013 error at Immediate._onImmediate (file:///opt/iobroker/node_modules/@iobroker/db-states-redis/src/lib/states/statesInRedisClient.ts:381:37)
javascript.0
2024-09-01 17:36:09.013 error at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:10886:45)
javascript.0
2024-09-01 17:36:09.013 error at Object.cb (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3097:38)
javascript.0
2024-09-01 17:36:09.013 error at Object.<anonymous> (script.js.common.FritzBox:63:148)
javascript.0
2024-09-01 17:36:09.013 error Error in callback: TypeError: Cannot read properties of undefined (reading 'id')
javascript.0
2024-09-01 17:36:09.011 error at processImmediate (node:internal/timers:476:21)
javascript.0
2024-09-01 17:36:09.011 error at Immediate._onImmediate (file:///opt/iobroker/node_modules/@iobroker/db-states-redis/src/lib/states/statesInRedisClient.ts:381:37)
javascript.0
2024-09-01 17:36:09.011 error at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:10886:45)
javascript.0
2024-09-01 17:36:09.011 error at Object.cb (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3097:38)
javascript.0
2024-09-01 17:36:09.010 error at Object.<anonymous> (script.js.common.FritzBox:49:148)
javascript.0
2024-09-01 17:36:09.010 error Error in callback: TypeError: Cannot read properties of undefined (reading 'id')Gruß
Werner -
@werners läuft MariaDB/MySQL auf dem Server? ist der SQL-Adapter installiert?
Werden diese DP mit dem SQL-Adapter protokolliert?
0_userdata.0.FritzBox.Traffic.Traffic_IN 0_userdata.0.FritzBox.Traffic.Traffic_OUT 0_userdata.0.FritzBox.Traffic.Tag_IN 0_userdata.0.FritzBox.Traffic.Tag_OUT 0_userdata.0.FritzBox.Traffic.Monat_IN 0_userdata.0.FritzBox.Traffic.Monat_OUT
Ro75.
-
-
@werners sagte in Daten aus der Fritzbox visualisieren:
ja läuft über einen sql Adapter
Bitte mal zeigen.
Ro75.
-
-
@werners Die Einstellungen zu den von mir aufgeführten Datenpunkte. Der SQL-Adapter alleine reicht nicht.
Ro75.
-
-
@werners für alle DP? Welche Aufbewahrungsdauer?
Aufbewahrungsdauer:
Tag_IN und Tag_OUT = 3 Monate
Monat_IN und Monat_OUT = 2 JahreRo75.
-
-
@werners Noch eine Frage. Hast du "moment" als zusätzliches NPM-Modul in JS-Adapter eingetragen?
Ro75.
-
-
@werners also für das Skript bitte "moment" einfügen.
Hab das wohl vergessen oder "vorausgesetzt".
Ro75.
-
-
@werners im JS-Adapter ist "sendto" erlaubt/aktiviert?
Ro75
-
-
also die Fehlermeldung deuted darauf hin dass kein Ergebnis zurück kommt. Hier tippe ich darauf dass als Datenbank SQLITE verwendet wird. Dann allerdings muss die DB Bezeichnung iobroker. vor den Tabellennamen wegfallen.
wenn schon moment(der Nachfolger ist luxon) verwendet wird, dann sollte man es auch verwenden!
const moment = require('moment'); let tsNow = moment().startOf('month').unix() * 1000;
es geht aber auch mit Bordmitteln:
const ts1 = new Date(); ts1.setDate(1); ts1.setHours(0, 0, 0, 0); log(ts1.getTime());
letztlich noch das query, das kann man vereinfachen und sich somit 1 Abfrage spareb
const query = `select sum(ts_number.val) as monatssumme from datapoints join ts_number on datapoints.id = ts_number.id and datapoints.name = "${Traffic_Tag_IN}" where ts_number.ts >= ${tsNow}`; sendTo('sql.0', 'query', query, (res) => { log(res.result[0].monatssumme) })
-
als das ist eine MySQL Datenbank
ich kann das mal testen, aber was muss ich wie jetzt ersetzen?Gruß
Werner -
@werners sagte in Daten aus der Fritzbox visualisieren:
als das ist eine MySQL Datenbank
ich kann das mal testen, aber was muss ich wie jetzt ersetzen?Gruß
Wernerzeige zuerst mal die Einstellungen deines SQL Adapters
-