MeterSupportedType Value="1"

Ich glaube das ist ein Thema für die Entwickler:

Bei den EVR AN158 ist mir folgendes Verhalten aufgefallen:
Wird die Instanz für ein solches Gerät mit der IPS Version 3.0 erstellt werden keine Meter-Variablen angelegt.
Legt man selbst Variablen mit den entsprechenden Idents an funktionieren diese bis zum nächsten Neustart von IPS.

Wird die Instanz für ein solches Gerät mit der IPS Version 2.7 erstellt werden die Meter-Variablen angelegt.
Nach einem Update auf Version 3.0 bleiben die dann auch erhalten (auch nach Neustart).

Das „Laden“ des Geräts sieht in beiden Fällen gleich aus:

15.11.2013 12:31:59.00 | Update | 04 10 01 25 20 72 86 27 85 32 70
15.11.2013 12:31:59.00 | CLASSES | 08
15.11.2013 12:31:59.00 | ZSend | 72 04
15.11.2013 12:32:00.00 | Class: 72 | 05 00 60 00 04 00 02
15.11.2013 12:32:00.00 | ManufacturerID | 30 30 36 30
15.11.2013 12:32:00.00 | ProductType | 30 30 30 34
15.11.2013 12:32:00.00 | ProductID | 30 30 30 32
15.11.2013 12:32:00.00 | ZSend | 32 03
15.11.2013 12:32:01.00 | ZSend | 60 04 25
15.11.2013 12:32:01.00 | ZSend | 85 05
15.11.2013 12:32:02.00 | Class: 85 | 06 02
15.11.2013 12:32:02.00 | COUNT | 02
15.11.2013 12:32:02.00 | ZSend | 85 02 01
15.11.2013 12:32:04.00 | Class: 85 | 03 01 01 00 0F
15.11.2013 12:32:04.00 | ZSend | 85 02 02
15.11.2013 12:32:04.00 | Class: 85 | 03 02 04 00

Im IPS Konfig-File sind aber Änderungen zu sehen:
Geladen mit 2.7 --> Meter-Variablen funktionieren:

<Settings>
<EnforceBasicClass Value=„0“/>
<ManufacturerID Value=„0060“/>
<ProductType Value=„0004“/>
<ProductID Value=„0002“/>
<MultiInstanceVersion Value=„1“/>
<MultiInstanceCount Value=„0“/>
<MultiInstanceID Value=„0“/>
<MeterSupportedType Value=„1“/>
<MeterSupportedScale Value=„5“/>
<MeterSupportsReset Value="-1"/>
<ThermostatSupportedMode Value=„0“/>
<ThermostatSupportedSetPoint Value=„0“/>
<ThermostatSupportedFanMode Value=„0“/>
<NodeID Value=„36“/>
<EnableSceneActivationClass Value=„0“/>
<NodeClasses>
<Class0 Value=„37“/>
<Class1 Value=„32“/>
<Class2 Value=„114“/>
<Class3 Value=„134“/>
<Class4 Value=„39“/>
<Class5 Value=„133“/>
<Class6 Value=„50“/>
<Class7 Value=„112“/>
</NodeClasses>
</Settings>

Geladen mit 3.0 --> Meter-Variablen funktionieren nicht:

<Settings>
<EnforceBasicClass Value=„0“/>
<ManufacturerID Value=„0060“/>
<ProductType Value=„0004“/>
<ProductID Value=„0002“/>
<MultiInstanceVersion Value=„1“/>
<MultiInstanceCount Value=„0“/>
<MultiInstanceID Value=„0“/>
<MeterSupportedType Value=„0“/>
<MeterSupportedScale Value=„0“/>
<MeterSupportsReset Value=„0“/>
<ThermostatSupportedMode Value=„0“/>
<ThermostatSupportedSetPoint Value=„0“/>
<ThermostatSupportedFanMode Value=„0“/>
<NodeID Value=„30“/>
<EnableSceneActivationClass Value=„0“/>
<NodeClasses>
<Class0 Value=„37“/>
<Class1 Value=„32“/>
<Class2 Value=„114“/>
<Class3 Value=„134“/>
<Class4 Value=„39“/>
<Class5 Value=„133“/>
<Class6 Value=„50“/>
<Class7 Value=„112“/>
</NodeClasses>
</Settings>

Ich glaube, dass sich viele „Probleme“ bzgl. der Unterstützung diverser Z-Wave Geräte lösen ließen, wenn man diese ganzen Einstellungen inkl. der Klassen manuell in einer Art „Experten-Menü“ selbst definieren könnte.
Z.B. Die neuen Fibaro-Shutter funktionieren einwandfrei inkl. Positionierung wenn man die Klasse „38“ hinzufügt bzw. eine der vom Gerät doppelt gemeldete Klasse „37“ in „38“ ändert.
Wenn am das Gerät neu lädt, ist diese manuelle Änderung natürlich wieder weg. :frowning:
Vermutlich würden auch andere Probleme wie die fehlenden „Untergeräte“ beim Aeon Multisensor oder auch dem neueren Express Control EZMotion.
Das ist allerdings nur eine Vermutung, vielleicht liege ich falsch mit der Annahme.
Bitte gebt mir einfach mal Feedback.
Danke!!

paresy, kannst du etwas zu den Punkten sagen? Vor allem bzgl der Möglichkeit manuell Änderungen an den Klassen vornehmen zu können?

Hi, da ich mich auch mit verschiedenen Z-Wave Geräten beschäftige und insbesondere einen Everspring Sensor mit Untergeräten nach dem Wechsel auf 3.0 nicht ordentlich zum laufen bekomme, wäre ich auch sehr an diesem Thema interessiert.

@furby284:
Mir ist aufgefallen, dass sich Deine beiden Ausschnitte auch in der NodeID unterscheiden (einmal 36, einmal 30) Hat das eine Erklärung ?

Gruß, Flipper

Ich habe den AN158 mal angeschlossen um mir das Problem anzusehen und kann es leider nicht nachstellen. Mein Debug sieht aber auch anders aus. Kannst du das noch einmal probieren nachzustellen? Hast du vielleicht über einen Parameter etwas am Metering verstellt?

paresy

Bild 1.png

Mir ist aufgefallen, dass sich Deine beiden Ausschnitte auch in der NodeID unterscheiden (einmal 36, einmal 30) Hat das eine Erklärung ?

@Flipper: Ich habe insgesamt 3 dieser AN158.

Einen der Zwischenstecker hatte ich bereits unter IPS 2.7 inkludiert. Das ist die Instanz, die funktioniert.
Ich habe dann alle 3 Zwischenstecker unter IPS 3.0 neu inkludiert und sie haben alle keine Meter2Variable bekommen.
Wenn ich dann der Instanz aus IPS 2.7 eine der 3 Zwave Node IDs zuweise, funktioniert dieser Schalter dann. Da ich dieser Instanz der Reihe nach alle 3 Node IDs testweise zugewiesen hatte, stehen in den Logs unterschiedliche Node IDs.

@paresy: Bei mir fehlen da 2 Zeilen:

Hier das Debug nach dem Laden über die funktionierende Instanz (aus IPS 2.7 übernommen)
img_009.jpg
img_014.jpg

Hier das Debug nach dem Laden über die nicht funtkioniernde Instanz (in IPS 3.0 erstellt)
img_011.jpg
img_012.jpg

Ich sehe zwischen den beiden keinen Unterschied: gleiche Klassen, gleicher Debug-Output…
Und der Update-String sieht auch identisch mit deinem aus: „04 10 01 25 20 72 86 27 85 32 70“
Das fehlende „Class: 32“ ist dann wohl der springende Punkt? Woher kommt dieser Eintrag? Macht das IPS aus dem Update-Packet?

Ach ja: die Parameter sind bei allen:
img_016.jpg

Ich habe die Parameter (wegen deines Hinweises) eben nochmal bei einem auf default:
P1=10, P2=0, P3=3
zurückgestellt und neu geladen. Hat aber leider nichts verändert.

Falls noch wer das Problem mit den AN158 und der fehlenden „Meter2Variable“ unter IPS 3.0 hat, hier ein Skript, dass das beheben sollte.

Bitte unbedingt die Anleitung beachten.

<?
/*
Einstellungen für AN158 anpassen, damit die Variable mit dem Ident "Meter2Variable" angelegt wird

Anleitung:
1) Inhalt dieser Datei in ein neues Script kopieren (Ort: egal)
2) Speichern (nocht nicht ausführen)
3) IPS-Dienst stoppen  (dadurch wird die Konfigdatei von IPS gespeichert und es geht nichts verloren)
4) IPS-Dienst starten (aber keine Änderungen vornehmen, die könnten verloren gehen)
5) Script ausführen
6) In der Ausgabe nach Fehlern suchen (bis zum Ende scrollen). Falls Fehler auftreten hier aufhören.
7) IPS-Dienst stoppen
8) Die Datei settings.json löschen  (IPS Hauptverzeichnis)
9) Die Datei settings.json.NEW in settings.json umbennen
10) IPS-Dienst starten


*/


// Konfiguration

$ManufacturerID   = '0060';   								// Hersteller Everspring
$ProductType      = '0004';                           // Switch   ???
$ProductID        = '0002';   								// ???
$ProduktName      = 'AN158';                          // nur für die Ausgabe
$search_string 	= '<MeterSupportedType Value="0"/>
  <MeterSupportedScale Value="0"/>
  <MeterSupportsReset Value="0"/>';  									// Nach diesem Eintrag suchen und
$replace_string   = '<MeterSupportedType Value="1"/>
  <MeterSupportedScale Value="5"/>
  <MeterSupportsReset Value="-1"/>';     								// durch diesen Eintrag ersetzen

$filename 			= 'settings.json';
$new_cfg_file     = 'settings.json.NEW';   				// Die neue Konfig wird in config.json.NEW gespeichert

// ACHTUNG durch die dynamische Dateiendung date("Ymd-His") wird bei jedem Aufruf eine neue Sicherung erzeugt. Das müllt das Verzeichnis ganz schön zu, wenn man das öfter macht.
$bu_cfg_file    	= 'settings.json.'.date("Ymd-His"); // die derzeitige settings.json wird vorher gesichert.


//---------------------------------------------------------------------------------------------------

if(IPS_GetKernelVersion() > 2.6)
	{
	// Sichern
	echo "Sicherung von ".IPS_GetKernelDir().$filename." nach ".IPS_GetKernelDir().$bu_cfg_file;
   if (copy ( IPS_GetKernelDir().$filename , IPS_GetKernelDir().$bu_cfg_file))
      {
      echo " erfolgreich!

";
      }
      else
      {
		echo " fehlgeschlagen!
";
		exit(1);
		}

	// config.json holen und parsen
	$line = file(IPS_GetKernelDir().$filename);
	$config = json_decode($line[0], TRUE);
	$chg_done = 0;
	foreach ($config["objects"] as $id => $object)
	   {
	   if (@($object["data"]["moduleName"] == "Z-Wave Module"))
	      {
	      echo "Z-Wave Modul gefunden: ID=".$id.", Name=".$object["name"]."
";
	      // print_r($object["data"]);

	      $settings_xml = base64_decode($object["data"]["settings"]);    // settings decodieren
	      // echo $settings_xml."
";
			if ((preg_match('/ProductID Value="'.$ProductID.'"/', $settings_xml)) and (preg_match('/ManufacturerID Value="'.$ManufacturerID.'"/', $settings_xml)) and (preg_match('/ProductType Value="'.$ProductType.'"/', $settings_xml)))
			   {
			   echo "   ...ist ein ".$ProduktName.".
";
			   if (strstr ($settings_xml, $search_string))
			      {
			         echo "   ...Werte falsch. Ersetzte Einstellungen.
";
						$search 	= $search_string;
						$replace = $replace_string;               
						$new_set = str_replace($search, $replace, $settings_xml);
						// echo $new_set."
";
						// echo $config["objects"][$id]["data"]["settings"]."
";
						$config["objects"][$id]["data"]["settings"] = base64_encode($new_set);      // zurück ins array schreiben
						// echo $config["objects"][$id]["data"]["settings"]."

<br><br>";
					  $chg_done++;
					}
				else { echo "   ...Werte korrekt. Mache nix.
"; }
				}
			else { echo "   ...nicht gesuchter Hersteller oder Typ.
"; }
         echo "
";
			}
	   }
	   // print_r($config);

	   // Neues File Schreiben wenn estwas geändert wurde
	   if ($chg_done > 0)
	   	{
		   $new_content = json_encode($config);
		   if ($handle = @fopen(IPS_GetKernelDir().$new_cfg_file, "w"))
		      {
		      if (fwrite ( $handle , $new_content )) { echo IPS_GetKernelDir().$filename."NEW erfolgreich geschrieben!
"; }
		      }
			else
			   {
			   echo "Datei konnte nicht geöffnet werden!!!";
			   }
			}
		else { echo "Keine Änderug an der Konfig notwendig. Es wird kein File erzeugt!
"; }
	}


?>