NEWS
Photovoltaik Script
-
Ich werde beizeiten das Skript auch mal testen.
Bei mir läuft zur Zeit ein shell Skript auf dem raspi und schiebt die Daten in sysvar auf der CCU.
Bei meinem piko muss ich allerdings User und pwd eingeben. Ich habe das hier im Skript aber nicht gefunden oder übersehen.
Gruß
Rainer
-
oder gehört es nicht zum guten (Programmier)Ton? `
Typ 'mixed' zu verwenden, wenn es sich um Zahlenwerte handelt, ist kein guter Programmierstil. -
Bei meinem piko muss ich allerdings User und pwd eingeben. Ich habe das hier im Skript aber nicht gefunden oder übersehen. `
Hast du übersehen.
Hab ich oben unter Variablen definiert. Und wird dann im Script bearbeitet.
Mit freundlichen Grüßen
-
Aber doch nur pass, oder?
User sehe ich nicht.
@bahnuhr:var IPAnlage = '192.168.abc.de'; // IP der Photovoltaik-Anlage
var PassAnlage = 'xxxxx'; // Password der Photovoltaik-Anlage
var logging = true; `
if (logging) log("Piko 5.5 auslesen");
request('http://SN-Login:' + PassAnlage +'@' + IPAnlage, function (error, response, body) { `
Gruß
Rainer
-
Ich glaube User ist bei mir dieses
Sn-Login
Muss ich heute Abend mal nachschauen.
Mit freundlichen Grüßen
-
Habe als type nun number gesetzt (bei createState).
Bei den Variablen wurde teilweise string eingelesen. Diese musste ich wandeln mit parseFloat.
(hoffe das war richtig).
Danach habe ich die mit NaN auf 0 geetzt.
Läuft jetzt so.
Wenn dir noch etwas auffällt, dann Rückinfo an mich, Danke.
Nutzername bei den Variablen ergänzt.
Achso, nun das Script:
! ````
/* Photovoltaik: Piko 5.5 Anlage
! Diese Script stammt aus dem Homematic Forum. Von wem weiß ich nicht mehr.
Lief bei mir als ccu.io.Script einwandfrei.
! Dieses Script habe ich nun auf iobroker umgeschrieben.
! @bahnuhr
02.01.2017 Dieter Müller
*/
! //Variaben
var idaktuell = 'javascript.0.Status.Photovoltaik.Leistung_aktuell';
var idTag = 'javascript.0.Status.Photovoltaik.Tagesleistung';
var idall = 'javascript.0.Status.Photovoltaik.Leistung_gesamt';
var idP1 = 'javascript.0.Status.Photovoltaik.Leistung_Strang1';
var idP2 = 'javascript.0.Status.Photovoltaik.Leistung_Strang2';
! var NameAnlage = 'abcdefgh'; // Nutzername der Photovoltaik-Anlage
var PassAnlage = 'abcde'; // Password der Photovoltaik-Anlage
var IPAnlage = '192.168.xxx.xx'; // IP der Photovoltaik-Anlage
! var logging = true;
! // Ab hier nix mehr ändern
createState(idaktuell, {
type: 'number',
name: 'Leistung aktuell',
min: 0,
def: 0,
role: 'value'
});
createState(idTag, {
type: 'number',
name: 'Tagesleistung',
min: 0,
def: 0,
role: 'value'
});
createState(idall, {
type: 'number',
name: 'Leistung gesamt',
min: 0,
def: 0,
role: 'value'
});
createState(idP1, {
type: 'number',
name: 'Leistung Strang 1',
min: 0,
def: 0,
role: 'value'
});
createState(idP2, {
type: 'number',
name: 'Leistung Strang 2',
min: 0,
def: 0,
role: 'value'
});
! function Piko() {
var cheerio = require('cheerio');
var request = require('request');
! if (logging) log("Piko 5.5 auslesen");
request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) {
$ = cheerio.load(body);
var d = $("td");
var pwr = parseFloat(d.eq(14).text().trim());
var day = parseFloat(d.eq(26).text().trim());
var all = parseFloat(d.eq(17).text().trim());
var v1 = d.eq(56).text().trim();
var i1 = d.eq(65).text().trim();
var p1 = v1 * i1;
var v2 = d.eq(82).text().trim();
var i2 = d.eq(91).text().trim();
var p2 = v2 * i2;
if (isNaN(pwr)) pwr = 0;
if (isNaN(p1)) p1 = 0;
if (isNaN(p2)) p2 = 0;if (logging) log("Leistung aktuell= " + pwr); if (logging) log("Tagesleistung= " + day); if (logging) log("Leistung gesamt= " + all); if (logging) log("Leistung Strang 1= " + p1); if (logging) log("Leistung Strang 2= " + p2);
! setState(idaktuell, pwr);
setState(idTag, day);
setState(idall, all);
setState(idP1, p1);
setState(idP2, p2);
});
}
! schedule("3,7,12,17,22,27,32,37,42,47,52,57 * * * *", function () {
log ("Auslöser: Schedule");
Piko();
});Viel Spass damit. mfg Dieter
-
-
Skripte künftig bitte innerhalb von Code-Tags posten. `
Ich hab es gerade korrigiertGruß
Rainer
-
Hallo,
ich besitze auch den Wechselrichter Piko 5.5 und würde das Script gerne mal testen. Leider hakt es da bei mir. Im Logfile bekomme ich folgende Fehlermeldung
` > 11:17:00.496 [error] javascript.0 script.js.common.Piko_auslesen: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/cheerio' at Piko (script.js.common.Piko_auslesen:66:27), at Object. (script.js.common.Piko_auslesen:103:4), at Job.job (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1500:34), at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:175:10), at null._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:479:11), at Timer.listOnTimeout (timers.js:92:15)11:17:00.496 [info] javascript.0 script.js.common.Piko_auslesen: Piko 5.5 auslesen `
Soweit ich das verstehe, fehlt mir das Javascript-Module cheerio. Wie komme ich denn da dran? Fehlt mir nur ein Update?
Ich habe nodejs version 4.4.5. Das ganze läuft auf eine Raspi 2.
Wäre schön, wenn mir jemand auf die Sprünge helfen könnte.
Gruß
Strizz
-
Soweit ich das verstehe, fehlt mir das Javascript-Module cheerio. Wie komme ich denn da dran? `
üblicherweise in der Konfiguration des JS-Adapters eintragen - Adapter neu starten und gut ist.Fehlt mir nur ein Update? `
kann ich nicht beurteilen, da ich es nicht weiß. Sollte das Paket schon irgendwo in einer veralteten Version drin sein, bringt natürlich der Eintrag in der Konfiguration nichts.Gruß
Rainer
-
Hallo Rainer,
Neustart hat nicht geholfen, Neuinstallation auch nicht. Kein Cheerio in dem besagten Verzeichnis.
Noch eine Idee?
Strizz
-
-
Hallo Rainer,
wo steht denn so was? Aber genau das war es. Script läuft. Wenn jetzt nur noch die Sonne scheinen würde!
Herzlichen Dank
Ulrich
-
wo steht denn so was? `
Bereits in meiner ersten AntwortDu hast anscheind das darauffolgende zwar durchgeführt, aber nicht die Grundlagen dafür gelegt
Außerdem steht es hier:
http://www.iobroker.net/?page_id=5319&l … figuration
direkt der erste Satz unter dem Bild:
> Die eigentliche Konfiguration besteht aus der Eingabe von zusätzlichen zu ladenden npm-Module (durch Komma getrennt),…
Gruß
Rainer
-
Hallo Rainer,
danke für den Hinweis. Bei mir laufen etwa 10 Javascript-Programme. Da habe ich nie ein zusätzliches npm-Module gebraucht. Deshalb bin ich auch nicht auf die Idee gekommen. Bin halt etwas ahnungslos in diesen Dingen.
Was das Script angeht, habe ich mich zu früh gefreut. Es gibt zwar keine Fehlermeldungen mehr, aber auch noch keine Werte. Ich habe auf meiner Piko 5.5 die UI-Version 06.11. Ich weiß nicht, ob es daran liegt. Aber mit pvserver:passwort@ipadresse - wie es in dem Script vorgesehen ist - , kann ich mich nicht auf dem Webserver der Piko einloggen.Werde mal weiter probieren. Wenn du noch eine Idee hast, wäre ich natürlich dankbar.
Mfg
Strizz
-
Aber mit pvserver:passwort@ipadresse - wie es in dem Script vorgesehen ist - , kann ich mich nicht auf dem Webserver der Piko einloggen `
ich schon!
Direkt in die Adresszeile eingegeben klappt das.
Hast du das richtige passwort?
Gruß
Rainer
-
Hallo Rainer,
habe es gerade noch mal mit anderen Browsern versucht. Es geht einfach nicht! Username und Passwort stimmen. Ich lande immer auf der Homepage von Piko und muss mich dann weiter per Hand einloggen. Hast du auch die UI-Version 06.11?
Mfg
Strizz
-
Wenn das das ist was bei Einstellungen steht habe ich ver 3.75
Gruß
Rainer
-
Hallo Rainer,
bei mir gibt es einen Menüpunkt "Info -> Versionen". Das sieht dann so aus wie auf dem Bild.
Ich fürchte, da hat Kostal etwas geändert.
MfG
Strizz
-
bei mir gibt es einen Menüpunkt "Info -> Versionen". Das sieht dann so aus wie auf dem Bild. `
Boa ey - wie schick :shock:ich hab wohl noch die MS-DOS Variante:
Gruß
Rainer