@glasfaser
war leider nicht der Fehler. Ich bekomme die gleiche Fehlermeldung.
So wie ich das Verstehe, kann der iobroker keine Verbindung zum FTP aufbauen. Ich weis aber nicht warum. Über mein Macbook geht es ohne Probleme.
@glasfaser
war leider nicht der Fehler. Ich bekomme die gleiche Fehlermeldung.
So wie ich das Verstehe, kann der iobroker keine Verbindung zum FTP aufbauen. Ich weis aber nicht warum. Über mein Macbook geht es ohne Probleme.
Ich habe mir die Idee von @liv-in-sky durch den Kopf gehen lassen und bin dann auf die Idee gekommen, auf dem Tablet mit der App Cx Datei Explorer einen FTP Server zu starten. Ich kann nun über die IP ftp://... auf die Dateistruktur des Tablets und auch auf den entsprechenden Ordner, in welchem die Videodateien durch die App Taster abgelegt werden, zugreifen.
Jetzt möchte ich diese Dateien am besten so ähnlich wie in diesem Beitrag link text auslesen.
ich habe versucht, die IP meines ftp Servers (Tablet) in das Script aus dem obigen Beitrag
var Client = require('ftp');
var fs = require('fs');
var c = new Client();
c.on('ready', function() {
c.list(function(err, list) {
if (err) throw err;
console.log(list);
c.end();
});
});
// connect to localhost:21
c.connect({
host: "192.168.***.***",
user: "*************",
password: "**************"
});
einzusetzen.
wie folgt:
var Client = require('ftp');
var fs = require('fs');
var c = new Client();
c.on('ready', function() {
c.list(function(err, list) {
if (err) throw err;
console.log(list);
c.end();
});
});
// connect to localhost:3501
c.connect({
host: "ftp://192.168.178.96//device/DCIM/Ring",
user: "p*",
password: "******"
});
ich bekomme dann folgende Fehlermeldungen.
Error: getaddrinfo ENOTFOUND ftp://192.168.178.96//device/DCIM/Ring
Error: getaddrinfo ENOTFOUND ftp://192.168.178.96//device/DCIM/Ring at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26)
kann mir jemand sagen, an was das liegt?
Hallo Zusammen,
folgende Frage: Ich möchte Videodateien aus einem Ordner auf meinem Tablet zu einem Ordner auf dem IOBroker kopieren / verschieben, um mir diese dann im Anschluss in der VIS anzeigen zu lassen.
Vielleicht macht ja jemand etwas ähnliches oder weiß wie so etwas geht.
Hintergrund: Der Ring Adapter ist mir zu instabil und außerdem funktioniert er gerade nicht. Deshalb arbeite ich an einem Workaround. Die Videos werden durch Tasker auf dem Tablet aufgenommen und dort gespeichert.
Ich bin für alle Vorschläge dankbar.
Vielen Dank soweit für deine Hilfe.
Ich habe jetzt noch ein Problem mit diesem Skript:
//+++++++++++ Script Snapshot ++++++++++++++
on({id: '0_userdata.0.RINGCAM.VIS.PicID', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
await wait(100);
var request = require('request');
var fs = require('fs');
var ring = getState('0_userdata.0.RINGCAM.VIS.PicID').val;
console.log("RING-Bild erzeugt:ID1 " + ring);
const body = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.PicID').val);
// const body = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + ring);
writeFile("vis.0", "/RING/LAST_PIC.jpg", body, (err) => { console.log(err);}
);
});
//+++++++++++ Script Livestream ++++++++++++++
on({id: '0_userdata.0.RINGCAM.VIS.ClipID', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
await wait(100);
var request = require('request');
var fs = require('fs');
var ring1 = getState('0_userdata.0.RINGCAM.VIS.ClipID').val;
console.log("RING-Video erzeugt: " + ring1);
const body1 = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.ClipID').val);
// const body1 = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + ring1);
writeFile("vis.0", "/RING/LAST_CLIP.mp4", body1, (err) => { console.log(err);}
);
});
Ich habe versucht zu verstehen was es genau tut. Vielleicht kann mich da jemand erleuchten.
Ich habe die Zeile 19 um einen Callback erweitertet. Jedoch verstehe ich nicht was mit der Zeile genau bezweckt werden soll. Das Skript soll ja etwas für die VIS zur Verfügung stellen.
Im vis.0 Ordner befinden sich bei mir die verschiedenen VIS Projekte. Was macht das Skript genau in diesem Ordner? Kann das so überhaupt funktionieren mit dem Wert ''/RING/LAST_PIC.jpg''?
Kann sich sonst jemand diesen Fehler in Zeile 19 erklären?
Kann mir jemand vielleicht noch folgendes sagen
wie müsste ich den Datenpunkt Trigger-Videoselection anlegen?
Bei den Zeilen 7 ff. wird jeweils getstate(....Video-Nr_1) ausgeführt.
Handelt es sich bei Video-Nr_1 um einen Datenpunkt? Und hat jemand eine Idee wie der genau aussehen muss?
Weiter ab Zeile 42. Was bedeutet die Zeile 43 und der Punkt /Vis-Videoselection/?
Vielleicht hat ja jemand zu den Skripten ein paar Erklärungen für mich parat.
Vielen Dank!
Danke für die Auskünfte.
Bei diesem Script habe ich leider noch ein Problem:
//+++++++++++ Script Snapshot ++++++++++++++
on({id: '0_userdata.0.RINGCAM.VIS.PicID', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
await wait(100);
var request = require('request');
var fs = require('fs');
var ring = getState('0_userdata.0.RINGCAM.VIS.PicID').val;
console.log("RING-Bild erzeugt:ID1 " + ring);
const body = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.PicID').val);
// const body = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + ring);
writeFile("vis.0", "/RING/LAST_PIC.jpg", body);
});
//+++++++++++ Script Livestream ++++++++++++++
on({id: '0_userdata.0.RINGCAM.VIS.ClipID', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
await wait(100);
var request = require('request');
var fs = require('fs');
var ring1 = getState('0_userdata.0.RINGCAM.VIS.ClipID').val;
console.log("RING-Video erzeugt: " + ring1);
const body1 = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + getState('0_userdata.0.RINGCAM.VIS.ClipID').val);
// const body1 = fs.readFileSync('/opt/iobroker/iobroker-data/ring_0/snapshot/' + ring1);
writeFile("vis.0", "/RING/LAST_CLIP.mp4", body1);
});
//*/
Hier in diesem Bild siehst du es.
DU hast wahrscheinlich unter vis.0 den Ordner RING erstellt? Oder etwas anderes? Wie kann ich diesen Fehler beheben oder was steckt dahinter?
Bei dem Script für die letzten 30 Tage:
var my_1, my_2, my_3, my_4, my_5, my_6, my_7, my_8, my_9, my_10, my_11, my_12, my_13, my_14, my_15, my_16, my_17, my_18, my_19, my_20, my_21, my_22, my_23, my_24, my_25, my_26, my_27, my_28, my_29, my_30;
on({id: '0_userdata.0.RINGCAM.VIS.Trigger-Videoselection', change: "ne"}, async function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
my_1 = getState("0_userdata.0.RINGCAM.History.Video-Nr_1").val;
my_2 = getState("0_userdata.0.RINGCAM.History.Video-Nr_2").val;
my_3 = getState("0_userdata.0.RINGCAM.History.Video-Nr_3").val;
my_4 = getState("0_userdata.0.RINGCAM.History.Video-Nr_4").val;
my_5 = getState("0_userdata.0.RINGCAM.History.Video-Nr_5").val;
my_6 = getState("0_userdata.0.RINGCAM.History.Video-Nr_6").val;
my_7 = getState("0_userdata.0.RINGCAM.History.Video-Nr_7").val;
my_8 = getState("0_userdata.0.RINGCAM.History.Video-Nr_8").val;
my_9 = getState("0_userdata.0.RINGCAM.History.Video-Nr_9").val;
my_10 = getState("0_userdata.0.RINGCAM.History.Video-Nr_10").val;
my_11 = getState("0_userdata.0.RINGCAM.History.Video-Nr_11").val;
my_12 = getState("0_userdata.0.RINGCAM.History.Video-Nr_12").val;
my_13 = getState("0_userdata.0.RINGCAM.History.Video-Nr_13").val;
my_14 = getState("0_userdata.0.RINGCAM.History.Video-Nr_14").val;
my_15 = getState("0_userdata.0.RINGCAM.History.Video-Nr_15").val;
my_16 = getState("0_userdata.0.RINGCAM.History.Video-Nr_16").val;
my_17 = getState("0_userdata.0.RINGCAM.History.Video-Nr_17").val;
my_18 = getState("0_userdata.0.RINGCAM.History.Video-Nr_18").val;
my_19 = getState("0_userdata.0.RINGCAM.History.Video-Nr_19").val;
my_20 = getState("0_userdata.0.RINGCAM.History.Video-Nr_20").val;
my_21 = getState("0_userdata.0.RINGCAM.History.Video-Nr_21").val;
my_22 = getState("0_userdata.0.RINGCAM.History.Video-Nr_22").val;
my_23 = getState("0_userdata.0.RINGCAM.History.Video-Nr_23").val;
my_24 = getState("0_userdata.0.RINGCAM.History.Video-Nr_24").val;
my_25 = getState("0_userdata.0.RINGCAM.History.Video-Nr_25").val;
my_26 = getState("0_userdata.0.RINGCAM.History.Video-Nr_26").val;
my_27 = getState("0_userdata.0.RINGCAM.History.Video-Nr_27").val;
my_28 = getState("0_userdata.0.RINGCAM.History.Video-Nr_28").val;
my_29 = getState("0_userdata.0.RINGCAM.History.Video-Nr_29").val;
my_30 = getState("0_userdata.0.RINGCAM.History.Video-Nr_30").val;
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 1) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_1, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 2) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_2, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 3) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_3, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 4) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_4, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 5) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_5, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 6) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_6, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 7) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_7, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 8) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_8, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 9) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_9, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 10) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_10, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 11) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_11, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 12) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_12, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 13) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_13, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 14) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_14, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 15) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_15, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 16) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_16, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 17) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_17, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 18) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_18, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 19) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_19, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 20) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_20, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 21) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_21, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 22) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_22, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 23) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_23, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 24) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_24, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 25) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_25, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 26) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_26, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 27) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_27, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 28) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_28, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val ==29) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_29, 100, false);
}
if (getState("0_userdata.0.RINGCAM.VIS.Trigger-Videoselection").val == 30) {
setStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection"/*Vis-Videoselection*/, my_30, 100, false);
}
});
Wie muss der Datenpunkt Trigger-VIdeoselection aussehen?
Also Zustandstyp (Zahl, Zeichenkette, Logikwert...?)
Rolle = (State)?
Und du hast da wohl den Ordner History unter 0_userdata.0.RINGCAM erstellt. Darin wiederum die 30 Datenpunkte. Wie sehen die aus in Sachen (Zustandstyp und Rolle)?
Ich glaube mit diesem Angaben könnte es auch bei mir bald funktionieren.
Grüße
@agria4800 said in Script - Wöchentl. Löschen von Videos (Ring-Klingelanlage):
Hi,
das sieht ja mega aus, wäre genau das, was ich suche, aber selbst nicht im Stande bin zu erstellen. Vielen Dank schonmal dafür!
Ich habe ein paar Fragen zu deinen Skripten.
was macht dieser Befehl? (die anderen Blöcke verstehe ich soweit.)
Und was macht das Skript genau? Es erstellt etwas in dem Userdata Ordner, sobald Ring ne neue Datei erstellt?
Ich habe bislang noch keine Skripte in meine VIS eingebaut.
Muss ich das einfach im VIS unter der VIEW rechts unter dem Reiter Skripte einfügen?
JS Skript für die letzten 30 Tage, genau das gleiche, wo kopiere ich das hin?
Kurze Frage zur VIS:
Wie unterscheiden sich die Zahlen direkt über und unter dem Videoimage zu den kleineren Zahlen die ganz unten sind.
Ich weiß, das sind viele Fragen. Falls du mir die alle beantworten kannst wäre ich sehr dankbar.
Echt Super, dass du den Code zur Verfügung stellst.
Grüße Jonas
Leider habe ich noch keine Meldungen erhalten.
Auf meine eigenen Recherchen habe ich herausgefunden, dass der Iobroker wohl im Normalfall keine rechte hat, einen sudo Befehl auszuführen.
Gibt es denn eine Anleitung, wie ich dem Iobroker das Recht geben kann, genau die obigen Befehle auszuführen?
Ich bin für jede Hilfe dankbar. Zur Veranschaulichung hier noch ein Screenshot meines Blocklyskriptes.
@liv-in-sky
ich habe das komplette Tablett neu aufgesetzt und nun herausgefunden, dass es an dem Image lag, welches den letzten Snapshot des Ring adapters anzeigt. Dieses habe ich aus der VIS gelöscht und neu eingefügt. Fehler ist nun weg.
Das Problem mit dem Kill ohne ROOT habe ich durch zwei Befehle (BackButton) ersetzt. Das klappt nun so.
Problem gelöst.
Danke trotzdem!
Hallo Zusammen,
der Ring Adapter speichert alle Videos und JPGs in einem bestimmten Ordner. Damit die Datenmassen nicht überhand nehmen und das wöchentliche Backup des IObroker auch ordentlich durchgeführt werden kann, möchte ich ein Skript mit Blockly erstellen, welches wöchentlich, kurz bevor das Backup durchgeführt wird, die Videos und Bilder löscht.
Könnte wie folgt funktionieren oder habe ich etwas vergessen?
schedule("30 2 * */1 4", async function () {
exec('sudo -u iobroker rm ./iobroker-data/files/ring.0/doorbell_86292617/*.mp4');
console.debug("exec: " + 'sudo -u iobroker rm ./iobroker-data/files/ring.0/doorbell_86292617/*.mp4');
});
schedule("35 2 * */1 4", async function () {
exec('sudo -u iobroker rm ./iobroker-data/files/ring.0/doorbell_86292617/*.jpg');
console.debug("exec: " + 'sudo -u iobroker rm ./iobroker-data/files/ring.0/doorbell_86292617/*.jpg');
});
Im Prinzip soll er jeden Donnerstag um 02:30 den ersten Befehl (MP4) und um 02:35 Uhr den zweiten Befehl (JPG) ausführen.