Erstellte Forenantworten
-
AutorBeiträge
-
Keden92Teilnehmer
Hallo Reinhard,
grundsätzlich ja, gibt nur ein paar kleinere Einschränkungen:
1. ich hatte das Projekt seit gefühlt einem Jahr nicht mehr auf, keine ahnung wie „global kompatibel“ bzw. individuell umprogrammiert das mittlerweile ist, vermutlich wird meine kompilierte Version nicht ohne weiteres „einfach so“ laufen.
2. ich betreibe LogoControl nicht (mehr) auf einem RPi. meine Version ist in für x86 Kompiliert. (wird vermutlich auf RPi [arm] nicht ohne neukompilierung laufen).
Was für Fehler / Probleme bestehen denn bei dir genau? (Grund für diese „Anfrage“) – Es wird wahrscheinlich ein vielfaches einfacher sein, wenn ich einfach nur per Strg+C/V die entsprechenden Änderungen hier ins Forum Poste, und du selber Kompilierst.
Kurze Anleitung: http://www.frickelzeugs.de/forums/topic/logo-control-startet-nicht/#post-3936
VG Keden92
Keden92TeilnehmerHallo Loulli,
Ich fasse mal kurz zusammen: Nein, Leistungsgrenze sollte dies nicht sein, jedoch kenne ich dein programm nicht. — Zu beachten wäre hier der Grenzwert von 20-Gruppen je Logo. Siehe hierzu Antwort zu: Begrenzung „word“ Werte
Interessant wäre hier die Aktualisierungs-Rate, die dein Pi zustande bringt. (eigentlich sollte dies mit 4mal/sekunde -> 250ms passieren.)
Baue mal folgendes auf / ein:
Wenn dein Impuls / Signal kommt, einen RS Setzen und über einen Netzwerk-Input rücksetzen. Dieser Rücksetzaufruf wird über deinen „pluviometer.sh“ veranlasst. – Somit sollte das „nicht-zählen“ nicht mehr vorkommen. – Zusätzlich zur Analyse, eine Zeitmessung am Ausgang des RS durchführten um zu schauen wie lange dieser Zyklus in Anspruch nimmt. Sollte in der Theorie bei <= 250ms liegen. Sollte dieser wesentlich größer sein (>0,5s), dann wäre die nächste Frage: wo hängt dein RPi CPU-Technich? Was läuft da sonst noch drauf?
VG Keden92
Keden92TeilnehmerHallo @msigma,
Ich habe diese im Projekt implementiert, sodass die Werte direkt nach dem diese von der Logo geliefert werden, weggeschrieben werden.
Die Umsetzung ist nicht ganz einfach, vorallem weil die DB halt auch zum Quellcode passen muss.
Hier ein Auszug der Klasse:
using MySql.Data.MySqlClient; using System; using System.Data; namespace LogoControl.DataModel { public class MySQLCon { private MySqlConnection _Connection; private String _TableName; public MySQLCon(DataModel.Settings.Mysql_Data mysql) { _TableName = mysql.TableName; string connStr = CreateConnStr(mysql.server, mysql.DB, mysql.user, mysql.pass); //create a MySQL connection with a query string _Connection = new MySqlConnection(connStr); Reconnect(); } public void Stop() { try { if (_Connection.State == ConnectionState.Open) { _Connection.Close(); } } catch (MySqlException ex) { Console.Out.WriteLine("Stop MySQL: " + ex.Message); } } private bool Reconnect() { if (_Connection.State == ConnectionState.Open) { return true; } else { try { _Connection.Open(); return true; } catch (MySqlException ex) { Console.Out.WriteLine("Start MySQL: " + ex.Message); return false; } } } public bool StoreData(int id, int attribute, string plcName, string group, string device, double value, string textvalue) { if (Reconnect()) { try { using (MySqlCommand cmd = new MySqlCommand()) { cmd.CommandText = @"INSERT INTO " + this._TableName + "(ID, Attribute, Logo, Group, Device, Val, TextVal, LastChange, LastUpdate)" + "VALUES" + "(@ID,@ATTRIBUTE,@LOGO,@GROUP,@DEVICE,@VALUE,@TEXTVALUE,NOW(),NOW())" + "ON DUPLICATE KEY UPDATE" + "LastChange = IF(Val <> VALUES(Val), NOW(), LastChange)," + "Logo = VALUES(Logo)," + "Group = VALUES(Group)," + "Device = VALUES(Device)," + "Val = VALUES(Val)," + "TextVal = VALUES(TextVal)," + "LastUpdate = NOW();"; cmd.Connection = this._Connection; cmd.Parameters.AddWithValue("@ID", SqlDbType.SmallInt); cmd.Parameters.AddWithValue("@ATTRIBUTE", SqlDbType.SmallInt); cmd.Parameters.AddWithValue("@VALUE", SqlDbType.Int); cmd.Parameters["@ID"].Value = id; cmd.Parameters["@ATTRIBUTE"].Value = attribute; cmd.Parameters["@VALUE"].Value = value; cmd.Parameters.AddWithValue("@LOGO", plcName); cmd.Parameters.AddWithValue("@GROUP", group); cmd.Parameters.AddWithValue("@DEVICE", device); cmd.Parameters.AddWithValue("@TEXTVALUE", textvalue); cmd.ExecuteNonQuery(); } } catch (MySql.Data.MySqlClient.MySqlException ex) { Console.Out.WriteLine("Error " + ex.Number + " has occurred: " + ex.Message); } } return true; } /// <summary> /// Generates a connection string /// </summary> /// <param name="server">The name or IP of the machine where the MySQL server is running</param> /// <param name="databaseName">The name of the database (catalog)</param> /// <param name="user">The user id - root if there are no new users which have been created</param> /// <param name="pass">The user's password</param> /// <returns></returns> private static string CreateConnStr(string server, string databaseName, string user, string pass) { //build the connection string string connStr = "server=" + server + ";database=" + databaseName + ";uid=" + user + ";password=" + pass + ";charset=utf8;"; //return the connection string return connStr; } } }
Zum „nachrüsten“ würde ich eher folgendes vorschlagen: (Für die RasPi-Version)
1. php-cli (inkl. php-curl) mit mysql/mariaDB client & Server nachinstallieren (falls nicht bereits vorhanden). – Gibt es ggf. etliche Anleitungen im Netz, einfach mal nach „LAMP“ googeln.
2. via CronJob (CronTab) z.b. minütlich folgenden Script zum loggen ausführen lassen:
<?php $url = "die_URL_bzw_IP_zu_deinem_LogoControl_Server_oder_RasPI:8088/rest/attributes"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $json = curl_exec($ch); curl_close($ch); $dataarray = json_decode($json, true)["attributeUpdates"]; $servername = "localhost"; $username = "LogoControl"; $password = "SuperSicher123"; $dbname = "LogoControl"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $SQL_values = array(); foreach ($dataarray as $value) { array_push($SQL_values, "(" . $value["D"] . "," . $value["A"] . "," . $value["V"] . ")"); } $sql = "CREATE TEMPORARY TABLE DataAkt( Device INT(11) NOT NULL, Attribute INT(11) NOT NULL, Value varchar(10) NOT NULL, constraint pk_ primary key (Device, Attribute) USING BTREE ); INSERT INTO DataAkt (Device, Attribute, Value) VALUES " . implode(",",$SQL_values) . "; INSERT INTO DataAkt (Device, Attribute, Value) VALUES (0,0, DATE_FORMAT(NOW(),'%H:%i:%s'));"; if ($conn -> multi_query($sql)) { do { if ($result = $conn -> store_result()) { while ($row = $result -> fetch_row()) { var_dump($row); echo "<br>"; } $result -> free_result(); } else { //echo "0 results<br>"; } if ($conn -> more_results()) { //echo "-------------<br>"; } } while ($conn -> next_result()); } $conn->close(); die("OK"); ?>
Die SQL’s & die Tabellen müssten halt noch entsprechend angepasst / erweitert werden, sodass eine „Verlauf-Log“ entsteht.
VG Keden92
Keden92TeilnehmerHallo @simdo,
In der RasPi Version (unter downloads) ist eine vorkompilierte libnodave-arm.so enthalten.
Unter „Installationsanleitung RasPi“ ist auch erklärt wie man LogoControl auf einem RasPi instelliert. Wenn man nach dieser Anleitung vorgeht, ist eigentlich kein weiteres Installieren oder einbinden von weiterer Software nötig.VG Keden92
Keden92TeilnehmerHallo @simdo
leider werde ich aus dieser Problembeschreibung nicht ganz schlau.
Wenn du dies ein wenig ausführlicher beschreibst, kann ich dir evtl. helfen.
VG Keden92
Keden92TeilnehmerHallo @TeWe
Hast du ggf. ein Bsp. ?
Mit
{Floor([value]/60)}
zb. wird auf eine „Ganze Zahl“ abgerundet (Alles was nach dem Komma kommt wird einfach abgeschnitten).VG
Keden92TeilnehmerMoin,
geht mit:
localhost:8088/rest/devices/33/attributes/1/valueText?set=12.3°C // Mit TextValue Converter
oder:
localhost:8088/rest/devices/33/attributes/1/value?set=123 // Ohne TextValue ConverterAber ist mit Vorsicht zu genießen das Ganze. Die Funktion Set_AnalogValue ist Buggy in der hier veröffentlichten Version.
Mal Funktionierts – Mal nicht (Einfach erklärt. – Für den Profi: In der Funktion fehlt der AccessLock für die TCP-Verbindung – Es kann zu Datankollosionen kommen – So ein wenig nach zufallsprinzip ob die Verbindung grade belegt ist oder nicht.)VG Keden92
PS: Irgend etwas in diesem Formu mag mich nicht… hier einen Beitrag zu verfassen ist ne Katastrophe…..
- Diese Antwort wurde vor vor 3 Jahren, 8 Monaten von Keden92 bearbeitet.
Keden92TeilnehmerHallo,
okay, Sorry, Frage falsch verstanden – vergiss die Antwort von vorhin.
Mach untergruppen: (hier ein Bsp. aus meiner Config)
<group name="Keller"> <group name="Heizungsraum"> <device id="52" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo1" address="I18" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo1" address="155.0" /> <method id="2" name="off" plc="myLogo1" address="155.1" /> </device> </group> <group name="Flur"> <device id="54" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo2" address="I18" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo2" address="155.0" /> <method id="2" name="off" plc="myLogo2" address="155.1" /> </device> </group> <group name="Waschküche"> <device id="55" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo3" address="I18" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo3" address="155.0" /> <method id="2" name="off" plc="myLogo3" address="155.1" /> </device> </group> <group name="Arbeitskeller"> <device id="57" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo1" address="I20" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo1" address="155.2" /> <method id="2" name="off" plc="myLogo1" address="155.3" /> </device> </group> <group name="Keller Kammer"> <device id="78" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo2" address="I20" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo2" address="155.2" /> <method id="2" name="off" plc="myLogo2" address="155.3" /> </device> </group> </group> <group name="Obergeschoss 1"> <group name="Kinderzimmer"> <device id="1" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo1" address="I2" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo1" address="150.0" /> <method id="2" name="off" plc="myLogo1" address="150.1" /> </device> <device id="2" name="Rollladen" type="shutter"> <attribute id="1" name="Status" plc="myLogo1" address="106.0" valueTextConverter="an_aus" /> <attribute id="2" name="Soll Position" plc="myLogo1" address="4" datatype="word" valueTextConverter="shutter"/> <attribute id="3" name="Ist Position" plc="myLogo1" address="6" datatype="word" valueTextConverter="shutter"/> <attribute id="4" name="Aktiv Auf" plc="myLogo1" address="Q5" valueTextConverter="an_aus" /> <attribute id="5" name="Aktiv Ab" plc="myLogo1" address="Q6" valueTextConverter="an_aus" /> <method id="1" name="Reconfigure Position" plc="myLogo1" address="151.0" /> <method id="2" name="Run Crontab" script="Crontab.sh" /> <trigger plc="myLogo1" address="Q5" datatype="bit"> <onValue value="1" method="2" /> </trigger> </device> </group> <group name="Büro"> <device id="3" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo1" address="I4" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo1" address="150.2" /> <method id="2" name="off" plc="myLogo1" address="150.3" /> </device> <device id="68" name="Leinwand" type="light"> <attribute id="1" name="Status" plc="myLogo1" address="154.2" valueTextConverter="an_aus" /> <attribute id="2" name="Auf" plc="myLogo1" address="M2" valueTextConverter="an_aus" /> <attribute id="3" name="Ab" plc="myLogo1" address="M12" valueTextConverter="an_aus" /> <method id="1" name="Auf" plc="myLogo1" address="154.1" /> <method id="2" name="Ab" plc="myLogo1" address="154.0" /> <method id="3" name="Start Beamer" script="Boot_Beamer.sh" /> <trigger plc="myLogo1" address="M12" datatype="bit"> <onValue value="1" method="3" /> </trigger> </device> <device id="4" name="Rollladen" type="shutter"> <attribute id="1" name="Status" plc="myLogo1" address="106.1" valueTextConverter="an_aus" /> <attribute id="2" name="Soll Position" plc="myLogo1" address="0" datatype="word" valueTextConverter="shutter"/> <attribute id="3" name="Ist Position" plc="myLogo1" address="2" datatype="word" valueTextConverter="shutter"/> <attribute id="4" name="Aktiv Auf" plc="myLogo1" address="Q7" valueTextConverter="an_aus" /> <attribute id="5" name="Aktiv Ab" plc="myLogo1" address="Q8" valueTextConverter="an_aus" /> <method id="1" name="Reconfigure Position" plc="myLogo1" address="151.3" /> <method id="2" name="Run Crontab" script="Crontab.sh" /> <trigger plc="myLogo1" address="Q7" datatype="bit"> <onValue value="1" method="2" /> </trigger> </device> </group> <group name="Bad"> <device id="5" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo2" address="I2" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo2" address="150.0" /> <method id="2" name="off" plc="myLogo2" address="150.1" /> </device> <device id="65" name="Lüfter" type="light"> <attribute id="1" name="Status" plc="myLogo2" address="I4" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo2" address="150.2" /> <method id="2" name="off" plc="myLogo2" address="150.3" /> </device> <device id="6" name="Rollladen" type="shutter"> <attribute id="1" name="Status" plc="myLogo2" address="106.0" valueTextConverter="an_aus" /> <attribute id="2" name="Soll Position" plc="myLogo2" address="0" datatype="word" valueTextConverter="shutter"/> <attribute id="3" name="Ist Position" plc="myLogo2" address="2" datatype="word" valueTextConverter="shutter"/> <attribute id="4" name="Aktiv Auf" plc="myLogo2" address="Q6" valueTextConverter="an_aus" /> <attribute id="5" name="Aktiv Ab" plc="myLogo2" address="Q5" valueTextConverter="an_aus" /> <method id="1" name="Reconfigure Position" plc="myLogo2" address="151.0" /> <method id="2" name="Run Crontab" script="Crontab.sh" /> <trigger plc="myLogo2" address="Q6" datatype="bit"> <onValue value="1" method="2" /> </trigger> </device> </group> <group name="Flur"> <device id="7" name="Licht" type="light"> <attribute id="1" name="Status" plc="myLogo3" address="I2" valueTextConverter="an_aus" /> <method id="1" name="on" plc="myLogo3" address="150.0" /> <method id="2" name="off" plc="myLogo3" address="150.1" /> </device> </group> </group>
Vg
Keden92TeilnehmerHallo,
klingt als hättet du einen falschen oder nicht kompatiblen valueTextConverter=“XX“ in deiner Config.
Ein Auszug der Config.xml könnte hier evtl. weiterhelfen.
Vg
Keden92Teilnehmer„& lt ; br / & gt ;“ – Ohne die Leerzeichen dazwischen!
Keden92TeilnehmerHallo,
<br/>
als Zeilenumbruch einfügen.
Vg
Keden92TeilnehmerHallo Zusammen,
ich weiß, das Thema ist schon ein paar Tage älter, hatte aber grade genau das gleich Problem und habe es gelöst bekommen.
Habe nun die Libnodave auf einem Operating System: Debian GNU/Linux 10 (buster), Kernel: Linux 4.19.0-13-amd64, Architecture: x86-64 laufen.
Falls hier noch Interesse bestehen sollte oder jmd. zukünftig hier eine Lösung brauchen sollte:
-*- Die Version 0.8.4.5 der Libnodave runterladen libnodave-0.8.4.5.zip.
-*- Im Makefile Zeile 16 ein „-fPIC“ ergänzen.
-*- make clean (build-essential vorausgesetzt)
-*- make (build-essential vorausgesetzt)
-*- libnodave.so ins LogoControl Verzeichnis kopieren (oder verlinken).
-*- ein kühles blondes genießen.
Der „Trick“ ist in der libnodave Version – die neuste (0.8.5.1 oder so) ist nicht mehr mit LOGO kompatibel!!
Vg
Keden92Teilnehmer@TeWe bezüglich der Bug-Geschichte…
Also irgendwie ist es mir als „Neuem User“ nicht möglich Themen zu erstellen ohne das diese moderiert werden müssen. Da dies aber irgendwie von keinem mehr übernommen wird und dem Admin selber seine letzte Aktivität vor keine Ahnung wie langer zeit zurück liegt… wird dies irgendwie schwer werden.
VG
Keden92Teilnehmer@TeWe Jawohl: Das beschriebene Vorgehen ist für die Windows und Raspi Version identisch!
Keden92Teilnehmer@All:
Habe es grade getestet: wenn man die Zeile entfernt (oder Auskommetiert) dann startet LogoControl und alles läuft ohne Probleme. Einziges Manko: Wenn die Logo beim Start nicht erreichbar ist, wird diese auch im weiteren Verlauf nicht abgefragt! -> Heißt: sobald die Logo online geht, muss LogoControl neu gestartet werden (Button unter Konfiguration reicht) damit diese auch wieder abgefragt wird. Sie wird Quasie Ausgeplant wenn sie zum Startzeitpunkt nicht verfügbar ist, muss aber nicht aus der Config entfernt werden. (Ich denke mal damit kann man Leben).
@TeWe: Bezüglich der Bugs… Sind zum teil für alle Relevant die das Projekt nutzen, hatte hierzu auch einen längeren Fomrumsbeitrag verfasst der aber irgendwie nie veröffnetlicht wurde…. kein Plan warum. Da ich den damals in word verfasst habe & mit STRG+C/V ins Forum transportiert habe, werd ich den später (wenn ich am entsprechenden Rechner bin) mal versuchen nochmal zu Posten… wenns wieder nicht klappt, kopiere ich es einfach hier drunter, ist dann aber Off-Topic.VG
-
AutorBeiträge