Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Mir hat beim Schreiben das VALUES heute aber auch gefehlt. Ich habe überlegt, ob es für alle nicht einfacher wäre, wenn wir beim Schreiben VALUES mit allen Werten der Idents befüllen würden. Denn oft braucht man die anderen Werte ja als Referenz für irgendwelche Bit-Verknüpfungen.

Wie seht ihr das?

paresy

Das wäre gut. Das bislang notwendige Lesen der der benötigten Nachbarwerte über GetObjectByIdent und GetValue ist nicht ganz so intuitiv. Da ist das Silbertablett schöner🙂

Danke für euer Feedback.

Läuft leider immer noch nicht.

Der VALUES Fehler ist jetzt weg. Aber ich erhalte immer noch diesen Fehler:

Die 480 in dem JSON kann eigentlich nicht stimmen. Wenn Zone 1 31 Grad und Zone 2 30 Grad hat ist der Originale Wert 7711.

Warning: Soll-Vorlauftemperatur Zone 1: Fehler beim Ausführen vom Schreibskript. Ergebnis: 
Warning: Trying to access array offset on value of type float in /- on line 4
{"A_2_3_2":480}, Fehler: [json.exception.parse_error.101] parse error at line 2, column 1: syntax error while parsing value - invalid literal; last read: '<U+000A>W' in /- on line 1

Der Schreibcode sieht jetzt wie folgt aus:

$zone1 = $VALUE["Soll_Vorlauftemperatur_Zone_1"];
$id_zone2 = IPS_GetObjectIDByIdent("Soll_Vorlauftemperatur_Zone_2", 30472);  
$zone2 = GetValueFloat($id_zone2);
$zone1 = dechex($zone1);
$zone2 = dechex($zone2);
$hex = $zone2 . $zone1;
$dec = hexdec($hex);
return ["A_2_3_2" => $dec];

Mein funktionierendes Skript für die alte Modbusimplementierung:

$zone1 = GetValue(17347);
$zone2 = GetValue(58476);

//Werte von Decimal in Hex konvertieren
$zone1 = dechex($zone1);
$zone2 = dechex($zone2);

$hex = $zone2. $zone1;
$dec = hexdec($hex);

RequestAction(23153, $dec)

@paresy
Alle Werte in VALUES würde es erheblich vereinfachen. Mit dem GetObjectByIdent hab ich jetzt z.B. das Problem mit der Parent ID. Wenn ich das hier als Modbus Vorlage veröffentliche müssten die Leute es händisch anpassen. Oder habt ihr eine Idee wo ich die Parent ID dynamisch her bekomme?

Viele Grüße
Stephan

Das ist noch immer falsch.
Der Wert steht in VALUE. Das ist kein Array!
Und Achtung: dechex liefert keine führende Null.
Somit wird bei 1-16 ein String mit einem Zeichen und dein Hex ist nachher falsch.
Besser ist einfach die Bytes zu schieben:

$zone1 = (int)$VALUE;
$id_zone2 = IPS_GetObjectIDByIdent("Soll_Vorlauftemperatur_Zone_2", 30472);  
$zone2 = (int)GetValue($id_zone2); //warum Float? Lesen erfolgt doch mit hexdec was nur Integer ausgibt?!
$new = ($zone2 << 8) ^ $zone1;
return ["A_2_3_2" => $new];

Michael

Kaum macht mans richtig funktioniert es. Verrückt :slight_smile:
Danke!

Bleibt nur noch der Punkt mit der Parent ID. Die würde ich ungerne hier fest eintragen. Das gibt ja später als Modbus Vorlage nur Probleme.

Gruß Stephan

Hast du einmal ausprobiert ob der vielleicht in $_IPS[‚SELF‘] ist? Immerhin ist das Script ja Teil einer Instanz.
Michael

wenn ich das Script um

$ModulID = IPS_GetParent($_IPS['SELF']);
SetValue(45845, $ModulID);

erweitere kommt leider immer 0 raus.

