Ich nutze die Xiaomi Xiofang S1 für 18€ mit dafang hack um es ohne China Cloud zu nutzen.
Dazu kannst du noch motioneye nutzen um sie in iobroker einzubinden.
Ich nutze die Xiaomi Xiofang S1 für 18€ mit dafang hack um es ohne China Cloud zu nutzen.
Dazu kannst du noch motioneye nutzen um sie in iobroker einzubinden.
Hi,
habe gerade durch Zufall gesehen, das es den PH-803W bei Amazon gerade für 71€ bei einem Händler gibt. Da der Preis bei Aliexpress auch bei gut 110€ liegt ist das wohl ein ziemliches Schnäppchen.
Versand läuft über Prime, daher wohl eher gefahrlos, falls was nicht klappt.
Hier der Link als Affiliate-Link und hier einmal ohne Affiliate-Code
Hi,
gibt es eigentlich einen Thread wo mal Anregungen für die Visualisierung mit/in iQontrol gepostet wurden/werden?
Bin immer wieder baff, was @dslraser alles umgesetzt hat, es gibt wahrscheinlich noch einige Power User mehr die was interessantes zu zeigen haben.
Wäre doch cool wenn das mal an einer Stelle zu sehen wäre.
@booosesthasnipper said in Usertreffen: 76689 Karlsdorf- Neuthardt am 16.01.25:
Hi zusammen,
hätte auch Interesse, leider klappt der Januar Termin bei mir nicht. Komme aus Waghäusel, beruflich bin jedoch in Karlsruhe verankert.Was waren den so die Themen das letzte Mal? Habs leider zu spät gelesen.
Viele Grüße
Hi,
das letzte mal war unser initales Treffen. Da ging es um gegenseitiges Kennenlernen, außerdem haben zwei Teilnehmer ihr Smart Home mit allen Komponenten und Adaptern vorgestellt. Dabei gab es zahlreiche Diskussionen und Rückfragen.
Du und @vowill seid herzlich willkommen dazu zu kommen.
Hi zusammen,
bin selber großer iQontrol Fan und stetig dabei meine Visualisierung zu erweitern und anzupassen.
Etliche Ideen kamen auch beim Anschauen von Screenshots anderer Nutzer in irgendwelchen Diskussionen. Daher kam mir die Idee in einem Thread mal Anregungen für die Umsetzung der Visualisierung zu sammeln. Wäre cool wenn viele mitmachen (@dslraser , @s-bormann, @Roberto-Gresia, @astrakid, @siggi85 , @muuulle , @BBTown .)
@dslraser probier es mal damit
Da kannst du eigentlich alles ersetzen lassen. 0 und 1 wären dann die Keys und aktiv und inaktiv die Werte.
Hi,
Vorschlag für den nächsten Post, lasst es uns Usertreffen Karlsruhe nennen.
Karlsdorf kennen bestimmt weniger Leute und können es nicht richtig verorten wenn sie nur den Titel lesen.
@memphispdm said in iQontrol Vis Support Thread:
Hello zusammen,
finde?
EDITH: Okay ich bin doof. Hab´s gefunden. Frage die sich nun noch ergibt: Jetzt wird "0 Aus" angezeigt in er Kachel. Wie bekomme ich die 0 da raus?
Wenn du auf die Custom Einstellungen für die Eigenschaften gehst und dann bei Key Value eigene Werte anlegst solltest du bei Key 0 eintragen und bei Value "Aus". Dann sollte da nur noch Aus stehen.
Hast du vielleicht Mal mit Strg F5 aktualisiert?
Hi,
ich versuche mich grade dabei Flot Charts bei den Temp Sensoren zu hinterlegen. Daten werden bei mir in influx geloggt. Leider hab ich immer nur eine flache Linie:
Im Flot Editor sieht es auch so aus, wenn ich nicht einen längeren Zeitraum auswähle. Hab jetzt bei den Kacheln auch mal 2880 bzw 1440 min hinterlegt, das Ergebnis ist leider das gleiche.
Das sind meine Einstellungen
Und wie man sieht, sind die Werte durchaus unterschiedlich über Zeit:
Wenn ich bei Min Temp einen Wert eintrage verschwindet der Balken übrigens komplett. Auch wenn ich die Seite mit den Kacheln öffne, werden die Balken erst angezeigt und verschwinden dann nach einigen Sekunden.
Wie bekomme ich den so schöne Charts hin, wie es im iQontrol Wiki zu sehen ist?
Lösung gefunden
Ich hab mir die URL des Flot Chart Widgets mal geholt und rumexperimentiert und URL Parameter ergänzt. Erfolg hatte ich als ich &l%5B0%5D%5Binstance%5D=influxdb.0 angehängt habe.
Kann es sein, das iQontrol bei mehr als einer History Instance nicht weiß welche es nehmen soll @s-bormann ?
ciao
Martin
Hi @arteck, was ist der Grund dafür ?
Hab zwei javascript Instanzen, eine auf der ich Skripte teste und eine wo die produktiven laufen. Dachte wenn ich teste und der Adapter mal abstürzt läuft der Rest trotzdem weiter.
Daher schien es mir klug, die Datenpunkte unabhängig vom Adapter abzulegen
@haselchen schau dir mal frigate an. Ist ein Videosystem in das du Kameras einbindest und das Objekte wie Mensch oder Katze erkennen kann. Es gibt einen Adapter für iobroker der dann Telegram Nachrichten triggern kann.
Hi,
Es gibt auch einen Alarm Adapter für iobroker. Reicht der dir nicht aus?
Vielleicht könntet ihr ja eure Anstrengungen kombinieren um ein noch besseres "Produkt" zu erzeugen.
@beowolf said in PV Überwachung hoymiles:
@martinschm sagte in PV Überwachung hoymiles:
nutze aktuell dieses Skript
Wo kommen diese 78,2 W her? Wo wird das berechnet?
Hi, ja wird berechnet aus den Werten der anderen Module.
@beowolf said in PV Überwachung hoymiles:
@martinschm
Noch eine Frage.Warum baust du die Konstante "minProduction = 5" ein, die dann später nicht verwendet wird?
Ist da noch etwas geplant?
Hi, nein das ist ein Überbleibsel aus der ersten Version.
@ralf-2 said in PV Überwachung hoymiles:
@martinschm
Wäre zwar schön aber bestimmt nicht zwingend nötig.
Ich würde einfach die Erträge der einzelnen Module Module für einen Tag aufsummieren und dann bei Abweichung von x Prozent eine Meldung geben.
Bedenke dabei, das vielleicht auch etwas ein Modul mal verschatten kann (Handwerkeraute, oder so etwas). Ich würde das einfach mal eine Woche ohne Alarm laufen lassen und dann den Grenzwert in Prozent daraus ableiten.
Das bekommen wir schon als Teamarbeit hier im Forum hin. Daten solltest du mal im Vorfeld sammeln.
Ich hab mal mit perplexity.ai ein paar Runden gedreht und nutze aktuell dieses Skript
const wrThreshold = 0.7;
const moduleThreshold = 0.7;
const minProduction = 5;
const telegramInstance = 'telegram.0';
const warnDelay = 15 * 60 * 1000; // 15 Minuten in ms
// Gruppen-Konfiguration wie gehabt
const groups = [
{
name: "Zaun",
wrs: [
{ id: "xx", name: "WR1", moduleCount: 6 },
{ id: "xx", name: "WR2", moduleCount: 6 },
{ id: "xx", name: "WR3", moduleCount: 6 }
]
},
{
name: "Gartenhütte",
wrs: [
{ id: "xx", name: "WR4", moduleCount: 4 },
{ id: "xx", name: "WR5", moduleCount: 4 }
]
}
];
// Statusspeicher
if (!globalThis.wrStatus) globalThis.wrStatus = {};
function checkWRs() {
let now = Date.now();
groups.forEach(group => {
let wrPowers = [];
let activeWRs = [];
// 1. Prüfe, welche WR produzieren
group.wrs.forEach((wr, i) => {
const producingState = getState(`opendtu.0.${wr.id}.producing`).val;
const isProducing = producingState === true || producingState === 'true';
if (isProducing) {
let wrPower = getState(`opendtu.0.${wr.id}.power_dc`).val;
wrPowers[i] = wrPower;
activeWRs.push({ index: i, ...wr, wrPower });
} else {
wrPowers[i] = 0;
}
});
// 2. WR-Vergleich (nur aktive WRs und erst nach 15 Minuten)
if (activeWRs.length > 1) {
let avgWR = activeWRs.reduce((sum, wr) => sum + wr.wrPower, 0) / activeWRs.length;
activeWRs.forEach(wr => {
let status = globalThis.wrStatus[wr.name] || { warnSince: null, warned: false };
if (wr.wrPower < avgWR * wrThreshold) {
if (!status.warnSince) status.warnSince = now;
if (!status.warned && (now - status.warnSince) >= warnDelay) {
sendTo(telegramInstance, 'send', {
text: `⚠️ *WR-Warnung (${group.name})*: ${wr.name} liefert seit 15 Minuten nur ${wr.wrPower} W (Durchschnitt: ${avgWR.toFixed(1)} W)`
});
status.warned = true;
}
} else {
if (status.warned) {
sendTo(telegramInstance, 'send', {
text: `✅ *Entwarnung (${group.name})*: ${wr.name} liefert wieder ausreichend Leistung.`
});
}
status.warnSince = null;
status.warned = false;
}
globalThis.wrStatus[wr.name] = status;
});
}
// 3. Modulvergleich je WR (nur bei aktiven WRs, erst nach 15 Minuten)
activeWRs.forEach(wr => {
let modulePowers = [];
for (let m = 1; m <= wr.moduleCount; m++) {
let modPower = getState(`opendtu.0.${wr.id}.dc.input_${m}.power`).val;
modulePowers[m - 1] = modPower;
}
let avgModule = modulePowers.reduce((a, b) => a + b, 0) / wr.moduleCount;
modulePowers.forEach((mp, idx) => {
let key = `${wr.name}_modul${idx+1}`;
let status = globalThis.wrStatus[key] || { warnSince: null, warned: false };
if (mp < avgModule * moduleThreshold) {
if (!status.warnSince) status.warnSince = now;
if (!status.warned && (now - status.warnSince) >= warnDelay) {
sendTo(telegramInstance, 'send', {
text: `⚠️ *Modul-Warnung (${wr.name})*: Modul ${idx + 1} liefert seit 15 Minuten nur ${mp} W (Durchschnitt: ${avgModule.toFixed(1)} W)`
});
status.warned = true;
}
} else {
if (status.warned) {
sendTo(telegramInstance, 'send', {
text: `✅ *Entwarnung (${wr.name})*: Modul ${idx + 1} liefert wieder ausreichend Leistung.`
});
}
status.warnSince = null;
status.warned = false;
}
globalThis.wrStatus[key] = status;
});
});
// 4. Überwachung nicht-produzierender WRs (wie gehabt, ggf. auch mit 15min-Verzögerung anpassen)
group.wrs.forEach((wr, i) => {
const producingState = getState(`opendtu.0.${wr.id}.producing`).val;
const isProducing = producingState === true || producingState === 'true';
let status = globalThis.wrStatus[wr.name + "_prod"] || { warnSince: null, warned: false };
if (!isProducing) {
let anyOtherProducing = group.wrs.some((otherWr, otherIdx) => {
if (otherIdx !== i) {
const otherProducingState = getState(`opendtu.0.${otherWr.id}.producing`).val;
return otherProducingState === true || otherProducingState === 'true';
}
return false;
});
if (anyOtherProducing) {
if (!status.warnSince) status.warnSince = now;
if (!status.warned && (now - status.warnSince) >= warnDelay) {
sendTo(telegramInstance, 'send', {
text: `🔴 *Ausfall (${group.name})*: ${wr.name} produziert seit 15 Minuten nichts, obwohl andere laufen!`
});
status.warned = true;
}
} else {
status.warnSince = null;
status.warned = false;
}
} else {
if (status.warned) {
sendTo(telegramInstance, 'send', {
text: `✅ *Entwarnung (${group.name})*: ${wr.name} produziert wieder!`
});
}
status.warnSince = null;
status.warned = false;
}
globalThis.wrStatus[wr.name + "_prod"] = status;
});
});
}
schedule('*/2 * * * *', checkWRs);
Das ist die zweite Version, die erste hat zu viele Meldungen in den Morgen- und Abendstunden gebracht wenn einzelne Module kurz verschattet sind.
Das Skript vergleicht die Module eines WRs miteinander und warnt wenn ein Module nach 15 min immer noch hinter den anderen herhinkt. Außerdem vergleicht es die WRs innerhalb von zwei Gruppen (wo die Module jeweils gleich ausgerichtet sind) miteinander.
@beowolf said in PV Überwachung hoymiles:
Der Opendtu Adapter zeigt doch bei jedem WR die Datenpunkte "producing" und "last_update" aus. Den Datenpunkt "available" gibt es auch noch.
Da ist doch alles vorhanden was man braucht.
Leider nicht ganz. producing bezieht sich halt nur auf einen WR, aber wenn mal ein Modul ausfällt bekommst du es so nicht mit.
@ralf-2 said in PV Überwachung hoymiles:
@martinschm sagte in PV Überwachung hoymiles:
Über eine openDTU ist die Anlage in iobroker eingebunden.
Ich weiß nicht, was OpenDPU an weiteren Datenpunkten liefert, ggf. kann man hier auch noch irgendwelche Fehlerstatus auslesen und mit berücksichtigen. Aber dein Ansatz ist erst einmal gut und wohl richtig.
Fehlerstatus wird aktuell leider nicht mitgeliefert. Hab ich schon ein Feature requests zu aufgemacht.
Hi,
Ich habe Ende letzten Jahres eine Zaun PV mit 26 Modulen und 5 hoymiles Wechselrichtern selber gebaut.
Über eine openDTU ist die Anlage in iobroker eingebunden.
Jetzt ist mir letztens eher zufällig aufgefallen, das ein PV Modul keine Leistung bringt. Der Gesamtbetrag war knapp ein Drittel niedriger als der der benachbarten Module. Schien also schon eine Weile ein Problem vorzuliegen.
Heute ist mir dann aufgefallen das ein WR hing und der Ertrag fast null war.
Ich würde das ganze gerne automatisch überwachen. Da der Ertrag stark vom Wetter abhängig ist machen dynamische Grenzwerte wahrscheinlich am meisten Sinn.
Wie würdet ihr das überwachen?
Hab überlegt den Durchschnitt über die anderen Module am gleichen WR zu bilden und dann ein Alarm wenn der Wert mehr als 10% oder so drunter liegt.
Und auf Ebene der WRs schauen ob einer mehr als 10% hinter den anderen herhinkt.
Gibt es andere Ideen?
@arteck said in Tester für Zigbee Adapter 2.0.x gesucht:
@martinschm sagte in Tester für Zigbee Adapter 2.0.x gesucht:
@asgothian said in Tester für Zigbee Adapter 2.0.x gesucht:
@martinschm 'die' ist gut. 6 von 70 geräten. Gib denen Zeit.
A.
Wenn ich auf den Pairing Button klicke bekomme ich noch diese MEldung
Error: Failed to open the network: AssertionError [ERR_ASSERTION]: Cannot permit join for more than 254 seconds. at Controller.permitJoin (/opt/iobroker/node_modules/zigbee-herdsman/dist/controller/controller.js:245:39) at ZigbeeController.permitJoin (/opt/iobroker/node_modules/iobroker.zigbee/lib/zigbeecontroller.js:659:33) at Commands.letsPairing (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:217:31) at Commands.onMessage (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:63:34) at Zigbee.<anonymous> (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:20:48) at Zigbee.emit (node:events:530:35) at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/cjs/lib/adapter/adapter.js:7262:20) at Immediate._onImmediate (file:///opt/iobroker/node_modules/@iobroker/db-states-redis/build/esm/lib/states/statesInRedisClient.js:291:37) at process.processImmediate (node:internal/timers:483:21). undefined
im ernst... stell de timer auf 240.. dann läuft es
Ja im Ernst. Verstehe den Kommentar ehrlicherweise auch gar nicht.
Mir, wird an einer Stelle, an der dies bisher nicht auftrat eine für technische Laien kryptische Fehlermeldung gebraucht. Die hab ich hier gemeldet und nach einer Lösung gefragt.
Nicht mehr nicht weniger. Es war auch keine Kritik dabei oder eine Forderung nach einem sofortigen Fix.
Da stell ich mir im Ernst die Frage ob das der richtige Ton im Forum ist.
@asgothian said in Tester für Zigbee Adapter 2.0.x gesucht:
@martinschm 'die' ist gut. 6 von 70 geräten. Gib denen Zeit.
A.
Wenn ich auf den Pairing Button klicke bekomme ich noch diese MEldung
Error: Failed to open the network: AssertionError [ERR_ASSERTION]: Cannot permit join for more than 254 seconds.
at Controller.permitJoin (/opt/iobroker/node_modules/zigbee-herdsman/dist/controller/controller.js:245:39)
at ZigbeeController.permitJoin (/opt/iobroker/node_modules/iobroker.zigbee/lib/zigbeecontroller.js:659:33)
at Commands.letsPairing (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:217:31)
at Commands.onMessage (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:63:34)
at Zigbee.<anonymous> (/opt/iobroker/node_modules/iobroker.zigbee/lib/commands.js:20:48)
at Zigbee.emit (node:events:530:35)
at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/cjs/lib/adapter/adapter.js:7262:20)
at Immediate._onImmediate (file:///opt/iobroker/node_modules/@iobroker/db-states-redis/build/esm/lib/states/statesInRedisClient.js:291:37)
at process.processImmediate (node:internal/timers:483:21). undefined