Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Update für das Little-Endian und das Profil-Problem bei Floats sind korrigiert.

paresy

Ich habe mal eine neue Kategorie erstellt zum Austausch von Vorlagen:

paresy

3 „Gefällt mir“

Hat funktioniert :+1::+1::+1::+1::+1:

1 „Gefällt mir“

Die Fehlermeldung bei den beiden alten Instanzen kommen auch nach dem letzten Update noch:

Kann ich da noch irgendetwas ausprobieren?

Leider bekomme ich jetzt - wo ich verschiedene weitere Adressen angelegt habe - auch die Profil Fehlermeldung wieder.

image

Wie bekomme ich heraus, an welchem Eintrag es liegt:

Könnte in die Fehlermeldung vielleicht der Name der Adresse aufgenommen werden?

Debugausgaben kommen bei mir leider auch nicht.

ich hätte noch einen nicht abgefangenen Fehler anzubieten.

Wenn ich auf den sortieren Pfeil in der Spalte mit dem Mülleimer klicke… Fragt jetzt bitte nicht warum man das tun sollte :rofl:

Viele Grüße
Stephan

@bumaas: Ja, kommt zum nächsten Update.
@da8ter: Kümmert sich @Dr.Niels drum. Ist aber ne andere Baustellen ^^

Ich habe noch Problem beim Auslesen von String gefunden. Fix kommt auch im nächsten Update.

paresy

Auf welchen der drei Punkte bezieht sich das „Ja“?:smile:

Mehr Infos, welcher Eintrag den Fehler provoziert. Bisher kann ich den nicht nachstellen :confused:

paresy

@paresy : könntest du vielleicht ein Beispiel nennen, wie die virtuellen Adressen konkret genutzt werden können? Wann werden die Aktionen zum lesen und zum Schreiben aufgerufen? Wie sähe da ein Beispielcode aus?

Ich habe noch zwei Use Cases, die ich nicht abgebildet bekomme:

  • die Betriebszeit wird bei SMA in Sekunden geliefert. Die würde ich gerne umrechnen und als String darstellen. Oder sollte es dafür ein Standardprofil geben?

  • Filtern von NaN Werten: kann ich die virtuellen Adressen eventuell benutzen, um Werte zu filtern? Oder werden die NaN Werte bereits intern gefiltert?

Könnte ich die virtuellen Adressen vielleicht für die Use Cases verwenden?

ok, stehe vielleicht auf dem Schlauch.
Wie bekomme ich meine bestehenden Modbus Adressen in das schöne neue „Modbus Gerät“ mit Listenansicht? Muss ich das alles neu anlegen, die Archivdaten auf die neuen Variablen übertragen und alle Skripte anpassen? Ich hoffe nicht… :wink:

1 „Gefällt mir“

Schreiben ist ja klar. Wenn du entweder die virtuelle Adresse bedienst (Frontend) oder per RequestAction schalten willst.
‚Lesen‘, eher berechnen wird vermutlich im Anschluss vom lesen aller echten Adresse ausgeführt.
Michael

Leider genau so. Einen automatischen Migrationspfad gibt es aktuell nicht. Theoretisch könnte aber jemand ein Skript schreiben, dass die Einzelinstanzen und deren Konfiguration in das neue Device umschreibt. Theoretisch könnte man auch die Variablen passend verschieben und die Idents anpassen und dann die alten Instanzen löschen. Das ist aber schon eine heiße Aktion.

Genau dafür sind die virtuellen Adressen. Einfach String nehmen und im Leseskript die Umrechnung durchführen. Beispiele habe ich in Beitrag zwei (Verbesserte ModBus Anbindung (IP-Symcon 7.0) - #2 von paresy) geschrieben. Leseskript wird nach jedem Lesezyklus ausgeführt. Schreibskript, sobald RequestAction auf der virtuellen Adresse aufgerufen wird.

Kannst du hier mehr ausholen? Mit den virtuellen Adressen würde dies definitiv gehen. Aber was genau willst du filtern und warum? Der NaN Wert wäre meiner Meinung nach eher ein Wert der Association des Profils. Oder willst du den als Fehlerzustand in einer separaten Bool-Variable ablegen?

paresy

Thema Virtuelle Adressen:

Ich bekomme vom Wechselrichter die momentane AC Leistung als Integer (Beispiel: 3015). Zusätzlich gibt es einen Skalierungsfaktor (derzeit 0) Ziel ist es eine brauchbare Float-Variable zu bekommen. In dem Beispiel 3015,0 Watt.

Die bisherige Formel in meinem Script war:

$ac_leistung = GetValueInteger(31571);
$scalefactor = GetValueInteger(52040);

$data = $ac_leistung *10 ** $scalefactor;

ich Ahnungsloser hab jetzt als Leseskript bei der Virtuellen Adresse folgendes versucht:
return ($VALUES[„A_2_3_40083“] *10 ** $VALUES[„A_5_3_40084“]);

A_2_3_40083 = Ident vom AC Wert
A_5_3_40084 = Ident vom Skalierungsfaktor

Läuft aber nicht, die Virtuelle Adresse bleibt 0

Jemand deinen Tipp?

Gruß Stephan

Ändert sich der Zeitstempel? Gibt es Fehlermeldungen im Meldungsfenster?

paresy

Zeitstempel ändert sich nicht.

Meldungsfenster:

06.10.2023, 15:45:23 | TimerPool | ModBus Gerät (UpdateTimer): [json.exception.parse_error.101] parse error at line 2, column 1: syntax error while parsing value - invalid literal; last read: ‚<U+000A>P‘

Ich befürchte du hast einen Skriptfehler. Ich schau mal, dass wir den Fehler besser ausgeben.

Magst du mal ein Bild vom Editor machen? Im Forum hat es ja die Formatierung der Zeile etwas zerlegt.

paresy

Hier mal die Info von Solaredge zum Scale factor:

Scale Factors

As an alternative to floating point format, values are represented by Integer values with a signed scale factor applied. The scale factor explicitly shifts the decimal point to left (negative value) or to the right (positive value).

For example, a value “Value” may have an associated value “Value_SF”

Value = “Value” * 10^ Value_SF for example:

For “Value” = 2071 and “Value_SF” = -2 Value = 2071*10^-2 = 20.71

For “Value” = 2071 and “Value_SF” = 2 Value = 2071*10^2 = 207100

Das <?php muss noch weg. Quasi nur return …

paresy

danke, so funktioniert es :slight_smile:

Was mir beim umstellen aufgefallen ist:

Ich finde es störend dass die Virtuellen Adressen nicht in der Liste zusammen mit den „richtigen“ Modbusadressen auftauchen. Das ist irgendwie für die Übersicht nicht gut.

Gruß Stephan