$_IPS['TARGET']

sollte die ParentID enthalten.

1 „Gefällt mir“

Perfekt, das war es :slight_smile:

Gruß Stephan

Ich gehöre ja immer zur Fraktion, den Datenbestand im Speicher gering zu halten. Wenn ich bei einem großen Gerät mit 80 Lesevariablen eine schreibe und für diese genau eine Variable als Vorlage brauche, wieso dann 80 Stück unnötig in den Speicher laden?

besteht perspektivisch die Möglichkeit das man die Variablen in Kategorien oder Dummy Instanzen verschieben kann? Ich hab jetzt bei meiner Wärmepumpe ca 150 Modbus Adressen (inkl. Virtueller Adressen) Da blickt man einfach nicht mehr durch. Zumal viele der Adressen nur benötigt werden um daraus andere Werte zu berechnen. Ausblenden geht ja nicht weil die dann komplett deaktiviert sind…

Gerade bei den Modbus Vorlagen, mit denen ja auch andere Arbeiten sollen, wäre eine Kategorisierung der Variablen wirklich hilfreich. Ich würde hier gerne Kategorien für „Statusvariablen“ (Read only), „Einstellungen“ (Read/write)," Heizkurve, Warmwasser etc. anlegen.

Dumme Idee?

So sieht das jetzt bei meiner WP aus…

Viele Grüße
Stephan

Ich würde mal sagen; die Vorlagen sind für diese Art von Gerät nicht die richtige Lösung.
Hier wäre ein PHP Modul sicherlich sinnvoller. Weil du dann ja wirklich nur die Variablen mit den berechneten Werten anlegen kannst.

Weil das hier:

Hat noch nie mit Instanzen funktioniert, weil dann die Logik welche Variable zu welcher Instanz gehört nicht mehr gegeben ist.

Ausblenden geht ja für das Frontend. Aber halt in der Konsole nicht.

Michael

Wir fühlen diese „Probleme“ auch bei unseren Vorlagen. Ich hätte auch gerne in der Konfiguration Kategorien, damit wir z.B. Wechselrichter 1-n hinzufügen können und man ganze Kategorien aktivieren/deaktivieren kann. Und Adressen, die nur für virtuelle Adressen eingelesen werden sollten, brauchen wir auch. Noch haben wir dafür keine Lösung am Horizont - wollte nur Feedback geben, dass wir dort noch Potenzial sehen.

Auf der Objektbaum-Seite ist es natürlich nicht so einfach Dinge zu Kategorisieren. Eine Instanz kann leider nicht in mehrere Kacheln aufgetrennt werden. Dort macht es ggf. mehr Sinn einfach die Vorlage in mehrere Teile aufzutrennen.

paresy

vielen Dank, bin dann selber auch drauf gekommen. Der Modbus Import/Export gefällt. Hab jetzt innerhalb kurzer Zeit mittels json->xls, Adressübernahme und xls → json alle E/A’s testweise übernommen.

Ich habe aber schon jetzt wegen meiner Topologie ~ 400 nach Verwendung der Digitaltaster (Digitale Eingänge SPS) und analogen Ausgänge wahrscheinlich dann über 600 Variablen verbraucht. Da ich wegen der Hardware dann auch z.B. bei Raffstore Variablen verbrauche anstelle Instanzen stoße ich da an die Grenze. Die Heizung brauch ich dann gar nicht mehr anfangen. Kann es da für solche Fälle andere Lizenzierungsmodelle geben. Ein 8fach KNX-Taster benötigt 1 Variable vermutlich. Bei mir ein 24VDC jung 8fach mit LED Rückmeldung 16 (Bool)Variablen.
Der Zuordenbarkeit halber (Text) ist mir eine Einzelabfrage der Coils und Inputs lieber anstelle die Bits aus Registern zu holen.
Weiter überlege ich die Symbox als HW anzuschaffen. Kann es da mit so einer großen Anzahl dann Leistungsprobleme geben, Verhalten in der Praxis? Die Einschränkungen in der Hilfe habe ich mir angesehen. Oder bin ich da mit meiner Vorgehensweise ohne hin auf dem falschen Weg. Ich verliere ja auch jedes mal die ID bei einem neu Import z.b. beim Actionscript im Shutter Control

<?php

// Vorlage für Aktionsskript

$id_vom_aktor_ab =36609;
$id_vom_aktor_auf =33243;


    switch($_IPS['VALUE']) {
        case 0:
            // Hier der Befehl für Öffnen
            RequestAction($id_vom_aktor_ab, 0);
            RequestAction($id_vom_aktor_auf, 1);
            break;
         case 1: // Only with ~ShutterMoveStep
            // Here is the step-open function           
            RequestAction($id_vom_aktor_ab, 0);
            RequestAction($id_vom_aktor_auf, 1);
            IPS_Sleep(500);
            RequestAction($id_vom_aktor_auf, 0);
            break;
        case 2:
            // Hier der Befehl für Stoppen
            RequestAction($id_vom_aktor_auf, 0);
            RequestAction($id_vom_aktor_ab, 0);  
            break;
        case 3: // Only with ~ShutterMoveStep
            // Here is the step-close function
              RequestAction($id_vom_aktor_auf, 0);
            RequestAction($id_vom_aktor_ab, 1);
            IPS_Sleep(500);
            RequestAction($id_vom_aktor_ab, 0);
            break;    
        case 4:
            // Hier der Befehl für Schließen
              RequestAction($id_vom_aktor_auf, 0);
            RequestAction($id_vom_aktor_ab, 1);
            break;
    }

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

Hallo,

habe für meinen SolarLog mal die neue ModBus-Anbindung ausprobiert inkl. importieren der Vorlage.

Ich muss schon sagen:
Wirklich endgeil das Ganze und absolut intuitiv … Hut ab … sehr gelungen.

Eine Frage hätte ich aber dann doch noch:
Die angelegten Variablen sind alle in englisch. Soll das so??? Gibt es die Möglichkeit, in einer Vorlage Übersetzungen einzupflegen??? Kann man die Variablen gefahrlos im Objektbaum umbenennen???

Grüße
Proxima

Du darfst die umbenennen. Aber wenn du die Vorlage anpasst und hier teilst natürlich noch geiler. Du kannst die variablen löschen und dann übernehmen um die in der neuen Sprache korrekt anzulegen.

paresy

Hallo, wäre es ev. möglich die „Mini-Doku für Virtuelle Adressen“ etwas zu erweitern?
Ich habe schon mal versucht herauszufinden was Idents sind aber ich blicke da einfach nicht durch z.B. mit dem komischen Syntax A_3_3_12345 :frowning:
Ich habe zwei Adressen, PV-Leistung und Smartmeter aktuelle LEistung. Muss ich für die beiden IDs mit IPS_SetIdent ein Ident anlegen?
Ich möchte dann gerne eine virtuelle Adresse anlegen um die beiden Werte zusammenzuzählen, was für mich dann mein Verbrauch ergeben würde.
Hätte jemand Zeit und Lust mir das Vorgehen dazu per Gelegenheit mal zu erklären :slight_smile:
Danke euch

Blende im der Konsole die Spalte Ident ein, dann sollte es sich erklären.
Michael

Noch nie gesehen!
Vielen Dank, das könnte viel erklären :slight_smile:

Schönen Abend,
Wenn man eine Modbus Adresse einzeln einfügt hat man fix die Zuordnung zur ID und verliert sie nicht. Über ein Modbus Device schaffe ich das nicht oder übersehe ich da eine Möglichkeit? Immer wenn ich eine Variable aus dem Gerät im Objektbaum verschiebe verliere ich die Zuordnung. Ich hab mir jetzt die Symbox bestellt und würde gerne über die Weihnachtsferien den kompletten Baum aufbauen. Mit dem Import wäre das viel einfacher.