NEWS
[GELÖST] Javascript von einer ext. Seite Einbinden in ioBroker
-
Guten Morgen,
kann mir jemand sagen ob das oben gefragte funktioniert oder nicht?
Ich möchte ungern viel Zeit investieren um dann festzustellen das dies nicht geht, ich bin auch noch nicht so Fit was Javascript betrieft.
Ich Danke euch und ein schönen Gruß,
Tom
-
https://forum.iobroker.net/viewtopic.php?f=21&t=11987&p=126520#p127232 lässt sich sicherlich auf bis zu 100 Bildern erweitern.
-
dann müsste ich z.B. im Widget Image 8 alle 100 Bilder hinterlegen? `
Von VIS habe ich keine Ahnung :(
@tomdeboom:anstatt "states: {" müsste ich aus der neuen funktion "phase" benutzen? `
states (Zustandstexte) ist eine definierte Eigenschaft von Datenpunkten in ioBroker. Wenn mehr Bilder gewünscht werden, muss die Anzahl erweitert werden (pro Bild ein Integer-Wert 0…N). -
anstatt "states: {" müsste ich aus der neuen funktion "phase" benutzen? `
Die states kann man auch weglassen, was bei 100 Werten zu empfehlen ist. Die Integerwerte erzeugt man dann nicht mit if(…), sondern per Berechnung.const suncalc = require('suncalc'); const idVis = 'Vis.Mondphase'; // Für Vis createState(idVis, 0, { type: 'number', min: 1, max: 100, role: 'level', }); function mpVis() { var mond = suncalc.getMoonIllumination(new Date()); var mp = mond.phase; // 0...1 mit 0 = Neumond mp = 100 * mp - 50; if(mp < 0.5) mp = mp + 100; // Neumond = 50 mp = Math.round(mp); // Integer 1 ... 100, 100 = Vollmond setState(idVis, mp, true); } mpVis(); // Skriptstart schedule("*/10 * * * *", mpVis); // alle 10 Minuten -
Hallo Paul,
vielen Dank für das Script, es funktioniert so das ich die Bild Nummer in ein State geschrieben bekomme.
Nun versuche ich gerade das Script so zu ergänzen das ich den kompletten Bildpfad als State geschrieben bekomme.
Nur bekomme ich es nicht hin, habe jetzt schon verschiedene Ansätze versucht, aber irgendwie funktioniert es nicht…
Hier mein Versuch:
const suncalc = require('suncalc'); const idVis = 'Vis.Mondphase2'; // Für Vis var pfad = "/vis.0/main/Icon/Wetter/phasenbilder/"; // createState('Vis.Image', 0, {type: 'string'}); createState('Vis.Image', pfad + mp + '.png', {type: 'string'}); // funktioniert nicht createState(idVis, 0, { type: 'number', min: 1, max: 100, role: 'level', }); function mpVis() { var mond = suncalc.getMoonIllumination(new Date()); var mp = mond.phase; // 0...1 mit 0 = Neumond mp = 100 * mp - 50; if(mp < 0.5) mp = mp + 100; // Neumond = 50 mp = Math.round(mp); // Integer 1 ... 100, 100 = Vollmond setState(idVis, mp, true); } // setState('Vis.Image', pfad + mp + '.png'); // funktioniert nicht mpVis(); // Skriptstart schedule("*/1 * * * *", mpVis); // alle 1 MinutenKannst du mir dabei helfen? Und kann ich dann später diesen State dazu nutzen um das Bild mit z.B. "basic - string img scr" mir anzeigen zu lassen?
Gruß,
Tom
-
Möchtest Du den Pfad zur png-Datei in den Datenpunkt schreiben ? Wenn ja, wozu ?
Oder möchtest Du den Inhalt der png-Datei in den Datenpunkt schreiben ? Das dürfte kaum gelingen.
@tomdeboom:Und kann ich dann später diesen State dazu nutzen um das Bild mit z.B. "basic - string img scr" mir anzeigen zu lassen? `
Wie schon weiter oben erwähnt, habe ich von VIS keine Ahnung. -
Datenpunkt wo dann der komplette Pfad mit dem jeweiligen Bild steht.
so: /vis.0/main/Icon/Wetter/phasenbilder/32.png `
Bei createState() kann die Variable mp nicht verwendet werden, da sie lokal (innerhalb einer Funktion) deklariert ist.Das setState() muss innerhalb der Funktion aufgerufen werden.
const suncalc = require('suncalc'); const idVis = 'Vis.Mondphase2'; // Für Vis const pfad = '/vis.0/main/Icon/Wetter/phasenbilder/'; createState('Vis.Image', pfad + '1.png', {type: 'string'}); createState(idVis, 0, { type: 'number', min: 1, max: 100, role: 'level', }); function mpVis() { var mond = suncalc.getMoonIllumination(new Date()); var mp = mond.phase; // 0...1 mit 0 = Neumond mp = 100 * mp - 50; if(mp < 0.5) mp = mp + 100; // Neumond = 50 mp = Math.round(mp); // Integer 1 ... 100, 100 = Vollmond setState(idVis, mp, true); setState('Vis.Image', pfad + mp + '.png', true); } mpVis(); // Skriptstart schedule("*/1 * * * *", mpVis); // alle 1 Minuten
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden