AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Analyzer Nutzung

Ich habe einen Analyzer oder plane einen zu bauen
138
30%
Das Display ist für mich wichtig
32
7%
Ich nutze überwiegend die WebUI
83
18%
Langzeitdaten sind mir wichtig (Analyzer läuft 24/7)
78
17%
Ich möchte den Analyzer als RaspiMatic Addon oder auf einem Server dauerhaft betreiben
122
27%
 
Abstimmungen insgesamt: 453

Benutzeravatar
Baxxy
Beiträge: 10832
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von Baxxy » 24.11.2020, 17:43

hbrockmann hat geschrieben:
24.11.2020, 16:45
hat jemand schon mal erfolgreich mit einer manuell angegebenen liste gearbeitet?
Ja. Ich setze so gut wie immer eine lokal vorgehaltene Liste ein weil das "AnalyzerXS"-Gerät (Laptop) nicht auf das Zentralennetzwerk zugreifen kann und soll.
Analyzer_lokale_json.JPG

hbrockmann
Beiträge: 32
Registriert: 22.01.2013, 17:21
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von hbrockmann » 24.11.2020, 18:29

danke, datei hatte nach dem speichern das falsche format..

im korrekten json format klappt es jetzt..

DJB
Beiträge: 26
Registriert: 27.08.2011, 12:51
Hat sich bedankt: 1 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von DJB » 29.12.2020, 16:33

Irgendwie bekomme ich bei mir die Devicelist nicht geladen...
Fehlermeldung:
Error fetching device list: Error: Invalid XML

Das Script/Programm auf der CCU habe ich wie beschrieben angelegt mit:

Code: Alles auswählen

string svDevList = "AskSinAnalyzerDevList";
string svAlarm   = "AskSinAnalyzerAlarm";

string HmIPBroadcastName = "HmIP Broadcast";
string HmRFBroadcastName = "HMRF Broadcast";

object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);

!Alarmvariable anlegen
object alarmObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svAlarm);

if(!alarmObj) {      
  alarmObj = dom.CreateObject(OT_ALARMDP);
                                                                                                                               
  alarmObj.Name(svAlarm);                                                                     
  alarmObj.ValueType(ivtBinary);                                                               
  alarmObj.ValueSubType(istAlarm);                                                             
  alarmObj.ValueName0("nicht ausgelöst");                                   
  alarmObj.ValueName1("ausgelöst");                                      
  alarmObj.ValueUnit("");                                                                    
  alarmObj.AlType(atSystem);                                                                   
  alarmObj.AlArm(true);                                                                        
  alarmObj.AlSetBinaryCondition();                                                             
  alarmObj.State(false);                                                                       

  svObjects.Add(alarmObj.ID());

  dom.RTUpdate(0);                                                                          
  
  WriteLine("Alarm-Variable "#svAlarm#" angelegt.\n");                                                                                        
}  else {
  WriteLine("Alarm-Variable "#svAlarm#" existiert.\n");
}

!Systemvariable anlegen, falls sie nicht bereits existiert
object svObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDevList);

if (!svObj){
  svObj = dom.CreateObject(OT_VARDP);

  svObj.Name(svDevList);
  svObj.ValueType(ivtString);
  svObj.ValueSubType(istChar8859);

  svObj.DPInfo("used by AskSinAnalyzer");
  svObj.ValueUnit("");
  svObj.State("");
  svObj.Internal(false);
  svObj.Visible(false);

  svObjects.Add(svObj.ID());

  dom.RTUpdate(0);
  WriteLine("Variable "#svDevList#" angelegt.\n");
} else {
  WriteLine("Variable "#svDevList#" existiert.\n");
}

!phys. Zentralen-Adresse HmIP auslesen
string stdout;
string stderr;
system.Exec("echo $((0x`grep Adapter.1.Address /etc/config/hmip_address.conf|awk -F'\=' {'print $2'}`))", &stdout, &stderr);
WriteLine(stdout);

integer HmIPCentral = stdout.ToInteger();

!alle Geräteadressen, Seriennummer und Namen erfassen
integer tstamp = system.Date("%F %X").ToTime().ToInteger();
string sDevId;
string data;
string metaData;
string result = "{\"created_at\":"#tstamp#",\"devices\":[{\"address\":15728641,\"serial\":\"00000000000000\",\"name\":\""#HmIPBroadcastName#"\"},{\"address\":0,\"serial\":\"0000000000\",\"name\":\""#HmRFBroadcastName#"\"},";

foreach(sDevId, root.Devices().EnumUsedIDs())
{
  var dev= dom.GetObject(sDevId);
  if ( true == dev.ReadyConfig() )
  {
    metaData = dev.MetaData("DEVDESC");
    foreach (data, metaData.Split(",")) {
      if (data.Substr(0,10) == "RF_ADDRESS") {
        data = data.Replace("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	  if ((HmIPCentral > 0) && (data == HmIPCentral)) { ser = "HmIP-RF"; }
          result = result # "{\"address\":" #data#",\"serial\":\""#ser#"\",\"name\":\""#dev.Name()#"\"},";
        }
      }
    }
  }
}
result = result # "]}";
result = result.Replace("},]","}]");


dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDevList).State(result);
Write(result);

!Abfrage im Browser mit http://ccu2:8181/ret.exe?ret=dom.GetObject(ID_SYSTEM_VARIABLES).Get("AskSinAnalyzerDevList").Value()


Das Script scheint aber nicht zu passen, weshalb die Variable nicht befüllt wird...
Fehleranalyse des Scripts ergibt:

Code: Alles auswählen

Error 1 at row 82 col 29 near ^("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	 
Error 1 at row 82 col 29 near ^("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	 
Error 1 at row 82 col 29 near ^("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	 
Error 1 at row 82 col 29 near ^("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	 
Error 1 at row 82 col 29 near ^("RF_ADDRESS:","");
        if (data != "0") {
	  string ser = dev.Address();
	 
......

Hat jemand einen Tipp?
brauche ich noch ein Plugin auf der CCU?

DJB
Beiträge: 26
Registriert: 27.08.2011, 12:51
Hat sich bedankt: 1 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von DJB » 29.12.2020, 20:46

Nachtrag:
Fehler gefunden:
die Funktion "Replace" im Script wird nicht von der CCU1 unterstützt...
gemäß Scriptdoku:
"Ersetzen von Teilzeilenfolgen – Replace (unterstützt ab 2.29.22)"

Da muss ich das Script wohl umschreiben :mrgreen:
Zuletzt geändert von DJB am 30.12.2020, 12:49, insgesamt 1-mal geändert.

DJB
Beiträge: 26
Registriert: 27.08.2011, 12:51
Hat sich bedankt: 1 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von DJB » 29.12.2020, 23:58

So müsste das Script auch für eine CCU1 klappen... kann ja gerne noch jemand ausprobieren außer mir...

Code: Alles auswählen

string svDevList = "AskSinAnalyzerDevList";
string svAlarm   = "AskSinAnalyzerAlarm";

string HmIPBroadcastName = "HmIP Broadcast";
string HmRFBroadcastName = "HMRF Broadcast";

object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);

!Alarmvariable anlegen
object alarmObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svAlarm);

if(!alarmObj) {      
  alarmObj = dom.CreateObject(OT_ALARMDP);
                                                                                                                               
  alarmObj.Name(svAlarm);                                                                     
  alarmObj.ValueType(ivtBinary);                                                               
  alarmObj.ValueSubType(istAlarm);                                                             
  alarmObj.ValueName0("nicht ausgelöst");                                   
  alarmObj.ValueName1("ausgelöst");                                      
  alarmObj.ValueUnit("");                                                                    
  alarmObj.AlType(atSystem);                                                                   
  alarmObj.AlArm(true);                                                                        
  alarmObj.AlSetBinaryCondition();                                                             
  alarmObj.State(false);                                                                       

  svObjects.Add(alarmObj.ID());

  dom.RTUpdate(0);                                                                          
  
  WriteLine("Alarm-Variable "#svAlarm#" angelegt.\n");                                                                                        
}  else {
  WriteLine("Alarm-Variable "#svAlarm#" existiert.\n");
}

!Systemvariable anlegen, falls sie nicht bereits existiert
object svObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDevList);

if (!svObj){
  svObj = dom.CreateObject(OT_VARDP);

  svObj.Name(svDevList);
  svObj.ValueType(ivtString);
  svObj.ValueSubType(istChar8859);

  svObj.DPInfo("used by AskSinAnalyzer");
  svObj.ValueUnit("");
  svObj.State("");
  svObj.Internal(false);
  svObj.Visible(false);

  svObjects.Add(svObj.ID());

  dom.RTUpdate(0);
  WriteLine("Variable "#svDevList#" angelegt.\n");
} else {
  WriteLine("Variable "#svDevList#" existiert.\n");
}

!phys. Zentralen-Adresse HmIP auslesen
string stdout;
string stderr;
system.Exec("echo $((0x`grep Adapter.1.Address /etc/config/hmip_address.conf|awk -F'\=' {'print $2'}`))", &stdout, &stderr);
WriteLine(stdout);

integer HmIPCentral = stdout.ToInteger();

!alle Geräteadressen, Seriennummer und Namen erfassen
integer tstamp = system.Date("%F %X").ToTime().ToInteger();
string sDevId;
string data;
string metaData;
string result = "{\"created_at\":"#tstamp#",\"devices\":[{\"address\":15728641,\"serial\":\"00000000000000\",\"name\":\""#HmIPBroadcastName#"\"},{\"address\":0,\"serial\":\"0000000000\",\"name\":\""#HmRFBroadcastName#"\"},";

foreach(sDevId, root.Devices().EnumUsedIDs())
{
  var dev= dom.GetObject(sDevId);
  if ( true == dev.ReadyConfig() )
  {
    metaData = dev.MetaData("DEVDESC");
    foreach (data, metaData.Split(",")) {
      if (data.Substr(0,10) == "RF_ADDRESS") {
       data = data.Substr(11,8); !angepasst fuer CCU1
        if (data != "0") {
	  string ser = dev.Address();
	if ((HmIPCentral > 0) && (data == HmIPCentral)) { ser = "HmIP-RF"; }
          result = result # "{\"address\":" #data#",\"serial\":\""#ser#"\",\"name\":\""#dev.Name()#"\"},";
        }
      }
    }
  }
}
result = result # "]}";
integer length = result.Length() - 3;
result = result.Substr(0,length)#"]}"; !angepasst fuer CCU1


dom.GetObject(ID_SYSTEM_VARIABLES).Get(svDevList).State(result);
Write(result);

!Abfrage im Browser mit http://<ip_der_ccu>:8181/ret.exe?ret=dom.GetObject(ID_SYSTEM_VARIABLES).Get("AskSinAnalyzerDevList").Value()
Zuletzt geändert von DJB am 30.12.2020, 12:48, insgesamt 1-mal geändert.

Benutzeravatar
Psi
Beiträge: 512
Registriert: 09.08.2018, 19:58
Wohnort: Nürnberg
Hat sich bedankt: 27 Mal
Danksagung erhalten: 90 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von Psi » 30.12.2020, 00:05

Schön, dass du es gelöst hast. Offensichtlich gibt es nicht wirklich viele User mit ner ccu1. :-)

maxxiger
Beiträge: 84
Registriert: 12.05.2016, 11:16
Hat sich bedankt: 21 Mal
Danksagung erhalten: 3 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von maxxiger » 22.01.2021, 19:14

Hallo Zusammen,

ich versuche schon seit heute morgen meinen NanoCUL (Produktlink: https://ebay.us/Fau3fs) lt. der Anleitung aus diesem Thread umzuflashen. Leider ohne Erfolg.

Ich habe alle Schritte aus der Anleitung befolgt.
Bei Schritt 14 (Sketch hochladen) kommt immer eine Fehlermeldung (sh. Anhang)
Die aktuellen Einstellungen des Arduino, die Einstellungen der Werkzeuge und die Ansicht des Geräte-Managers unter Windows sind im Anhang.

Hat jemand eine Idee warum der Sketch nicht hochgeladen werden kann und stattdessen eine Fehlermeldung kommt? Muss ggf. ein anderer Programmer ausgewählt werden?

Vielen Dank!
Dateianhänge
gerätemanager.PNG
Ansicht Gerätemanager
gerätemanager.PNG (10.15 KiB) 1293 mal betrachtet
ArduinoWerkzeuge.PNG
Ansicht Werkzeuge Arduino
Arduino1.PNG
Arduino Hauptfenster
log_nano.txt
Fehlermeldung nach Hochladen
(1.81 KiB) 51-mal heruntergeladen

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von TomMajor » 22.01.2021, 19:27

Versuche mal mit der Einstellung Bootloader zu spielen, bei dir aktuell (Old Bootloader)
je nach verbauten USB/Seriell Chip muss man die Bootloader Einstellung wechseln, das war meine Erfahrung.
Viele Grüße,
Tom

maxxiger
Beiträge: 84
Registriert: 12.05.2016, 11:16
Hat sich bedankt: 21 Mal
Danksagung erhalten: 3 Mal

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von maxxiger » 22.01.2021, 21:59

Hallo Tom,

super, vielen Dank! Das war das Problem. Ich hatte den Bootloader auf ATmega328P umgestellt und schon gings!

Ich konnte den Test wie in der Anleitung beschrieben erfolgreich durchführen und den CUL in den AskSin Analyzer XS einbinden.

Es werden nun Telegramme empfangen und angezeigt.

Allerdings gibt es oben eine Fehlermeldung "Error fetching device list: TypeError: Cannot read property 'devices' of null" (sh. Anhang)
Weiß evtl. jemand woran das liegt und wie man das beheben kann?

Und noch eine kurze Verständnisfrage: bei "von" und bei "an" wird jeweils eine Zahlenfolge/Ziffernfolge ausgegeben. Ich gehe davon aus, dass dahinter ein Aktor/Sensor steckt? Aber welcher? Oder hängt das mit der o.g. Fehlermeldung (error fetching device list) zusammen?

Vielen Dank!
Dateianhänge
asksin.PNG
Fehlermeldung AskSin

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: AskSin Analyzer XS - Der Analyzer als Desktop-App ohne ESP

Beitrag von jp112sdl » 22.01.2021, 22:05

maxxiger hat geschrieben:
22.01.2021, 21:59
"Error fetching device list: TypeError: Cannot read property 'devices' of null
Hast du die Systemvariable auf der CCU angelegt und befüllt?
https://github.com/jp112sdl/AskSinAnaly ... erstützung

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“