Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Esra Ş.

esra.dev

@esra_s29 · Membre depuis octobre 2025

Nouveau

Backend geliştirici · yazılım · sahada 8 yıl

Sujets
3
Réponses
26
Points
0
Nouveau10 points pour Membre

Toutes mes réponses sur les forums

15 sujets de 1 à 15 (sur un total de 26)

Oğuz Bey doğru yerde. Bir su pompası istasyonunda birebir aynısını yaşamıştım, iki ayrı sebebi var.

1) Linux açılış mesajlarını ve login konsolunu seri porta veriyor, 115200’deki çöp o. cmdline.txt’ten console=serial0,115200 kısmını sil. Ya da raspi-config > Interface Options > Serial Port: login shell Hayır, donanım Evet. serial-getty servisinin de kapalı olduğunu kontrol et.

2) Asıl kalıcı çözüm DE/RE pini. Pi açılırken GPIO17 bir süre tanımsız kalıyor, MAX485 vericiyi açık bırakabiliyor, hatta gelen her şey sayaca gidiyor. DE/RE’den GND’ye 10k pull-down koy, pin sürülmediği sürece modül dinleme modunda kalsın.

Bir de Zero 2 W’de serial0 varsayılan olarak mini UART’a gidiyor, onun baud’u çekirdek saatine bağlı. Bluetooth’u kapatıp PL011’i al:

# config.txt
enable_uart=1
dtoverlay=disable-bt
# script
inst = minimalmodbus.Instrument("/dev/ttyAMA0", 1)
inst.serial.baudrate = 9600
inst.serial.timeout = 0.5
inst.clear_buffers_before_each_transaction = True

Sayaç kilitlendiğinde clear_buffers da işe yarıyor, yarım kalmış bir cevabı bir sonraki sorguya taşımıyor.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 4

Çok mantıklı, uyguladım. PPK2 ile uyku 6,8 µA, uyanma döngüsü ortalama 1,4 s’de 88 mA çıktı. Cihaz artık her mesajda enerji.mAs ve pil.v gönderiyor, grafikte sum ile günlük toplamı görüyorum, günde 18 mAh civarı. 2×AA ile kabaca 4 ay ediyor, beklediğimden kısa, WiFi bağlanma süresini kısaltmaya çalışacağım. INA219’u da çekmeceye kaldırdım.

Kayıtta yoksa olmamıştır.
♥ 0

Pasif taramaya geçtim, 30 sensörün hepsi 10 saniye içinde görünüyor, hiç bağlantı hatası yok. Dakikada bir tek gw mesajı gidiyor. Sensörlerden 12’si şifreli yayını destekliyor, onlara bindkey tanımladık, kalanları değiştirme listesine koyduk.

Kayıtta yoksa olmamıştır.
♥ 1

Traduit de Türkçe par IA ·

Agrandir la fenêtre augmente le retard, il faut faire l’inverse. J’ai vécu la même chose à une époque où je travaillais sur des drones.La source du retard est la moyenne elle-même : une moyenne mobile sur 20 mesures arrive avec environ 1 seconde de retard, et l’erreur augmente à mesure que la vitesse de rotation augmente. Le manque de calibration évoqué par Büşra Hanım explique aussi la différence entre la droite et la gauche.La solution consiste à combiner avec le gyroscope. Le gyroscope voit la rotation instantanément mais dérive lentement, le magnétomètre est lent mais ne dérive pas. Un filtre complémentaire combine les deux :

// dt = 0.1 s, gz = derece/s (z ekseni jiroskop)
float a = 0.98;
heading = a * (heading + gz * dt) + (1 - a) * magHeading;
// 0/360 geçişini düzelt
float fark = magHeading - heading;
if (fark > 180) heading += 360 * (1 - a);
if (fark < -180) heading -= 360 * (1 - a);
heading = fmod(heading + 360, 360);

Si la carte n’a pas de gyroscope, ajouter un MPU6050 est la solution la moins chère. Commencez par faire tourner le bateau sur deux tours complets dans l’eau et effectuez la calibration hard/soft iron.Le problème du 180 est distinct : un angle ne peut pas être moyenné. La moyenne de 359 et 1 donne 180. Le graphique hebdomadaire lit des valeurs agrégées toutes les heures et la fonction par défaut est average. Sur le graphique du cap, réglez la fonction sur last, et pour l’analyse envoyez heading_sin et heading_cos en plus du cap ; leur moyenne donne le bon résultat.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 7

Traduit de Türkçe par IA ·

Vas-tu utiliser la MAC comme nom de l’appareil ou dans un champ séparé ? Comme nom, elle ne sera pas très lisible.

Kayıtta yoksa olmamıştır.
♥ 0

Pi OS’ta netplan yok Hakan, ayarı NetworkManager’da yapmak lazım. Bizim sahadaki kutularda da aynısı vardı.

NetworkManager iki yerde rastgele MAC kullanabiliyor: tarama sırasında ve bağlantının kendisinde. İkisini de kapatın:

# /etc/NetworkManager/conf.d/99-sabit-mac.conf
[device]
wifi.scan-rand-mac-address=no

[connection]
wifi.cloned-mac-address=permanent
ethernet.cloned-mac-address=permanent

Ayrıca mevcut bağlantı profili kendi değerini taşıyorsa global ayarı ezer, onu da düzeltin:

nmcli -f 802-11-wireless.cloned-mac-address con show "saha-wifi"
sudo nmcli con modify "saha-wifi" 802-11-wireless.cloned-mac-address permanent
sudo systemctl restart NetworkManager

stable değeri de var, her ağ için sabit ama gerçek olmayan bir MAC verir. Sizin rezervasyon gerçek MAC’e yapıldığı için permanent doğru seçenek. Yeniden başlatıp ip link show wlan0 çıktısında link/ether ile permaddr aynı mı bakın.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 9

Traduit de Türkçe par IA ·

Ilgaz a raison pour le point d’accès, mais le takeover dans le journal indique autre chose, et la vraie cause est la dernière phrase que tu as écrite.Dans Hermetry, chaque appareil n’a qu’une seule session. Quand une deuxième connexion du même appareil arrive, la première est fermée et la session est reprise. Si 60 boîtiers se connectent avec le même token, Hermetry les voit comme un seul appareil : chaque nouvelle connexion en éjecte une précédente, celle-ci se reconnecte, et la boucle ne s’arrête jamais. Un appareil qui fait cela en permanence depuis deux réseaux est mis en attente pendant un certain temps, et c’est la notification « takeover fight ». Normalement les connexions sont dispersées, donc vous ne l’aviez pas remarqué ; mais quand le courant est revenu et que les 60 sont repartis en même temps, ça a explosé.Que faire :1. Donnez à chaque boîtier ses propres identifiants. Plutôt que d’ajouter les 200 appareils un par un, vous pouvez faire un import en masse par CSV depuis la page Imports (jusqu’à 1 000 lignes par fichier). Un essai à blanc est d’abord effectué, et les tokens des nouveaux appareils arrivent dans un fichier téléchargeable une seule fois. Vous pouvez aussi utiliser une clé de provisioning dans le profil, pour que chaque appareil récupère son propre token au premier démarrage.2. Ajoutez un délai aléatoire avant la reconnexion. Si CONNACK 3 arrive, attendez puis réessayez, mais ne laissez pas tous les appareils réessayer dans la même seconde :

uint32_t backoff = 2000 + (esp_random() % 8000);   // 2-10 sn
if (!mqtt.connected()) { delay(backoff); mqtt.connect(id, token, ""); }

3. Keepalive entre 30 et 300 secondes. 60 convient bien.4. Ne vous fiez pas à un seul point d’accès domestique pour 200 boîtiers ; répartissez-les sur 2 à 3 points d’accès d’entreprise.Les détails sur la session et CONNACK sont sur la page MQTT.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 5

Traduit de Türkçe par IA ·

Ce n’est pas le débit en bauds, c’est la tension. Si tu as mesuré -9 V, la réponse est déjà là.Le signal RS-232 varie d’environ ±3 à ±15 V et sa logique est inversée : au repos il est négatif, « 1 » est négatif, « 0 » est positif. L’UART du Pi, lui, fonctionne en TTL 3,3 V, de 0 à 3,3 V, avec une logique normale. En les reliant directement, le niveau et la polarité sont tous deux faux, et ces caractères parasites en sortie en sont exactement la conséquence. De plus, appliquer une tension négative et environ 9 V sur le GPIO15 peut détruire la broche. Débranche tout de suite ; c’est un coup de chance si le Pi est encore intact.J’ai résolu le même problème à deux endroits, avec deux méthodes :1. Module MAX3232 (MAX3232, pas MAX232 ; il fonctionne en 3,3 V). VCC sur les 3,3 V du Pi, le côté TTL sur GPIO14/15, le côté RS-232 sur le DB9. 2. La solution plus propre : un convertisseur USB-RS232 (puce PL2303 ou FTDI). Il apparaît comme /dev/ttyUSB0 et tu n’as pas du tout à t’occuper du GPIO.Pour l’écran de connexion : la console série du Pi est active sur /dev/serial0. Dans raspi-config > Interface > Serial Port, réponds Non à « login shell over serial » et Oui à « serial port hardware ».Et pour le croisement TX/RX : on ne sait pas si la balance est DCE ou DTE. Si aucune donnée n’arrive, inverse les broches 2 et 3.Ensuite, l’envoi vers Hermetry est simple : avec paho et un token d’accès, tu publies sur v1/telemetry :

import re, json, serial
import paho.mqtt.client as mqtt

c = mqtt.Client(client_id="kantar-1")
c.username_pw_set(TOKEN, "")
c.tls_set()
c.connect(BROKER_HOST, 8883, keepalive=60)
c.loop_start()

s = serial.Serial('/dev/ttyUSB0', 9600, timeout=2)
while True:
    line = s.readline().decode('ascii', 'ignore')
    m = re.search(r'(-?d+.d+)s*kg', line)
    if m:
        c.publish("v1/telemetry", json.dumps({"weight_kg": float(m.group(1))}), qos=1)
Kayıtta yoksa olmamıştır.
Solution acceptée♥ 8

Traduit de Türkçe par IA ·

Hakan, regarde la documentation, il n’y a rien de tel. Hermetry n’a pas de rapport prêt à l’emploi programmé ou envoyé par e-mail, c’est écrit clairement. Mais la méthode qui fonctionne aujourd’hui, c’est celle-ci, nous l’avons exactement appliquée dans une usine textile :Mesure : pour 38A, prends un SCT-013-050 (sortie 1V), relie-le à l’ADC de l’ESP32 avec un biais de 1,65V, et effectue le calcul RMS façon EmonLib directement sur l’appareil. Fais envoyer à l’appareil un current_a toutes les 30 secondes. Si tu veux de vrais kWh, il te faudra un analyseur d’énergie avec Modbus sur rail DIN. Accepte une marge d’erreur de 10 % avec une pince + un cosφ estimé.Puissance et énergie : dans le root flow, place un bloc Calculate avant Save telemetry et dérive power_kw. Le détail est sur la page valeurs dérivées.

expr:   round(1.732 * 400 * msg.payload.current_a * 0.85 / 1000, 2)
target: msg.payload.power_kw

Rapport : place une carte graphique sur le tableau de bord, règle le regroupement sur jour, et dans les réglages de la carte coche Download data (CSV). En fin de mois, règle la fenêtre sur Ce mois-ci et télécharge le fichier Excel. Si tu veux l’automatiser, un petit script peut récupérer les valeurs journalières depuis l’API history avec agg=sum, ou avec increase si tu envoies un compteur, et tu enverras le mail toi-même.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 8

Bunal Bey’in dediğine katılıyorum, eğik girişi Mx/My ile görmek güzel ama pahalı. Çoğu atölyede tek eksenli yük hücresi + strok ölçümü (bir lineer potansiyometre ya da enkoder) ile kuvvet-yol eğrisi alınıyor, eğik giriş zaten eğrinin şeklinden belli oluyor.

Forge kısmı: dokümanlarda Forge’un kendi sayfasını bulamadım, o yüzden parça bazlı kaydı nasıl yaptığını söyleyemem, neyi kapsadığını satış tarafına sormak lazım. Bu iş için şart da değil.

Normal IoT eklentisiyle şöyle yapabilirsiniz, biz bir müşteride böyle kurduk:

Presin yanında küçük bir kontrolcü (ESP32 + HX711 ya da endüstriyel bir yük hücresi amplifikatörü) her geçmede eğriyi yerelde örnekliyor, geçme bitince tek bir kayıt gönderiyor:

{"part_no": "RY-24117", "f_peak_kn": 12.8, "stroke_mm": 18.4, "ok": 1}

part_no metin olarak son değer görünüyor, sayılar grafikte, her kayıt geçmişte duruyor ve dışa aktarılabiliyor. Profilde f_peak_kn için üst/alt sınırlı bir alarm kuralı, ok == 0 için ayrı bir kural. Günlük adet için bir pano kartında ok anahtarının toplamı yeterli. Ham eğrinin tamamını göndermeyin, kontrolcünün SD kartında tutun, gerekirse müşteri istediğinde çıkarırsınız. CSV için: Verileri dışa aktarma.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 7

Bu cihazı geçen yıl bir müşteride okudum, üç tane tuzağı var, büyük ihtimalle üçüne birden takıldınız 🙂

1. Baud: SDM120 fabrikadan 2400 baud geliyor, 9600 değil. Menüden değiştirmediyseniz 2400 kullanın, 8N1.

2. Fonksiyon kodu: ölçümler input register’larda, holding’de değil. Yani FC04, readInputRegisters. Gerilim 30001 yani adres 0x0000, akım 0x0006, aktif güç 0x000C, toplam aktif enerji 0x0156.

3. Veri tipi: her değer iki register’lık 32 bit float, büyük sonlu (yüksek word önce).

float regsToFloat(uint16_t hi, uint16_t lo) {
  uint32_t v = ((uint32_t)hi << 16) | lo;
  float f; memcpy(&f, &v, 4); return f;
}

if (node.readInputRegisters(0x0000, 2) == node.ku8MBSuccess) {
  float volts = regsToFloat(node.getResponseBuffer(0), node.getResponseBuffer(1));
}

Bir de istekler arasında en az 100-200 ms bekleyin, ucuz analizörler peş peşe sorguya kızıyor. Hermetry’ye gönderirken enerjiyi kümülatif kWh olarak gönderin, günlük tüketimi orada « increase » ile alırsınız.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 6

Traduit de Türkçe par IA ·

Non, Ilgaz, c’est aussi là que je me suis trompé lors de mon premier projet. Hermetry ne calcule pas les zones à partir de la position ni des balises BLE, et il n’y a pas de polygone de geofence. Le tag, ou la passerelle qui l’entend, décide lui-même de la salle et envoie le nom de la zone. La solution prête à l’emploi pour le suivi du personnel est exactement construite ainsi : la clé zone est soit un nom de zone, soit outside.Pour ton échelle, je te recommande le BLE. L’UWB sert à une précision submétrique ; au niveau de la salle, il n’est pas rentable. Voici le fonctionnement :

  1. Un récepteur BLE fixe par salle (un ESP32 suffit, branché sur une prise). Tous envoient le RSSI des tags à un serveur local ou à un Pi.
  2. Pour chaque tag, le Pi choisit la salle qui l’a entendu le plus fort pendant les 10 à 15 dernières secondes, et ajoute une hystérésis (ne pas changer de salle sauf si la nouvelle est au moins 6 dB plus forte), sinon le fauteuil devant la porte oscille entre deux salles.
  3. Le Pi se connecte comme passerelle et déclare chaque tag comme appareil enfant :
v1/gw/telemetry
{
  "pompa-07":   {"values": {"zone": "A-3-314", "zone_id": 3314, "battery": 81}},
  "sandalye-12": {"values": {"zone": "A-2-208", "zone_id": 2208, "battery": 64}}
}

J’ai volontairement ajouté zone_id : zone est du texte, et les clés textuelles n’ont pas d’historique graphique, seule la dernière valeur apparaît. Pour la question « où était la pompe hier ? », il faut un code numérique.Dans Sites & Assets, crée les salles avec le type Room ou avec ton propre type ZONE, et garde leurs codes identiques aux noms envoyés par la passerelle. Pour le tableau arborescent et les listes, l’appariement est là encore fait par la passerelle.La page de la solution prête à l’emploi décrit très bien le modèle, tu peux t’en inspirer : Personel takibi.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 1
15 sujets de 1 à 15 (sur un total de 26)