neues Modul APCUPSD

Frage mich nur, warum das bei der 4.0 nicht aufgefallen war.

Die 4.0 sendet, sobald du die Verknüpfung gemacht hast, einfach stupide alle Daten weiter. Die 4.1 check jedoch vorher ob die Instanz das Datenpaket verarbeiten kann. Das löst ein Problem, welche Nall Chan gepostet hat, wo die internen Instanz von IPS seine „erweiterten“ Datenpakete empfangen haben und somit Fehler geworfen haben. Nun wir immer das erste jeweils unterstützte Datenformat an die Instanz ausgeliefert. Das Doku Update dazu steht noch aus :slight_smile:

Das war übrigens auch notwendig um die erweiterten Datenpakete vom ServerSocket abzubilden, welche IP+Port mitliefern.

paresy

OK, verstehe.

Seit wann muss man denn im PHP bei den Funktionen auch Typ Hints mitgeben? Ich dachte, das wäre optional.

Tommi

Zur 4.1 bemängeln wir das. Laufen tun die Module trotzdem. Der Vorteil von TypeHints (die übrigens per Trick in PHP5 sind und erst ab PHP7 nativ unterstützt werden) ist, dass die Konsole bei „Gerät ausführen“ entsprechende Felder bereitstellen kann.

paresy

Ganz konsequent ist das mit den TypHints aber noch nicht. Wenn ich den Rückgabewert einer Funktion kennzeichne, gibt es einen Reflection Error


/**
     * Get Property UpdateInterval
     * @return int
     */
    private function GetUpdateInterval():int
    {
        return (Integer)IPS_GetProperty($this->InstanceID, 'UpdateInterval');
    }


18:21:17 | 00000 | MESSAGE | PHPLibrary           | Registriere Funktion... Reflection parse error: <br />
<b>Parse error</b>:  syntax error, unexpected ':', expecting ';' or '{' in .... />

Wie gehe ich denn mit Variant/Mixed Parametern um?


 * Send Switch command to Device
     * @param $ain String Actor ID
     * @param $val mixed new actor value
     * @return bool
     */
    //query actual state
    public function SwitchMode(string $ain, $val)

Der $val Wert kann ein bool, ein String oder eine Zahl sein
Tommi

Ja. Leider geht das erst ab PHP7. Sobald wir den Wechsel machen wird es dort auch die Type Hints geben. Ich glaube die Syntax ist aber ein wenig anders :slight_smile:

paresy

Noch etwas:
Vor der Änderung

 public function SendDataToChildren($Data) {
Parameter Data in function APCUPSD_SendDataToChildren has no type hint. Please use either 'bool', 'int', 'float' or 'string'.

Jetzt die Änderung gemäß Doku

 public function SendDataToChildren(string $Data)
Registriere Funktion... Reflection parse error: 
Strict Standards: Declaration of APCUPSD::SendDataToChildren() should be compatible with IPSModule::SendDataToChildren($Data) in E:\IP-Symcon\modules\ipsymcon-phpmodule-by-Tommi\APCUPSD\module.php on line 20

Das Modul wird nicht geladen
Tommi

Warum überschreibst du die Funktion überhaupt?! Das ist eigentlich nicht vorgesehen?

paresy

Ich benutze es gerne zum Testen von Außerhalb, da muss es public sein.

BTW: Ich hatte oben noch eine Frage bei Mixed Parametern. Lt. Doku gibt es dafür keinen TypHint

Tommi

Laut PHP ist die genauso für Rückgabewerte.
PHP: Rückgabewerte - Manual
Oder verstehe ich da auch was falsch?

Dann kann aber jeder auf diese Funktion zugreifen und er taucht auch in der Befehlsreferenz und unter Befehle testen auf…
Ich nutze diese Funktionen aber auch teilweise nicht, sondern direkt IPS_SendDataTo… Und das geht auch von außerhalb :slight_smile:

Mixed kann IPS ja nicht wirklich, Also den Typ an den Funktionsnamen anhängen und die rufen dann das Original auf.
Darum gibt es ja auch vier HM_WriteValue Befehle [emoji4]
Michael

Hallo Tommi,

war der Fehler aus Beitrag 5 jetzt schon gefixt ? Bei mir kommt der nämlich immer noch :frowning:

Gruß

Markus

Hast du korrekt den Branch gewechselt?

paresy

Hatte ich !

hab jetzt noch mal auf master und zurück auf 4.1 dann ging es.

Danke!

Bei 4.1 bitte immer auch den 4.1 Branch ausgewählen, sonst geht das schief.

Tommi

Hab das Modul gerade in Betrieb genommen!
Soweit funktioniert es auch sehr sehr gut! Vielen Dank an den Entwickler!

Kann es sein das es mit der „Alert“ Variablen noch ein Problem gibt?
Bei mir bleibt die auf OK auch wenn der Status auf ONBATT steht.

Oder hab ich da noch irgendwo einen Fehler?

Beste Grüße
mirank

Nö, ist wirklich falsch.
Schau doch mal nach Zeile 514 in der module.php. Die sollte sollte richtigerweise so aussehen(„Yes“ und „No“ groß geschrieben)

$data['Alert'] = ($data['Status'] == 'ONLINE') ? 'NO' : 'YES';

Tommi

Jup das wars!

Vielen Dank jetzt läufts ohne Probleme!

Gruß
Mirank

Nach dem Modul-Update von eben steht da

$data['Alert'] = ($data['Status'] == 'ONLINE') ? 'No' : 'YES';

Ist das richtig fuer ‚No‘ ?

No ist eigentlich egal, wichtig war nur das „YES“, weil das ein Keywort für den Alarm ist. Konsequenterweise kann man auch das NO gross schreiben.

BTW: Der gleiche Fehler war im NUT Modul.

Update ist online.

Tommi

Hallo tommi,

ich nutzte bereits Dein Script und bin jetzt auf Dein Modul umgestiegen. Tolle Arbeit.

Wäre es Dir vielleicht möglich, noch das Modell und die ID der USV jeweils als Variable auszugeben ???

Das würde mir sehr helfen.

Vielen Dank !!!

Gruß Proxima

Wäre es Dir vielleicht möglich, noch das Modell und die ID der USV jeweils als Variable auszugeben ???

Als Variable macht das nicht so viel Sinn, da sich Modell und ID (normalerweise) nicht ändern. Sie stehen aber als Properties zur Verfügung, falls sie bereitgestellt werden, ansonsten sind das generierte Daten.


 $id = (String)IPS_GetProperty($instID, 'DeviceID');
 $modell = (String)IPS_GetProperty($instID, 'Typ');

Tommi