@bolliy Hi Stephan,
danke - so funktioniert es.
- Instanz: Proxy Port 502
- Instanz: Proxy Port 503
Modbus Ports bei beiden Instanzen 502
@bolliy Hi Stephan,
danke - so funktioniert es.
Modbus Ports bei beiden Instanzen 502
@bolliy Hi Stephan,
danke - so funktioniert es.
Modbus Ports bei beiden Instanzen 502
@dragst3r Ich habe an jedem WR einen Dongle. In der Fritzbox sehe ich zwei Geräte mit jeweils einer anderen IP und die jabe ich auch jeweils eingestellt. Das ist auch die gleiche IP, die mir jeweils in den Komm. Einstellungen in der Fusion Solar App angezeigt wird.
@bolliy Vielen Dank für den Adapter,
leider habe ich damit noch ein Problem:
Zu meiner Konfig: Ich habe zwei SUN2000 WR und daher zwei Instanzen installiert und konfiguriert:
Nun haben beide Instanzen den Port 502 eingestellt, weswegen es zum Fehler kommt: Modbus-proxy TCP Port 502 is now in use!
Wie löse ich das am Besten auf?
EDIT: wenn ich einen der Adapter auf einen anderen Port stelle, z.b. 503, dann kommt keine Verbindung zustande:
sun2000.0
2025-05-02 10:31:55.950 error Modbus-proxy TCP Port 502 is now in use!
sun2000.1
2025-05-02 10:31:53.213 warn Couldnt connect Modbus TCP to 192.168.178.52:503 connect ECONNREFUSED 192.168.178.52:503
@homoran Danke - gefunden.
Da wiederum braucht es die geschweiften Klammern:
@homoran du hattest doch recht. Und zusätzlich musste ich noch die geschweiften Klammern entfernen, die bei der Objektauswahl automatisch um die Variable herumgelegt wurden.
Mein JS stellt auch noch eine Farbvariable und einen Text ein:
Kann ich die Farbe irgendwie dem Text zuordnen?
@homoran ja stimmt, aber das ändert nix, wenn ich das weglasse:
oder ein String Widget benutze:
ich verstehe einfach nicht was da nicht stimmt
In "voranstellen" braucht das glaub nicht, denn im Objekt Auswahldialog steht und es heißt ja auch voranstellen html
@homoran ja da hast du eigentlich recht, aber mir wird dennoch nix angezeigt:
@homoran okay, ich kann das javascript natürlich verschieben. Aber ich bekomme dennoch keinerlei Werte in der VIS angezeigt.
Das Script funktioniert erstmal und tat, was es soll.
Nun wollte ich mir noch die Restzeiten anzeigen lassen. Dafür habe ich mir in VIS-2 ein html widget eingebunden,
im Feld Allgemein "html" habe ich folgenden Code eingebaut:
<div id="countdown" style="font-size: 28px; font-weight: bold; text-align: center;"></div>
<script>
const countdownElement = document.getElementById("countdown");
const wartezeitDP = "javascript.0.Logik.Heubedampfer.Wartezeit";
const arbeitszeitDP = "javascript.0.Logik.Heubedampfer.Restzeit";
function updateCountdown() {
let wartezeit = getState(wartezeitDP)?.val || 0;
let arbeitszeit = getState(arbeitszeitDP)?.val || 0;
if (wartezeit > 0) {
let minutes = Math.floor(wartezeit / 60);
let seconds = wartezeit % 60;
countdownElement.innerHTML = `Wartezeit: ${minutes}:${seconds.toString().padStart(2, '0')} min`;
countdownElement.style.color = "#FFA500"; // Orange für Wartezeit
} else if (arbeitszeit > 0) {
let minutes = Math.floor(arbeitszeit / 60);
let seconds = arbeitszeit % 60;
countdownElement.innerHTML = `Heubedampfer läuft: ${minutes}:${seconds.toString().padStart(2, '0')} min`;
countdownElement.style.color = "#00FF00"; // Grün für aktive Betriebszeit
} else {
countdownElement.innerHTML = "Kein aktiver Timer";
countdownElement.style.color = "#FF0000"; // Rot für keine Aktivität
}
}
// Aktualisierung alle 1 Sekunde
setInterval(updateCountdown, 1000);
updateCountdown();
</script>
In den Variablen javascript.0.Logik.Heubedampfer.Wartezeit und javascript.0.Logik.Heubedampfer.Restzeit wird durch mein JS skript regelmäßig die Restzeit (in s) aktualisiert. Dennoch wird in der VIS-2 nichts angezeigt.
Was habe ich falsch gemacht?
@paul53 Danke dir.
Ich habe das etwas angepasst. Was hälst du davon?
const idUeber = "alias.0.Erzeugung.Ueberschuss"; // Stromüberschuss
const idPlug = "hs100.0.192_168_178_29.state"; // Steckdose
const idStatus = "javascript.0.Heubedampfer.Status"; // Heubedampfer-Zustand
const idVerbrauch = "alias.0.Verbrauch.Bedampfer"; // Verbrauchswert
var delayOn = null;
// Überprüfung bei jeder Änderung des Stromüberschusses
on({id: idUeber, change: "ne"}, function(dp) {
let überschuss = dp.state.val;
let status = getState(idStatus)?.val || "Leer";
if (status === "Bereit" && überschuss >= 2000 && !delayOn) {
log("Genug Überschuss vorhanden! Startet in 5 Minuten...");
// Verzögerung von 5 Minuten, um sicherzustellen, dass der Überschuss stabil bleibt
delayOn = setTimeout(function() {
log("Starte Heubedampfer für 60 Minuten!");
setState(idPlug, true);
setState(idStatus, "Arbeitet", true);
setState(idVerbrauch, 2000); // Verbrauch direkt setzen
// Nach exakt 60 Minuten abschalten
setTimeout(function() {
log("60 Minuten sind um. Heubedampfer stoppt.");
setState(idPlug, false);
setState(idStatus, "Fertig", true);
setState(idVerbrauch, 0); // Verbrauch wieder auf 0 setzen
delayOn = null;
}, 3600000); // 60 Minuten
}, 300000); // 5 Minuten Verzögerung
}
});
// Aktualisierung des Verbrauchswerts, wenn sich der Steckdosenstatus ändert
on({id: idPlug, change: "ne"}, function (obj) {
let status = obj.state.val; // Zustand der Steckdose
let verbrauch = status ? 2000 : 0; // Wenn an -> 2000W, wenn aus -> 0W
setState(idVerbrauch, verbrauch);
});