NEWS
Script - Wöchentl. Löschen von Videos (Ring-Klingelanlage)
-
ich vermutel mal Du verwendest einen RaspberryPi.
Ich habe das über einen CRON Job gelöst. Zwar auf einen NAS aber sollte im RaspberryPi analog sein. Einfach mal Googeln, da gibt es massenhaft anleitungen im Internet.Andreas
-
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
-
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!
-
Zum Fehler in Zeile 19 kann ich nur auf die Doku zu WriteFile verweisen:
https://nodejs.org/api/fs.html#fswritefilefile-data-options-callbackDir fehlt im Aufruf der 'callback' parameter - eine Funktion die aufgerufen wird wenn das schreiben beendet wurde, und aus der du erkennen kannst ob es erfolgreich war oder nicht.
Der Datenpunkt Trigger-Videoselection sollte eine Zahl sein, kein String.
Bei den Zeilen 7ff wird anscheinend der Dateiname der Videos gelesen. Die Datenpunkte sind also als "String" Anzulegen.
Der Eintrag
/*Vis-Videoselection*/
ist ein Kommentar der beim Erstellen des Blockly eingetragen wird und zur Darstellung im Blockly gehört. Auf den Code hat dieser Eintrag keine AuswirkungIn den Zeilen 42 bis 131 wird einer der Dateinamen der Videos aus der Liste oben in den Datenpunkt
0_userdata.0.RINGCAM.VIS.Vis-Videoselection
geschrieben, abhängig davon wie der Datenpunkt0_userdata.0.RINGCAM.VIS.Trigger-Videoselection
gesetzt ist.Ansonsten ist der Codein dem Skript für die letzten 30 Tage echt grausam.
Die 100+ Zeilen sollten sich auf das Folgende verkürzen lassen:
on({id: '0_userdata.0.RINGCAM.VIS.Trigger-Videoselection', change: "ne"}, async function (obj) { var value = obj.state.val; if (value >= 0 && value <= 30) { const newSelect = await getStateAsync('0_userdata.0.RINGCAM.History.Video-Nr_' + value) SetStateDelayed("0_userdata.0.RINGCAM.VIS.Vis-Videoselection", newSelect.val, 100, false); } });
-
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''?
-
@habi989 : sorry für dir späte Antwort...
Vorerst nochmal ein paar Worte... Ich weiss, das meine geteilten Scripte nicht optimal sind... ich habe mir diese nach und nach zusammen gebastelt gemäß dem Prinzip try and error... Falls also jemand hier überarbeiten möchte, kann er das gerne tun und teilen, vielleicht kann das dann auch mal im Adapter integriert werden... ich würde mich freuenzurück zu deinem Punkt: das Script erstellt im vis.0/Ring/ ein Foto (und zwar das letzte gemachte Foto vom Adapter)mit dem Namen Last_Pic, welches per Widget in der VIS dargestellt wird....
hier das passende Widget dazu:Wo klemmt es den noch ?
-
@habi989 sagte in Script - Wöchentl. Löschen von Videos (Ring-Klingelanlage):
Danke für die Auskünfte.
Bei diesem Script habe ich leider noch ein Problem:
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?
Korrekt, siehe Beitrag vorher
Bei dem Script für die letzten 30 Tage:
Wie muss der Datenpunkt Trigger-VIdeoselection aussehen?
Also Zustandstyp (Zahl, Zeichenkette, Logikwert...?)
Rolle = (State)?
ZeichenketteUnd 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)?
Zeichenkette
Ich glaube mit diesem Angaben könnte es auch bei mir bald funktionieren.So sieht es bei mir aus
Grüße
-
@agria4800 hallo, funktioniert die Vis bei dir noch? ich bekomme einfach keine Auflistung hin! bzw. eigentlich sehe ich gar kein video in meiner Vis!
Leider bin der absolute Anfänger was Scripte angeht, komme mehr aus der Siemens SPS ecke, hoffe du kannst mir irgendwie helfen. -
@chrislenz Aufgrund einiger Chat anfragen hier mal meine Scripte zu dem Ring Adapter V3.XX
Für die Experten unter uns: Ich bin kein Experte und habe es mir per try & error zusammen gebaut, da ist mit Sicherheit jede Menge Potenzial zum verbessern vorhanden, was gerne getan und gepostet werden darf !
Edit: Es kann sein, das noch ein paar Datenpunkte händig angelegt werden müssen, teils habe ich es aber in den Scripten mit drin....
Blockly Export_1
JS Export_2
JS Export_3
JS Export_4
Blockly Export_5
-
und hier noch die VIS View dazu:
Export Vis View
-
@agria4800
hast du noch die Einstellungen im Ring Adapter für mich? -
@ceel: na klar
-
@agria4800
wenn du jetzt noch die Icons hast ^^Ich habe noch das Problem das wenn ich Trigger-Videoselection auf 0 (also last) stelle ich bei Vis-Videoselection ein "null" im Datenpunkt stehen habe.
Edit:
Ihr müsst bei Clip_Counter und bei ZAEHLER history.0 aktivieren!