Nein, wenn Du ein Plugin nach dem Neustart nicht starten möchtest, musst Du es in der etc/plugin.yaml disablen.
stop() und run() wirken bewusst nur auf aktuell geladene Plugins.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Einbindung von Modbus TCP
Einklappen
X
-
developer_mode:
wenn das plugin gestopt wird und daraufhin sh neu gestartet wird, wird die run-Funktion beim Start wieder ausgeführt. Sollte ein gestopptes Plugin nicht auch nach dem Neustart von SH gestoppt bleiben?
SH hab ich als master laufen,...Zuletzt geändert von ivande; 26.06.2024, 19:13.
Einen Kommentar schreiben:
-
Wenn Du für das Admin Modul den developer_mode auf True konfigurierst, hast Du in der Plugin Liste zu jedem Plugin zusätzliche Buttons, mit denen Du das Plugin stoppen und starten kannst.
developer_mode kannst Du entweder in der GUI (System/System Konfiguration) oder in der Datei etc/module.yaml konfigurieren. Anschließend neu starten.Zuletzt geändert von Msinn; 25.06.2024, 20:02.
- Likes 1
Einen Kommentar schreiben:
-
Gut, danke!
Ähm... mit <plugin>.stop() bzw. <plugin>.start()? ;-)
Entweder aus einer Logik oder von der Konsole aus. In der UI ist das meines Wissens noch nicht implementiert...
Einen Kommentar schreiben:
-
guten morgen,
mir fällt jetzt nichts ein, was gegen stop und run spricht.
Gibt es jetzt schon eine Möglichkeit das Plugin zu stoppen und su starten? evtl. in der SH-debug-Version?
Gruß Ivan
Einen Kommentar schreiben:
-
Moin,
aufgrund von geplanten Änderungen am SmartPlugin überlegen wir, die suspend-Funktionalität anzupassen. Die Änderungen würden sich insoweit auswirken, dass das Plugin nicht "stummgeschaltet" wird (wie jetzt in suspend), sondern angehalten (über stop()) und entweder von Hand oder per Item mit run() wieder gestartet wird.
Das setzt voraus, dass das Plugin "restartable" ist, also bei stop() alles Notwendige aufräumt und bei run() alles Notwendige wieder startet, ohne dass init(), parse_item() o.ä. notwendig wäre.
Das heißt insbesondere, dass bei zusätzlichen Threads diese in run() neu erstellt werden müssen (und nicht gestartet), da Threads aufgrund eines Fehlers (?) in Python nicht neugestartet werden können.
Dazu wäre die Frage: gibt es Funktionen, die das Plugin bei suspend() ausführen (können) soll? Oder würde stop/run für euch den gleichen Zweck erfüllen?
Wenn wir das umsetzen, kann ich bei den ggf. notwendigen Änderungen gern unterstützen.
Gruß
Sebastian
Einen Kommentar schreiben:
-
habs gerade getestet: enforce_update reicht.
Code:2024-06-03 22:54:27 DEBUG plugins.modbus_tcp_dev powerjames@: update_item:Charge-Target-State value:0 regToWrite: HoldingRegister.112.1 2024-06-03 22:54:27 INFO plugins.modbus_tcp_dev powerjames@: connected to ModbusTcpClient 192.168.178.72:502 2024-06-03 22:54:27 DEBUG plugins.modbus_tcp_dev powerjames@: write 0 to HoldingRegister.112.112 (address.slaveUnit) dataType:uint16 2024-06-03 22:54:55 DEBUG plugins.modbus_tcp_dev powerjames@: update_item:Charge-Target-State value:0 regToWrite: HoldingRegister.112.1 2024-06-03 22:54:55 INFO plugins.modbus_tcp_dev powerjames@: connected to ModbusTcpClient 192.168.178.72:502 2024-06-03 22:54:55 DEBUG plugins.modbus_tcp_dev powerjames@: write 0 to HoldingRegister.112.112 (address.slaveUnit) dataType:uint16
Einen Kommentar schreiben:
-
wenn modbus_tcp im DEBUG, dann siehst du im log diese drei Einträge, wenn das Register geschrieben wird:Zitat von whe Beitrag anzeigenwie kann ich denn am einfachsten feststellen, ob Register in die Wallbox geschrieben werden.
oder im admin-interface unter "registers to write" steht bei last_write die Uhrzeit wann das letze mal gesendetCode:2024-06-03 21:58:45 CEST DEBUG __init__ CP Server Thread-18 logomb@: update_item:VM0 value:20 regToWrite: HoldingRegister.0.1 -- (__init__.py:update_item:405) 2024-06-03 21:58:45 CEST DEBUG __init__ CP Server Thread-18 logomb@: connected to ModbusTcpClient 192.168.0.80:502 -- (__init__.py:update_item:408) 2024-06-03 21:58:45 CEST DEBUG __init__ CP Server Thread-18 logomb@: write 2000.0 to HoldingRegister.0.0 (address.slaveUnit) dataType:uint16 -- (__init__.py:__write_Registers:456)
Einen Kommentar schreiben:
-
Danke, das hatte ich gerade auch überlegt.Zitat von ivande Beitrag anzeigenreicht enforce_update nicht aus dass SH auch ein nicht verändertes Item Triggert und das Register dann gesendet wird?
in meinem log ist ja nur ein item-trigger, der beim zyklischen lesen wohl das item überschreibt.
ich versuche es morgen noch mal mit "enforce_update".
wie kann ich denn am einfachsten feststellen, ob Register in die Wallbox geschrieben werden.
ja, da stehen aber nicht die Werte drin, die gelesen werden.Zitat von ivande Beitrag anzeigenHast du einen log vom zyklischen Senden - dieser log stamm doch nur vom zyklischen Lesen?
vielleicht kann ich es auch im Webif über den Zeitstempel erkennen.
Einen Kommentar schreiben:
-
enforce_update reicht auch, dass SH auch ein nicht verändertes Item sendet.
hab enforce_change bei mir getestet:
das Item wird zyklisch mit dem gleichen Wert geschrieben (vom cyklischen-modbus-lesen) aber es wird dabei nicht erneut der selbe wert über den modbus gesendet, wenn das Item-Update vom pugin selber kommt.
Hast du einen log vom zyklischen Senden - dieser log stamm doch nur vom zyklischen Lesen?
Zitat von whe Beitrag anzeigenCode:items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames
Zuletzt geändert von ivande; 03.06.2024, 21:06.
Einen Kommentar schreiben:
-
Jetzt habe ich doch noch ein Problem mit den Updates.
meine Wallbox hat ein Register "Charge-Target-State" mit dem ich Änderungen durchführen muss, je nach Inhalt ändert die Wallbox Werte, die ich über andere Register (vorher) übertrage. Wenn ich jetzt mehrfach den gleichen Wert ändern muss, enthält dieses Register mehrfach hintereinander den gleichen Wert.
Das scheint SHNG aber nur zu schreiben, wenn ich im item "enforce_change" angebe.
wenn ich das mache, schreibt das Plagin aber auch cyclisch dieses Register und nicht nur wenn ich das item ändere.
Code:2024-06-03 19:39:16 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames 2024-06-03 19:40:16 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames 2024-06-03 19:41:17 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames 2024-06-03 19:42:17 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames 2024-06-03 19:43:17 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames 2024-06-03 19:44:18 INFO items.carstate Item Change: Aussen.Garage.PowerJames.chargetargetstate = 0 - caller: modbus_tcp_dev_powerjames
Zuletzt geändert von whe; 03.06.2024, 19:25.
Einen Kommentar schreiben:
-
Ich hatte damals im Trovis-Plugin das Connect anfangs auch nur beim Start - war unpraktisch.Zitat von whe Beitrag anzeigenMir ist beim debuggen noch aufgefallen, dass bei jedem cycle ein connect gemacht wird.
Wann auch immer eines der beteiligten Geräte (Endgerät, Adapter, Router/DNS Server, Netzwerkschnittstelle) neu gestartet wurde, musste man einen connect() initiieren.
Die dazu notwendigen Routinen zur Prüfung waren mehr Aufwand, als ein regelmäßiges connect/disconnect.
Hab das dann entsprechend auch auf jeden Poll umgestellt - ist transparenter, kostet nicht wirklich Last, und ist ohne Neustart stabil, sobald alle Geräte wieder da sind ...
/tom
Einen Kommentar schreiben:
-
Mir ist beim debuggen noch aufgefallen, dass bei jedem cycle ein connect gemacht wird.
würde es nicht reichen, nur bei der Initialisierung den connect zu machen.
schließlich wird ja regelmäßig gelesen, sodass die Verbindung erhalten bleibt.
allerdings müsste der connect wiederholt werden, wenn die Verbindung aus welchen Gründen auch immer verloren gaht.
Einen Kommentar schreiben:
-
modBusObjectTyp ist per default HoldingRegister, jedoch wurde der update-Befehl ohne angabe von modBusObjectTyp abgebrochen. Ich werde das auch noch ins nächste Update einbauen.Zitat von whe Beitrag anzeigenIn der Dokumentation steht dass: modBusObjectTyp: HoldingRegister der default sei, deshalb hatte ich das nicht angegeben.
wenn ich das spezifiziere werden auch die updates erkannt.
Danke für die Hinweise und Fehlersuche!
habe für die letzten Änderungen einen PullRequest erstellt, vielleicht kann jemand die V1.0.12. auch schon im Vorfeld testen.
Angehängte DateienZuletzt geändert von ivande; 02.06.2024, 05:54.
Einen Kommentar schreiben:
-
kaum macht man's richtig, schon geht's.
In der Dokumentation steht dass: modBusObjectTyp: HoldingRegister der default sei, deshalb hatte ich das nicht angegeben.
wenn ich das spezifiziere werden auch die updates erkannt.
Einen Kommentar schreiben:


Einen Kommentar schreiben: